From 1528d46d19c048e450cca031d5d3ea27ee868398 Mon Sep 17 00:00:00 2001 From: David Rach Date: Tue, 3 Mar 2026 12:36:56 -0500 Subject: [PATCH 1/8] Setup for Windows/MacOS test --- course/05_GatingSets/index.qmd | 11 +- course/05_GatingSets/slides.qmd | 1401 +++++++ docs/course/03_InsideFCSFile/index.html | 8 +- docs/course/03_InsideFCSFile/slides.html | 8 +- docs/course/05_GatingSets/index.html | 25 +- docs/course/05_GatingSets/slides.html | 3313 +++++++++++++++++ .../figure-revealjs/unnamed-chunk-52-1.png | Bin 0 -> 58839 bytes .../figure-revealjs/unnamed-chunk-65-1.png | Bin 0 -> 73679 bytes .../figure-revealjs/unnamed-chunk-66-1.png | Bin 0 -> 65982 bytes .../figure-revealjs/unnamed-chunk-67-1.png | Bin 0 -> 59275 bytes .../figure-revealjs/unnamed-chunk-68-1.png | Bin 0 -> 71697 bytes docs/search.json | 2868 +++++++------- 12 files changed, 6226 insertions(+), 1408 deletions(-) create mode 100644 course/05_GatingSets/slides.qmd create mode 100644 docs/course/05_GatingSets/slides.html create mode 100644 docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-52-1.png create mode 100644 docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-65-1.png create mode 100644 docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-66-1.png create mode 100644 docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-67-1.png create mode 100644 docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-68-1.png diff --git a/course/05_GatingSets/index.qmd b/course/05_GatingSets/index.qmd index 42f682a..9381538 100644 --- a/course/05_GatingSets/index.qmd +++ b/course/05_GatingSets/index.qmd @@ -15,7 +15,7 @@ toc-depth: 5 For the YouTube livestream schedule, see [here](https://www.youtube.com/@cytometryinr) -For screen-shot slides, click [here]() +For screen-shot slides, click [here](/course/05_GatingSets/slides.qmd)
@@ -75,7 +75,8 @@ library(flowCore) ``` ```{r} -flowFrame <- read.FCS(filename=fcs_files[1], truncate_max_range = FALSE, transformation = FALSE) +flowFrame <- read.FCS(filename=fcs_files[1], truncate_max_range = FALSE, + transformation = FALSE) flowFrame ``` @@ -107,14 +108,16 @@ str(fcs_files) Consequently, we will need to use another function if we want to read in multiple .fcs files at once. For `flowCore`, this function is the `read.flowSet()` function. ```{r} -flowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE, transformation = FALSE) +flowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE, + transformation = FALSE) flowSet ``` Alternatively, we can designate specific files within "fcs_files" we want to read in using the [] and c() notation style we have encountered previously. ```{r} -read.flowSet(files=fcs_files[c(1, 3:4)], truncate_max_range = FALSE, transformation = FALSE) +read.flowSet(files=fcs_files[c(1, 3:4)], + truncate_max_range = FALSE, transformation = FALSE) ``` On follow-up, we can see that `read.flowSet()` has created a "flowSet" class object. diff --git a/course/05_GatingSets/slides.qmd b/course/05_GatingSets/slides.qmd new file mode 100644 index 0000000..ba70aa3 --- /dev/null +++ b/course/05_GatingSets/slides.qmd @@ -0,0 +1,1401 @@ +--- +title: "05 - Gating Sets" +author: "David Rach" +date: 03-03-2026 +format: + revealjs: + theme: default + slide-number: true + incremental: true +page-layout: full +execute: + echo: true + warning: false + message: false +--- + +![](/images/WebsiteBanner.png) + +::: {style="text-align: right;"} +[![AGPL-3.0](https://img.shields.io/badge/license-AGPLv3-blue)](https://www.gnu.org/licenses/agpl-3.0.en.html) [![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](http://creativecommons.org/licenses/by-sa/4.0/) +::: + +--- + +# Background + + +::: {.fragment} +::: {.callout-tip title="."} +Welcome to the fifth week of the Cytometry in R course!!! At this point, we are through a significant portion of the "Intro to R" material, and will start encountering more "Cytometry-focused" material moving forward. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +If we think of a typical flow cytometry experiment, there is more to the analysis than simply acquiring the .fcs file. While there is [substantial information](/course/03_InsideFCSFile/) present within an .fcs file, in the context of analyzing them with commercial software, we rely on additional infrastructural elements to organize the various files, transform (scale), compensate (for conventional flow), visualize, derrive statistics, etc. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +This infrastructural requirement within the R context is primarily handled by the `flowCore` and `flowWorkspace` R packages from [Bioconductor](https://www.bioconductor.org/). Today, we will build on what we learned during [Week 03](/course/03_InsideFCSFile/index.qmd) but in the context of working and interacting with multiple .fcs files. This will provide a solid foundation to explore in greater depth how individual components of our typical workflow are represented within the R context. +::: +::: + +--- + +# Walk Through + +:::{.callout-important title="Housekeeping"} +As we do [every week](/course/02_FilePaths/index.qmd), on GitHub, [sync](/course/00_Homeworks/index.qmd#sync-your-fork) your forked version of the CytometryInR course to bring in the most recent updates. Then within Positron, [pull](/course/00_Homeworks/index.qmd#pull-to-local) in those changes to your local computer. + +After [setting up](/course/00_Git/index.qmd#new-folder-from-template) a "Week05" project folder, copy over the contents of "course/05_GatingSets/data" to that folder. This will hopefully prevent merge issues next week when attempting to pull in new course material. Once you have your new project folder organized, remember to [commit](/course/00_Git/index.qmd#push) and push your changes to GitHub to maintain remote version control. + +If you encounter issues syncing due to the Take-Home Problem merge conflict, see this [walkthrough](https://umgcccfcsr.github.io/CytometryInR/course/00_BonusContent/PullConflicts/). The updated homework submission protocol can be found [here](https://umgcccfcsr.github.io/CytometryInR/course/00_BonusContent/PullConflicts/UpdatedPullRequest) +::: + +
+ +--- + +## flowFrame + + +::: {.fragment} +::: {.callout-tip title="."} +Let's start off by recalling the approach we first saw during [Week 03](/course/03_InsideFCSFile/index.qmd), where using the `flowCore` package we loaded the contents of our .fcs file into R as a "flowFrame" object. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +To do this, we first identified the .fcs files we were interested using `file.path()` to specify the folder, and `list.files()` to find contents containing ".fcs". +::: +::: + +::: {.fragment} +```{r} +# Folder <- file.path("course", "05_GatingSets", "data") # For Testing + + Folder <- file.path("data") # For Quarto Rendering + +fcs_files <- list.files(Folder, pattern=".fcs", full.names=TRUE) + +fcs_files +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We then identified an individual .fcs file of interest using the [] method of indexing. +::: +::: + +::: {.fragment} +```{r} +fcs_files[1] +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Then, after making sure flowCore was attached to our local environment (via the `library()` function), we could use `read.FCS()` to read in our .fcs files contents to R. +::: +::: + +::: {.fragment} +```{r} +# BiocManager::install("flowCore") #Bioconductor +library(flowCore) +``` + +::: + +::: {.fragment} +```{r} +flowFrame <- read.FCS(filename=fcs_files[1], truncate_max_range = FALSE, + transformation = FALSE) +flowFrame +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As we start to think about the wider infrastructural handling of our .fcs files, what would have occurred if we had provided multiple .fcs file paths to `read.FCS()`? Let's go ahead and check by not providing an index number. +::: +::: + +::: {.fragment} +```{r} +#| error: TRUE +read.FCS(filename=fcs_files, truncate_max_range = FALSE, transformation = FALSE) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As you can tell, this error message is not particularly interpretable. It however arises from type of object we are passing to the function, whereby an individual file.path (fcs_files[1]) appears as class "character" with a **single value** (ie. a [scalar](https://nathanieldphillips-yarrr.share.connect.posit.cloud/scalars.html)), but the combined vector (fcs_files) contains **multiple** values. +::: +::: + +::: {.fragment} +```{r} +fcs_files[1] + +str(fcs_files[1]) +``` + +::: + +::: {.fragment} +```{r} +fcs_files + +str(fcs_files) +``` + +::: + +--- + +## flowSet + +::: {.fragment} +::: {.callout-tip title="."} +Consequently, we will need to use another function if we want to read in multiple .fcs files at once. For `flowCore`, this function is the `read.flowSet()` function. +::: +::: + +::: {.fragment} +```{r} +flowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE, + transformation = FALSE) +flowSet +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Alternatively, we can designate specific files within "fcs_files" we want to read in using the [] and c() notation style we have encountered previously. +::: +::: + +::: {.fragment} +```{r} +read.flowSet(files=fcs_files[c(1, 3:4)], + truncate_max_range = FALSE, transformation = FALSE) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +On follow-up, we can see that `read.flowSet()` has created a "flowSet" class object. +::: +::: + +::: {.fragment} +```{r} +class(flowSet) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Which we can also confirm by glancing at the right secondary sidebar to see the created Variables within our environment. Applying our investigatory skills from [Week 3](/course/03_InsideFCSFile/index.qmd), we surmise that "flowSet" is another Bioconductor style S4-type object that within its frame slot contains individual "flowFrames". +::: +::: + +::: {.fragment} +![](images/00_FlowSet.png) +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If instead of `class()` we had used `str()`, we would have seen a similar output ton what we see in the Variables panel. +::: +::: + +::: {.fragment} +```{r} +str(flowSet) +``` + +::: + +--- + +:::{.callout-tip title="Reminder"} +While not today's focus, remember we could access individual components inside the flowSet using the @ accessors covered during [Week 3](/course/03_InsideFCSFile/index.qmd) +::: + +--- + +## Memory Usage + +::: {.fragment} +::: {.callout-tip title="."} +Both "flowFrame" and "flowSet" objects were implemented in the `flowCore` package, which is the [oldest](/course/03_InsideFCSFile/#flowcore) extant flow cytometry R package on [Bioconductor](https://www.bioconductor.org/packages/release/bioc/html/flowCore.html). Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as "flowFrame" and "flowSet" objects. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +One consideration of this method is the contents of your .fcs files are read into your computer's random access memory [(RAM)](https://en.wikipedia.org/wiki/Random-access_memory). While for individual .fcs files or small experiments this present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +To build some contextual understanding of the problem, let's learn how to check how much memory is being used by our individual variables/objects within our R session. We will primarily use the `lobstr` R packages `obj_size()` function, as it better handles evaluating complicated objects than base R's `object.size()` function. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We can check and see the memory usage by our flowFrame object +::: +::: + +::: {.fragment} +```{r} +# Base R +object.size(flowFrame) + +# install.packages("lobstr") # CRAN +library(lobstr) +obj_size(flowFrame) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +And contrast to the greater ammount of space occupied by our flowSet object (which contains multiple flowFrames) +::: +::: + +::: {.fragment} +```{r} +obj_size(flowSet) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If we were curious how much memory total we are using within R at the current moment, we can check using the `mem_used()` function: +::: +::: + +::: {.fragment} +```{r} +mem_used() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Ultimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. You can check programmatically how much RAM you have available, although the specific function you will need to use will depend on your computer's operating system. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +To simplify the process, here is an additional example of where a [conditional](/course/02_FilePaths/index.qmd#conditionals) can prove useful, allowing us to check in an operating system specific manner. It takes the output of the `Sys.info()` function, namely the "sysname" argument and then retrieves the relavent function. +::: +::: + +::: {.fragment} +```{r} + +OperatingSystem <- Sys.info()[["sysname"]] + +if (OperatingSystem == "Windows") { # Windows + memory.limit() + + } else if (OperatingSystem == "Darwin") { # MacOS + system("top -l 1 | grep PhysMem") + + } else if (OperatingSystem == "Linux") { # Linux + system("free -h") + + } else {message("A wild FreeBSD-User appears")} +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +When evaluating the returned outputs, primarily consider the total, used and free outputs. +::: +::: + +--- + +## cytoframe + +::: {.fragment} +::: {.callout-tip title="."} +In addition to the `flowCore` R package, additional flow cytometry infrastructure support is provided by the `flowWorkspace` package. Instead of the reading all the .fcs files contents into active RAM, `flowWorkspace` reduces the memory overhead by using ["pointers"](https://www.geeksforgeeks.org/c/c-pointers/) to interact with the object in it's current storage location (either on your harddrive, SSD, etc.), only reading in components to RAM as needed. +::: +::: + +::: {.fragment} +```{r} +# BiocManager::install("flowWorkspace") #Bioconductor +library(flowWorkspace) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Because of these differences in how data is interracted with, we end up with parallel equivalents to the traditional flowFrame and flowSet type objects. These include "cytoframe" for single .fcs files +::: +::: + +::: {.fragment} +```{r} +cytoframe <- load_cytoframe_from_fcs(fcs_files[1], truncate_max_range = FALSE, transformation = FALSE) + +cytoframe +``` + +::: + +--- + +::: {.fragment} +```{r} +class(cytoframe) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Which also still errors out when not given a scalar object +::: +::: + +::: {.fragment} +```{r} +#| error: TRUE + +load_cytoframe_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE) +``` + +::: + +--- + +## cytoset + +::: {.fragment} +::: {.callout-tip title="."} +As well as "cytoset" to handle multiple .fcs files. +::: +::: + +::: {.fragment} +```{r} +cytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE) + +cytoset +``` + +::: + +::: {.fragment} +```{r} +class(cytoset) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Unlike "flowFrame" and "flowSet", when we run `str()`, for "cytoframe" and "cytoset" objects we don't get back quite as much information. +::: +::: + +::: {.fragment} +```{r} +str(cytoframe) +``` + +::: + +--- + +::: {.fragment} +```{r} +str(cytoset) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +This is similarly the case when glancing at the right secondary side bar, as the respective objects under variables appear to have empty matrices where normally we would have seen the MFI values. +::: +::: + +::: {.fragment} +![](images/01_LookMaNoData.png) +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Due to `flowWorkspace` use of pointers, the missing data remains stored on the drive, only being retrieved right before it is required. This reduces the overall RAM utilization. Let's double check the differences in memory utilization for flowFrame/cytoframe: +::: +::: + +::: {.fragment} +```{r} +obj_size(flowFrame) +``` + +::: + +::: {.fragment} +```{r} +obj_size(cytoframe) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +And similarly the case for flowSet and cytoset: +::: +::: + +::: {.fragment} +```{r} +obj_size(flowSet) +``` + +::: + +::: {.fragment} +```{r} +obj_size(cytoset) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Additionally, with computer hardware increasingly switching from spinning disk hard-drives to faster [solid state](https://unihost.com/help/nvme-vs-ssd-vs-hdd-overview-and-comparison/) drives, the performance penalty previously experienced when not running from RAM is not as large of a concern as in previous years. +::: +::: + +--- + +## Interconverting + +::: {.fragment} +::: {.callout-tip title="."} +Despite both R packages having been around for a while, many [Bioconductor](https://www.bioconductor.org/packages/release/BiocViews.html#___FlowCytometry) and [GitHub](https://github.com/stars/DavidRach/lists/cytometry-r-packages) often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +To go from a flowFrame to a cytoframe, we can use the `flowFrame_to_cytoframe()` function +::: +::: + +::: {.fragment} +```{r} +ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame) +ConvertedToCytoframe +``` + +::: + +::: {.fragment} +```{r} +obj_size(ConvertedToCytoframe) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +To go from a cytoframe to a flowFrame, we can use the `cytoframe_to_flowFrame()` function +::: +::: + +::: {.fragment} +```{r} +ConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe) +ConvertedToFlowframe +``` + +::: + +::: {.fragment} +```{r} +obj_size(ConvertedToFlowframe) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +To go from a flowSet to a cytoSet, we can use the `flowSet_to_cytoset()` funciton +::: +::: + +::: {.fragment} +```{r} +ConvertedToCytoset <- flowSet_to_cytoset(flowSet) +ConvertedToCytoset +``` + +::: + +::: {.fragment} +```{r} +obj_size(ConvertedToCytoset) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +To go from a cytoSet to a flowSet, we can use the `cytoset_to_flowSet()` function. +::: +::: + +::: {.fragment} +```{r} +ConvertedToFlowset <- cytoset_to_flowSet(flowSet) +ConvertedToFlowset +``` + +::: + +::: {.fragment} +```{r} +obj_size(ConvertedToFlowset) +``` + +::: + +--- + +## Gating Sets + +::: {.fragment} +::: {.callout-tip title="."} +Fortunately, regardless of whether we are using flowFrame/flowSet (RAM) and cytoframe/cytoset (memory pointers), both routes end up converging at the next step, where the underlying .fcs files are passed off to the `GatingSet()` function. +::: +::: + +::: {.fragment} +```{r} +GatingSet1 <- GatingSet(flowSet) +GatingSet1 +``` + +::: + +::: {.fragment} +```{r} +class(GatingSet1) +``` + +::: + +--- + +::: {.fragment} +```{r} +GatingSet2 <- GatingSet(cytoset) +GatingSet2 +``` + +::: + +::: {.fragment} +```{r} +class(GatingSet1) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As we prefaced in the [background](/course/05_GatingSets/index.qmd#background), beyond the .fcs files themselves, we need infrastructural elements with which to interact with the underlying data, which allows us to organize the various files, transform (scale), compensate (for conventional flow), visualize, derrive statistics, etc. A GatingSet serves as the infrastructural framework that allows us to do this in R. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +If we investigate our current GatingSet objects, we won't see much +::: +::: + +::: {.fragment} +![](images/03_GatingSetConvergence.png) +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +This will change as we start layering on additional elements. However, rather than try to cram everything into a single week, we will explore in greater depth the individual components over the next [three weeks](/Schedule.qmd#applying-transformations-and-compensation). Instead, for the rest of today, we will work backward, by exploring a GatingSet objecct and what it is capable of doing once fully assembled. +::: +::: + +--- + +## CytoML + +::: {.fragment} +::: {.callout-tip title="."} +The `CytoML` R package (also maintained by [Mike Jiang](https://github.com/mikejiang)) is a sister package to the `flowWorkspace`. It's main purpose is to permit bringing in existing FlowJo, Diva and Cytobank Workspaces, with all their gates, transformations, etc. into R as fully assembled GatingSet objects. For those who already use one of these commercial softwares, it can be quite useful tool. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +Since our goal is to examine a fully assembled GatingSet object, we will be using it today to bring in a [FlowJo](https://www.flowjo.com/flowjo10/overview) workspace to R. However, since this is a free Cytometry in R course, and not about to have everyone pay for a license for a one-off topic, in the [pre-course Floreada](/course/00_Floreada/index.qmd) walkthrough I documented how to convert a free [Floreada.io](https://floreada.io/) workspae into a FlowJo.wsp that can also be used (please note that as of early 2026, some scaling bugs may be present and require troubleshooting). +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +To get started, let's first attach `CytoML` to our local environment via the `library()` call. +::: +::: + +::: {.fragment} +```{r} +# BiocManager::install("CytoML") #Bioconductor +library(CytoML) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +The .wsp files within this week's data where created via [Floreada.io](/course/00_Floreada/index.qmd). The main difference between the two files is one is a copy of the original that was opened within FlowJo, and subsequently swtiched from [logicle](https://pubmed.ncbi.nlm.nih.gov/16604519/) to [bi-exponential](https://docs.flowjo.com/flowjo/graphs-and-gating/gw-transform-overview/gw-transform-benefits/) transformation. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +We will need to provide the appropiate file path for our desired .wsp file. We can start by identifying which are present using `list.files()` +::: +::: + +::: {.fragment} +```{r} +Folder # Defined Above +FlowJoWsp <- list.files(path = Folder, pattern = ".wsp", full = TRUE) +FlowJoWsp +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +In our case, we will proceed by using `str_detect()` to select the .wsp that contains the pattern "Opened" +::: +::: + +::: {.fragment} +```{r} +ThisWorkspace <- FlowJoWsp[stringr::str_detect(FlowJoWsp, "Opened")] +ThisWorkspace +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +With our single .wsp filepath now identified, we can now proceed to set up the intermediate object using `open_flowjo_xml()` +::: +::: + +::: {.fragment} +```{r} +ws <- open_flowjo_xml(ThisWorkspace) +ws +``` + +::: + +::: {.fragment} +```{r} +class(ws) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Having set up the intermediate flowjo_workspace object, we can attempt to read in the actual data from the .wsp into a GatingSet using the `flowjo_to_gatingset()` function. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +However, due to how I named the original .fcs files ("GROUPNAME" being individual specimens, "TUBENAME" being either Ctrl or SEB), and downsampled to the same number of cells, we will encounter the following error +::: +::: + +::: {.fragment} +```{r} +#| error: TRUE +gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder) +gs +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As with any error, my first move is to check the help documentation. In this case, my initial response is to see if I can identify an argument that will help differentiate between the names for each specimen. +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE +?flowjo_to_gatingset +``` + +::: + +--- + +![](images/CytoMLArguments.png) + + +--- + +::: {.fragment} +::: {.callout-tip title="."} +In this case, I find that the "additional.keys" argument would likely work for this troubleshooting +::: +::: + +--- + +![](images/AdditionalKeys.png) + +--- + +::: {.fragment} +```{r} +gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME") +gs +``` + +::: + +::: {.fragment} +```{r} +class(gs) +``` + +::: + +--- + +## System Time + +::: {.fragment} +::: {.callout-tip title="."} +Especially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +One, using the `system.time()` function from base R, in which we surround whatever line of code we wish to evaluate in {} +::: +::: + +::: {.fragment} +```{r} +system.time({ + +flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME") + +}) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Alternatively, if we install the `bench` package, we can use the `mark` function to evaluate how long it takes on average across numerous iterations. +::: +::: + +::: {.fragment} +```{r} +# install.packages("bench") # CRAN +library(bench) +``` + +::: + +::: {.fragment} +```{r} +mark( + Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME"), + iterations= 5 + ) +``` + +::: + +--- + +## Gates + +::: {.fragment} +::: {.callout-tip title="."} +Now that we have loaded the contents of the FlowJo/Floreada workspace, we can start exploring the various infrastructural capabilities of a GatingSet object. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Let's start by evaluating whether the manually-drawn gates I drew survived the journey. To do this, I can generate a visual gating treee using the `plot()` function. +::: +::: + +::: {.fragment} +```{r} +plot(gs) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We can also retrieve the individual gates and their gaing paths using the `gs_get_pop_paths()` function. +::: +::: + +::: {.fragment} +```{r} +gs_get_pop_paths(gs) +``` + +::: + +--- + +## Counts + +::: {.fragment} +::: {.callout-tip title="."} +If we wanted to retrieve counts of cells found within the individual gates, we could do so with `gs_pop_get_count_fast()` +::: +::: + +::: {.fragment} +```{r} +Data <- gs_pop_get_count_fast(gs) +head(Data, 5) +``` + +::: + +--- + +## Metadata + +::: {.fragment} +::: {.callout-tip title="."} +Since GatingSets contain multiple .fcs files, we may want to be able to subset them based on metadata for a particular variable. We can check to see current metadata using the `pData()` function. +::: +::: + +::: {.fragment} +```{r} +pData(gs) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +It currently doesn't have much, but we will explore how to change this more over the next few weeks. For now, just know that we could add additional metadata via either a .csv file, or by retrieving additional description keywords from within the .fcs files themselves (as shown below) +::: +::: + +::: {.fragment} +```{r} +AlternateGS <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, + additional.keys="GROUPNAME", + keywords=c("$DATE", "$CYT", "GROUPNAME")) +pData(AlternateGS) +``` + +::: + +--- + +## ggcyto + +::: {.fragment} +::: {.callout-tip title="."} +As you can surmise, a lot of the infrastructural style handling done by commercial softwares is being orchestrated/mediated through our GatingSet object. Since it's able to create and retain gating information, how would we go about visualizing the underlying data contained within each? +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Within R, most plots are generated using the `ggplot2` package from the tidyverse (which we will explore [next week](/Schedule.qmd#visualizing-with-ggplot2)), which builds of the ["Grammar of Graphics"](https://vita.had.co.nz/papers/layered-grammar.html) concept, combining [layers](https://friendly.github.io/6135/lectures/ggplot-intro.pdf) together to create the final plots. The Bioconductor `ggcyto` R package extends this concept to enable flow cytometry data contained within a GatingSet to be plotted. +::: +::: + +--- + +:::{.callout-important} + +As is the case with most free open-source software ([FOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software)), R packages will change over time as their developers add new features, make improvements, or alter internal functions to speed things up. + +::: + + +:::{.callout-important} + +ggplot2 recently had a major [version](/course/01_InstallingRPackages/index.qmd#installing-specific-package-versions) change, with [significant](https://tidyverse.org/blog/2025/09/ggplot2-4-0-0/) internal changes occuring. As a consequence of these changes, `ggcyto` functions that relied on the old `ggplot2` functions [broke](https://github.com/RGLab/ggcyto/pull/103) and had to be [updated](https://github.com/RGLab/ggcyto/pull/110). + +::: + +--- + +:::{.callout-important} + +Any updates to CRAN packages are reflected immediately. By contrast, Bioconductor is on a twice yearly [release cycle](https://www.bioconductor.org/developers/release-schedule/), so to take advantage of the `ggcyto` "fixes" that allow it to interact with the new version of `ggplot2`, we will need to make sure we have the "developmental" version installed. + +::: + +--- + +### packageVersion + +::: {.fragment} +::: {.callout-tip title="."} +Let's start off by checking what version of both the `ggplot2` and `ggcyto` packages you currently have installed on your computer. +::: +::: + +::: {.fragment} +```{r} +packageVersion("ggplot2") +``` + +::: + +::: {.fragment} +```{r} +packageVersion("ggcyto") +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If you were able to retrieve the following package versions (or greater") for `ggplot2` and `ggcyto`, you should be all set and can skip the subsequent reinstallation steps. +::: +::: + +--- + +![](images/20_PackageVersion.png) + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If you however found you have the older package versions (ex. ggplot2 3.5.2 or ggcyto 1.37.1) currently installed, you will likely encounter errors when trying to run the functions to plot your data below (since the changes are not fully [backward-compatible](https://en.wikipedia.org/wiki/Backward_compatibility) with older versions). +::: +::: + +--- + +### remove.packages + +::: {.fragment} +::: {.callout-tip title="."} +Since `ggcyto` has a hard-coded dependency on ggplot2, if you have the older versions, I would recommend uninstaling both first, using the `remove.packages()` function. +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE +remove.packages("ggplot2") +remove.packages("ggcyto") +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Once this is done, I recommend exiting and then reopening Positron. This will ensure all currently-loaded R packages are unattached from the environment. However, you will loose all your environmental variables, so will need to reload them to get back to this point. If you are working with code chunks inside a Quarto Markdown File (.qmd), you can quickly accomplish this by scrolling down to the point of the document where you left off, and selecting the "Run Above" option showin on the code chunk. +::: +::: + +--- + +![](images/RunAbove.png) + +--- + +### Installing correct versions + +::: {.fragment} +::: {.callout-tip title="."} +To reinstall `ggplot2`, you just need to install again from CRAN (as with it's [rolling-release](https://cran.r-project.org/web/packages/policies.html) model any changes the developers make become immediately available to everyone) +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE +install.packages("ggplot2") +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If you need to reinstall `ggcyto`, because of Bioconductor's twice yearly [release cycle](https://www.bioconductor.org/developers/release-schedule/), you will need to install the "developmental" version to take advantage of the fixes. Since this is for a one-off package, the easiest installation approach if to go via the [GitHub](/course/01_InstallingRPackages/index.qmd#install-from-github) using the `remotes` package's `install_github()` +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE +remotes::install_github("RGLab/ggcyto") +``` + +::: + +--- + +## Plotting + +::: {.fragment} +::: {.callout-tip title="."} +Once you have the current versions of both `ggplot2` and `ggcyto`, we can proceed to attach them to your local environment via the `library()` function. +::: +::: + +::: {.fragment} +```{r} +library(ggplot2) +library(ggcyto) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As was mentioned, `ggcyto` follows the `ggplot2` grammar of graphics syntax, which we will learn more extensively [next week](/Schedule.qmd#visualizing-with-ggplot2). For now, lets look at a simple example +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE +ggcyto(gs[1], subset="root", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) +``` + +::: + +--- + + +::: {.fragment} +::: {.callout-tip title="."} +The function responsible for plotting is the `ggcyto()` function. The first argument ("gs[1]") is designating which .fcs file in our GatingSet we are trying to visualize. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +The second argument ("subset") corresponds to which gating node we want to visualize. In this case, when set to "root", we are seeing all cells present in the .fcs file. If we however wanted to visualize the cells within the CD4+ gate, we would swap the value provided to this argument. +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE +ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +The next argument "aes" stands for aesthetics (more on this [next week](/Schedule.qmd#visualizing-with-ggplot2)). You will notice it has its own set of parenthesis, in which we designate the markers/fluorophores we want to visualize on the x and y axis. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +The final argument ("+ geom_hex(bins=100)") specifies we want to generate a flow cytometry style plot, with it's bin arguments value setting the resolution. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Now that we have walked through the arguments, let's visualize the data +::: +::: + +::: {.fragment} +```{r} +#| eval: TRUE +ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Alternatively, if we switched things around +::: +::: + +::: {.fragment} +```{r} +ggcyto(gs[1], subset="CD8+", aes(x="IFNg", y="TNFa")) + geom_hex(bins=100) +``` + +::: + + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Briefly, if we didn't remember the marker, we could specify the fluorophore +::: +::: + +::: {.fragment} +```{r} +ggcyto(gs[1], subset="CD8+", aes(x="BV750-A", y="PE-Dazzle594-A")) + geom_hex(bins=100) +``` + +::: + +--- + +::: {.fragment} +```{r} +ggcyto(gs[6], subset="Tcells", aes(x="CD4", y="CD8")) + geom_hex(bins=100) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +This is all we will cover for `ggcyto` for now, we will circle back over the [next couple weeks](/Schedule.qmd#applying-transformations-and-compensation) as we gain more familiarity with how to build our own GatingSet objects. If you want to jump ahead, please see the additional resources section and happy exploring! +::: +::: + +--- + +# Take Away + +::: {.fragment} +::: {.callout-tip title="."} +Today, we looked at the two main representations of flow cytometry data in R, the older `flowCore` implemented flowFrame/flowSet objects that are stored in RAM, and the `flowWorkspace` cytoFrame/cytoSet objects that operate through memory pointers. We started our learning journey to understand GatingSet objects, and how to use them to mediate/orchestrate in R many of the infrastructural steps that would normally be performed by commercial software. And finally, we briefly covered how to use the `ggcyto` to visualize data contained within our GatingSets. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Similar to our utilization of [tidyverse](/course/04_IntroToTidyverse/) functions last week, we will be using GatingSets continously throughout the rest of the course. Over the next few weeks we will instead of retrieving already assembled GatingSets via `CytoML` assemble them from scratch within R. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Next week, we will dive further into the `ggplot2` package from the tidyverse and how it implements the ["Grammar of Graphics"](https://vita.had.co.nz/papers/layered-grammar.html) concept. In the process, we will see how by combining [layers](https://friendly.github.io/6135/lectures/ggplot-intro.pdf) and changing various elements being added on to the base layers of the plot, we can end up with many different plots we normally encounter as cytometrist. +::: +::: + +--- + +![](images/SunsetSatzi.jpg) + +--- + +# Additional Resources + +[flowWorkspace Bioconductor Vignette](https://www.bioconductor.org/packages/release/bioc/vignettes/flowWorkspace/inst/doc/flowWorkspace-Introduction.html) The Bioconductor vignettes are always a good place to start with any of the Cytoverse packages, the vignette for `flowWorkspace` is no exception. If you want to understand more about how to subset cytosets, or the various functions and arguments in a GatingSet, this should be your first stop. + +[CytoML Bioconductor Vignette](https://www.bioconductor.org/packages/release/bioc/vignettes/CytoML/inst/doc/flowjo_to_gatingset.html) If you use FlowJo, Diva, or CytoBank routinely, and want to understand more about how to bring in your own experiments to R, the `CytoML` vignettes should be your next stop. + +--- + +[ggcyto Bioconductor Vignette](https://www.bioconductor.org/packages/release/bioc/vignettes/ggcyto/inst/doc/Top_features_of_ggcyto.html). There are several vignettes that can be found on the `ggcyto` Bioconductor [website](https://www.bioconductor.org/packages/release/bioc/html/ggcyto.html) on how to plot your flow cytometry data, this one surmize many of the points we will be covering over the next few weeks. + +[Bioc2023 Workshop: Reproducible and programmatic analysis of flow cytometry experiments with the cytoverse](https://youtu.be/_8x-prIxJgw?si=MhVVUJJdYEDI4JzV) Ozette hosted a workshop covering many of the cytoverse R packages at the Bioconductor conference (BioC) back in 2023. Some of the contents we will cover in greater depth over the next few weeks. + +--- + +# Take-home Problems + +:::{.callout-tip title="Problem 1"} + +Using what you learned last week in [Introduction to Tidyverse](/course/04_IntroToTidyverse/), for the imported GatingSet, retrieve the data.frame from cell counts per gate and attempt to mutate a new column showing percent of the parent gate. Remember, this is intentionally tricky at this point, we will go over how to efficiently do this in a [few weeks](/Schedule.qmd#retrieving-data-for-statistics) + +::: + +--- + +:::{.callout-tip title="Problem 2"} + +As we saw, `CytoML` can be finicky when names are repeated, or .fcs files are not present. Try removing a couple of the .fcs files from the data folder, and re-run the code. Document what kind of errors result. + +::: + +--- + +:::{.callout-tip title="Problem 3"} + +For `ggcyto`, attempt to generate plots to visualize TNFa and IFNg for the various cell populations, across both Ctrl and SEB samples. In the process, change the bins argument until you end up with a resolution that you would be happy with for your own plots, and write it down. + +::: + +--- + +![](images/SunsetSatzi.jpg) + +--- + +::: {style="text-align: right;"} +[![AGPL-3.0](https://www.gnu.org/graphics/agplv3-with-text-162x68.png)](https://www.gnu.org/licenses/agpl-3.0.en.html) [![CC BY-SA 4.0](https://licensebuttons.net/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) +::: \ No newline at end of file diff --git a/docs/course/03_InsideFCSFile/index.html b/docs/course/03_InsideFCSFile/index.html index c5e9108..3f937ea 100644 --- a/docs/course/03_InsideFCSFile/index.html +++ b/docs/course/03_InsideFCSFile/index.html @@ -546,8 +546,8 @@

flowCore

plotly::ggplotly(plot)
-
- +
+
@@ -593,8 +593,8 @@

flowCore

plotly::ggplotly(plot)
-
- +
+

flowCore is also one of the many Bioconductor packages maintained by Mike Jiang. In many ways (as those who completed the optional take-home problems for Week #1 know) reminiscent of this xkcd comic:

diff --git a/docs/course/03_InsideFCSFile/slides.html b/docs/course/03_InsideFCSFile/slides.html index 9d2593e..174333a 100644 --- a/docs/course/03_InsideFCSFile/slides.html +++ b/docs/course/03_InsideFCSFile/slides.html @@ -485,8 +485,8 @@

flowCore


-
- +
+
@@ -497,8 +497,8 @@

flowCore


-
- +
+
diff --git a/docs/course/05_GatingSets/index.html b/docs/course/05_GatingSets/index.html index 297a1c8..e860126 100644 --- a/docs/course/05_GatingSets/index.html +++ b/docs/course/05_GatingSets/index.html @@ -378,7 +378,7 @@

05 - Gating Sets

AGPL-3.0 CC BY-SA 4.0

For the YouTube livestream schedule, see here

-

For screen-shot slides, click here

+

For screen-shot slides, click here



@@ -440,8 +440,9 @@

flowFrame

library(flowCore)
-
flowFrame <- read.FCS(filename=fcs_files[1], truncate_max_range = FALSE, transformation = FALSE)
-flowFrame
+
flowFrame <- read.FCS(filename=fcs_files[1], truncate_max_range = FALSE,
+ transformation = FALSE)
+flowFrame
flowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'
 with 10000 cells and 43 observables:
@@ -499,8 +500,9 @@ 

flowFrame

flowSet

Consequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.

-
flowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE, transformation = FALSE)
-flowSet
+
flowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,
+ transformation = FALSE)
+flowSet
A flowSet with 6 experiments.
 
@@ -509,7 +511,8 @@ 

flowSet

Alternatively, we can designate specific files within “fcs_files” we want to read in using the [] and c() notation style we have encountered previously.

-
read.flowSet(files=fcs_files[c(1, 3:4)], truncate_max_range = FALSE, transformation = FALSE)
+
read.flowSet(files=fcs_files[c(1, 3:4)],
+ truncate_max_range = FALSE, transformation = FALSE)
A flowSet with 3 experiments.
 
@@ -532,7 +535,7 @@ 

flowSet

str(flowSet)
Formal class 'flowSet' [package "flowCore"] with 2 slots
-  ..@ frames   :<environment: 0x55d40ab8dbe8> 
+  ..@ frames   :<environment: 0x562242979388> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 1 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr "Name"
@@ -722,7 +725,7 @@ 

cytoset

Formal class 'cytoset' [package "flowWorkspace"] with 3 slots
   ..@ pointer  :<externalptr> 
-  ..@ frames   :<environment: 0x55d414e7fdf0> 
+  ..@ frames   :<environment: 0x56224cc6eed0> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 0 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr(0) 
@@ -772,7 +775,7 @@ 

Interconverting

ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
 ConvertedToCytoframe
-
cytoframe object 'file806b23cd6a2e'
+
cytoframe object 'file5caf7fc9092c'
 with 10000 cells and 43 observables:
                name      desc       range  minRange    maxRange
 $P1            Time        NA     878.809         0     878.809
@@ -1000,7 +1003,7 @@ 

System Time

})
   user  system elapsed 
-  0.501   0.008   0.509 
+ 0.491 0.016 0.507

Alternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.

@@ -1017,7 +1020,7 @@

System Time

# A tibble: 1 × 6
   expression                             min median `itr/sec` mem_alloc `gc/sec`
   <bch:expr>                           <bch> <bch:>     <dbl> <bch:byt>    <dbl>
-1 Test <- flowjo_to_gatingset(ws = ws… 505ms  527ms      1.92    13.3KB        0
+1 Test <- flowjo_to_gatingset(ws = ws… 497ms 511ms 1.97 13.3KB 0
diff --git a/docs/course/05_GatingSets/slides.html b/docs/course/05_GatingSets/slides.html new file mode 100644 index 0000000..46c3511 --- /dev/null +++ b/docs/course/05_GatingSets/slides.html @@ -0,0 +1,3313 @@ + + + + + + + + + + + + + + Cytometry in R – 05 - Gating Sets + + + + + + + + + + + + + + + + + +
+
+ +
+

05 - Gating Sets

+ +
+
+
+David Rach +
+
+
+ +

2026-03-03

+
+
+ +

+
+

AGPL-3.0 CC BY-SA 4.0

+
+
+
+ +
+
+
+

Background

+
+
+
+
+
+
+ +
+

.

+
+
+

Welcome to the fifth week of the Cytometry in R course!!! At this point, we are through a significant portion of the “Intro to R” material, and will start encountering more “Cytometry-focused” material moving forward.

+
+
+
+
+
+
+
+
+
+
+
+ +
+

.

+
+
+

If we think of a typical flow cytometry experiment, there is more to the analysis than simply acquiring the .fcs file. While there is substantial information present within an .fcs file, in the context of analyzing them with commercial software, we rely on additional infrastructural elements to organize the various files, transform (scale), compensate (for conventional flow), visualize, derrive statistics, etc.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

This infrastructural requirement within the R context is primarily handled by the flowCore and flowWorkspace R packages from Bioconductor. Today, we will build on what we learned during Week 03 but in the context of working and interacting with multiple .fcs files. This will provide a solid foundation to explore in greater depth how individual components of our typical workflow are represented within the R context.

+
+
+
+
+
+
+
+ +
+
+
+

Walk Through

+
+
+
+
+
+ +
+

Housekeeping

+
+
+

As we do every week, on GitHub, sync your forked version of the CytometryInR course to bring in the most recent updates. Then within Positron, pull in those changes to your local computer.

+

After setting up a “Week05” project folder, copy over the contents of “course/05_GatingSets/data” to that folder. This will hopefully prevent merge issues next week when attempting to pull in new course material. Once you have your new project folder organized, remember to commit and push your changes to GitHub to maintain remote version control.

+

If you encounter issues syncing due to the Take-Home Problem merge conflict, see this walkthrough. The updated homework submission protocol can be found here

+
+
+
+
+


+
+
+

flowFrame

+
+
+
+
+
+
+ +
+

.

+
+
+

Let’s start off by recalling the approach we first saw during Week 03, where using the flowCore package we loaded the contents of our .fcs file into R as a “flowFrame” object.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

To do this, we first identified the .fcs files we were interested using file.path() to specify the folder, and list.files() to find contents containing “.fcs”.

+
+
+
+
+
+
+
+
# Folder <- file.path("course", "05_GatingSets", "data") # For Testing
+
+ Folder <- file.path("data") # For Quarto Rendering
+
+fcs_files <- list.files(Folder, pattern=".fcs", full.names=TRUE)
+
+fcs_files
+
+
[1] "data/2025_07_26_AB_02_INF052_00_Ctrl.fcs"
+[2] "data/2025_07_26_AB_02_INF052_00_SEB.fcs" 
+[3] "data/2025_07_26_AB_02_INF100_00_Ctrl.fcs"
+[4] "data/2025_07_26_AB_02_INF100_00_SEB.fcs" 
+[5] "data/2025_07_26_AB_02_INF179_00_Ctrl.fcs"
+[6] "data/2025_07_26_AB_02_INF179_00_SEB.fcs" 
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

We then identified an individual .fcs file of interest using the [] method of indexing.

+
+
+
+
+
+
+
+
fcs_files[1]
+
+
[1] "data/2025_07_26_AB_02_INF052_00_Ctrl.fcs"
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Then, after making sure flowCore was attached to our local environment (via the library() function), we could use read.FCS() to read in our .fcs files contents to R.

+
+
+
+
+
+
+
+
# BiocManager::install("flowCore") #Bioconductor
+library(flowCore)
+
+
+
+
+
flowFrame <- read.FCS(filename=fcs_files[1], truncate_max_range = FALSE,
+ transformation = FALSE)
+flowFrame
+
+
flowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'
+with 10000 cells and 43 observables:
+               name      desc     range  minRange    maxRange
+$P1            Time        NA    896745         0     878.809
+$P2           SSC-W        NA   4194304         0 4194303.000
+$P3           SSC-H        NA   4194304         0 4194303.000
+$P4           SSC-A        NA   4194304         0 4194303.000
+$P5           FSC-W        NA   4194304         0 4194303.000
+...             ...       ...       ...       ...         ...
+$P39     APC-R700-A    CD107a   4194304      -111     4192506
+$P40   Zombie NIR-A Viability   4194304      -111     4192506
+$P41 APC-Fire 750-A      CD27   4194304      -111     4192506
+$P42 APC-Fire 810-A      CCR7   4194304      -111     4192506
+$P43           AF-A        NA   4194304      -111     4194303
+472 keywords are stored in the 'description' slot
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

As we start to think about the wider infrastructural handling of our .fcs files, what would have occurred if we had provided multiple .fcs file paths to read.FCS()? Let’s go ahead and check by not providing an index number.

+
+
+
+
+
+
+
+
read.FCS(filename=fcs_files, truncate_max_range = FALSE, transformation = FALSE)
+
+
Error in `read.FCS()`:
+! 'filename' must be character scalar
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

As you can tell, this error message is not particularly interpretable. It however arises from type of object we are passing to the function, whereby an individual file.path (fcs_files[1]) appears as class “character” with a single value (ie. a scalar), but the combined vector (fcs_files) contains multiple values.

+
+
+
+
+
+
+
+
fcs_files[1]
+
+
[1] "data/2025_07_26_AB_02_INF052_00_Ctrl.fcs"
+
+
str(fcs_files[1])
+
+
 chr "data/2025_07_26_AB_02_INF052_00_Ctrl.fcs"
+
+
+
+
+
+
fcs_files
+
+
[1] "data/2025_07_26_AB_02_INF052_00_Ctrl.fcs"
+[2] "data/2025_07_26_AB_02_INF052_00_SEB.fcs" 
+[3] "data/2025_07_26_AB_02_INF100_00_Ctrl.fcs"
+[4] "data/2025_07_26_AB_02_INF100_00_SEB.fcs" 
+[5] "data/2025_07_26_AB_02_INF179_00_Ctrl.fcs"
+[6] "data/2025_07_26_AB_02_INF179_00_SEB.fcs" 
+
+
str(fcs_files)
+
+
 chr [1:6] "data/2025_07_26_AB_02_INF052_00_Ctrl.fcs" ...
+
+
+
+
+
+

flowSet

+
+
+
+
+
+
+ +
+

.

+
+
+

Consequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.

+
+
+
+
+
+
+
+
flowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,
+ transformation = FALSE)
+flowSet
+
+
A flowSet with 6 experiments.
+
+column names(43): Time SSC-W ... APC-Fire 810-A AF-A
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Alternatively, we can designate specific files within “fcs_files” we want to read in using the [] and c() notation style we have encountered previously.

+
+
+
+
+
+
+
+
read.flowSet(files=fcs_files[c(1, 3:4)],
+ truncate_max_range = FALSE, transformation = FALSE)
+
+
A flowSet with 3 experiments.
+
+column names(43): Time SSC-W ... APC-Fire 810-A AF-A
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

On follow-up, we can see that read.flowSet() has created a “flowSet” class object.

+
+
+
+
+
+
+
+
class(flowSet)
+
+
[1] "flowSet"
+attr(,"package")
+[1] "flowCore"
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Which we can also confirm by glancing at the right secondary sidebar to see the created Variables within our environment. Applying our investigatory skills from Week 3, we surmise that “flowSet” is another Bioconductor style S4-type object that within its frame slot contains individual “flowFrames”.

+
+
+
+
+
+
+

+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

If instead of class() we had used str(), we would have seen a similar output ton what we see in the Variables panel.

+
+
+
+
+
+
+
+
str(flowSet)
+
+
Formal class 'flowSet' [package "flowCore"] with 2 slots
+  ..@ frames   :<environment: 0x56470dcf2cc0> 
+  ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
+  .. .. ..@ varMetadata      :'data.frame': 1 obs. of  1 variable:
+  .. .. .. ..$ labelDescription: chr "Name"
+  .. .. ..@ data             :'data.frame': 6 obs. of  1 variable:
+  .. .. .. ..$ name: 'AsIs' chr [1:6] "2025_07_26_AB_02_INF052_00_Ctrl.fcs" "2025_07_26_AB_02_INF052_00_SEB.fcs" "2025_07_26_AB_02_INF100_00_Ctrl.fcs" "2025_07_26_AB_02_INF100_00_SEB.fcs" ...
+  .. .. ..@ dimLabels        : chr [1:2] "rowNames" "columnNames"
+  .. .. ..@ .__classVersion__:Formal class 'Versions' [package "Biobase"] with 1 slot
+  .. .. .. .. ..@ .Data:List of 1
+  .. .. .. .. .. ..$ : int [1:3] 1 1 0
+  .. .. .. .. ..$ names: chr "AnnotatedDataFrame"
+
+
+
+
+
+ +
+
+
+
+
+ +
+

Reminder

+
+
+

While not today’s focus, remember we could access individual components inside the flowSet using the @ accessors covered during Week 3

+
+
+
+
+
+
+

Memory Usage

+
+
+
+
+
+
+ +
+

.

+
+
+

Both “flowFrame” and “flowSet” objects were implemented in the flowCore package, which is the oldest extant flow cytometry R package on Bioconductor. Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as “flowFrame” and “flowSet” objects.

+
+
+
+
+
+
+
+
+
+
+
+ +
+

.

+
+
+

One consideration of this method is the contents of your .fcs files are read into your computer’s random access memory (RAM). While for individual .fcs files or small experiments this present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

To build some contextual understanding of the problem, let’s learn how to check how much memory is being used by our individual variables/objects within our R session. We will primarily use the lobstr R packages obj_size() function, as it better handles evaluating complicated objects than base R’s object.size() function.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

We can check and see the memory usage by our flowFrame object

+
+
+
+
+
+
+
+
# Base R
+object.size(flowFrame)
+
+
3570896 bytes
+
+
# install.packages("lobstr") # CRAN
+library(lobstr)
+obj_size(flowFrame)
+
+
3.53 MB
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

And contrast to the greater ammount of space occupied by our flowSet object (which contains multiple flowFrames)

+
+
+
+
+
+
+
+
obj_size(flowSet)
+
+
20.99 MB
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

If we were curious how much memory total we are using within R at the current moment, we can check using the mem_used() function:

+
+
+
+
+
+
+
+
mem_used()
+
+
146.81 MB
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Ultimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. You can check programmatically how much RAM you have available, although the specific function you will need to use will depend on your computer’s operating system.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

To simplify the process, here is an additional example of where a conditional can prove useful, allowing us to check in an operating system specific manner. It takes the output of the Sys.info() function, namely the “sysname” argument and then retrieves the relavent function.

+
+
+
+
+
+
+
+
OperatingSystem <- Sys.info()[["sysname"]]
+
+if (OperatingSystem == "Windows") { # Windows
+    memory.limit()
+
+  } else if (OperatingSystem == "Darwin") { # MacOS
+    system("top -l 1 | grep PhysMem")
+
+  } else if (OperatingSystem == "Linux") { # Linux
+    system("free -h")
+
+  } else {message("A wild FreeBSD-User appears")}
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

When evaluating the returned outputs, primarily consider the total, used and free outputs.

+
+
+
+
+
+
+
+

cytoframe

+
+
+
+
+
+
+ +
+

.

+
+
+

In addition to the flowCore R package, additional flow cytometry infrastructure support is provided by the flowWorkspace package. Instead of the reading all the .fcs files contents into active RAM, flowWorkspace reduces the memory overhead by using “pointers” to interact with the object in it’s current storage location (either on your harddrive, SSD, etc.), only reading in components to RAM as needed.

+
+
+
+
+
+
+
+
# BiocManager::install("flowWorkspace") #Bioconductor
+library(flowWorkspace)
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Because of these differences in how data is interracted with, we end up with parallel equivalents to the traditional flowFrame and flowSet type objects. These include “cytoframe” for single .fcs files

+
+
+
+
+
+
+
+
cytoframe <- load_cytoframe_from_fcs(fcs_files[1], truncate_max_range = FALSE, transformation = FALSE)
+
+cytoframe
+
+
cytoframe object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'
+with 10000 cells and 43 observables:
+               name      desc       range  minRange    maxRange
+$P1            Time        NA     878.809         0     878.809
+$P2           SSC-W        NA 4194303.000         0 4194303.000
+$P3           SSC-H        NA 4194303.000         0 4194303.000
+$P4           SSC-A        NA 4194303.000         0 4194303.000
+$P5           FSC-W        NA 4194303.000         0 4194303.000
+...             ...       ...         ...       ...         ...
+$P39     APC-R700-A    CD107a     4192506      -111     4192506
+$P40   Zombie NIR-A Viability     4192506      -111     4192506
+$P41 APC-Fire 750-A      CD27     4192506      -111     4192506
+$P42 APC-Fire 810-A      CCR7     4192506      -111     4192506
+$P43           AF-A        NA     4194303      -111     4194303
+472 keywords are stored in the 'description' slot
+row names(0):
+
+
+
+
+
+ +
+
+
class(cytoframe)
+
+
[1] "cytoframe"
+attr(,"package")
+[1] "flowWorkspace"
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Which also still errors out when not given a scalar object

+
+
+
+
+
+
+
+
load_cytoframe_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)
+
+
Error:
+! Expected string vector of length 1
+
+
+
+
+
+

cytoset

+
+
+
+
+
+
+ +
+

.

+
+
+

As well as “cytoset” to handle multiple .fcs files.

+
+
+
+
+
+
+
+
cytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)
+
+cytoset
+
+
A cytoset with 6 samples.
+
+  column names:
+    Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A
+
+
+
+
+
+
class(cytoset)
+
+
[1] "cytoset"
+attr(,"package")
+[1] "flowWorkspace"
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Unlike “flowFrame” and “flowSet”, when we run str(), for “cytoframe” and “cytoset” objects we don’t get back quite as much information.

+
+
+
+
+
+
+
+
str(cytoframe)
+
+
Formal class 'cytoframe' [package "flowWorkspace"] with 5 slots
+  ..@ pointer    :<externalptr> 
+  ..@ use.exprs  : logi TRUE
+  ..@ exprs      : num[0 , 0 ] 
+  ..@ parameters :Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
+  .. .. ..@ varMetadata      :'data.frame': 5 obs. of  1 variable:
+  .. .. .. ..$ labelDescription: chr [1:5] "Name of Parameter" "Description of Parameter" "Range of Parameter" "Minimum Parameter Value after Transformation" ...
+  .. .. ..@ data             :'data.frame': 0 obs. of  5 variables:
+  .. .. .. ..$ name       : chr(0) 
+  .. .. .. ..$ description: chr(0) 
+  .. .. .. ..$ range      : num(0) 
+  .. .. .. ..$ minRange   : num(0) 
+  .. .. .. ..$ maxRange   : num(0) 
+  .. .. ..@ dimLabels        : chr [1:2] "rowNames" "columnNames"
+  .. .. ..@ .__classVersion__:Formal class 'Versions' [package "Biobase"] with 1 slot
+  .. .. .. .. ..@ .Data:List of 1
+  .. .. .. .. .. ..$ : int [1:3] 1 1 0
+  .. .. .. .. ..$ names: chr "AnnotatedDataFrame"
+  ..@ description:List of 1
+  .. ..$ note: chr "empty"
+
+
+
+
+
+ +
+
+
str(cytoset)
+
+
Formal class 'cytoset' [package "flowWorkspace"] with 3 slots
+  ..@ pointer  :<externalptr> 
+  ..@ frames   :<environment: 0x5647187d67c8> 
+  ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
+  .. .. ..@ varMetadata      :'data.frame': 0 obs. of  1 variable:
+  .. .. .. ..$ labelDescription: chr(0) 
+  .. .. ..@ data             :'data.frame': 0 obs. of  0 variables
+  .. .. ..@ dimLabels        : chr [1:2] "rowNames" "columnNames"
+  .. .. ..@ .__classVersion__:Formal class 'Versions' [package "Biobase"] with 1 slot
+  .. .. .. .. ..@ .Data:List of 1
+  .. .. .. .. .. ..$ : int [1:3] 1 1 0
+  .. .. .. .. ..$ names: chr "AnnotatedDataFrame"
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

This is similarly the case when glancing at the right secondary side bar, as the respective objects under variables appear to have empty matrices where normally we would have seen the MFI values.

+
+
+
+
+
+
+

+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Due to flowWorkspace use of pointers, the missing data remains stored on the drive, only being retrieved right before it is required. This reduces the overall RAM utilization. Let’s double check the differences in memory utilization for flowFrame/cytoframe:

+
+
+
+
+
+
+
+
obj_size(flowFrame)
+
+
3.53 MB
+
+
+
+
+
+
obj_size(cytoframe)
+
+
5.40 kB
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

And similarly the case for flowSet and cytoset:

+
+
+
+
+
+
+
+
obj_size(flowSet)
+
+
20.99 MB
+
+
+
+
+
+
obj_size(cytoset)
+
+
3.88 kB
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Additionally, with computer hardware increasingly switching from spinning disk hard-drives to faster solid state drives, the performance penalty previously experienced when not running from RAM is not as large of a concern as in previous years.

+
+
+
+
+
+
+
+

Interconverting

+
+
+
+
+
+
+ +
+

.

+
+
+

Despite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

To go from a flowFrame to a cytoframe, we can use the flowFrame_to_cytoframe() function

+
+
+
+
+
+
+
+
ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
+ConvertedToCytoframe
+
+
cytoframe object 'file5bfe2ae750aa'
+with 10000 cells and 43 observables:
+               name      desc       range  minRange    maxRange
+$P1            Time        NA     878.809         0     878.809
+$P2           SSC-W        NA 4194303.000         0 4194303.000
+$P3           SSC-H        NA 4194303.000         0 4194303.000
+$P4           SSC-A        NA 4194303.000         0 4194303.000
+$P5           FSC-W        NA 4194303.000         0 4194303.000
+...             ...       ...         ...       ...         ...
+$P39     APC-R700-A    CD107a     4192506      -111     4192506
+$P40   Zombie NIR-A Viability     4192506      -111     4192506
+$P41 APC-Fire 750-A      CD27     4192506      -111     4192506
+$P42 APC-Fire 810-A      CCR7     4192506      -111     4192506
+$P43           AF-A        NA     4194303      -111     4194303
+472 keywords are stored in the 'description' slot
+row names(0):
+
+
+
+
+
+
obj_size(ConvertedToCytoframe)
+
+
5.40 kB
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

To go from a cytoframe to a flowFrame, we can use the cytoframe_to_flowFrame() function

+
+
+
+
+
+
+
+
ConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)
+ConvertedToFlowframe
+
+
flowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'
+with 10000 cells and 43 observables:
+               name      desc       range  minRange    maxRange
+$P1            Time        NA     878.809         0     878.809
+$P2           SSC-W        NA 4194303.000         0 4194303.000
+$P3           SSC-H        NA 4194303.000         0 4194303.000
+$P4           SSC-A        NA 4194303.000         0 4194303.000
+$P5           FSC-W        NA 4194303.000         0 4194303.000
+...             ...       ...         ...       ...         ...
+$P39     APC-R700-A    CD107a     4192506      -111     4192506
+$P40   Zombie NIR-A Viability     4192506      -111     4192506
+$P41 APC-Fire 750-A      CD27     4192506      -111     4192506
+$P42 APC-Fire 810-A      CCR7     4192506      -111     4192506
+$P43           AF-A        NA     4194303      -111     4194303
+472 keywords are stored in the 'description' slot
+
+
+
+
+
+
obj_size(ConvertedToFlowframe)
+
+
3.53 MB
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

To go from a flowSet to a cytoSet, we can use the flowSet_to_cytoset() funciton

+
+
+
+
+
+
+
+
ConvertedToCytoset <- flowSet_to_cytoset(flowSet)
+ConvertedToCytoset
+
+
A cytoset with 6 samples.
+
+  column names:
+    Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A
+
+
+
+
+
+
obj_size(ConvertedToCytoset)
+
+
3.88 kB
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

To go from a cytoSet to a flowSet, we can use the cytoset_to_flowSet() function.

+
+
+
+
+
+
+
+
ConvertedToFlowset <- cytoset_to_flowSet(flowSet)
+ConvertedToFlowset
+
+
A flowSet with 6 experiments.
+
+column names(43): Time SSC-W ... APC-Fire 810-A AF-A
+
+
+
+
+
+
obj_size(ConvertedToFlowset)
+
+
20.99 MB
+
+
+
+
+
+

Gating Sets

+
+
+
+
+
+
+ +
+

.

+
+
+

Fortunately, regardless of whether we are using flowFrame/flowSet (RAM) and cytoframe/cytoset (memory pointers), both routes end up converging at the next step, where the underlying .fcs files are passed off to the GatingSet() function.

+
+
+
+
+
+
+
+
GatingSet1 <- GatingSet(flowSet)
+GatingSet1 
+
+
A GatingSet with 6 samples
+
+
+
+
+
+
class(GatingSet1)
+
+
[1] "GatingSet"
+attr(,"package")
+[1] "flowWorkspace"
+
+
+
+
+
+ +
+
+
GatingSet2 <- GatingSet(cytoset)
+GatingSet2
+
+
A GatingSet with 6 samples
+
+
+
+
+
+
class(GatingSet1)
+
+
[1] "GatingSet"
+attr(,"package")
+[1] "flowWorkspace"
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

As we prefaced in the background, beyond the .fcs files themselves, we need infrastructural elements with which to interact with the underlying data, which allows us to organize the various files, transform (scale), compensate (for conventional flow), visualize, derrive statistics, etc. A GatingSet serves as the infrastructural framework that allows us to do this in R.

+
+
+
+
+
+
+
+
+
+
+
+ +
+

.

+
+
+

If we investigate our current GatingSet objects, we won’t see much

+
+
+
+
+
+
+

+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

This will change as we start layering on additional elements. However, rather than try to cram everything into a single week, we will explore in greater depth the individual components over the next three weeks. Instead, for the rest of today, we will work backward, by exploring a GatingSet objecct and what it is capable of doing once fully assembled.

+
+
+
+
+
+
+
+

CytoML

+
+
+
+
+
+
+ +
+

.

+
+
+

The CytoML R package (also maintained by Mike Jiang) is a sister package to the flowWorkspace. It’s main purpose is to permit bringing in existing FlowJo, Diva and Cytobank Workspaces, with all their gates, transformations, etc. into R as fully assembled GatingSet objects. For those who already use one of these commercial softwares, it can be quite useful tool.

+
+
+
+
+
+
+
+
+
+
+
+ +
+

.

+
+
+

Since our goal is to examine a fully assembled GatingSet object, we will be using it today to bring in a FlowJo workspace to R. However, since this is a free Cytometry in R course, and not about to have everyone pay for a license for a one-off topic, in the pre-course Floreada walkthrough I documented how to convert a free Floreada.io workspae into a FlowJo.wsp that can also be used (please note that as of early 2026, some scaling bugs may be present and require troubleshooting).

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

To get started, let’s first attach CytoML to our local environment via the library() call.

+
+
+
+
+
+
+
+
# BiocManager::install("CytoML") #Bioconductor
+library(CytoML)
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

The .wsp files within this week’s data where created via Floreada.io. The main difference between the two files is one is a copy of the original that was opened within FlowJo, and subsequently swtiched from logicle to bi-exponential transformation.

+
+
+
+
+
+
+
+
+
+
+
+ +
+

.

+
+
+

We will need to provide the appropiate file path for our desired .wsp file. We can start by identifying which are present using list.files()

+
+
+
+
+
+
+
+
Folder # Defined Above
+
+
[1] "data"
+
+
FlowJoWsp <- list.files(path = Folder, pattern = ".wsp", full = TRUE)
+FlowJoWsp
+
+
[1] "data/FlowJoWSP_OpenedCopy.wsp" "data/FlowJoWSP_Unopened.wsp"  
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

In our case, we will proceed by using str_detect() to select the .wsp that contains the pattern “Opened”

+
+
+
+
+
+
+
+
ThisWorkspace <- FlowJoWsp[stringr::str_detect(FlowJoWsp, "Opened")]
+ThisWorkspace
+
+
[1] "data/FlowJoWSP_OpenedCopy.wsp"
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

With our single .wsp filepath now identified, we can now proceed to set up the intermediate object using open_flowjo_xml()

+
+
+
+
+
+
+
+
ws <- open_flowjo_xml(ThisWorkspace)
+ws
+
+
File location:  data/FlowJoWSP_OpenedCopy.wsp 
+
+Groups in Workspace
+         Name Num.Samples
+1 All Samples           6
+
+
+
+
+
+
class(ws)
+
+
[1] "flowjo_workspace"
+attr(,"package")
+[1] "CytoML"
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Having set up the intermediate flowjo_workspace object, we can attempt to read in the actual data from the .wsp into a GatingSet using the flowjo_to_gatingset() function.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

However, due to how I named the original .fcs files (“GROUPNAME” being individual specimens, “TUBENAME” being either Ctrl or SEB), and downsampled to the same number of cells, we will encounter the following error

+
+
+
+
+
+
+
+
gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder)
+
+
Error:
+! Multiple FCS files match sample 00_Ctrl.fcs by filename, event count, and keywords.
+Candidates are: 
+/home/david/Documents/CytometryInR/course/05_GatingSets/data/2025_07_26_AB_02_INF052_00_Ctrl.fcs
+/home/david/Documents/CytometryInR/course/05_GatingSets/data/2025_07_26_AB_02_INF100_00_Ctrl.fcs
+/home/david/Documents/CytometryInR/course/05_GatingSets/data/2025_07_26_AB_02_INF179_00_Ctrl.fcs
+Please move incorrect files out of this directory or its subdirectories.
+
+
gs
+
+
Error:
+! object 'gs' not found
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

As with any error, my first move is to check the help documentation. In this case, my initial response is to see if I can identify an argument that will help differentiate between the names for each specimen.

+
+
+
+
+
+
+
+
?flowjo_to_gatingset
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

In this case, I find that the “additional.keys” argument would likely work for this troubleshooting

+
+
+
+
+
+
+
+ + +
+
+ +
+
+
gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME")
+gs
+
+
A GatingSet with 6 samples
+
+
+
+
+
+
class(gs)
+
+
[1] "GatingSet"
+attr(,"package")
+[1] "flowWorkspace"
+
+
+
+
+
+

System Time

+
+
+
+
+
+
+ +
+

.

+
+
+

Especially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

One, using the system.time() function from base R, in which we surround whatever line of code we wish to evaluate in {}

+
+
+
+
+
+
+
+
system.time({
+
+flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME")
+
+})
+
+
   user  system elapsed 
+  0.499   0.008   0.506 
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Alternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.

+
+
+
+
+
+
+
+
# install.packages("bench") # CRAN
+library(bench)
+
+
+
+
+
mark(
+  Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME"),
+  iterations= 5
+  )
+
+
# A tibble: 1 × 6
+  expression                             min median `itr/sec` mem_alloc `gc/sec`
+  <bch:expr>                           <bch> <bch:>     <dbl> <bch:byt>    <dbl>
+1 Test <- flowjo_to_gatingset(ws = ws… 490ms  498ms      2.01    13.3KB        0
+
+
+
+
+
+

Gates

+
+
+
+
+
+
+ +
+

.

+
+
+

Now that we have loaded the contents of the FlowJo/Floreada workspace, we can start exploring the various infrastructural capabilities of a GatingSet object.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Let’s start by evaluating whether the manually-drawn gates I drew survived the journey. To do this, I can generate a visual gating treee using the plot() function.

+
+
+
+
+
+
+
+
plot(gs)
+
+
+
+

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

We can also retrieve the individual gates and their gaing paths using the gs_get_pop_paths() function.

+
+
+
+
+
+
+
+
gs_get_pop_paths(gs)
+
+
 [1] "root"                                             
+ [2] "/Scatter"                                         
+ [3] "/Scatter/Singlets"                                
+ [4] "/Scatter/Singlets/Live"                           
+ [5] "/Scatter/Singlets/Live/Tcells"                    
+ [6] "/Scatter/Singlets/Live/Tcells/CD4+"               
+ [7] "/Scatter/Singlets/Live/Tcells/CD4+/TNFa+IFNg+"    
+ [8] "/Scatter/Singlets/Live/Tcells/CD4+/TNFa+IFNg-"    
+ [9] "/Scatter/Singlets/Live/Tcells/CD4+/TNFa-IFNg+"    
+[10] "/Scatter/Singlets/Live/Tcells/CD4+/TNFa-IFNg-"    
+[11] "/Scatter/Singlets/Live/Tcells/CD4-CD8-"           
+[12] "/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa+IFNg+"
+[13] "/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa+IFNg-"
+[14] "/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa-IFNg+"
+[15] "/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa-IFNg-"
+[16] "/Scatter/Singlets/Live/Tcells/CD8+"               
+[17] "/Scatter/Singlets/Live/Tcells/CD8+/TNFa+IFNg+"    
+[18] "/Scatter/Singlets/Live/Tcells/CD8+/TNFa+IFNg-"    
+[19] "/Scatter/Singlets/Live/Tcells/CD8+/TNFa-IFNg+"    
+[20] "/Scatter/Singlets/Live/Tcells/CD8+/TNFa-IFNg-"    
+
+
+
+
+
+

Counts

+
+
+
+
+
+
+ +
+

.

+
+
+

If we wanted to retrieve counts of cells found within the individual gates, we could do so with gs_pop_get_count_fast()

+
+
+
+
+
+
+
+
Data <- gs_pop_get_count_fast(gs)
+head(Data, 5)
+
+
                 name                         Population
+               <char>                             <char>
+1: 00_Ctrl.fcs_INF052                           /Scatter
+2: 00_Ctrl.fcs_INF052                  /Scatter/Singlets
+3: 00_Ctrl.fcs_INF052             /Scatter/Singlets/Live
+4: 00_Ctrl.fcs_INF052      /Scatter/Singlets/Live/Tcells
+5: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live/Tcells/CD4+
+                          Parent Count ParentCount
+                          <char> <int>       <int>
+1:                          root 10000       10000
+2:                      /Scatter  9986       10000
+3:             /Scatter/Singlets  9708        9986
+4:        /Scatter/Singlets/Live  9708        9708
+5: /Scatter/Singlets/Live/Tcells  6151        9708
+
+
+
+
+
+

Metadata

+
+
+
+
+
+
+ +
+

.

+
+
+

Since GatingSets contain multiple .fcs files, we may want to be able to subset them based on metadata for a particular variable. We can check to see current metadata using the pData() function.

+
+
+
+
+
+
+
+
pData(gs)
+
+
                          name
+00_Ctrl.fcs_INF052 00_Ctrl.fcs
+00_Ctrl.fcs_INF100 00_Ctrl.fcs
+00_Ctrl.fcs_INF179 00_Ctrl.fcs
+00_SEB.fcs_INF052   00_SEB.fcs
+00_SEB.fcs_INF100   00_SEB.fcs
+00_SEB.fcs_INF179   00_SEB.fcs
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

It currently doesn’t have much, but we will explore how to change this more over the next few weeks. For now, just know that we could add additional metadata via either a .csv file, or by retrieving additional description keywords from within the .fcs files themselves (as shown below)

+
+
+
+
+
+
+
+
AlternateGS <- flowjo_to_gatingset(ws=ws, name=1, path = Folder,
+ additional.keys="GROUPNAME",
+ keywords=c("$DATE", "$CYT", "GROUPNAME"))
+pData(AlternateGS)
+
+
                   GROUPNAME   $CYT       $DATE        name
+00_Ctrl.fcs_INF052    INF052 Aurora 26-Jul-2025 00_Ctrl.fcs
+00_Ctrl.fcs_INF100    INF100 Aurora 26-Jul-2025 00_Ctrl.fcs
+00_Ctrl.fcs_INF179    INF179 Aurora 26-Jul-2025 00_Ctrl.fcs
+00_SEB.fcs_INF052     INF052 Aurora 26-Jul-2025  00_SEB.fcs
+00_SEB.fcs_INF100     INF100 Aurora 26-Jul-2025  00_SEB.fcs
+00_SEB.fcs_INF179     INF179 Aurora 26-Jul-2025  00_SEB.fcs
+
+
+
+
+
+

ggcyto

+
+
+
+
+
+
+ +
+

.

+
+
+

As you can surmise, a lot of the infrastructural style handling done by commercial softwares is being orchestrated/mediated through our GatingSet object. Since it’s able to create and retain gating information, how would we go about visualizing the underlying data contained within each?

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Within R, most plots are generated using the ggplot2 package from the tidyverse (which we will explore next week), which builds of the “Grammar of Graphics” concept, combining layers together to create the final plots. The Bioconductor ggcyto R package extends this concept to enable flow cytometry data contained within a GatingSet to be plotted.

+
+
+
+
+
+
+
+ +
+
+
+
+ +
+

Important

+
+
+

As is the case with most free open-source software (FOSS), R packages will change over time as their developers add new features, make improvements, or alter internal functions to speed things up.

+
+
+
+
+
+
+
+ +
+

Important

+
+
+

ggplot2 recently had a major version change, with significant internal changes occuring. As a consequence of these changes, ggcyto functions that relied on the old ggplot2 functions broke and had to be updated.

+
+
+
+
+
+ +
+
+
+
+ +
+

Important

+
+
+

Any updates to CRAN packages are reflected immediately. By contrast, Bioconductor is on a twice yearly release cycle, so to take advantage of the ggcyto “fixes” that allow it to interact with the new version of ggplot2, we will need to make sure we have the “developmental” version installed.

+
+
+
+
+
+ +

packageVersion

+
+
+
+
+
+
+ +
+

.

+
+
+

Let’s start off by checking what version of both the ggplot2 and ggcyto packages you currently have installed on your computer.

+
+
+
+
+
+
+
+
packageVersion("ggplot2")
+
+
[1] '4.0.2'
+
+
+
+
+
+
packageVersion("ggcyto")
+
+
[1] '1.39.1'
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

If you were able to retrieve the following package versions (or greater”) for ggplot2 and ggcyto, you should be all set and can skip the subsequent reinstallation steps.

+
+
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

If you however found you have the older package versions (ex. ggplot2 3.5.2 or ggcyto 1.37.1) currently installed, you will likely encounter errors when trying to run the functions to plot your data below (since the changes are not fully backward-compatible with older versions).

+
+
+
+
+
+
+
+ +

remove.packages

+
+
+
+
+
+
+ +
+

.

+
+
+

Since ggcyto has a hard-coded dependency on ggplot2, if you have the older versions, I would recommend uninstaling both first, using the remove.packages() function.

+
+
+
+
+
+
+
+
remove.packages("ggplot2")
+remove.packages("ggcyto")
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Once this is done, I recommend exiting and then reopening Positron. This will ensure all currently-loaded R packages are unattached from the environment. However, you will loose all your environmental variables, so will need to reload them to get back to this point. If you are working with code chunks inside a Quarto Markdown File (.qmd), you can quickly accomplish this by scrolling down to the point of the document where you left off, and selecting the “Run Above” option showin on the code chunk.

+
+
+
+
+
+
+
+ + +
+
+ +

Installing correct versions

+
+
+
+
+
+
+ +
+

.

+
+
+

To reinstall ggplot2, you just need to install again from CRAN (as with it’s rolling-release model any changes the developers make become immediately available to everyone)

+
+
+
+
+
+
+
+
install.packages("ggplot2")
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

If you need to reinstall ggcyto, because of Bioconductor’s twice yearly release cycle, you will need to install the “developmental” version to take advantage of the fixes. Since this is for a one-off package, the easiest installation approach if to go via the GitHub using the remotes package’s install_github()

+
+
+
+
+
+
+
+
remotes::install_github("RGLab/ggcyto")
+
+
+
+
+

Plotting

+
+
+
+
+
+
+ +
+

.

+
+
+

Once you have the current versions of both ggplot2 and ggcyto, we can proceed to attach them to your local environment via the library() function.

+
+
+
+
+
+
+
+
library(ggplot2)
+library(ggcyto)
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

As was mentioned, ggcyto follows the ggplot2 grammar of graphics syntax, which we will learn more extensively next week. For now, lets look at a simple example

+
+
+
+
+
+
+
+
ggcyto(gs[1], subset="root", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

The function responsible for plotting is the ggcyto() function. The first argument (“gs[1]”) is designating which .fcs file in our GatingSet we are trying to visualize.

+
+
+
+
+
+
+
+
+
+
+
+ +
+

.

+
+
+

The second argument (“subset”) corresponds to which gating node we want to visualize. In this case, when set to “root”, we are seeing all cells present in the .fcs file. If we however wanted to visualize the cells within the CD4+ gate, we would swap the value provided to this argument.

+
+
+
+
+
+
+
+
ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

The next argument “aes” stands for aesthetics (more on this next week). You will notice it has its own set of parenthesis, in which we designate the markers/fluorophores we want to visualize on the x and y axis.

+
+
+
+
+
+
+
+
+
+
+
+ +
+

.

+
+
+

The final argument (“+ geom_hex(bins=100)”) specifies we want to generate a flow cytometry style plot, with it’s bin arguments value setting the resolution.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Now that we have walked through the arguments, let’s visualize the data

+
+
+
+
+
+
+
+
ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
+
+
+
+

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Alternatively, if we switched things around

+
+
+
+
+
+
+
+
ggcyto(gs[1], subset="CD8+", aes(x="IFNg", y="TNFa")) + geom_hex(bins=100) 
+
+
+
+

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Briefly, if we didn’t remember the marker, we could specify the fluorophore

+
+
+
+
+
+
+
+
ggcyto(gs[1], subset="CD8+", aes(x="BV750-A", y="PE-Dazzle594-A")) + geom_hex(bins=100) 
+
+
+
+

+
+
+
+
+
+
+
+ +
+
+
ggcyto(gs[6], subset="Tcells", aes(x="CD4", y="CD8")) + geom_hex(bins=100)
+
+
+
+

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

This is all we will cover for ggcyto for now, we will circle back over the next couple weeks as we gain more familiarity with how to build our own GatingSet objects. If you want to jump ahead, please see the additional resources section and happy exploring!

+
+
+
+
+
+
+
+ +
+
+
+

Take Away

+
+
+
+
+
+
+ +
+

.

+
+
+

Today, we looked at the two main representations of flow cytometry data in R, the older flowCore implemented flowFrame/flowSet objects that are stored in RAM, and the flowWorkspace cytoFrame/cytoSet objects that operate through memory pointers. We started our learning journey to understand GatingSet objects, and how to use them to mediate/orchestrate in R many of the infrastructural steps that would normally be performed by commercial software. And finally, we briefly covered how to use the ggcyto to visualize data contained within our GatingSets.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Similar to our utilization of tidyverse functions last week, we will be using GatingSets continously throughout the rest of the course. Over the next few weeks we will instead of retrieving already assembled GatingSets via CytoML assemble them from scratch within R.

+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Next week, we will dive further into the ggplot2 package from the tidyverse and how it implements the “Grammar of Graphics” concept. In the process, we will see how by combining layers and changing various elements being added on to the base layers of the plot, we can end up with many different plots we normally encounter as cytometrist.

+
+
+
+
+
+
+
+ + +
+
+ +
+
+
+

Additional Resources

+

flowWorkspace Bioconductor Vignette The Bioconductor vignettes are always a good place to start with any of the Cytoverse packages, the vignette for flowWorkspace is no exception. If you want to understand more about how to subset cytosets, or the various functions and arguments in a GatingSet, this should be your first stop.

+

CytoML Bioconductor Vignette If you use FlowJo, Diva, or CytoBank routinely, and want to understand more about how to bring in your own experiments to R, the CytoML vignettes should be your next stop.

+
+
+ +

ggcyto Bioconductor Vignette. There are several vignettes that can be found on the ggcyto Bioconductor website on how to plot your flow cytometry data, this one surmize many of the points we will be covering over the next few weeks.

+

Bioc2023 Workshop: Reproducible and programmatic analysis of flow cytometry experiments with the cytoverse Ozette hosted a workshop covering many of the cytoverse R packages at the Bioconductor conference (BioC) back in 2023. Some of the contents we will cover in greater depth over the next few weeks.

+
+
+ +
+
+
+

Take-home Problems

+
+
+
+
+
+ +
+

Problem 1

+
+
+

Using what you learned last week in Introduction to Tidyverse, for the imported GatingSet, retrieve the data.frame from cell counts per gate and attempt to mutate a new column showing percent of the parent gate. Remember, this is intentionally tricky at this point, we will go over how to efficiently do this in a few weeks

+
+
+
+
+
+
+ +
+
+
+
+
+ +
+

Problem 2

+
+
+

As we saw, CytoML can be finicky when names are repeated, or .fcs files are not present. Try removing a couple of the .fcs files from the data folder, and re-run the code. Document what kind of errors result.

+
+
+
+
+
+
+ +
+
+
+
+
+ +
+

Problem 3

+
+
+

For ggcyto, attempt to generate plots to visualize TNFa and IFNg for the various cell populations, across both Ctrl and SEB samples. In the process, change the bins argument until you end up with a resolution that you would be happy with for your own plots, and write it down.

+
+
+
+
+
+
+ + +
+
+ +
+

AGPL-3.0 CC BY-SA 4.0

+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-52-1.png b/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-52-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1c20e31aaa32dee8019bfbed7d45d72bd1184f6a GIT binary patch literal 58839 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

4hx>LUqZ)an7?*0PLD^g7$=wDJtxgRU7KdPlp4| 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 literal 0 HcmV?d00001 diff --git a/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-65-1.png b/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-65-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fde63f2b07b171ed277cb4f5968171aa616d5a4a GIT binary patch literal 73679 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 Tsm2iuayg;aG9a@YGVhjavl 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

66XX8kb8qVmM9K`ZE-9!T>E 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 literal 0 HcmV?d00001 diff --git a/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-67-1.png b/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-67-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d85179edf4b11e7b0e6c71ed30ca730f8d7de843 GIT binary patch literal 59275 zcmd?R2{e^&+djNehBAea455+;A@dZ92pJ-ol7x(zXDU%CbCh{Zl6js*LZ)q=Ng1|z zo~Q4;cfWqm^Stl-yx+Ip_5RoTul4PW1u94d>{&VK;YO z;~2>$lMu6o8=-~haOsk}3sg8I21l-%mS`j-vXnKYyvWV2rpD3I_2<6I$>MzVs;bW8 z5{oA+(*D`;Kh&%W318sWbx`A4nsuB{h~SUd-oISM@Gbw;`OxU*vo2MKkuH<(g-7|O zns4q-Pj9|FNAVKI1TT+_3!_J|Kk*0=#p579z3@TNA@APug#RZ#_`0fBeJ@o0tiJnl zo#2SGQQfPPi&cjQnD(Ul0EXT6Ku`NMO#7+W0_WwQq6@{WwLUX5GXnzymyN#B+cq#e zI5>FdT|tH?HR=yf;oi$5-__e|;56)DH`SVvm9@BXOI5Yq(2v1!^1Vr{+d@fQU0syq zW`ZB1$aHdOZodL2^`LdterEB{S83|0-|pu$hYDKsEj9DCm2V7~zj^bfySw{WeW2vt zQmtG7{rd?UDUyKYDnHgJYKWV69Un&T+tOv2xeS zmoBqxq12zdvN%=e2y(54*lUDtvrmt6HAr}nGFuE4KmH!Z-X^hYF==Mh@tRTGwJ+N+ zs!hAtX6*GTzEa}K)mG8eSl36sYr@*K=OT1hnhXwjcXP4N>-zm9y25tUV>1SBriULW zzR}0+x$IBC!-HMP!@bqC^R0TB-U0Q$EG;dkS1Dh9 z9X;46iaS_KmE36$6cG_o`voh(UA|N^;&{NSZxHC-d!D?sMQ5L4G<+8%6A zSxanpC~{X!e~9XkTPR;`ZSz>LYaC>vlS&m^s>VYe(iPuh#ARw9Mx!*MU+%o@Lqw@Y z#$Z#8Lng8H18gtUX>ecwF^bdH<(IFF(Nt~K^_#@S3@;#C7`67An!cnACcUF`ioB+` za--nVhc;%PMbFJLm=c?vhP~}oyFLtiYP4QPfYJR0Cnp$6S3?tbRkREVa(PrgxztpqBH2V_WaM;bs*_+zaq$+cqdb##zNxC! zV8zc@9IswU2-(c`WVro&$re)7ne`fG+HEdJE@F!Mt6iK+?@MNT55+J7fgHeewd2re7;hYK*|C&4b4>H^j}+QTE`&!-j_zUIC|+mhh9DP zXY=#(+*NxkUtdyo#tpW&FHcDx3Oj6iL$XRrnc{d^-hB0o|&5w7#$=KBzx7UYiA zT3yLh>>!(tbZjaa3f;t%y(H zV(2d!RF*e2kc!Tst#w9?BlJ2JGj&UN9d^Ms#9-&n&d$mZ`cq#TfM1RO z;)a;9j&;S`XzIXvuk~~T5+;fA(MR~mRekAj>;vfN=sFg|BO`d!k84l8`O` z{jV?9%FKH+Ev>AS$)2)yPwdQUT=v?kW%{5L)zjbqzFbFL-EO|1H`bv?`|aDeFyDb< zD-G9Z^uq4?ESX5|_6LYAY;|XOUU6~i&o$0_*fNuw(4DT8YBg%tCZ1Kf^JphYbS}HL zYOkqktzRGOBcA!AMC1mo$}A&-jhn*fD>g^=^VaM9X;McS#9i%Iz6n+?zX=Ek=-O)Y zI#>l?d)}Jtw7}d~N|n6^ISJm!KfiVz?cy_O1=Bnps%6KmS85MWc}l<)=G5MdZGSn? zOBaRR9`n)TSvTPu5x#Hv9PGf#Q8h2 zoh4IUHiwhEV?Ch+S!H^V3XoYRZZ?MI58LupQ9qu~J_MEf!T1#SL5VX?WN!stR z#d><$7e~+~yL(fTUK4M%GVkQDTv@R`+_0uRe^Y1;EmPKf^DKqI_IE8L{H=ZAYZYSk zd(#>xdHC(L_1ua`tsfZ~^J^wa3C6(G%o@-A_1-woooTKJGeH3X3HbAA*0Q-=#g%XR zZu9GdqX&gela3Gwx@w+j={~MQOojfhEpr|WPfJa0W!~CL)FU}1Wda_nbUZ{6iR|Oo zzQe|SCulu#m4Ly%Q%NwTZOF1{SYm%#Wz*Eox_tTDM1+CoclOj|!JP|ST$Pwa|B#~e z^mNJPmnzAO3TG+ec88`qvf4etW)U|N`>waUo8j@-6XL(O%^Af^?}fK{ts>?lfXIuT4#*^Yk4c9XymS%TE}n`EV4BO-n6opviDmeujsg^ zHF1?$#CdGo7_ON4ln#qOnzF!UP`TG<6bREjq%1nWwotanrJb9cm&dn1t)=f`{OKqG zvg}f$6jGZ#pSAOPvJ6I3vaS&(BqbU72R{bnk>$Cb&KfAjyV_K_zcI*EIvwaSXQXA| z;jq&%=Evj->!lA^W%}9r`nukZ1RH~0^W_MA*J(d1>}EbAc-Ll46Pzc&2(NzQ2xB|; z<&8mW>~pQg9l9?Tfti7&_Zg+6r09LC+K0KH5*wf+5)K;1}c_ z9M-9)bRoq1({M{nMccjd_ZRe9gXP`ngoq9U5wnxWZcVgejx0;?A|3u)*y-RB7g_{I zbxUj~zP&ju_nJ1RMPQKLed&viWx;J7TQ zm!F?6w%(;~UAa9OdBq%l|1E&Q4cx9}UW-8gVk=y=+;x3sd>-7$0{FjvNg8AsXn!6- zBkw3#>Eoo>A6S^ZvF`i~1+MA;h z%gM=Arei<9V0zaE`vW-<4nOvXU~(yJ`1s%b;KfuKT>XM6)CDHeE+!pj+_hwu#A9Uye}`{F=eBk9kVV+{!9e)M)|Gp|ZsGcr)MW)2HKr zb4*T78U+YH1TWX>;*UZFvB3IxXHs+PyLaE#%D7u_(M6EjKL*U!B-Z7jRcCGyEHi}Y z_2qh|#kskgOaOlO0gG`fzvE%{SUNqr^$k#`=deSsC4|va`gv(-X0Q(thc$`XLCgdk zNl%6jjWie!17aO(*csb<)(h?|M3Jk%`0+2qBmH`C1e_Lz zC{@HRcayL-nQ7lGvKscU*QUIDDJY+^_`;)03}CvM>Y|doaHfZUNq{tn{8O@ zS``>&Zec;p91T$lxXA0D>o_RdNKR>hB1|8%vb?q@BK-aRxr={1?fL;=E>L9VBkWQj zDfx1pxtj)u>jvP2fMfk4^IUqyHP8L%(WANqv$JBaqHZIYuM9l6_`0Jmek4z_oJ`+?ig1_TN|!>x1?0N(vfWX8xib&Gj? zvSAn+nwlR1nSlHutAQ{IATHdyX4(U=me!uDQRFoM)fob<#{x0n6+_unJolFC4_6|p z=smZ_0K3e9qYfbx2PV)suX+16`2JZ~AbLs9y|wAiUic*#xcf$4+&(%3Pze9}BQnW7 z8$!cgJtrjUf}zhBjY`0yfTwfM2V|~ju+!0%rmo(m2cuRJ99{!PlX4wsDi_$H44F9p z?l1xB9yulK&}xDa_th5i8enPz#$v*`Ff+0&C;aPjqr)ez8$g^~pY08#z5H{jmTb`q ze0MbBz|UI8+0+n0u-NLYI#@?y$7J(+SSKSrz2Wa~Ib;Y=3s@9G#DeuwmfT;{bL>AC zl>xB&3&g?q!giA|$6o8*T8laLj90E)VfHy~Rcr`R65_rjP~bwa9)KyWF`}E3QPx&~ z7d2Pl2bjmvp?tH>aB*+rHIajjcYxhGeE zqLsa7kAYugwtY}YFE>ve8!E?cZ~ zVnKleuv+;1hHVWITeQt`9Zl65kUxNt5YHMpkE8ycdI5_*a_NtmnG3x7w{M^HucLVR z)tBV-MGlTUWcFdx}vyS~%i53!jfvDSLQ$taS4>3m3#sMFA6x!bq9VbC65Psq9N{bJ(g=3exGC{B#)v1FnS(Ukvs0R1UxQ!A?l z-q_|y2tc8L41_N!A_F5d++LYDHCev$odY&lEI2nE9UWh@M$OiWF!{3rmIGAM4MX2q zsr~ir+pp!Bw8g?laIfKkfgO-6+MkGKDAJ51@bg=_xaR-pdX60tZNB<+Jds4sei5NF|&2jGX?8m>p ztt~^?IqzdL9xS(EdN&+!2e3tY>8<`Y&z^yS(rq8GYy=WB`@ket$z?_7!Hu|lmf%?& zPgO0H&bET`@u2mfmg!&#WFZfr3?XE1!@}I>jF`X|G)WTzfLe$X!9iWH!S0%Bi0@8- zrh$bI!=j{pft@I^{FM@H2W(k7@PqLp2tjn0@5@5GIZC6u1mG`KGT&;r)Y@ZKheIoq zUfdNljQwdYl{pLsGhLYb7zn;EIc)qqaN1oz5M~K@lASRS+5XHvz|6!!Y6+A)aNeQR z%F<_$&L(9>p>9w!A3=iB7r2LQ<2i6MS-n{XUJw;4LD2#~qFv>=AI7d8Voruk%=Oo_ zk6W(vB8U*S!h2X-@Y%wKH9ljteh`NTy}+EJqM{($R6zg%Mdw3oh_1yF>}V@X%VD$B znB37G(445bbc;bPYI}D%sZ1Cm#v;V%jV^T+gjq{WgsCI035Z?Wd%o19q+j4DR5CAb zArjA6&GRC#?~rqf$nt?F=r!=#FRI$NBpeGZD^s9oh*$}3gjXdB^pi_PL$+|2)>v^-VT!ccT2#y&A=?-DqKnX(V!4-;a4%tbrr>Pig6T|-2;S81^FY|pe1wO$|_OSZ|${RPw zbAJZ`L!gVoJ&{=gn{ngIkOOfjoJ+41LP$?f4?Klq85rYzIe%G}W!Pd6x$<*!SKb)~ zysWzqk8KUOIwCy~R%HrYJ$R5%6$xSC70JU@Nr?KtzP%9z5~1Gd3EPhwIFApdGA*$7 zoldPx-EG)bRS;uAnHh%rAfAQGn4g~?+5BLFoLpRtd=Hx?cIQGps7O)OQv6^Db8N@s z?fwGaz8@Hmq7egw*BJ^|*y>WFZs6w_!O2-X{2*8l%;f5Igxh;q50^Rs8N4pQR}Tt@ z!(~8-+^$kn(qvfle$TW6@3$1ahXhl2{ZHWTOXtetv_TLoMMOnc^{_Nc>MEtwRN}{v z7pVOw%8t2$U~}FFJv0=(D1E^c6lU0s%s!xgOqEd|yK8K0eB(wVu#y!$!lN1R)#T)} zKIpzaOk8GTe0g~}INgK<=F#W3(BMA4fB!B`sHCI>`pPz!U(M~ickk-y&8PY`e{X8y z;DFG5>Czg^ zz`EE{?NAG}SDpq)LU<>b`X|`=60Lw$c+;DHLAWhS>g?a-@3&0!j}K~Cd{EW5!tQGD z)IRc|W&}gToCDs(lbn*;+?m=!BLcRx#(YT#g*uR&=KD?O|DAdHljBxP@nQ$%zy;hg zo(H0RJlgWI{esm~9!jAVfH8QAMKj4{omR`idm1xP=z@fqG|E~t||88Yi3azFZ{KNAHI6Y>cpFe-P z)6`V|&|uCRCwsE$(;Olxj{UUDvQJl4Rh5%^^{w>7w5(td5>1YuNH-Wn9O9qz=LVEL^}SgEI>`6Rl;)XeO}5Sh@)lP7cTSb)pg=JI)}sizmS zM=$~o!M#`dDhD@rVEr%H-Pm7gYo7|N$8PqRn3z9~KvQ$_w#@Q1BNY|n2~V_aY1TKmZ`_y0|KFGa98~p)2IA= zewU<*is61~{Kh8sfx*H3wV{HaXq zn%QdS;)u;)vioh=$Fd5rNu|6n6e3QWLCChjr$m&D_V484PJ-IR5DT6?WBeoL{Kx%_ z4F`#DA7SQ<`4$51C4YogRsZT5Tr{w=tSFr3(gOd94Uc%CIW`m?i>ATT6 zSg>ku&?(ONcoD~xou;{tctdf}YG`Ll{bS3b*nJUCl$%WO--u7d4*i? zKMx-3FzBk2cId62fOSygH&G$varF7fV`4(#7E9Knem_ z?Fn>lxJ4VN8RTjp#SZz7hC7@+!}+(X;CkK^t6HkREwc8luXPx?X) zlO1`(9^wbtb;bQ~N!p+IYAA8*k@EgLlS3dx415o7M)(222i3_P0C^@Ti^6KEs*eZE zQaxtW<7PrMtAN-D4%yTKiI64)gohAt&@#(G*H~}kLZSBKt65_?vtHa(;#eBS$*pR} z-sdU)&Eo;U0uL6Ps%973weueCgKn-}@Tgm0&;qpk`kT>0KqTKFw4tbSJp(kN$c+d{ z_;P^C2e*QhmK{iuP*hL>Dn)0iib0`;cGVmf8&{L_qB6ZlKy*P;<&eua2h6V%z0{*) z-4Y`z=wkz!?Ksf<8oxlD#4kju2im#>Qjtm|Kf4clWaQu()84)PoprW2_Z63^7#eB$ zvlOG-txnXOcM!P|Sa)8PBO$W*_vA0Eam1UnL^|wDr+V$r8X$?I(x_EnhQ8zhAPj2k zK=v2pNJMENuX%d(cnIrp8ZOb{%Zyt`OfB-@j!JTZ)+d`N&hFj^rDS_;k!ZkUh>T zDREg9hHSRFvGD}tX}XNvVH%iy0Dg}nIXK@##gtCS9O;AVc&F0cC61aDwf3YXuXio@ z$?2cTTCqx%VnQ2q_&H?zw|2*IQ8Jnd1nB;)8k)-Ny5;TFDZl)$F5RDQGy8zd!qw?Z z#>6O%XbF>9==Sy;Amf)RojIwS3iMYRpRg(_pX61HWo`|{?CqAU=DrVCaH-r}ZBz{p zP3k&D;a|raeJSlHLA`z`o&o!_n_Y1&%?9j2I|`3ugRX{qDc~5euf6<2E@jOXEI$NF zvx>y_12eN}6N%OL<3E6AN)rMJ)H|;Q31Y_ipD7Xg3S3%!bw+{W;jc4J*??g4evyKf zHu~a&S{F5;V|#bHy1TC}=N_%>T?@lg2nW)$qKAtoB`YaTECCmanmUVqPX1b-&Ie}= zjMED8+(-%uSZx__JE*^jq6gKTm^myg%>KQkMPD|#w40loWG@k7Lp;SKpHQw~>xjG~ zXsyo@+y~5_3+x)vN7qd)E$3&t(*>>5g6aFqugDQ5l$P$mG7q_n1053<7fDk+JC#gsYdl(Tz{9A0^E}&7_-{T-CS{=;2LDZ>gq@@ zyay!2rllT;;dp+vR_j>5d@LKY59rzB6Rz3Ua_(>f!kIR-Yvgdv<9EizK(cP)LzLBB zST#^7+rX-S1xiY6PvwQ3V7(6N`VI&>iz{El!^6juqN*lAxn23ibm+Xg?Ca|bkghU4 z<{)UV>XnXeJ%t)5yCGhrtEbrVz`jC4D5h@MTLC{2P+UzpPcxbG5%Tp1z3GtYusC=m zD6|nt9~KdzrJ*4df0S!`x%t=Kr!e!tBAInSS?NIYShG2-#j_;{ggp#5_oX>8PsaY)6k@ zX@#1E1%!=D#Oiw5_(Mbq;+|%2o6NCb}vQS4fB(xvSrknBOo&>=Jg*%K+Cg4=r{T9fnGbHtTE#g!wJQJtrF*%->k zR#u6v$3bi1yQ4r`96+PVrHjF_7YP|cIx)?!axH~BL$_oFvaBVbzunKdV|%m>V!|F@ z-1g0?lL!t$@yHSUfB)p2Ne7_gs?`629yT{OIcH@*$6midscvg3L^={vZ>m zUIE1ZR8w19TTLw&M09r=>8t68xzxHC85x>xME!JAj9%?ZiHC^Qq;ZCpvdx1Y8 zOh`*h1F_)n_`UcGARA<6Zgk2#{9`aMXpn*2BV@*2)&D9eC_rjI5I%8%2G8QXyM+8Hm&-Nm->urMETsMXTX&&LgX@8zIs zhc0QJ){B8m4Af^a`#}B-aw{(iLo~bz5>bj5@4$iruOuNM!CnrQUQ?4=+7#|#Zr+5j z!;X#)a6q10(}q$&GP6E^CT0c)lK;=nLa)rx5_~4yKl?S^m5aNLxENi+cmft2ekd#p zO<`t~+FX0o!yF}Wok42KM*DGBJ=~d&{0RDi3`!~d?>GBYIh_1|4`snjWbTqGxt)sN zNf@+M5llc3FtIB&bMy0Sgaj=949V;aK3Z6JT8#f$O>Cv=sgaZe z;`meOzsLI5$p1eKxdv^4fqgIKS%(l)JSnH9+(v$a@U>qP?;PvP0EnUe0Owk0JGJXL z*~!}C`Tu%LvPc1c!2RD^C)z7_`ZH`W)H7cobA7pM6TPMWN`8|Rmf{|QrOidQtQGBK zOxNR_0QQqX>PfcJoYon#N9ERd${-LDCX|#2Ba9u^7OE>`2-CH)T9M7`S!}CaD!2vS z1cETus6|CZ?L1>*V?BkV75B4=crSnzeEeu?YTDq$OqCC!Bk1Ae((3B!kdeXqlkjj& zEv?O!RKKfPpie?p&Ib)fG%ygkXnR3-*|{8QFXjgdfa+uAghyQ;=h)2uyN!tW4O!6C zO0o&Zq#m4*&NVzyBQ|42l8>u9`#Ck`;hm8T)MkK0mliB@)32vK%DtF7K0y}nk5l^} z?+a_DC!}%gxsIUmf>DtcP?@4FDQk8j4bp?`?0~D4RN{m{W~=Exo=ANS6=U_o^C?F9 zw=LZG`_0LfN(ve4z8tPR<2rvf!lAG{4~F=kOCqr448EBfGULP=Ja7m~e1@O%6| zmOVP2t$`tsI05vBTJbE!cBbJEGgH&0N)jP#!W2R|)>Egab8vByG6P%?87;VlhRh*I zH&AX6iolnD-O!$c3xHma^AycYQ@l7@e7v3gpH^utj$Y!#9}ocOqOh>gbml(KZ>PR6 z6~~Aly|S_b-~yZF163GV#=2k25a7VCLwXPqqMJUdCgsL`2CcC=Ud_ARQYB9S94i{h zYQgJ23*(6F4POXSv{sBsV6w+?%<_Ga-0B!d2!DjA>1eM~pLP}jUm@%#olo&l-g`j> zS4EKj-lF(-S0w^H6t(t#x^vQ6!uc1s^4y^U-2K=Sge7Yg(u$;(twsB(6ZqwvNSj(%%)x8AGw;N@K1|7)+F`*D_|P5d z+jcGOP}S)6PJ1Cg{*u%chekUlWIULP20RR`HBt|r9I8wQkR--wYk*43Glj!Mw6 zQke=(!Symyf4gQm_%n9l9;wb^+a`~P&MAdU(X|6{J7dJ$OJwb+3B5Nj1gTLCNq1O+ z8@3x^OGBb>3sPhrkYmh%%;@Q0KVxwM^~ zUFGqFc%Z0&u>Ht2v-D#Y@8Z8@OmPM&B`r10;PCKdDfpP= z2*MmS9(RSCgMmxfR|+~dT*Ts=|F{+WE7Km3|7)7$0w)#`+j9An!`%+X$h@|o&_fK0 z$pAMVK-u=SiyoQj>AO&3N+I0`h!)|z9XHrWD%VbVGftaD_ZDfDhwu`T%93u&OUhn6 z`fh;g-VN+farbT!Uk#8B$N%Caf#NY;JL9c;&P&l1v~TkMsznXO>>{cmQQjNCCXK!%SBoz;IMdu^6r z-^Q10$S$ec#VCnKsB#s@`wKH5n%rntNOKxM4j59Jo{y6A^X;KH$t3#mx0h_Ocl7mR z>C1O!(oLG*J%-9aF{tqOFt9d6!p?z5lGJ}hyW32nYT^qo5!KgiZF6LNG;a5-{etoa zxBlPY7bDPa?dp2w*ez0XlL<$b^)>B(b)k&nMRL!L&ElCbL$V&eQ;t^lf13_k?ivZc z$I3TS-hcI?L;4TM-KSO)6ciPqb~FhHpbZio{~bp9#EpCQ4Hh7Y6UJl9Xq=b65J2NW ztIO(SikA$OVaGu&6*2{E63Z`5r$!W5K&X_FvCye;rw7TldZnN=Si_h{FsB zOdj7(nG8W~9h95QITRpwM-kJC&*H?qfeP+X5R;G|h4ie-NC|yCy?vm@ThJjhH`p@q zoDt$TBl=m}WQ&U1=wN<_$Ic{({aamI(O;-Z9HB^;8{*)AX%H!gBNLm!BGld^FDvtRVwtHc>J`ok3acF zLmW_E5XEMpcIqyOX0{JNON079L6!ksFA6C#SzOE)=H0$?Mb+p0P^EG=f@nWV-Ha2c zim1Q8iYjfICGZm!RrPvmE863+e!Ei-6;rE!JSHjIC;knrEJkGnwvgr~2Wr^*i(U+=AUa zM~kmR#6@%n9#l&i3eV^=ji{g*HI2=Y`ZgY+TH@wva@p6x7g)GVhc466bkT-KiIKf{O#JGH z?*-rEnOVJWf|8LJE|)67>A@c{iQrHz7rpX(JiW^dq-IA<7=Cc8^4J=Y-Tj^7+-1VbxEhmVaJ5!q7_MBZne6eFU8?iy~oAMJZ`t z!0u!qFPwknp5XsEXF#j?{rbwXLx*mInx&PACTvwofDp^Tl~jT&@%|^S#Gh!;HM{)W z;p9H0^4MAbVEg(H+4%NXFOtd~91CG2%rej|Y;dc8?$X}f(*yP5uNgPuU2-U#PqNvZ zQ8;@Tx;U)LWItms#Ht)>7z|D>zPVUtAc zkJ*p%?--&&P$IW27s?xDDMV(SIW|pVL|RXoYH*8iduu8fr=nU#FIrLvkY|)+jj9u9$|R->^JeigKPj$3TaSI+4+6{>>5TS7*v^bK+!G=j1o>XMx=N{Nm8@YUSLM^d2g zPlxMRJ!brzkYEU#vsFcf?2!}=E6i)PfgRuT+gDniUsV?xJ0ffQW6040$6QL3pRqaE zH}Bk@<~#qZa%zu-_WZfV=+LBDgkJ0>tC_20h7#nKokcfN&ki5+%TOM>BB_oivMN8` zyGLbpCHW%`iQ+%48>JCt%_+WzuNg#pgx$`0U&lEi#p>sA@U|ukGcv9&lyl^(>yJ4n ziy9pJt>T_DIh5>`8B4tAJA*?d6&MP_cn19w8~b<_dXFT1oX+ee*o|o4D5^0`SNCk$ z1d%;DYny%ak^Bj)k^iyv`^52Y)sQR$WD%e)vok@)4*=8*l)?e$TICji@+G8_3+lH^ zpudEd48o@!6p)@IiBLX*u6u!^>rcK)JKC(yB2K{7h!W{p>!;j2rH>o+FN@L>MEqw zt>*c0);P#dV_)$fOOBvpp=_)i;!8aUuYdu>oR@w;V^}`)h}OLSbG=uQ#rXCCpzlE; z7W8gpjpi81K|vlwZ@Vs4IrbDJ$pWo%c@IiSC*$$$FDK&jYwVr$*`G~Ket5Ilk2ge9 zZ}P2Bmv`$amc_HRahbt1PaK45e~r94qJO_5V}o0A_oeEjbo3ZEgUhB}>#@}h=9`Ao zCVqTkQ|xA3{-4uvV)ja&@F(H(bE@Le3H)Uq%H>Lgcu4!J3G~doI>{m8IOhyP=^o_6 zgl9e`fup*31U(`oVY>bGCaoS-LSDeykh~6U41-ka)R5G`Z*Ta=P>zvHaikPl z4U0g@8BFxW6ntXZY)~_xSc_7M6;RzEv!DCe!RTvFZf>m}9Q&an4OR)}K)n&vz}Q;o ztG(+DPvyt_S)Pkty#3zozFKkjvJyL`RH})BJoA6F2FEO%m?W?SsCGXDZZT5fwh7uD z+(@qA;a}@1b@>&i_XhMv+@J19d4^9i1Dyvz7|Y`@e-?87R((TnG1QksVIW^{7UY1j zuUon-A903zdJ4g(00FfeEOfbz^f{Nad`fvm2Nq3-p4T1;iF{8N`MxQ_gHn2${KDs( zRaaC-GR;fzO!|FpHMYGGYE4vOo5fy%vp0N6ht9rAVtNPc#-8GlbTQNv`Z2m zv7x0{wIH2DN@+(L(6Xe!S13Y5GU{j3UW92{&L&FN6_+QyUDDzyel@x<3odM zZna%?$0^M_!i%ATV4u8nhpmlXDuQ_W%6noFf`7Sz9F>&6xfJwZECbnhh5YDSHQ>Am zac_$ikGP~$Xgi^hqOmwqK|sb>4mO2Q=`6^V1~7<*a~mA&LyacV77PHKodJv2VJUBw zi^#|EJpL)m?ZF8B1R&QKxXl+pKGqgexmD0v2<p-3G$^j1RifZOH* ztiK~P!9YK7mA~P^Z^Q6e+<{7k-?acJ@34@gXs8p4;xh?Qdj#nbsNwe0>a6Co$Dm=k z=4bUZ3 zRWG~tJqvHrQTVZ@s6QfOfIDc4R(>Sq#!_{rhzVlPIf!lezbzB}GKXjk+A8dk9tOy( zkBGN=LPtJQkxD>9w+1}q0V7o9nglY6Lz$EfgbgH8c@}rEcynC`ETqbdlW+V=Yv4(M z^7-8tVr?xpBRLxkrO|A0lp?cdPhC&VCWw)=?`iaDf0DO?Ynq~Q{%C`R#THsS^@x6N zt6Q3LK{{flM@u{)EI@q!6Xw76`Ji_xx;r`&b*e=f>?Ft>Fz5t`1W>GXW*5)9_+_q` z_1FgGvh&b=(&+$)zVwahyrOJVnGdbB_nAI@%A)8yavzhZ9QRgjy{K^`WN?pCXkRU* zZ;H%q9BO<}^G`nG=WDgN{BC(B)Q!){QDt{%VD@_;xdlD1&P`0vtsc;ctsH=_Q=QgE zd4RA1Cd{6Kv^^h6?nXjriL$Ot3lo9F884Y9)DO@=Jw6yPkOERT(g02Q2MJOUXruH1 zQGr5nF-0G8ZNN|L5B9drdp`GIMdq5Cy9x5qpI8_YQ9yyz)bFXhtw_oj#Y+1&vGK zX%fKM@z^PmMUqpqMv{M!Q@-4((Y=#zE&Z-0qap3gkbp;&%Qk;=2}b@nHOICm_3ft{ z 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±ZPxbb2dX#JAFKt7DS91uSQv1>1uMT1ezm+@f=Vt$J zO?!VuQ3$IhE{Pg^>8MZf8|?b@P%>w$J_BVfG~ZPDb{>srKjU*9#+oYNu*GA?^^OJIQ-{oJGz53b|+PFk&k^{Lt`DcL*;lNcv5)#?FWO! z)J|di+*XUie9W};Re7PMW!zhO$nKk^+Dp+gJGJ}YtuJ}Ux7du5A6JiUO8(HZOJCZO zDn#BdN{7Nc&BDc=w)NMyzx}(XBX6^oBa(F<<+JzqHbs${o$m=ef(cbsFi`7UAr!U) z6djij{)s=l79||U{K|9q$8>yZYHDU? zX8QTKs5uBlQ14Dxe1HekPP)3gcb2Ov=olFpQ4iC)c|`U{crBIJTX*F%v%z>qWn-h* z!q}xiPF9Hv=hy5tb#TkFx(6g>oj|~)Z#1;8K0A=(l+^I{sR~j$PB8x@&*Jp?P zCL4Q}(#2V%yKs}th7WG6Aj0#8CGfkt!4hzprSD&B_)jU!|KbOnb=|NSl??e#gS_kW zebC1u>%IZIcQN61k$k!{&hefV4P#PW^6xA!d3?V^IP8=cZ!g_mYG|ePU~DZ;Rv>z$ z{OS`*@%lyoUmpMO?GJf~e`)c^FaFK6|G#(-GL23NKY#v=i;FW1KIa5{KNliWIXT3q z)k6>{)K`B01L5q4X&$T6(orq={ZRI1dE<*;*T&t4a*QW{H7f1p%k7%WYO}}U?xPlv z3W*V#ZY^rc&hk`@G^p&#uLWwmC#{%dzcrtqJA?r(Md{r1VlluGevufYH79k(plB@XkbxiwEU z)ipFUbhl8VdV_tZzk!-vozZvH!dF&OvU2XHfbzYe+pflFVw+wI(H$JPBiGq}kqcd0 z_TO*3%cn*tlt^1k%P#0yPD3195tRzqsxsLI8%UNkgHIkyvGcxHYoO3+6z@7?e0>Jn zN*ZjQl@V53Qos@8lCC^W6y7QT03}9ybORDnY+XPfl%NkLo6T4QRqk^uR?Gl2PFUtq zu)ifVUn8?S;<|v&jV})G#e%`ZiIGiBP02Mn)qru{0^Hx5=-sWM^JuKt4)jqwy31|b z3_`ABt>^V}A;%ZML4e}EoV;zj)2ID3qva}wEs_~14s{TvoFAW`sWXC^>*v?6Ux_*p z5Ip7n7xVF(x*)r@(vnME%SR@@k62|zj*QD z_rB>T%OXh`1+3{TRM2lv085@E{9|45!Lu{X^ch1F+i;i7M?@buXx~Cv&ZuCrwkU`r zfR&g%6iwQa-xJ*<3=C-ZhOq1e%0m5Z6Kw<=1jlaVKIkPqFL92)lS_>~3s3###;Hfy zCsD8>*c>o^hguZ>AZO4#`7smkI7mMAeZjPj`BRnY78avJXNrJ{a}{4k9I=rZb^GjF*1JnC}Q7*V=OjPaSo=8&~($^+^B+S=nUHnKZv-%|D*1<2Xl z-0TZ-*V9jm*h_+-4(B-7+)e1_+g3-cIx;cXPUd;r(5(vcj*x;(-8zH$#RsMVBSk@J zusLVVJZ^*3bOYB5rOKw3`V-W`?xvn;4*iJN4IP8|IfI`4N7#RGDMedOfiyeVm}R`#7N0+|VH znCNZZ9wlTgn1!$w*Koq&gD7MEh4IVPTgJDM109SZt+7q3f-d}CHnLbl}3PXfz&=cR*U|@z0<$u`e3$0JM7WB zAbD3;SE1UNFwI2My?$syW)~MGb*Yg+=xt7r9a}N`qhdK&Gk?vi9_Cd{JN*ib;g6S# z`42%|6b%FTv`45a zGCSH}CseaRf62(mNO*zr_o^q@swb~%KkxIFNP2q)=gD71S$zN7_#gv!9?DvpBtlJ%9KYX<)2&gho&LU*Z7Y}R zOJb6UHeR%HZgO(Z9~6!;O0ztN_WH?VkdrVmnON*-mwGD$K}Wd-TkcS}In{}UCLfK$ zv?4k&mW|m!%zf&eQNBZWQX(-ybPS~6+f~I!DE)!*StsH~g*gN-sI=qr{2Wl*V_t8n z8k$^;T3u*o;5woCj8vxO%Q5~dC{)bA#9Zc*)`LZceS2QSmX$z}n*AO#YX$vigbBU{ zcp$@DrH!nW_VX-{Fu7x_YK)4#Y5S<&dc$L5c5o;xhy@^pnu$jcbUg#}da|S;ARwR_ z9T;CXaqK>LZ`oVab=0bA*E?+XgUN!1^j6{musifoM22_BOioTd&K+ z=)UtE2~YJBp!K7$+|NJT!vELtMURF*YbZU)_^7@8W676_O#@dEKw;~MA9x&_6*rC8 zB-f$+9Zs8Ia|z|0EqpJP2Ga1mZ6j^rFsGYqk5h>DHDt54!UL&^>@OEscu@*MT5XRK zKfxD6lQkDseQb18u;eM(g$pWQa1v+5T3A4zDj;G@MbE#YlBxuT?7{^oC)K0mOr$Ph zZok4u95;WunBPm1*3aQPz|pSH$FPC4fxwpJ;e?u@q4T89XlyG7FP7hiPu7G2ag52<(K@NRPI<~B+Oc2!q><(%n3p_C0_ zlI#(&c|j;Je*$ff@F^uhAo|=28-?T~r$$dvfWe8ei&R3RxctRdj_^70ud<5%HrJ=+PmnTF-%{5>dvBLKwnK-`@i^N)}xot26EeCNS zb6))l2}MNb&I@v$e4?L&btZMI5}}y9CTs@y)olF+bm5Q#Sja!*T5px8zIY?g6XmQ;bqtoCF_Rw>5wxh3Mk`N2K$2{%&a&H?s5GO$f#_w5 z`W)TpfDptJYVc}|q{qOy&Qz{-0SOW2HhJj0E!VMQED53dD({FV}B7tQ>o6<2-Q>*8HdOIN&(%{v+-sQSpn70A|PqxkEK9kh(~RwFQ%|OMn#3z z@9I0|iX#4%HIR5ggf!O?W{xbM(8vzlV4(Q1s{J({+m=ur@rmh96*KQhc!u8AAc-a{ zK^Q-gr?>O&F`?2(ghfo}!@M(y0EnA~>A9--lL$T1=DL>};fti^H;`s21X*p(q|*r+ z0DDigR(N$tud&NJGtmQ%+;OsNae{1fzTYR7`o4Y)-?J_e!$*g*UoKiBN>ah$@uaV>Zz)B?36suI-N{;rE(Qr?|FLM#L#o@2p+*_CA;LJ2Ze2@a zbE20^GB_v1hhk>=O0>stes*Xnpwftpw6^<|ou{+gZ?y4i@|@XGKd`E<#|=f|eb2|> z+$X;-R=Jr_fo>SzKF?-F^FkU>2Ol(Xk-E20igCD$6Otr7q#uR9hf*eq{T6xN61R;cu@)lGxy1hz4@#(# z{M-OKT~Jt~&D+_ZNKv5Kzhai#@9|B-cjA59!Eb6aS4aa;UrzXQ1g41g%^6!RZF+41+A^lWiY@R50y^6#vLHjEzy1wWILPOhWDvf9( zpsBO`u`pSI<5#Y3?YP}3lW5RRci~aE@*0OoPijo z813=VqDy#Mv6F@Z$nSFIMiv*qH`&7C>vo=5mXZ1e9|)1NGD$fKMPm~|cM>2pF0p~` z)~VQh(CvxG>Z|Bp5vUc}HvW=@j6g~!yDe0QbPn3$J48~ML1y}^Rl!F+e0DJ(Bh~B2 zG5$4jkJ4twp&)r}i*X(tz)}DGHnYn>{f&2`3Tea{A9nxCrFI z3rB>;`Vl%?`aXkU7wU+hM?!zmMFaVt$deJN_;(e@fb`W7e{zA9^i%*eTum2Q5-a!V z$oaEp&tl11FcG9Zf~1`=z|6~+-zc>}tdDLDYQ&x{ z2`ew=aoja{NrVSa1gw=pNe3JWE%#^mc`01PYBl+>FOG6(&MmYfDFAYBA(}n>FNtFX z`oxsjyKf}-w=fqkF%bSBtIZb*2 z(Jh{(6KT~l{~zaDJH1+^H2z7o%es}Y5np$i#1#0PD#d_Y;z@yBIxM+$<=$0JX? zzac>1`1-ZL(o_i;$dfjK06fH#e(ZTr5VHFMAb*E@DJVwxVG=VE-ZvxDge{weVc&-C zTS&W;9>__6B{^=9a8hHj=a=WeG4kWd04R;{_PJ>edhGR$Pfp%+fA$Ud+&w#^TwPpU zW8je53%p^+SrDMGw|U860>u7fLE6~e?5HDDe*DL)o3u96F3WR z{?3>9gbmZYRge?SK#;i&*bou0udLjSc0`gFnmvcRS)YHR{atv8ilBZpk6IS`oJg~H zs1-n*m{y^v7*1|%oO1}5n)ib8r30CxKb#>cidV7amp%y zvJ8>XjksBKH?WS5Wn0^76|SdN!oXpR9=XMkEulOB#b~rQ}@mgF8WNelT3a0Xu6+ECYpc z&Mx<0uz4Mkr_|;w#TiN??%tHZG(j}d1D$Q1z<&NOGfm zCch&pJH=>@2we0!?a}d(?pl?J5`8rS8126oeHQAsCa5+b;wGnlh0sk!*VBW+%(9=> z(jEiGbaHiNVP-}QeoW|&y;{j@gg(f;jx)yX{&@`B69HCKGSeU=mBuUR(-o|R)Bv8n z)u*0(B^Lq+=86RW3!*aeVd2>f6iId`l5bEd&58JU8-E`>x{gme)=K}jtk|6MRU()V z%rGNWFkl9#vXt-aG;1M5d`+w(q2p`^&qxAma?jw3{7W23Znc}F7V~2WXMorN)8qAs-1t)7p11UcefraMC2L@?8-n*&u^!4-*iZ0>Uc+w>M`@ z3^sn=QTpO*e^&h)EUX?w@QpMv=qyNuh5Zrz9ld_69{sv+axs8 zNr$^SBLWEvlAab`x`QLC-8KWC;Dc`Wpo236fJ_pY3DozxyEo(-YazOI3E~yNYM5f| zj8@5_QZ6!~Q_(Tb}DX33nh81 z*ysE0dt!{g6Cmgbz)Pfa=6lGkq3V=xDiX{Wl;yMzY}mulWe7HVC7<5mgfj*bUy>ATA6@IUUb(J?{kUR2F2 AR{#J2 literal 0 HcmV?d00001 diff --git a/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-68-1.png b/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-68-1.png new file mode 100644 index 0000000000000000000000000000000000000000..429ba5e5fef07f755112870595c2fbea5209ecdb GIT binary patch literal 71697 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 Dru2lw literal 0 HcmV?d00001 diff --git a/docs/search.json b/docs/search.json index 5382d97..af43198 100644 --- a/docs/search.json +++ b/docs/search.json @@ -16,7 +16,7 @@ "href": "course/05_GatingSets/index.html#flowframe", "title": "05 - Gating Sets", "section": "flowFrame", - "text": "flowFrame\nLet’s start off by recalling the approach we first saw during Week 03, where using the flowCore package we loaded the contents of our .fcs file into R as a “flowFrame” object.\nTo do this, we first identified the .fcs files we were interested using file.path() to specify the folder, and list.files() to find contents containing “.fcs”.\n\n# Folder <- file.path(\"course\", \"05_GatingSets\", \"data\") # For Testing\n\n Folder <- file.path(\"data\") # For Quarto Rendering\n\nfcs_files <- list.files(Folder, pattern=\".fcs\", full.names=TRUE)\n\nfcs_files\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n[2] \"data/2025_07_26_AB_02_INF052_00_SEB.fcs\" \n[3] \"data/2025_07_26_AB_02_INF100_00_Ctrl.fcs\"\n[4] \"data/2025_07_26_AB_02_INF100_00_SEB.fcs\" \n[5] \"data/2025_07_26_AB_02_INF179_00_Ctrl.fcs\"\n[6] \"data/2025_07_26_AB_02_INF179_00_SEB.fcs\" \n\n\nWe then identified an individual .fcs file of interest using the [] method of indexing.\n\nfcs_files[1]\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\n\nThen, after making sure flowCore was attached to our local environment (via the library() function), we could use read.FCS() to read in our .fcs files contents to R.\n\n# BiocManager::install(\"flowCore\") #Bioconductor\nlibrary(flowCore)\n\n\nflowFrame <- read.FCS(filename=fcs_files[1], truncate_max_range = FALSE, transformation = FALSE)\nflowFrame\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 896745 0 878.809\n$P2 SSC-W NA 4194304 0 4194303.000\n$P3 SSC-H NA 4194304 0 4194303.000\n$P4 SSC-A NA 4194304 0 4194303.000\n$P5 FSC-W NA 4194304 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4194304 -111 4192506\n$P40 Zombie NIR-A Viability 4194304 -111 4192506\n$P41 APC-Fire 750-A CD27 4194304 -111 4192506\n$P42 APC-Fire 810-A CCR7 4194304 -111 4192506\n$P43 AF-A NA 4194304 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\nAs we start to think about the wider infrastructural handling of our .fcs files, what would have occurred if we had provided multiple .fcs file paths to read.FCS()? Let’s go ahead and check by not providing an index number.\n\nread.FCS(filename=fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\nError in `read.FCS()`:\n! 'filename' must be character scalar\n\n\nAs you can tell, this error message is not particularly interpretable. It however arises from type of object we are passing to the function, whereby an individual file.path (fcs_files[1]) appears as class “character” with a single value (ie. a scalar), but the combined vector (fcs_files) contains multiple values.\n\nfcs_files[1]\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\nstr(fcs_files[1])\n\n chr \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\n\n\nfcs_files\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n[2] \"data/2025_07_26_AB_02_INF052_00_SEB.fcs\" \n[3] \"data/2025_07_26_AB_02_INF100_00_Ctrl.fcs\"\n[4] \"data/2025_07_26_AB_02_INF100_00_SEB.fcs\" \n[5] \"data/2025_07_26_AB_02_INF179_00_Ctrl.fcs\"\n[6] \"data/2025_07_26_AB_02_INF179_00_SEB.fcs\" \n\nstr(fcs_files)\n\n chr [1:6] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\" ...", + "text": "flowFrame\nLet’s start off by recalling the approach we first saw during Week 03, where using the flowCore package we loaded the contents of our .fcs file into R as a “flowFrame” object.\nTo do this, we first identified the .fcs files we were interested using file.path() to specify the folder, and list.files() to find contents containing “.fcs”.\n\n# Folder <- file.path(\"course\", \"05_GatingSets\", \"data\") # For Testing\n\n Folder <- file.path(\"data\") # For Quarto Rendering\n\nfcs_files <- list.files(Folder, pattern=\".fcs\", full.names=TRUE)\n\nfcs_files\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n[2] \"data/2025_07_26_AB_02_INF052_00_SEB.fcs\" \n[3] \"data/2025_07_26_AB_02_INF100_00_Ctrl.fcs\"\n[4] \"data/2025_07_26_AB_02_INF100_00_SEB.fcs\" \n[5] \"data/2025_07_26_AB_02_INF179_00_Ctrl.fcs\"\n[6] \"data/2025_07_26_AB_02_INF179_00_SEB.fcs\" \n\n\nWe then identified an individual .fcs file of interest using the [] method of indexing.\n\nfcs_files[1]\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\n\nThen, after making sure flowCore was attached to our local environment (via the library() function), we could use read.FCS() to read in our .fcs files contents to R.\n\n# BiocManager::install(\"flowCore\") #Bioconductor\nlibrary(flowCore)\n\n\nflowFrame <- read.FCS(filename=fcs_files[1], truncate_max_range = FALSE,\n transformation = FALSE)\nflowFrame\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 896745 0 878.809\n$P2 SSC-W NA 4194304 0 4194303.000\n$P3 SSC-H NA 4194304 0 4194303.000\n$P4 SSC-A NA 4194304 0 4194303.000\n$P5 FSC-W NA 4194304 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4194304 -111 4192506\n$P40 Zombie NIR-A Viability 4194304 -111 4192506\n$P41 APC-Fire 750-A CD27 4194304 -111 4192506\n$P42 APC-Fire 810-A CCR7 4194304 -111 4192506\n$P43 AF-A NA 4194304 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\nAs we start to think about the wider infrastructural handling of our .fcs files, what would have occurred if we had provided multiple .fcs file paths to read.FCS()? Let’s go ahead and check by not providing an index number.\n\nread.FCS(filename=fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\nError in `read.FCS()`:\n! 'filename' must be character scalar\n\n\nAs you can tell, this error message is not particularly interpretable. It however arises from type of object we are passing to the function, whereby an individual file.path (fcs_files[1]) appears as class “character” with a single value (ie. a scalar), but the combined vector (fcs_files) contains multiple values.\n\nfcs_files[1]\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\nstr(fcs_files[1])\n\n chr \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\n\n\nfcs_files\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n[2] \"data/2025_07_26_AB_02_INF052_00_SEB.fcs\" \n[3] \"data/2025_07_26_AB_02_INF100_00_Ctrl.fcs\"\n[4] \"data/2025_07_26_AB_02_INF100_00_SEB.fcs\" \n[5] \"data/2025_07_26_AB_02_INF179_00_Ctrl.fcs\"\n[6] \"data/2025_07_26_AB_02_INF179_00_SEB.fcs\" \n\nstr(fcs_files)\n\n chr [1:6] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\" ...", "crumbs": [ "About", "Intro to R", @@ -28,7 +28,7 @@ "href": "course/05_GatingSets/index.html#flowset", "title": "05 - Gating Sets", "section": "flowSet", - "text": "flowSet\nConsequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.\n\nflowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE, transformation = FALSE)\nflowSet\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nAlternatively, we can designate specific files within “fcs_files” we want to read in using the [] and c() notation style we have encountered previously.\n\nread.flowSet(files=fcs_files[c(1, 3:4)], truncate_max_range = FALSE, transformation = FALSE)\n\nA flowSet with 3 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nOn follow-up, we can see that read.flowSet() has created a “flowSet” class object.\n\nclass(flowSet)\n\n[1] \"flowSet\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nWhich we can also confirm by glancing at the right secondary sidebar to see the created Variables within our environment. Applying our investigatory skills from Week 3, we surmise that “flowSet” is another Bioconductor style S4-type object that within its frame slot contains individual “flowFrames”.\n\nIf instead of class() we had used str(), we would have seen a similar output ton what we see in the Variables panel.\n\nstr(flowSet)\n\nFormal class 'flowSet' [package \"flowCore\"] with 2 slots\n ..@ frames :<environment: 0x55d40ab8dbe8> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 1 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr \"Name\"\n .. .. ..@ data :'data.frame': 6 obs. of 1 variable:\n .. .. .. ..$ name: 'AsIs' chr [1:6] \"2025_07_26_AB_02_INF052_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF052_00_SEB.fcs\" \"2025_07_26_AB_02_INF100_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF100_00_SEB.fcs\" ...\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWhile not today’s focus, remember we could access individual components inside the flowSet using the @ accessors covered during Week 3", + "text": "flowSet\nConsequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.\n\nflowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,\n transformation = FALSE)\nflowSet\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nAlternatively, we can designate specific files within “fcs_files” we want to read in using the [] and c() notation style we have encountered previously.\n\nread.flowSet(files=fcs_files[c(1, 3:4)],\n truncate_max_range = FALSE, transformation = FALSE)\n\nA flowSet with 3 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nOn follow-up, we can see that read.flowSet() has created a “flowSet” class object.\n\nclass(flowSet)\n\n[1] \"flowSet\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nWhich we can also confirm by glancing at the right secondary sidebar to see the created Variables within our environment. Applying our investigatory skills from Week 3, we surmise that “flowSet” is another Bioconductor style S4-type object that within its frame slot contains individual “flowFrames”.\n\nIf instead of class() we had used str(), we would have seen a similar output ton what we see in the Variables panel.\n\nstr(flowSet)\n\nFormal class 'flowSet' [package \"flowCore\"] with 2 slots\n ..@ frames :<environment: 0x562242979388> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 1 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr \"Name\"\n .. .. ..@ data :'data.frame': 6 obs. of 1 variable:\n .. .. .. ..$ name: 'AsIs' chr [1:6] \"2025_07_26_AB_02_INF052_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF052_00_SEB.fcs\" \"2025_07_26_AB_02_INF100_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF100_00_SEB.fcs\" ...\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWhile not today’s focus, remember we could access individual components inside the flowSet using the @ accessors covered during Week 3", "crumbs": [ "About", "Intro to R", @@ -64,7 +64,7 @@ "href": "course/05_GatingSets/index.html#cytoset", "title": "05 - Gating Sets", "section": "cytoset", - "text": "cytoset\nAs well as “cytoset” to handle multiple .fcs files.\n\ncytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\ncytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nclass(cytoset)\n\n[1] \"cytoset\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nUnlike “flowFrame” and “flowSet”, when we run str(), for “cytoframe” and “cytoset” objects we don’t get back quite as much information.\n\nstr(cytoframe)\n\nFormal class 'cytoframe' [package \"flowWorkspace\"] with 5 slots\n ..@ pointer :<externalptr> \n ..@ use.exprs : logi TRUE\n ..@ exprs : num[0 , 0 ] \n ..@ parameters :Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 5 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr [1:5] \"Name of Parameter\" \"Description of Parameter\" \"Range of Parameter\" \"Minimum Parameter Value after Transformation\" ...\n .. .. ..@ data :'data.frame': 0 obs. of 5 variables:\n .. .. .. ..$ name : chr(0) \n .. .. .. ..$ description: chr(0) \n .. .. .. ..$ range : num(0) \n .. .. .. ..$ minRange : num(0) \n .. .. .. ..$ maxRange : num(0) \n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n ..@ description:List of 1\n .. ..$ note: chr \"empty\"\n\n\n\nstr(cytoset)\n\nFormal class 'cytoset' [package \"flowWorkspace\"] with 3 slots\n ..@ pointer :<externalptr> \n ..@ frames :<environment: 0x55d414e7fdf0> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 0 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr(0) \n .. .. ..@ data :'data.frame': 0 obs. of 0 variables\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\nThis is similarly the case when glancing at the right secondary side bar, as the respective objects under variables appear to have empty matrices where normally we would have seen the MFI values.\n\nDue to flowWorkspace use of pointers, the missing data remains stored on the drive, only being retrieved right before it is required. This reduces the overall RAM utilization. Let’s double check the differences in memory utilization for flowFrame/cytoframe:\n\nobj_size(flowFrame)\n\n3.53 MB\n\n\n\nobj_size(cytoframe)\n\n5.40 kB\n\n\nAnd similarly the case for flowSet and cytoset:\n\nobj_size(flowSet)\n\n20.99 MB\n\n\n\nobj_size(cytoset)\n\n3.88 kB\n\n\nAdditionally, with computer hardware increasingly switching from spinning disk hard-drives to faster solid state drives, the performance penalty previously experienced when not running from RAM is not as large of a concern as in previous years.", + "text": "cytoset\nAs well as “cytoset” to handle multiple .fcs files.\n\ncytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\ncytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nclass(cytoset)\n\n[1] \"cytoset\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nUnlike “flowFrame” and “flowSet”, when we run str(), for “cytoframe” and “cytoset” objects we don’t get back quite as much information.\n\nstr(cytoframe)\n\nFormal class 'cytoframe' [package \"flowWorkspace\"] with 5 slots\n ..@ pointer :<externalptr> \n ..@ use.exprs : logi TRUE\n ..@ exprs : num[0 , 0 ] \n ..@ parameters :Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 5 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr [1:5] \"Name of Parameter\" \"Description of Parameter\" \"Range of Parameter\" \"Minimum Parameter Value after Transformation\" ...\n .. .. ..@ data :'data.frame': 0 obs. of 5 variables:\n .. .. .. ..$ name : chr(0) \n .. .. .. ..$ description: chr(0) \n .. .. .. ..$ range : num(0) \n .. .. .. ..$ minRange : num(0) \n .. .. .. ..$ maxRange : num(0) \n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n ..@ description:List of 1\n .. ..$ note: chr \"empty\"\n\n\n\nstr(cytoset)\n\nFormal class 'cytoset' [package \"flowWorkspace\"] with 3 slots\n ..@ pointer :<externalptr> \n ..@ frames :<environment: 0x56224cc6eed0> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 0 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr(0) \n .. .. ..@ data :'data.frame': 0 obs. of 0 variables\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\nThis is similarly the case when glancing at the right secondary side bar, as the respective objects under variables appear to have empty matrices where normally we would have seen the MFI values.\n\nDue to flowWorkspace use of pointers, the missing data remains stored on the drive, only being retrieved right before it is required. This reduces the overall RAM utilization. Let’s double check the differences in memory utilization for flowFrame/cytoframe:\n\nobj_size(flowFrame)\n\n3.53 MB\n\n\n\nobj_size(cytoframe)\n\n5.40 kB\n\n\nAnd similarly the case for flowSet and cytoset:\n\nobj_size(flowSet)\n\n20.99 MB\n\n\n\nobj_size(cytoset)\n\n3.88 kB\n\n\nAdditionally, with computer hardware increasingly switching from spinning disk hard-drives to faster solid state drives, the performance penalty previously experienced when not running from RAM is not as large of a concern as in previous years.", "crumbs": [ "About", "Intro to R", @@ -76,7 +76,7 @@ "href": "course/05_GatingSets/index.html#interconverting", "title": "05 - Gating Sets", "section": "Interconverting", - "text": "Interconverting\nDespite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed.\nTo go from a flowFrame to a cytoframe, we can use the flowFrame_to_cytoframe() function\n\nConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)\nConvertedToCytoframe\n\ncytoframe object 'file806b23cd6a2e'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\nrow names(0):\n\n\n\nobj_size(ConvertedToCytoframe)\n\n5.40 kB\n\n\nTo go from a cytoframe to a flowFrame, we can use the cytoframe_to_flowFrame() function\n\nConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)\nConvertedToFlowframe\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\n\nobj_size(ConvertedToFlowframe)\n\n3.53 MB\n\n\nTo go from a flowSet to a cytoSet, we can use the flowSet_to_cytoset() funciton\n\nConvertedToCytoset <- flowSet_to_cytoset(flowSet)\nConvertedToCytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nobj_size(ConvertedToCytoset)\n\n3.88 kB\n\n\nTo go from a cytoSet to a flowSet, we can use the cytoset_to_flowSet() function.\n\nConvertedToFlowset <- cytoset_to_flowSet(flowSet)\nConvertedToFlowset\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\n\nobj_size(ConvertedToFlowset)\n\n20.99 MB", + "text": "Interconverting\nDespite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed.\nTo go from a flowFrame to a cytoframe, we can use the flowFrame_to_cytoframe() function\n\nConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)\nConvertedToCytoframe\n\ncytoframe object 'file5caf7fc9092c'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\nrow names(0):\n\n\n\nobj_size(ConvertedToCytoframe)\n\n5.40 kB\n\n\nTo go from a cytoframe to a flowFrame, we can use the cytoframe_to_flowFrame() function\n\nConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)\nConvertedToFlowframe\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\n\nobj_size(ConvertedToFlowframe)\n\n3.53 MB\n\n\nTo go from a flowSet to a cytoSet, we can use the flowSet_to_cytoset() funciton\n\nConvertedToCytoset <- flowSet_to_cytoset(flowSet)\nConvertedToCytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nobj_size(ConvertedToCytoset)\n\n3.88 kB\n\n\nTo go from a cytoSet to a flowSet, we can use the cytoset_to_flowSet() function.\n\nConvertedToFlowset <- cytoset_to_flowSet(flowSet)\nConvertedToFlowset\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\n\nobj_size(ConvertedToFlowset)\n\n20.99 MB", "crumbs": [ "About", "Intro to R", @@ -112,7 +112,7 @@ "href": "course/05_GatingSets/index.html#system-time", "title": "05 - Gating Sets", "section": "System Time", - "text": "System Time\nEspecially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so.\nOne, using the system.time() function from base R, in which we surround whatever line of code we wish to evaluate in {}\n\nsystem.time({\n\nflowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\")\n\n})\n\n user system elapsed \n 0.501 0.008 0.509 \n\n\nAlternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.\n\n# install.packages(\"bench\") # CRAN\nlibrary(bench)\n\n\nmark(\n Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\"),\n iterations= 5\n )\n\n# A tibble: 1 × 6\n expression min median `itr/sec` mem_alloc `gc/sec`\n <bch:expr> <bch> <bch:> <dbl> <bch:byt> <dbl>\n1 Test <- flowjo_to_gatingset(ws = ws… 505ms 527ms 1.92 13.3KB 0", + "text": "System Time\nEspecially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so.\nOne, using the system.time() function from base R, in which we surround whatever line of code we wish to evaluate in {}\n\nsystem.time({\n\nflowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\")\n\n})\n\n user system elapsed \n 0.491 0.016 0.507 \n\n\nAlternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.\n\n# install.packages(\"bench\") # CRAN\nlibrary(bench)\n\n\nmark(\n Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\"),\n iterations= 5\n )\n\n# A tibble: 1 × 6\n expression min median `itr/sec` mem_alloc `gc/sec`\n <bch:expr> <bch> <bch:> <dbl> <bch:byt> <dbl>\n1 Test <- flowjo_to_gatingset(ws = ws… 497ms 511ms 1.97 13.3KB 0", "crumbs": [ "About", "Intro to R", @@ -180,1131 +180,958 @@ ] }, { - "objectID": "course/04_IntroToTidyverse/index.html", - "href": "course/04_IntroToTidyverse/index.html", - "title": "04 - Introduction to Tidyverse", + "objectID": "course/05_GatingSets/slides.html#flowframe", + "href": "course/05_GatingSets/slides.html#flowframe", + "title": "05 - Gating Sets", + "section": "flowFrame", + "text": "flowFrame\n\n\n\n\n\n\n\n\n.\n\n\nLet’s start off by recalling the approach we first saw during Week 03, where using the flowCore package we loaded the contents of our .fcs file into R as a “flowFrame” object." + }, + { + "objectID": "course/05_GatingSets/slides.html#flowset", + "href": "course/05_GatingSets/slides.html#flowset", + "title": "05 - Gating Sets", + "section": "flowSet", + "text": "flowSet\n\n\n\n\n\n\n\n\n.\n\n\nConsequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.\n\n\n\n\n\n\n\nflowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,\n transformation = FALSE)\nflowSet\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A" + }, + { + "objectID": "course/05_GatingSets/slides.html#memory-usage", + "href": "course/05_GatingSets/slides.html#memory-usage", + "title": "05 - Gating Sets", + "section": "Memory Usage", + "text": "Memory Usage\n\n\n\n\n\n\n\n\n.\n\n\nBoth “flowFrame” and “flowSet” objects were implemented in the flowCore package, which is the oldest extant flow cytometry R package on Bioconductor. Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as “flowFrame” and “flowSet” objects.\n\n\n\n\n\n\n\n\n\n\n\n\n\n.\n\n\nOne consideration of this method is the contents of your .fcs files are read into your computer’s random access memory (RAM). While for individual .fcs files or small experiments this present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM." + }, + { + "objectID": "course/05_GatingSets/slides.html#cytoframe", + "href": "course/05_GatingSets/slides.html#cytoframe", + "title": "05 - Gating Sets", + "section": "cytoframe", + "text": "cytoframe\n\n\n\n\n\n\n\n\n.\n\n\nIn addition to the flowCore R package, additional flow cytometry infrastructure support is provided by the flowWorkspace package. Instead of the reading all the .fcs files contents into active RAM, flowWorkspace reduces the memory overhead by using “pointers” to interact with the object in it’s current storage location (either on your harddrive, SSD, etc.), only reading in components to RAM as needed.\n\n\n\n\n\n\n\n# BiocManager::install(\"flowWorkspace\") #Bioconductor\nlibrary(flowWorkspace)" + }, + { + "objectID": "course/05_GatingSets/slides.html#cytoset", + "href": "course/05_GatingSets/slides.html#cytoset", + "title": "05 - Gating Sets", + "section": "cytoset", + "text": "cytoset\n\n\n\n\n\n\n\n\n.\n\n\nAs well as “cytoset” to handle multiple .fcs files.\n\n\n\n\n\n\n\ncytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\ncytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\n\n\nclass(cytoset)\n\n[1] \"cytoset\"\nattr(,\"package\")\n[1] \"flowWorkspace\"" + }, + { + "objectID": "course/05_GatingSets/slides.html#interconverting", + "href": "course/05_GatingSets/slides.html#interconverting", + "title": "05 - Gating Sets", + "section": "Interconverting", + "text": "Interconverting\n\n\n\n\n\n\n\n\n.\n\n\nDespite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed." + }, + { + "objectID": "course/05_GatingSets/slides.html#gating-sets", + "href": "course/05_GatingSets/slides.html#gating-sets", + "title": "05 - Gating Sets", + "section": "Gating Sets", + "text": "Gating Sets\n\n\n\n\n\n\n\n\n.\n\n\nFortunately, regardless of whether we are using flowFrame/flowSet (RAM) and cytoframe/cytoset (memory pointers), both routes end up converging at the next step, where the underlying .fcs files are passed off to the GatingSet() function.\n\n\n\n\n\n\n\nGatingSet1 <- GatingSet(flowSet)\nGatingSet1 \n\nA GatingSet with 6 samples\n\n\n\n\n\nclass(GatingSet1)\n\n[1] \"GatingSet\"\nattr(,\"package\")\n[1] \"flowWorkspace\"" + }, + { + "objectID": "course/05_GatingSets/slides.html#cytoml", + "href": "course/05_GatingSets/slides.html#cytoml", + "title": "05 - Gating Sets", + "section": "CytoML", + "text": "CytoML\n\n\n\n\n\n\n\n\n.\n\n\nThe CytoML R package (also maintained by Mike Jiang) is a sister package to the flowWorkspace. It’s main purpose is to permit bringing in existing FlowJo, Diva and Cytobank Workspaces, with all their gates, transformations, etc. into R as fully assembled GatingSet objects. For those who already use one of these commercial softwares, it can be quite useful tool.\n\n\n\n\n\n\n\n\n\n\n\n\n\n.\n\n\nSince our goal is to examine a fully assembled GatingSet object, we will be using it today to bring in a FlowJo workspace to R. However, since this is a free Cytometry in R course, and not about to have everyone pay for a license for a one-off topic, in the pre-course Floreada walkthrough I documented how to convert a free Floreada.io workspae into a FlowJo.wsp that can also be used (please note that as of early 2026, some scaling bugs may be present and require troubleshooting)." + }, + { + "objectID": "course/05_GatingSets/slides.html#system-time", + "href": "course/05_GatingSets/slides.html#system-time", + "title": "05 - Gating Sets", + "section": "System Time", + "text": "System Time\n\n\n\n\n\n\n\n\n.\n\n\nEspecially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so." + }, + { + "objectID": "course/05_GatingSets/slides.html#gates", + "href": "course/05_GatingSets/slides.html#gates", + "title": "05 - Gating Sets", + "section": "Gates", + "text": "Gates\n\n\n\n\n\n\n\n\n.\n\n\nNow that we have loaded the contents of the FlowJo/Floreada workspace, we can start exploring the various infrastructural capabilities of a GatingSet object." + }, + { + "objectID": "course/05_GatingSets/slides.html#counts", + "href": "course/05_GatingSets/slides.html#counts", + "title": "05 - Gating Sets", + "section": "Counts", + "text": "Counts\n\n\n\n\n\n\n\n\n.\n\n\nIf we wanted to retrieve counts of cells found within the individual gates, we could do so with gs_pop_get_count_fast()\n\n\n\n\n\n\n\nData <- gs_pop_get_count_fast(gs)\nhead(Data, 5)\n\n name Population\n <char> <char>\n1: 00_Ctrl.fcs_INF052 /Scatter\n2: 00_Ctrl.fcs_INF052 /Scatter/Singlets\n3: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live\n4: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live/Tcells\n5: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live/Tcells/CD4+\n Parent Count ParentCount\n <char> <int> <int>\n1: root 10000 10000\n2: /Scatter 9986 10000\n3: /Scatter/Singlets 9708 9986\n4: /Scatter/Singlets/Live 9708 9708\n5: /Scatter/Singlets/Live/Tcells 6151 9708" + }, + { + "objectID": "course/05_GatingSets/slides.html#metadata", + "href": "course/05_GatingSets/slides.html#metadata", + "title": "05 - Gating Sets", + "section": "Metadata", + "text": "Metadata\n\n\n\n\n\n\n\n\n.\n\n\nSince GatingSets contain multiple .fcs files, we may want to be able to subset them based on metadata for a particular variable. We can check to see current metadata using the pData() function.\n\n\n\n\n\n\n\npData(gs)\n\n name\n00_Ctrl.fcs_INF052 00_Ctrl.fcs\n00_Ctrl.fcs_INF100 00_Ctrl.fcs\n00_Ctrl.fcs_INF179 00_Ctrl.fcs\n00_SEB.fcs_INF052 00_SEB.fcs\n00_SEB.fcs_INF100 00_SEB.fcs\n00_SEB.fcs_INF179 00_SEB.fcs" + }, + { + "objectID": "course/05_GatingSets/slides.html#ggcyto", + "href": "course/05_GatingSets/slides.html#ggcyto", + "title": "05 - Gating Sets", + "section": "ggcyto", + "text": "ggcyto\n\n\n\n\n\n\n\n\n.\n\n\nAs you can surmise, a lot of the infrastructural style handling done by commercial softwares is being orchestrated/mediated through our GatingSet object. Since it’s able to create and retain gating information, how would we go about visualizing the underlying data contained within each?" + }, + { + "objectID": "course/05_GatingSets/slides.html#plotting", + "href": "course/05_GatingSets/slides.html#plotting", + "title": "05 - Gating Sets", + "section": "Plotting", + "text": "Plotting\n\n\n\n\n\n\n\n\n.\n\n\nOnce you have the current versions of both ggplot2 and ggcyto, we can proceed to attach them to your local environment via the library() function.\n\n\n\n\n\n\n\nlibrary(ggplot2)\nlibrary(ggcyto)" + }, + { + "objectID": "course/04_IntroToTidyverse/BonusContent.html", + "href": "course/04_IntroToTidyverse/BonusContent.html", + "title": "Bonus Content", + "section": "", + "text": "thefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"\nData <- read.csv(file=thefilepath, check.names=FALSE)\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\"" + }, + { + "objectID": "course/04_IntroToTidyverse/BonusContent.html#pull", + "href": "course/04_IntroToTidyverse/BonusContent.html#pull", + "title": "Bonus Content", + "section": "Pull", + "text": "Pull" + }, + { + "objectID": "course/04_IntroToTidyverse/BonusContent.html#case-when", + "href": "course/04_IntroToTidyverse/BonusContent.html#case-when", + "title": "Bonus Content", + "section": "Case-When", + "text": "Case-When\nCase-when is an useful function, but may be a bit much to try to teach in the main segment. Basically, when the condition on the left side of the ~ is fulfilled, it will execute what is being specified on the right hand side.\nIn turn, we can combine these together by adding a “,”. I tend to use this mutate str_detect case_when combination when encountering messy data out in the while where I need to selectively change particular cell values in a consistent reproducible manner" + }, + { + "objectID": "course/04_IntroToTidyverse/BonusContent.html#selecting-columns-base-r", + "href": "course/04_IntroToTidyverse/BonusContent.html#selecting-columns-base-r", + "title": "Bonus Content", + "section": "Selecting Columns (Base R)", + "text": "Selecting Columns (Base R)\nAs we saw last week, there are multiple ways to select values from particular columns in base R. If we had wanted to retrieve the “Date” column, why not first identify its index position, and use [,] to extract the underlying data?\n\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\n\ncolnames(Data)[4]\n\n[1] \"Date\"\n\n\n\nDataColumn <- Data[,4] # Column specified after the ,\nDataColumn\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [11] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [16] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [21] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [26] \"2025-07-26\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [31] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [36] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [41] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [46] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-31\" \"2025-07-31\"\n [51] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [56] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [61] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [66] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [71] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [76] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [81] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [86] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [91] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [96] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-07\" \"2025-08-07\"\n[101] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[106] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[111] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[116] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[121] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-22\"\n[126] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[131] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[136] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[141] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[146] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[151] \"2025-08-22\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[156] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[161] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[166] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[171] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[176] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-30\" \"2025-08-30\"\n[181] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[186] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[191] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[196] \"2025-08-30\"\n\n\nHowever, looking at the output, we see this looks like the values, not a column. Our suspicions are confirmed when running DataColumn\n\nstr(DataColumn)\n\n chr [1:196] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n\n\nThis is similarly the case when we use the $ accessor.\n\nDataColumn <- Data$Date\nstr(DataColumn)\n\n chr [1:196] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n\n\n\nhead(DataColumn, 3)\n\n[1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nBy contrast, when selecting two columns, the structure is maintained.\n\nTwoColumns <- Data[,4:5]\n\nWhy is the data.frame column structure lost in base R when isolating a single data.frame column? And who thought to make it that convoluted? If we were an R course in early 2010s, we might go into an explanation, but fortunately, we don’t need to understand why, we have the dplyr R package to rescue us." + }, + { + "objectID": "course/03_InsideFCSFile/index.html", + "href": "course/03_InsideFCSFile/index.html", + "title": "03 - Inside an FCS File", "section": "", "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#read.csv", - "href": "course/04_IntroToTidyverse/index.html#read.csv", - "title": "04 - Introduction to Tidyverse", - "section": "read.csv", - "text": "read.csv\nWe will start by first loading in our copied over dataset (Dataset.csv) from it’s location in the project folder. If you are following the organization scheme we have been using throughout the course, your file path will look something like this:\n\nthefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWe encourage using the file.path function to build our file paths, as this keeps our code reproducible and replicable when a project folder is copied to other people’s computers that differ on whether the operating system uses forward or backward slash separation between folders.\n\n\nAbove, we directly specified the name (Dataset) and filetype (.csv) of the file we wanted in the last argument of the file.path (“Dataset.csv”). This allows us to skip the list.files() step we used last week as we have provided the full file path. While this approach can be faster, if we accidentally mistype the file name, we could end up with an error at the next step due to no files being found with the mistyped name.\nSince our dataset is stored as a .csv file, we will be using the read.csv() function from the utils package (included in our base R software installation) to read it into R. We will also use the colnames() function from last week to get a read-out of the column names.\n\nData <- read.csv(file=thefilepath, check.names=FALSE)\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\nAs we look at the line of code, we now have enough context to decipher that the “file” argument is where we provide a file path to an individual file, but what does the “check.names” argument do?\nLet’s see what happens to the column names when we set “check.names” argument to TRUE:\n\nData_Alternative <- read.csv(thefilepath, check.names=TRUE)\ncolnames(Data_Alternative)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump.\" \"Dump..1\" \"Tcells\" \n[19] \"Vd2.\" \"Vd2..1\" \"Va7.2.\" \n[22] \"Va7.2..1\" \"CD4.\" \"CD4..1\" \n[25] \"CD8.\" \"CD8..1\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\nAs we can see, any column name that contained a special character or a space was automatically converted over to R-approved syntax. However, this resulted in the loss of both +” and “-”, leaving us unable to determine whether we are looking at cells within or outside a particular gate.\n\nBecause of this, it is often better to rename columns individually after import, which we will learn how to do later today.\nFollowing up with what we practiced last week, lets use the head() function to visualize the first few rows of data.\n\nhead(Data, 3)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 Ctrl 2025-07-26 Male HEU-hi 2098368 1894070\n2 INF0100 0 Ctrl 2025-07-26 Male HEU-lo 2020184 1791890\n3 INF0100 4 Ctrl 2025-07-26 Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n\nWhen working in Positron, we could have alternatively clicked on the little grid icon next to our created variable “Data” in the right secondary sidebar, which would have opened the data in our Editor window. From this same window, we can see it is stored as a “data.frame” object type.\n\nWe could also achieve the same window to open using the View() function:\n\nView(Data)\n\nWrapping up our brief recap of last week functions, we can check an objects type using both the class() and str() functions.\n\nclass(Data)\n\n[1] \"data.frame\"\n\n\n\nstr(Data)\n\n'data.frame': 196 obs. of 31 variables:\n $ bid : chr \"INF0052\" \"INF0100\" \"INF0100\" \"INF0100\" ...\n $ timepoint : int 0 0 4 9 0 4 9 4 9 0 ...\n $ Condition : chr \"Ctrl\" \"Ctrl\" \"Ctrl\" \"Ctrl\" ...\n $ Date : chr \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n $ infant_sex : chr \"Male\" \"Male\" \"Male\" \"Male\" ...\n $ ptype : chr \"HEU-hi\" \"HEU-lo\" \"HEU-lo\" \"HEU-lo\" ...\n $ root : int 2098368 2020184 1155040 358624 1362216 1044808 1434840 972056 1521928 2363512 ...\n $ singletsFSC : int 1894070 1791890 1033320 328624 1206309 917398 1265022 875707 1359574 2136616 ...\n $ singletsSSC : int 1666179 1697083 875465 289327 1032946 735579 988445 767323 1175755 1875394 ...\n $ singletsSSCB : int 1537396 1579098 845446 276289 982736 685592 940454 718000 1097478 1732620 ...\n $ CD45 : num 0.595 0.911 0.971 0.982 0.957 ...\n $ NotMonocytes : num 0.882 0.905 0.985 0.986 0.956 ...\n $ nonDebris : num 0.863 0.86 0.958 0.941 0.841 ...\n $ lymphocytes : num 0.642 0.215 0.74 0.651 0.705 ...\n $ live : num 0.902 0.891 0.876 0.915 0.895 ...\n $ Dump+ : num 0.2109 0.0625 0.2002 0.2147 0.3383 ...\n $ Dump- : num 0.691 0.828 0.676 0.701 0.557 ...\n $ Tcells : num 0.28 0.675 0.612 0.631 0.44 ...\n $ Vd2+ : num 0.00812 0.00727 0.00465 0.01135 0.00475 ...\n $ Vd2- : num 0.992 0.993 0.995 0.989 0.995 ...\n $ Va7.2+ : num 0.0145 0.0158 0.0158 0.017 0.0133 ...\n $ Va7.2- : num 0.977 0.977 0.98 0.972 0.982 ...\n $ CD4+ : num 0.634 0.612 0.664 0.438 0.739 ...\n $ CD4- : num 0.343 0.365 0.316 0.534 0.243 ...\n $ CD8+ : num 0.273 0.336 0.286 0.486 0.195 ...\n $ CD8- : num 0.0698 0.0293 0.0294 0.0476 0.0476 ...\n $ Tcells_count : int 164771 208241 371723 111552 291777 271870 487937 220634 415867 184930 ...\n $ lymphocytes_count: int 587573 308583 607477 176662 663667 510730 726238 451047 710964 652155 ...\n $ Monocytes : num 0.118 0.0948 0.0155 0.0145 0.0444 ...\n $ Debris : num 0.1372 0.1397 0.0421 0.0587 0.1592 ...\n $ CD45_count : int 915203 1438047 820570 271304 940733 675857 921660 701657 1066884 1017713 ...", + "objectID": "course/03_InsideFCSFile/index.html#getting-set-up", + "href": "course/03_InsideFCSFile/index.html#getting-set-up", + "title": "03 - Inside an FCS File", + "section": "Getting Set Up", + "text": "Getting Set Up\n\n\nSet up File Paths\nHaving copied over the new data to your working project folder (Week 3 or whatever your chosen name), let’s identify the file paths between our working directory and the fcs files. If you retained the same project organization structure we had during Week #2, it may look similar to the following:\n\nPathToDataFolder <- file.path(\"data\")\n\n\nPathToDataFolder\n\n[1] \"data\"\n\n\n\n\n\n\nLocate .fcs files\nWe will now locate our .fcs files. As we saw last week, our computer will need the full file.paths to these individual files, so we will set the list.files() “full.names” argument to TRUE.\n\nfcs_files <- list.files(PathToDataFolder, pattern=\".fcs\", full.names=TRUE)\nfcs_files\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n\nBy contrast, if the “full.names” argument was set to FALSE, we would have retrieved just the file names\n\nlist.files(PathToDataFolder, pattern=\".fcs\", full.names=FALSE)\n\n[1] \"CellCounts4L_AB_05_ND050_05.fcs\"\n\n\nThis would have been the equivalent of running the basename function on the “full.names=TRUE” output.\n\nbasename(fcs_files)\n\n[1] \"CellCounts4L_AB_05_ND050_05.fcs\"", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#data.frame", - "href": "course/04_IntroToTidyverse/index.html#data.frame", - "title": "04 - Introduction to Tidyverse", - "section": "data.frame", - "text": "data.frame\nOr alternatively using the new-to-us glimpse() function\n\nglimpse(Data)\n\nError in `glimpse()`:\n! could not find function \"glimpse\"\n\n\n\n\n\n\n\n\nCheckpoint 1\n\n\n\nThis however returns an error. Any idea why this might be occuring?\n\n\n\n\nCode\n# We haven't attached/loaded the package in which the function glimpse is within\n\n\n\n\n\n\n\n\nCheckpoint 2\n\n\n\nHow would we locate a package a not-yet-loaded function is within?\n\n\n\n\nCode\n# We can use double ? to search all installed packages for a function, regardless\n# if the package is attached to the environment or not\n\n??glimpse\n\n\n\nFrom the list of search matches (in the right secondary sidebar), it looks likely that the glimpse() function in the dplyr package was the one we were looking for. This is one the main tidyverse packages we will be using throughout the course. Let’s attach it to our environment via the library() call first and try running glimpse() again.\n\nlibrary(dplyr)\nglimpse(Data)\n\nRows: 196\nColumns: 31\n$ bid <chr> \"INF0052\", \"INF0100\", \"INF0100\", \"INF0100\", \"INF0179…\n$ timepoint <int> 0, 0, 4, 9, 0, 4, 9, 4, 9, 0, 0, 4, 9, 0, 4, 9, 4, 9…\n$ Condition <chr> \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctr…\n$ Date <chr> \"2025-07-26\", \"2025-07-26\", \"2025-07-26\", \"2025-07-2…\n$ infant_sex <chr> \"Male\", \"Male\", \"Male\", \"Male\", \"Male\", \"Male\", \"Mal…\n$ ptype <chr> \"HEU-hi\", \"HEU-lo\", \"HEU-lo\", \"HEU-lo\", \"HU\", \"HU\", …\n$ root <int> 2098368, 2020184, 1155040, 358624, 1362216, 1044808,…\n$ singletsFSC <int> 1894070, 1791890, 1033320, 328624, 1206309, 917398, …\n$ singletsSSC <int> 1666179, 1697083, 875465, 289327, 1032946, 735579, 9…\n$ singletsSSCB <int> 1537396, 1579098, 845446, 276289, 982736, 685592, 94…\n$ CD45 <dbl> 0.5952943, 0.9106762, 0.9705765, 0.9819573, 0.957259…\n$ NotMonocytes <dbl> 0.8820349, 0.9052256, 0.9845400, 0.9855070, 0.955627…\n$ nonDebris <dbl> 0.8627649, 0.8602660, 0.9578793, 0.9412615, 0.840783…\n$ lymphocytes <dbl> 0.6420138, 0.2145848, 0.7403110, 0.6511588, 0.705478…\n$ live <dbl> 0.9020581, 0.8908981, 0.8757665, 0.9153242, 0.895214…\n$ `Dump+` <dbl> 0.21090996, 0.06252775, 0.20023803, 0.21469246, 0.33…\n$ `Dump-` <dbl> 0.6911482, 0.8283703, 0.6755285, 0.7006317, 0.556895…\n$ Tcells <dbl> 0.2804264, 0.6748298, 0.6119129, 0.6314431, 0.439643…\n$ `Vd2+` <dbl> 0.008120361, 0.007265620, 0.004651313, 0.011348967, …\n$ `Vd2-` <dbl> 0.9918796, 0.9927344, 0.9953487, 0.9886510, 0.995246…\n$ `Va7.2+` <dbl> 0.014480704, 0.015774991, 0.015794019, 0.017023451, …\n$ `Va7.2-` <dbl> 0.9773989, 0.9769594, 0.9795547, 0.9716276, 0.981924…\n$ `CD4+` <dbl> 0.6341164, 0.6119112, 0.6639621, 0.4378944, 0.739256…\n$ `CD4-` <dbl> 0.3432825, 0.3650482, 0.3155925, 0.5337331, 0.242668…\n$ `CD8+` <dbl> 0.2734826, 0.3357696, 0.2862104, 0.4861231, 0.195063…\n$ `CD8-` <dbl> 0.06979990, 0.02927858, 0.02938209, 0.04761008, 0.04…\n$ Tcells_count <int> 164771, 208241, 371723, 111552, 291777, 271870, 4879…\n$ lymphocytes_count <int> 587573, 308583, 607477, 176662, 663667, 510730, 7262…\n$ Monocytes <dbl> 0.11796509, 0.09477437, 0.01545999, 0.01449297, 0.04…\n$ Debris <dbl> 0.13723513, 0.13973396, 0.04212072, 0.05873854, 0.15…\n$ CD45_count <int> 915203, 1438047, 820570, 271304, 940733, 675857, 921…\n\n\nWe notice that while similar to the str() output, glimpse() handles spacing a little differently, and includes the dimensions at the top. However, we can also retrieve the dimensions directly using the dim() function (which maintains the row followed by column position convention of base R (ex. [196,31]))\n\ndim(Data)\n\n[1] 196 31", + "objectID": "course/03_InsideFCSFile/index.html#flowcore", + "href": "course/03_InsideFCSFile/index.html#flowcore", + "title": "03 - Inside an FCS File", + "section": "flowCore", + "text": "flowCore\nWe will be using the flowCore package, which is the oldest and most-frequently downloaded flow cytometry package on Bioconductor.\n\n\nCode\n# I have attached this code for anyone that is interested in seeing how these plots were made. The content is not part of today's lesson, so if you are just starting off, we will cover the details of data-tidying and creating ggplot objects over the next several weeks. Best, David\n\n# Load required packages via a library call\n\nlibrary(dplyr) # CRAN\nlibrary(stringr) # CRAN\nlibrary(ggplot2) # CRAN\n#library(plotly) # Using the :: to access \n\n# Loading in the dataset contained within the .csv file\nBioconductorFlow_path <- file.path(PathToDataFolder, \"BioconductorFlow.csv\")\nBioconductorFlowPackages <- read.csv(BioconductorFlow_path, check.names=FALSE)\nBioconductorFlowPackages <- BioconductorFlowPackages |>\n arrange(desc(since)) |> mutate(package = factor(package, levels = package))\n\n# Newer Base R Pipe : |> \n# Older mostly equivalent Magrittr Pipe %>% \n\n\n\n\nCode\n# Notice the code-chunk eval arguments above dictate the shape of the final rendered plot. \n\n# Taking the imported dataset and passing it to ggplot2 to create the first plot. \n\nplot <- ggplot(BioconductorFlowPackages,\n aes(x = 0, xend = since, y = package, yend = package)) +\n geom_segment(linewidth = 2, color = \"steelblue\") +\n scale_x_continuous(trans = \"reverse\", \n breaks = seq(0, max(BioconductorFlowPackages$since), by = 5)) +\n labs(\n x = \"Years in Bioconductor\",\n y = NULL,\n title = \"Bioconductor Flow Cytometry R packages\"\n ) +\n theme_bw()\n\n# Taking the static plot and making it interactive using the plotly package\n\nplotly::ggplotly(plot)\n\n\n\n\n\n\n\n\nCode\n# Retrieving the names of Bioconductor flow cytometry R packages in correct release order. \n\nHistoricalOrder <- BioconductorFlowPackages |> pull(package)\n\n# Bringing in 2025 package usage dataset from a .csv file\nBioconductorUsage_path <- file.path(PathToDataFolder, \"BioconductorDownloads.csv\")\nBioconductorUsage <- read.csv(BioconductorUsage_path, check.names=FALSE)\nBioconductorUsage <- BioconductorUsage |> dplyr::filter(Month %in% \"all\")\n\n# Note, dplyr::filter is used due to flowCore also having a filter function, which causes conflicts once it is attached to the local environment. \n\n# Combining both data.frames for use in the plot\n\nDataset <- left_join(BioconductorFlowPackages, BioconductorUsage, by=\"package\")\n\n# Rearranging the order in which packages are displayed\n\nDataset$package <- factor(Dataset$package, levels=HistoricalOrder)\n\n\n\n\nCode\n# Generating the 2nd plot with ggplot2\n\nplot <- ggplot(Dataset, aes(x = since, y = Nb_of_distinct_IPs)) +\n geom_point(aes(color = package), size = 3, alpha = 0.7) + \n labs(\n x = \"Years in Bioconductor\",\n y = \"Number of Yearly Downloads\",\n title = \"\",\n color = \"Package\"\n ) +\n theme_bw()\n\n# Making it interactive with plotly\n\nplotly::ggplotly(plot)\n\n\n\n\n\n\nflowCore is also one of the many Bioconductor packages maintained by Mike Jiang. In many ways (as those who completed the optional take-home problems for Week #1 know) reminiscent of this xkcd comic:\n\nAs with all our R packages, we first need to make sure flowCore is attached to our local environment via the library call.\n\nlibrary(flowCore)\n\nThe function we will be using today is the read.FCS() function. Do you remember how to access the help documentation?\n\n\nCode\n# Or when in Positron, hovering over the highlighted function name within the code-chunk\n\n?flowCore::read.FCS\n\n\nTo start, lets select just the first .fcs file. We will do this by indexing the first item within fcs_files via the square brackets [].\n\nfirstfile <- fcs_files[1]\nfirstfile\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#column-value-type", - "href": "course/04_IntroToTidyverse/index.html#column-value-type", - "title": "04 - Introduction to Tidyverse", - "section": "Column value type", - "text": "Column value type\nAs we saw last week, functions often need values that match a certain type (the paintbrush needing paint analogy). As we inspect the columns of Data, we can notice some of the columns contain values within that are character (ie. “char”) values. Others appear to contain numeric values (which are subtyped as either double (“ie. dbl”) or integer (ie. “int”)). At first glance, we do not appear to have any logical (ie. TRUE or FALSE) columns in this dataset.\n\nIf we were trying to verify type of values contained within a data.frame column, we could employ several similarly-named functions (is.character(), is.numeric() or is.logical()) to check\n\n# colnames(Data) # To recheck the column names\n\nis.character(Data$bid)\n\n[1] TRUE\n\n\n\nis.numeric(Data$bid)\n\n[1] FALSE\n\n\n\n# colnames(Data) # To recheck the column names\n\nis.character(Data$Tcells_count)\n\n[1] FALSE\n\n\nFor numeric columns using the is.numeric() function, we can also be subtype specific using either is.integer() or is.double().\n\n# colnames(Data) # To recheck the column names\n\nis.numeric(Data$Tcells_count)\n\n[1] TRUE\n\nis.integer(Data$Tcells_count)\n\n[1] TRUE\n\nis.double(Data$Tcells_count)\n\n[1] FALSE\n\n\n\n\n\n\n\n\nReminder\n\n\n\nAs we observed last week with keywords, column names that contain special characters like $ or spaces will need to be surrounded with tick marks in order for the function to be able to run.\n\n\n\n# colnames(Data) # To recheck the column names\nis.numeric(Data$CD8-)\n\nError in parse(text = input): <text>:2:21: unexpected ')'\n1: # colnames(Data) # To recheck the column names\n2: is.numeric(Data$CD8-)\n ^\n\n\n\n# colnames(Data) # To recheck the column names\nis.numeric(Data$`CD8-`)\n\n[1] TRUE", + "objectID": "course/03_InsideFCSFile/index.html#flowframe", + "href": "course/03_InsideFCSFile/index.html#flowframe", + "title": "03 - Inside an FCS File", + "section": "flowFrame", + "text": "flowFrame\nFor read.FCS(), it accepts several arguments. The argument “filename” is where we provide our file.path to .fcs file that we wish to load into R. Let’s go ahead and do so\n\nread.FCS(filename=firstfile)\n\nPlease note, if you are doing this with your own .fcs files, you will need to provide two additional arguments, “transformation” = FALSE, and “truncate_max_range” = FALSE for the files to be read in correctly. We will revisit the reasons why in Week #5.\n\nread.FCS(filename=firstfile, transformation = FALSE, truncate_max_range = FALSE)\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot\n\n\nIn this case, we can see the .fcs file has been read into R as a “flowFrame” object. We can also see the file name, as well as details about the number of cells, and number of columns (whether detectors (for raw spectral flow data) or fluorophores (for unmixed spectral flow data)).\n\nDirectly below we see what resembles a table. At first glance, the only column with an immediately discernable purpose is the one with the name column, which is listing the detectors present on a Cytek Aurora.\n\nAnd finally, at the bottom we reach a line that tells us that for this .fcs files, 599 keyword can be found in a description slot.\n\n\n\nSo let’s get our bearings, we have loaded in an .fcs file to R, but let’s use some of the concepts we covered last week to try to understand a bit about what type or class of object we are working with. From the output, we saw the words flowFrame object, so let’s read it back in again, but assign it to an variable/object called flowFrame so that we can use the type-discerning functions we worked with last week on.\n\nflowFrame <- read.FCS(filename=firstfile, transformation = FALSE, truncate_max_range = FALSE)\n\nAs we create this variable, if we have the session tab selected on our right secondary side bar, we see it appear:\n\nIf we were to use the type-determining functions we learned last week\n\nclass(flowFrame)\n\n[1] \"flowFrame\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nflowFrames are a class of object with a structure defined within the flowCore package. They are used to work with the data contained within individual .fcs files. Looking again at the right secondary side bar, we can see that it shows up as a ““S4 class flowFrame package flowCore”“” with 3 slots, with the words flowFrame adjacent to it.\nA perfectly valid first reaction to first reading this is “well how should I know what any of this means?”. Powering through this initial discomfort, let’s go ahead and click on the dropdown arrow next to the variables name and see if we get any additional clarity on the issue.\n\nWhen we do so, three additional drop-downs appear. Based on the previous line that mentioned 3 slots, we could infer that each line corresponds to one of those slots.\nWhat we are encountering with flowFrame is our first example of an S4 object type. These more-complicated object types are quite common for the various Bioconductor affilitated R packages.\nThese objects will usually appear with either S4 or S3 in their metadata, and are made up of various simpler object types that are cobbled together within the larger object, usually occupying individual slots.\nWhat advantage this bundling provides will be something we revisit throughout the course as you encounter more of these S4/S3 objects.\n\n\n\nexprs\nThe first slot within the flowFrame object shows up with the name “exprs”. For the exprs object, glancing at it’s middle column, we can based on the 100 rows and 61 columns, that it is likely a matrix-style object. We might also recall we saw similar numbers in the printed output when we ran read.FCS()earlier.\n\nWhich likely means that “exprs” slot is where the MFI data for the individual acquired cells within our .fcs file is being stored. Within Positron, for a matrix object, we can click on the little grid symbol on the far right to open up the table within editor.\n\nIf we utilize the scroll bars, we can see that the individual detectors (in the case of uploading a raw spectral fcs file, they would appear as fluorophores for unmixed spectral or conventional fcs files) occupy the individual columns, which are named. The rows are not named, but number 100, matching the number of cells present in the .fcs file. Additionally, on the far left there is a little summary table about the overall data.\n\nLet’s go ahead and assign this matrix to a new variable/object so that we can explore it later. Since flowFrame is an S4 object, it’s slots can be individually accessed by adding the @ symbol and the respective slot name.\n\nMFI_Matrix <- flowFrame@exprs\n\nAlternatively, we can use the Bioconductor helper function exprs() to get data held in that slot\n\nMFI_Matrix_Alternate <- exprs(flowFrame)\n\nIn the case of the above, this displayed text output to the console would be unwiedly to display all at once. If we wanted to only see the first five rows, we could use the head() function, and provide a value of 5.\n\nhead(MFI_Matrix, 5)\n\n Time UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A\n[1,] 38823 37.79983 -184.479996 353.87714 1106.22998 1145.18140 2130.21899\n[2,] 39780 234.23021 -98.456429 26.43876 70.65833 -89.93541 -29.14263\n[3,] 267292 -117.96355 40.732426 473.94574 1177.86975 1516.70935 1985.46130\n[4,] 128101 289.87671 -2.723389 -54.11960 -163.71489 32.62989 -134.90411\n[5,] 255221 -104.50541 -71.163338 567.57562 610.23627 1416.61328 2868.16040\n UV7-A UV8-A UV9-A UV10-A UV11-A UV12-A UV13-A\n[1,] 4376.34277 3246.7952 32050.65039 8123.2637 1992.5785 1070.3323 956.43573\n[2,] -26.34649 -162.6675 17.98848 271.9152 154.8575 163.5411 -32.81524\n[3,] 3658.87671 4140.1724 59792.16406 14013.7969 3427.4324 1668.7588 1071.14636\n[4,] 739.71960 402.9025 427.37534 315.6364 -223.0423 145.7121 127.03777\n[5,] 4034.58789 3234.6626 40126.46484 10325.0371 1974.0907 1033.8450 -21.57245\n UV14-A UV15-A UV16-A SSC-H SSC-A V1-A V2-A\n[1,] 290.8685 385.49921 670.97687 657613 750760.12 1171.1390 154.5628\n[2,] -104.9198 103.41382 71.41528 83481 81552.85 266.2424 705.2527\n[3,] 730.1430 214.93053 252.75406 890845 1183519.00 1196.0931 1183.1105\n[4,] -207.8978 -55.37944 -45.10131 75103 72457.33 227.9926 556.9189\n[5,] 273.6271 960.16290 341.20633 415791 501690.97 717.2498 929.9780\n V3-A V4-A V5-A V6-A V7-A V8-A\n[1,] 1346.4488525 1706.9260 1923.50940 898.2527 3162.55371 83596.5078\n[2,] 244.3218689 341.0508 381.15939 87.1600 151.68785 119.5544\n[3,] 2087.0092773 824.6352 1635.27258 1613.9069 4653.16260 176981.6094\n[4,] -0.8137281 205.4732 18.12125 179.6371 -69.50061 -132.4348\n[5,] 1358.4512939 788.6506 1208.81006 1156.7040 3118.42627 104951.2578\n V9-A V10-A V11-A V12-A V13-A V14-A\n[1,] 32506.7617 27161.5137 6236.072754 2220.303223 2023.39966 753.589355\n[2,] -79.7691 -109.1783 -73.991196 114.375542 -11.53453 124.986206\n[3,] 69236.4297 57626.8984 13175.838867 4534.874023 3434.38989 1995.172363\n[4,] 129.2739 231.8918 -5.473321 8.792875 -24.62049 -8.212234\n[5,] 42090.0781 34104.3164 7620.552734 3103.544189 2426.43359 650.836304\n V15-A V16-A FSC-H FSC-A SSC-B-H SSC-B-A B1-A\n[1,] 510.9540 228.34962 1055905 1217097.50 716733 815959.06 606.6683\n[2,] -207.3494 -28.96272 79696 83439.11 104575 103132.83 195.2795\n[3,] 1321.8030 615.05560 1092481 1453969.38 757351 982038.31 2010.5110\n[4,] -133.7503 -34.32619 64760 60415.23 67955 66806.13 -146.8936\n[5,] 290.2892 473.32599 1038362 1184479.00 425296 522873.12 1015.5981\n B2-A B3-A B4-A B5-A B6-A B7-A\n[1,] 416.98294 4172.4712 192400.0938 93929.9375 54236.3320 19342.6445\n[2,] 333.25662 332.1675 -230.9639 196.7810 292.8945 -187.2845\n[3,] 2150.21826 10106.9551 437801.5625 212176.1562 124294.3594 45068.3008\n[4,] -34.90987 165.7988 675.0156 136.3076 482.8665 133.0948\n[5,] 639.77527 6034.0200 244022.6094 118871.4609 68616.9688 24067.7949\n B8-A B9-A B10-A B11-A B12-A B13-A\n[1,] 10507.24219 9498.1270 4465.50928 1668.048096 2199.9475 1581.7345\n[2,] 70.90886 -334.3563 188.05545 -663.359619 -163.2331 27.9856\n[3,] 24289.59180 22500.1914 10624.99219 4684.497559 3471.7749 2727.3904\n[4,] 432.28091 246.8794 -94.44906 2.905877 106.8489 283.3633\n[5,] 14182.12793 13019.7100 5577.33984 2753.355957 1279.3009 1423.0276\n B14-A R1-A R2-A R3-A R4-A R5-A\n[1,] 1487.56860 147.1335 129.867630 35.90353 267.23999 49.79849\n[2,] 205.82298 -142.9224 66.516052 113.63218 -94.41375 98.13978\n[3,] 2371.95850 -128.3749 -105.482544 726.48547 18.87000 95.47879\n[4,] 33.24665 127.5455 122.607941 37.83584 -82.87500 -343.83768\n[5,] 1565.72742 -266.4482 -3.350622 -178.39566 -117.10875 -100.10384\n R6-A R7-A R8-A\n[1,] -732.7097 42.83144 248.56728\n[2,] 143.4497 -263.28741 -85.83299\n[3,] -194.4526 -84.08820 -301.46066\n[4,] 82.3745 60.27896 -94.38461\n[5,] -182.0066 184.36417 186.17207\n\n\nThis is much more workable, especially on a small laptop screen. We can see that there are names for each column corresponding to detector/fluorophore/metal depending on the .fcs file we are accessing. Lets retrieve these column names using the colnames() function.\n\nColumnNames <- colnames(MFI_Matrix)\nColumnNames\n\n $P1N $P2N $P3N $P4N $P5N $P6N $P7N $P8N \n \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \"UV7-A\" \n $P9N $P10N $P11N $P12N $P13N $P14N $P15N $P16N \n \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \"UV14-A\" \"UV15-A\" \n $P17N $P18N $P19N $P20N $P21N $P22N $P23N $P24N \n \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \"V3-A\" \"V4-A\" \"V5-A\" \n $P25N $P26N $P27N $P28N $P29N $P30N $P31N $P32N \n \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \n $P33N $P34N $P35N $P36N $P37N $P38N $P39N $P40N \n \"V14-A\" \"V15-A\" \"V16-A\" \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \n $P41N $P42N $P43N $P44N $P45N $P46N $P47N $P48N \n \"B2-A\" \"B3-A\" \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \n $P49N $P50N $P51N $P52N $P53N $P54N $P55N $P56N \n \"B10-A\" \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n $P57N $P58N $P59N $P60N $P61N \n \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\nSomething interesting occurred when this occurred, we can see in addition to the detector names directly above each a “$P#N” pattern appear, with # standing for increasing numbers. If we recall, we saw something similar in the first output column when we first ran read.FCS().\n\nLets break out the str() and class() functions from last week and see what we can find out about why this is occuring.\n\nstr(ColumnNames)\n\n Named chr [1:61] \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" ...\n - attr(*, \"names\")= chr [1:61] \"$P1N\" \"$P2N\" \"$P3N\" \"$P4N\" ...\n\n\nIn this case we can see that we don’t just have a vector (list) similar to what we saw with Fluorophores object last week, because instead of a chr [1:61] we get back a Named chr [1:61] designation. What we see is that in this case, each value has a corresponding index name as well. (ex. $P1N, $P2N, etc.) Let’s double check with class() function.\n\nclass(ColumnNames)\n\n[1] \"character\"\n\n\nWe can see that everything is character, but it doesn’t inform us that each index was named. This is one of the reasons it is best when trying to see what type of an object something is, to use multiple functions, to avoid missing some important details.\nIf we were trying to remove the names, being left with just the values (similar to what we saw with the vector-style list last week), we could use the unname() function:\n\nunname(ColumnNames)\n\n [1] \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \n [8] \"UV7-A\" \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \n[15] \"UV14-A\" \"UV15-A\" \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \n[22] \"V3-A\" \"V4-A\" \"V5-A\" \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \n[29] \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \"V14-A\" \"V15-A\" \"V16-A\" \n[36] \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \"B2-A\" \"B3-A\" \n[43] \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \"B10-A\" \n[50] \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n[57] \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\n\n\nLet’s return to the right sidebar to continue our exploration, by clicking on the dropdown arrow for exprs in the side-bar\n\nThe output is less user-friendly than what we saw when clicking on the little grid. If we scroll down far enough, we get down as far as [,61], which corresponds to the total number of columns.\n\nIn base R, column order can be defined by placing the corresponding column index number after a comma “,”. So for this case, the first column would be designated would be [,1] while the last column would be designated [,61].\n\nMFI_Matrix[,1]\n\n [1] 38823 39780 267292 128101 255221 79210 196643 83855 109315 26128\n [11] 114423 120001 71831 70551 197021 239994 252611 223012 152780 171822\n [21] 172611 168464 191503 253015 73885 82221 176641 128533 4117 191632\n [31] 191229 58093 141776 265894 55593 227555 233212 248578 95165 171934\n [41] 1360 251847 195764 147503 118723 1060 90033 253553 268268 74610\n [51] 23531 150119 226391 201568 179264 79944 196686 252667 117309 3903\n [61] 77690 195142 229873 254472 179943 236618 68193 87154 28541 78622\n [71] 155664 50115 40866 70753 260118 12033 96149 20740 37461 73998\n [81] 231939 192329 88649 197664 86006 142486 159539 251298 104864 164090\n [91] 102380 218968 145182 239323 261272 118979 17202 194277 229284 258723\n\n\n\nMFI_Matrix[,61]\n\n [1] 248.567276 -85.832993 -301.460663 -94.384613 186.172073 -461.407745\n [7] 843.507080 277.516113 -106.166855 281.633545 195.927261 818.865723\n [13] 734.996460 209.356476 206.442596 279.859894 518.165222 56.947498\n [19] 285.751007 857.126343 -94.384613 -213.030518 62.585236 138.409653\n [25] 118.012444 328.255768 -61.635056 185.285233 464.384979 5.637739\n [31] -66.385956 31.229273 1198.241211 185.475266 873.279419 457.607025\n [37] -73.353951 37.880539 729.168640 221.772171 -169.512238 348.272888\n [43] -338.391022 845.534119 -4.434176 620.024597 610.269409 -193.900208\n [49] 230.830566 -23.754517 607.102112 14.949510 -34.333195 -169.132172\n [55] -96.158287 220.631958 125.297165 -15.202891 -126.057304 193.393448\n [61] 90.203819 -277.706146 590.505615 911.096619 -92.230873 347.259369\n [67] 135.559113 369.430267 -62.015125 -180.597672 -146.517868 810.440796\n [73] 134.038818 -165.268097 727.711731 -88.746880 62.901962 203.275330\n [79] 436.196289 -242.676147 -40.857769 222.278946 -170.272385 525.513245\n [85] -41.491222 176.670258 201.501648 175.530045 329.839386 474.140167\n [91] -48.142490 -174.833252 46.052090 357.584656 -26.541714 191.493088\n [97] 211.320190 124.790398 -113.324883 343.268616\n\n\nWhat would happen if used a column index number that didn’t exist? Let’s check.\n\nMFI_Matrix[,350]\n\nError in `MFI_Matrix[, 350]`:\n! subscript out of bounds\n\n\nWe get back an error message telling us the subscript is out of bounds.\nSo if columns are specified by a number after the comma (ex. [,1]), how are rows specified? In R, rows would be specified by a number before the comma [1,]\n\nMFI_Matrix[1,]\n\n Time UV1-A UV2-A UV3-A UV4-A \n 38823.00000 37.79983 -184.48000 353.87714 1106.22998 \n UV5-A UV6-A UV7-A UV8-A UV9-A \n 1145.18140 2130.21899 4376.34277 3246.79517 32050.65039 \n UV10-A UV11-A UV12-A UV13-A UV14-A \n 8123.26367 1992.57849 1070.33228 956.43573 290.86853 \n UV15-A UV16-A SSC-H SSC-A V1-A \n 385.49921 670.97687 657613.00000 750760.12500 1171.13904 \n V2-A V3-A V4-A V5-A V6-A \n 154.56281 1346.44885 1706.92603 1923.50940 898.25269 \n V7-A V8-A V9-A V10-A V11-A \n 3162.55371 83596.50781 32506.76172 27161.51367 6236.07275 \n V12-A V13-A V14-A V15-A V16-A \n 2220.30322 2023.39966 753.58936 510.95404 228.34962 \n FSC-H FSC-A SSC-B-H SSC-B-A B1-A \n1055905.00000 1217097.50000 716733.00000 815959.06250 606.66833 \n B2-A B3-A B4-A B5-A B6-A \n 416.98294 4172.47119 192400.09375 93929.93750 54236.33203 \n B7-A B8-A B9-A B10-A B11-A \n 19342.64453 10507.24219 9498.12695 4465.50928 1668.04810 \n B12-A B13-A B14-A R1-A R2-A \n 2199.94751 1581.73450 1487.56860 147.13348 129.86763 \n R3-A R4-A R5-A R6-A R7-A \n 35.90353 267.23999 49.79849 -732.70966 42.83144 \n R8-A \n 248.56728 \n\n\nAnd while not the focus of today, we could retrieve individual values from a matrix by specifying both a row and a column index number. So for example, if we wanted the MFI value for the UV1-A detector for the first acquired cell (knowing that UV1-A is the 2nd column):\n\nMFI_Matrix[1,2]\n\n UV1-A \n37.79983 \n\n\nFrom our exploration, this looks to be all the information contained within the “exprs” slot, so let’s back up and check on the next slot.\n\n\n\n\nparameters\nAs we look at the next slot in the flowFrame object, we can see that parameters looks like it is going to be another more complex object, as it is showing up as an AnnotatedDataFrame object (defined by the Biobase R package, and itself contains 4 slots).\n\n\nHaving carved our way this far into the heart of an .fcs file, we are not about to call it quits now, so CHARGE my fellow cytometrist!!! Click that drop-down arrow!\n\nHaving survived our charge into the unknown, the four parameter slots appear to be “varMetadata”, “data”, “dimLabels” and “._classVersion_”.\n\n\nvarMetadata\nFortunately for us, both “varMetadata” and “data” at least appear to be table-like objects of a type known as a “data.frame”, so lets click on the grid to open in our editor window.\nIn the case of varMetadata, we seem to have retrieved a column of metadata names.\n\nThese look reminiscent of what we saw at the top of the read.FCS() column outputs previously\n\n\n\ndata\nClicking on the grid for parameters’s data slot will end opening the actual content that was displayed.\n\nLet’s try to retrieve the data contained within this slot and save it as it’s own variable/object within our R session. First, we need to open flowFrame object, then use @ to get inside its parameters slot. Since parameters is also a complex object (AnnotatedDataFrame specifically), we will need to use another @ to get inside its data slot:\n\nParameterData <- flowFrame@parameters@data\n\nhead(ParameterData, 10)\n\n name desc range minRange maxRange\n$P1 Time <NA> 272140 0.00000 272139\n$P2 UV1-A <NA> 4194304 -111.00000 4194303\n$P3 UV2-A <NA> 4194304 -111.00000 4194303\n$P4 UV3-A <NA> 4194304 -111.00000 4194303\n$P5 UV4-A <NA> 4194304 -111.00000 4194303\n$P6 UV5-A <NA> 4194304 -111.00000 4194303\n$P7 UV6-A <NA> 4194304 -111.00000 4194303\n$P8 UV7-A <NA> 4194304 -26.34649 4194303\n$P9 UV8-A <NA> 4194304 -111.00000 4194303\n$P10 UV9-A <NA> 4194304 0.00000 4194303\n\n\nAnd similarly, we could access with the Bioconductor helper function parameters(), but we would need to specify the accessor for data outside the parenthesis.\n\nParameterData_Alternate <- parameters(flowFrame)@data\n\nIf we ran the str() function, we get the following insight into ParameterData’s object type\n\nstr(ParameterData)\n\n'data.frame': 61 obs. of 5 variables:\n $ name : 'AsIs' Named chr \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" ...\n ..- attr(*, \"names\")= chr [1:61] \"$P1N\" \"$P2N\" \"$P3N\" \"$P4N\" ...\n $ desc : 'AsIs' Named chr NA NA NA NA ...\n ..- attr(*, \"names\")= chr [1:61] NA NA NA NA ...\n $ range : num 272140 4194304 4194304 4194304 4194304 ...\n $ minRange: num 0 -111 -111 -111 -111 ...\n $ maxRange: num 272139 4194303 4194303 4194303 4194303 ...\n\n\nWe can see this class of object is a “data.frame”. This is one of the more common object types in R, and we will be seeing these extensively throughout the course. We see that each of the columns appears to be designated by a $ followed by the column name, and then type of column (numeric, character, etc).\n\nIf we are trying to see these columns in R, we notice that data.frame is not like the previous S4 class objets we interacted with, as the @ symbol after doesn’t bring up any suggestions\n\nParameterData@\n\nBy contrast, adding the $ we saw when using the str() function does retrieve the underlying information\n\nParameterData$\n\n\nAs you become more familiar with R, remembering to check what kind of object you are working with, and how to access the contents will with practice become more familiar to you.\nSimilar to what we saw with a matrix, we can subset a data.frame based on the column or row index using square brackets [].\n\nParameterData[,1]\n\n $P1N $P2N $P3N $P4N $P5N $P6N $P7N $P8N \n \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \"UV7-A\" \n $P9N $P10N $P11N $P12N $P13N $P14N $P15N $P16N \n \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \"UV14-A\" \"UV15-A\" \n $P17N $P18N $P19N $P20N $P21N $P22N $P23N $P24N \n \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \"V3-A\" \"V4-A\" \"V5-A\" \n $P25N $P26N $P27N $P28N $P29N $P30N $P31N $P32N \n \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \n $P33N $P34N $P35N $P36N $P37N $P38N $P39N $P40N \n \"V14-A\" \"V15-A\" \"V16-A\" \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \n $P41N $P42N $P43N $P44N $P45N $P46N $P47N $P48N \n \"B2-A\" \"B3-A\" \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \n $P49N $P50N $P51N $P52N $P53N $P54N $P55N $P56N \n \"B10-A\" \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n $P57N $P58N $P59N $P60N $P61N \n \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\nThe individual detectors or fluorophore appear under “name”. For now, based on what we know, the $P# appears to be some sort of name being used as an internal consistent reference to the respective.\n“desc” is appearing empty for this raw spectral fcs file, but if you were to checked an unmixed file, this would be occupied the marker/ligand name assigned to it during the experiment setup.\n“range”, “minRange” and “maxRange” are beyond the scope of today, but are used by both instrument manufacturers and software vendors when setting appropiate scaling for a plot. For the actual details, see the Flow Cytometry Standard documentation.\nHaving exhausted our options under parameters “varMetadata” and “data” slots, let’s continue to the next slot.\n\n\ndimLabels\n\nIn this case, not much is returned. Yey!\n\nflowFrame@parameters@dimLabels\n\n[1] \"rowNames\" \"columnNames\"\n\n\n\n\nclassVersion\nContinuing on to the last slot “.__classVersion__”\n\nflowFrame@parameters@.__classVersion__\n\nAnnotatedDataFrame \n \"1.1.0\" \n\n\nAlso mercifully short, both of these seem to be more involved in defining the S4 class object, and don’t contain anything we need to retrieve today.\n\n\n\n\nDescription\nAt this point, we have explored both “exprs” and “parameter” slots for the flowFrame object we created. Let’s tackle the final slot, named description.\n\nWhen doing so, a very large list is opened within the Positron variables window. While we could scroll through it, it might be easier to retrieve certain number of rows via the console to make interpreting this more structured.\n\nTo retrieve the list itself, we would need to access the description slot of the flowFrame object. Since it is a slot, we will need to use the @ accessor.\n\n\nDescriptionList <- flowFrame@description\n\n\nDescriptionList \n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n$`$CYT`\n[1] \"Aurora\"\n\n$`$CYTOLIB_VERSION`\n[1] \"2.22.0\"\n\n$`$CYTSN`\n[1] \"V0333\"\n\n$`$DATATYPE`\n[1] \"F\"\n\n$`$DATE`\n[1] \"04-Aug-2025\"\n\n$`$ENDANALYSIS`\n[1] \"0\"\n\n$`$ENDDATA`\n[1] \"57711\"\n\n$`$ENDSTEXT`\n[1] \"0\"\n\n$`$ETIM`\n[1] \"13:55:57.02\"\n\n$`$FIL`\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$`$INST`\n[1] \"UMBC\"\n\n$`$MODE`\n[1] \"L\"\n\n$`$NEXTDATA`\n[1] \"0\"\n\n$`$OP`\n[1] \"David Rach\"\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"\n\n$ORIGINALGUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"\n\n$THRESHOLD\n[1] \"(FSC,50000)\"\n\n$TUBENAME\n[1] \"05\"\n\n$USERSETTINGNAME\n[1] \"DTR_CellCounts\"\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n\nThe returned list is a little too large to reasonably explore. We can attempt to subset using the head() function as shown below\n\nhead(DescriptionList, 5)\n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n\nAlternatively, it might be better to subset based on position index\n\nDescriptionList[1:10]\n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n$`$CYT`\n[1] \"Aurora\"\n\n$`$CYTOLIB_VERSION`\n[1] \"2.22.0\"\n\n$`$CYTSN`\n[1] \"V0333\"\n\n$`$DATATYPE`\n[1] \"F\"\n\n$`$DATE`\n[1] \"04-Aug-2025\"\n\n\nAnd just as we saw for exprs and parameters, there is also a Bioconductor helper keyword() function to access this same information directly from the flowFrame.\n\nDescriptionList_Alternate <- keyword(flowFrame)\n\nIf we run the class() function, we can see that DescriptionList is an actual “list”.\n\nclass(DescriptionList)\n\n[1] \"list\"\n\n\nThis is in contrast to the vectors we have previously generated. While these are also list like, they are what are known as as atomic list, which contain values that are all either characters, numerics or logicals.\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nclass(Fluorophores)\n\n[1] \"character\"\n\n\n\nPanelAntibodyCounts <- c(5, 12, 19, 26, 34, 46, 51)\nclass(PanelAntibodyCounts)\n\n[1] \"numeric\"\n\n\n\nSpecimenIndexToKeep <- c(TRUE, TRUE, FALSE, TRUE)\nclass(SpecimenIndexToKeep)\n\n[1] \"logical\"\n\n\nA list on the other hand is not restricted to contain objects composed entirely of a certain atomic type. For example, I could include the three previous vectors into a list using the list() function.\n\nMyListofVectors <- list(Fluorophores, PanelAntibodyCounts, SpecimenIndexToKeep)\nstr(MyListofVectors)\n\nList of 3\n $ : chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n $ : num [1:7] 5 12 19 26 34 46 51\n $ : logi [1:4] TRUE TRUE FALSE TRUE\n\n\nWe can see that with the Description/Keyword list we retrieved from our flowFrame shares a somewhat similar format.\n\nstr(DescriptionList[1:10])\n\nList of 10\n $ $BEGINANALYSIS : chr \"0\"\n $ $BEGINDATA : chr \"33312\"\n $ $BEGINSTEXT : chr \"0\"\n $ $BTIM : chr \"13:55:29.85\"\n $ $BYTEORD : chr \"4,3,2,1\"\n $ $CYT : chr \"Aurora\"\n $ $CYTOLIB_VERSION: chr \"2.22.0\"\n $ $CYTSN : chr \"V0333\"\n $ $DATATYPE : chr \"F\"\n $ $DATE : chr \"04-Aug-2025\"\n\n\nBut in this case, there are also names present ($BEGINANALYSIS, $BEGINDATA, etc). What if we had tried to provide names to our List of Vectors? Would the format match?\nWhen we assigned a name to each of the vectors (by providing an equal to = ), we get the same kind of structure format to what we see in Description.\n\nMyNamedListofVectors <- list(FluorophoresNamed=Fluorophores,\n PanelAntibodyCountsNamed=PanelAntibodyCounts,\n SpecimenIndexToKeepNamed=SpecimenIndexToKeep)\n\nstr(MyNamedListofVectors)\n\nList of 3\n $ FluorophoresNamed : chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n $ PanelAntibodyCountsNamed: num [1:7] 5 12 19 26 34 46 51\n $ SpecimenIndexToKeepNamed: logi [1:4] TRUE TRUE FALSE TRUE\n\n\nWe could then subsequently be able to isolate items from that list using the $ operator.\n\nMyNamedListofVectors$\n\n\nAlternatively, we could also access by list index position\n\nMyNamedListofVectors[1]\n\n$FluorophoresNamed\n[1] \"BV421\" \"FITC\" \"PE\" \"APC\" \n\n\nRemembering back to the original output from read.FCS() we remember that it mentioned 599 keywords being in the description slot, so now we know that this is what was being referenced.", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#select-columns", - "href": "course/04_IntroToTidyverse/index.html#select-columns", - "title": "04 - Introduction to Tidyverse", - "section": "select (Columns)", - "text": "select (Columns)\nNow that we have read in our data, and have a general picture of the structure and contents, lets start learning the main dplyr functions we will be using throughout the course. To do this, lets go ahead and attach dplyr to our local environment via the library() call.\n\nlibrary(dplyr)\n\nWe will start with the select() function. It is used to “select” a column from a data.frame type object. In the simplest usage, we provide the name of our data.frame variable/object as the first argument after the opening parenthesis. This is then followed by the name of the column we want to select as the second argument (let’s place around the “” around the column name for now)\n\nDateColumn <- select(Data, \"Date\")\nDateColumn[1:10,]\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nThis results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object.\n\nPipe Operators\nWhile the above line of code works to select a column, when you encounter select() out in the wild, it will more often be in a line of code that looks like this:\n\nDateColumn <- Data |> select(\"Date\")\nDateColumn[1:10,]\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\n… “What in the world is that thing |> ?” …\nGlad you asked! An useful feature of the tidyverse packages is their use of pipes (either the original magrittr package’s “%>%” or base R version >4.1.0's “|>”“), usually appearing like this:\n\n# magrittr %>% pipe\n\nDateColumn <- Data %>% select(\"Date\")\n\n# base R |> pipe\nDateColumn <- Data |> select(\"Date\")\n\n… “How do we interpret/read that line of code?” …\nLet’s break it down, starting off just to the right of the assignment arrow (<-) with our data.frame “Data”.\n\nData\n\nWe then proceed to read to the right, adding in our pipe operator. The pipe essentially serves as an intermediate passing the contents of data onward to the subsequent function.\n\nData |> \n\nIn our case, this subsequent function is the select() function, which will select a particular column from the available data. When using the pipe, the first argument slot we saw for “select(Data,”Date”)” is occupied by the contents Data that are being passed by the pipe.\n\nData |> select()\n\nTo complete the transfer, we provide the desired column name to select() to act on (“Date” in this case)\n\nData |> select(\"Date\")\n\nIn summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column\n\nData |> select(\"Date\")\n\nOne of the main advantages for using pipes, is they can be linked together, passing resulting objects of one operation on to the next pipe and subsequent function. We can see this in operation in the example below where we hand off the isolated “Date” column to the nrow() function to determine number of rows. We will use pipes throughout the course, so you will gradually gain familiarity as you encounter them.\n\nData |> select(\"Date\") |> nrow()\n\n[1] 196\n\n\nFor those with prior R experience, you will be more familiar with the older magrittr %>% pipe. The base R |> pipe operator was introduced starting with R version 4.1.0. While mostly interchangeable, they have a few nuances that come into play for more advance use cases. You are welcome to use whichever you prefer (my current preference is |> as it’s one less key to press).\n\n\nR Quirks\n\n\n\n\n\n\nOdd R Behavior # 1\n\n\n\nWhile we used “” around the column name in our previous example, unlike what we encountered with install.packages() when we forget to include quotation marks, select() still retrieves the correct column despite Date not being an environment variable:\n\n\n\nData |> select(Date) |> head(3)\n\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n\n\n\n\n\n\n\n\n.\n\n\n\nThe reasons for this Odd R behaviour are nuanced and for another day. For now, think of it as dplyr R package is picking up the slack, and using context to infer it’s a column name and not an environmental variable/object.\n\n\n\n\nSelecting multiple columns\nSince we are able to select one column, can we select multiple (similar to a [Data[,2:5]] approach in base R)? We can, and they can be positioned anywhere within the data.frame:\n\nSubset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`)\n\nhead(Subset, 3)\n\n bid timepoint Condition Tcells CD8+ CD4+\n1 INF0052 0 Ctrl 0.2804264 0.2734826 0.6341164\n2 INF0100 0 Ctrl 0.6748298 0.3357696 0.6119112\n3 INF0100 4 Ctrl 0.6119129 0.2862104 0.6639621\n\n\nYou will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object:\n\nSubset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, )\n\nhead(Subset, 3)\n\n bid Tcells CD8+ CD4+ timepoint Condition\n1 INF0052 0.2804264 0.2734826 0.6341164 0 Ctrl\n2 INF0100 0.6748298 0.3357696 0.6119112 0 Ctrl\n3 INF0100 0.6119129 0.2862104 0.6639621 4 Ctrl", + "objectID": "course/03_InsideFCSFile/index.html#early-metadata", + "href": "course/03_InsideFCSFile/index.html#early-metadata", + "title": "03 - Inside an FCS File", + "section": "Early Metadata", + "text": "Early Metadata\nWithin the initial portion, we are getting back metadata keywords related to where and how the particular file was acquired. Keywords of potential interest include:\n\n\n\n\n\n\nStart Time\n\n\n\nWhat time was the .fcs file acquired\n\n\n\n\nDescriptionList$`$BTIM`\n\n[1] \"13:55:29.85\"\n\n\n\n\n\n\n\n\n\nCytometer\n\n\n\nWhat type of cytometer was the .fcs file acquired on\n\n\n\n\nDescriptionList$`$CYT`\n\n[1] \"Aurora\"\n\n\n\n\n\n\n\n\n\n\n\nCytometer Serial Number\n\n\n\nManufacturer Serial Number of the Cytometer\n\n\n\n\nDescriptionList$`$CYTSN`\n\n[1] \"V0333\"\n\n\n\n\n\n\n\n\n\nFCS File Acquisition Date\n\n\n\nWhat was the date of acquisition\n\n\n\n\nDescriptionList$`$DATE`\n\n[1] \"04-Aug-2025\"\n\n\n\n\n\n\n\n\n\n\n\nAcquisition End Time\n\n\n\nWhat time was acquisition stopped\n\n\n\n\nDescriptionList$`$ETIM`\n\n[1] \"13:55:57.02\"\n\n\n\n\n\n\n\n\n\nFile Name\n\n\n\nName of the .fcs file\n\n\n\n\nDescriptionList$`$FIL`\n\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\n\n\n\n\n\n\n\n\n\nOperator\n\n\n\nWho acquired the .fcs file\n\n\n\n\nDescriptionList$`$OP`\n\n[1] \"David Rach\"", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#relocate", - "href": "course/04_IntroToTidyverse/index.html#relocate", - "title": "04 - Introduction to Tidyverse", - "section": "relocate", - "text": "relocate\nAlternatively, we occasionally want to move one column. While we could respecify the location using select(), specifying the names of all the other columns out in a line of code to just to rearrange one does not sound like a good use of time. For this reason, the second dplyr function we will be learning is the relocate() function.\nLooking at our Data object, let’s say we wanted to move the Tcells column from its current location to the second column position (right after the bid column). The line of code to do so would look like:\n\nData |> relocate(Tcells, .after=bid) |> head(3)\n\n bid Tcells timepoint Condition Date infant_sex ptype root\n1 INF0052 0.2804264 0 Ctrl 2025-07-26 Male HEU-hi 2098368\n2 INF0100 0.6748298 0 Ctrl 2025-07-26 Male HEU-lo 2020184\n3 INF0100 0.6119129 4 Ctrl 2025-07-26 Male HEU-lo 1155040\n singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nSimilar to what we saw with select(), this approach can also be used for more than 1 column:\n\nData |> relocate(Tcells, Monocytes, .after=bid) |> head(3)\n\n bid Tcells Monocytes timepoint Condition Date infant_sex ptype\n1 INF0052 0.2804264 0.11796509 0 Ctrl 2025-07-26 Male HEU-hi\n2 INF0100 0.6748298 0.09477437 0 Ctrl 2025-07-26 Male HEU-lo\n3 INF0100 0.6119129 0.01545999 4 Ctrl 2025-07-26 Male HEU-lo\n root singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 2098368 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 2020184 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1155040 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Debris CD45_count\n1 587573 0.13723513 915203\n2 308583 0.13973396 1438047\n3 607477 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nWe can also modify the argument so that columns are placed before a certain column\n\nData |> relocate(Tcells, .before=Date) |> head(3)\n\n bid timepoint Condition Tcells Date infant_sex ptype root\n1 INF0052 0 Ctrl 0.2804264 2025-07-26 Male HEU-hi 2098368\n2 INF0100 0 Ctrl 0.6748298 2025-07-26 Male HEU-lo 2020184\n3 INF0100 4 Ctrl 0.6119129 2025-07-26 Male HEU-lo 1155040\n singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nAnd as we might suspect, we could specify a column index location rather than using a column name.\n\nData |> relocate(Date, .before=1) |> head(3)\n\n Date bid timepoint Condition infant_sex ptype root singletsFSC\n1 2025-07-26 INF0052 0 Ctrl Male HEU-hi 2098368 1894070\n2 2025-07-26 INF0100 0 Ctrl Male HEU-lo 2020184 1791890\n3 2025-07-26 INF0100 4 Ctrl Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D", + "objectID": "course/03_InsideFCSFile/index.html#detector-values", + "href": "course/03_InsideFCSFile/index.html#detector-values", + "title": "03 - Inside an FCS File", + "section": "Detector Values", + "text": "Detector Values\nThe next major stretch of keywords encode parameter values associated with the individual detectors for at the time of acquisition.\n\nDetectors <- DescriptionList[20:384]\nDetectors\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"\n\n\nFortunately for all involved, there is a consistently repeating pattern for the keywords corresponding to each detector. We can see that here for $P7B, $P7E, $P7N, $P7R, $P7TYPE, $P7V\n\nWhen referencing to the Flow Cytometry Standard documentation, here are what the particular keyword letters mean:\n\n\n\n\n\n\nB\n\n\n\nNumber of bits reserved for parameter number n\n\n\n\n\nDescriptionList$`$P7B`\n\n[1] \"32\"\n\n\n\n\n\n\n\n\n\nE\n\n\n\nAmplification type for parameter n. \n\n\n\n\nDescriptionList$`$P7E`\n\n[1] \"0,0\"\n\n\n\n\n\n\n\n\n\n\n\nN\n\n\n\nShort Name for parameter n. \n\n\n\n\nDescriptionList$`$P7N`\n\n[1] \"UV6-A\"\n\n\n\n\n\n\n\n\n\nR\n\n\n\nRange for parameter number n. \n\n\n\n\nDescriptionList$`$P7R`\n\n[1] \"4194304\"\n\n\n\n\n\n\n\n\n\n\n\nTYPE\n\n\n\nDetector type for parameter n. \n\n\n\n\nDescriptionList$`$P7TYPE`\n\n[1] \"Raw_Fluorescence\"\n\n\n\n\n\n\n\n\n\nV\n\n\n\nDetector voltage for parameter n. \n\n\n\n\nDescriptionList$`$P7V`\n\n[1] \"506\"\n\n\n\n\n\nWhile not immediately obvious, understanding what these keywords encoded has proven useful for our core. In our case, we have built an automated InstrumentQC dashboard for all the instruments at our core.\n\n\n\nBy extracting out from our daily QC bead .fcs files the stored N (Detector Name) and V (Gain/Voltage) values for all the individual detectors, it allows us to plot Levey-Jennings Plots for our individual instruments, giving us usually around a months warning before an individual laser begins to fail. This helps with scheduling the Field-Service Engineer visit before it starts impacting the actual data.\n\n\n\nWhile most of the detectors keywords are similar (only changing there individual name and voltage) there are a couple exceptions.\nFor the FSC/SSC parameters, instead of Raw_Fluorescence value for Type, we see the corresponding Scatter value get return. This in term is what is used by various commercial softwares to show those axis as linear instead of biexponential when selected.\n\n\n\nThis is similarly the case for the Time parameter, where in addition to Type being set to Time, the range also appears different to Raw/Scatters value.", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#rename", - "href": "course/04_IntroToTidyverse/index.html#rename", - "title": "04 - Introduction to Tidyverse", - "section": "rename", - "text": "rename\nAt this point, we are able to both move and select particular columns, allowing us to rearrange and subset a larger data.frame object however we want it to appear. However, as we encountered, some of the names contain special characters and spaces, requiring use of tick marks (``) to avoid issues. How can we change a column name?\nIn base R, we could change individual column names by assigning a new value with the assignment arrow to the corresponding column name index. For example, looking at our Subset object, wen could rename CD8+ as follows:\n\ncolnames(Subset)\n\n[1] \"bid\" \"Tcells\" \"CD8+\" \"CD4+\" \"timepoint\" \"Condition\"\n\ncolnames(Subset)[3]\n\n[1] \"CD8+\"\n\n\n\ncolnames(Subset)[3] <- \"CD8Positive\"\ncolnames(Subset)\n\n[1] \"bid\" \"Tcells\" \"CD8Positive\" \"CD4+\" \"timepoint\" \n[6] \"Condition\" \n\n\nWith the tidyverse, we can use the rename() function which removes the need to look up the column index number. The way we write the argument is placing within the parenthesis the old name to the right of the equals sign, with the new name to the left\n\nRenamed <- Subset |> rename(CD4_Positive = `CD4+`)\ncolnames(Renamed)\n\n[1] \"bid\" \"Tcells\" \"CD8Positive\" \"CD4_Positive\" \"timepoint\" \n[6] \"Condition\" \n\n\nIf we wanted to rename multiple column names at once, we would just need to include a comma between the individual rename arguments within the parenthesis.\n\nRenamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`)\ncolnames(Renamed_Multiple)\n\n[1] \"specimen\" \"Tcells\" \"CD8Positive\" \"CD4Positive\" \n[5] \"timepoint_months\" \"stimulation\"", + "objectID": "course/03_InsideFCSFile/index.html#middle-metadata", + "href": "course/03_InsideFCSFile/index.html#middle-metadata", + "title": "03 - Inside an FCS File", + "section": "Middle Metadata", + "text": "Middle Metadata\nOnce we are out of the detector keywords, we find the last of the $Metadata associated keywords.\n\nDetectors <- DescriptionList[385:398]\nDetectors\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\nAmong those of potential interest\n\n\n\n\n\n\nProj\n\n\n\nOften corresponding to the experiment file name\n\n\n\n\nDescriptionList$`$PROJ`\n\n[1] \"CellCounts4L_AB_05\"\n\n\n\n\n\n\n\n\n\nSpillover\n\n\n\nWhere the internal spillover matrix is stored (we will revisit during compensation)\n\n\n\n\nDescriptionList$`$SPILLOVER`\n\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n\n\n\n\n\n\n\n\nTOT\n\n\n\nTotal events (in this case my downsampled 100 cells)\n\n\n\n\nDescriptionList$`$TOT`\n\n[1] \"100\"\n\n\n\n\n\n\n\n\n\nVolume\n\n\n\nVolume amount acquired during acquisition.\n\n\n\n\nDescriptionList$`$VOL`\n\n[1] \"30.31\"\n\n\n\n\n\n\n\n\n\nSoftware\n\n\n\nSoftware used and version\n\n\n\n\nDescriptionList$CREATOR\n\n[1] \"SpectroFlo 3.3.0\"\n\n\n\nYou will notice at this point, the keyword names including a “$” symbol have stopped, so tick marks are no longer required (except when there is a space in the name). The only $ remaining is being used as a selector for a particular item in the list.\n\nDetectors <- DescriptionList[390:398]\nDetectors\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\n\n\n\n\n\n\nFILENAME\n\n\n\nBasically the full file.path to the .fcs file of interest.\n\n\n\n\nDescriptionList$FILENAME\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n\n\n\n\n\n\n\n\nGROUPNAME\n\n\n\nThe Name assigned to the acquisition Group.\n\n\n\n\nDescriptionList$GROUPNAME\n\n[1] \"ND050\"", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#pull", - "href": "course/04_IntroToTidyverse/index.html#pull", - "title": "04 - Introduction to Tidyverse", - "section": "pull", - "text": "pull\nSometimes, we may want to retrieve individual values present in a column, to use within either a vector or a list. We can do this using the pull() function, which will retrieve the column contents and strip the column formatting\n\nData |> pull(Date) |> head(5)\n\n[1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nThis can be useful when we are doing data exploration, and trying to determine how many unique variants might be present. For example, if we wanted to see what days individual samples were acquired, we could pull() the data and pass it to the unique() function:\n\nData |> pull(Date) |> unique()\n\n[1] \"2025-07-26\" \"2025-07-29\" \"2025-07-31\" \"2025-08-05\" \"2025-08-07\"\n[6] \"2025-08-22\" \"2025-08-28\" \"2025-08-30\"", + "objectID": "course/03_InsideFCSFile/index.html#laser-metadata", + "href": "course/03_InsideFCSFile/index.html#laser-metadata", + "title": "03 - Inside an FCS File", + "section": "Laser Metadata", + "text": "Laser Metadata\nNext up, there is a small stretch of keywords containing the values associated with the individual lasers as far as delays and area scaling factors for a particular day (also useful when plotted).\n\nDetectors <- DescriptionList[399:410]\nDetectors\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#filter-rows", - "href": "course/04_IntroToTidyverse/index.html#filter-rows", - "title": "04 - Introduction to Tidyverse", - "section": "filter (Rows)", - "text": "filter (Rows)\nSo far, we have been working with dplyr functions primarily used when working with and subsetting columns (including select(), pull(), rename() and relocate()). What if we wanted to work with rows of a data.frame? This is where the filter() function is used.\nThe Condition column in this Dataset appears to be indicating whether the samples were stimulated. Let’s see how many unique values are contained within that column\n\nData |> pull(Condition) |> unique() \n\n[1] \"Ctrl\" \"PPD\" \"SEB\" \n\n\nIn the case of this dataset, looks like the .fcs files where treated with either left alone, treated with PPD (Purified Protein Derrivative) or SEB. What if we wanted to subset only those treated with PPD?\nWithin filter(), we would specify the column name as the first argument, and ask that only values equal to (==) “PPD” be returned. Notice in this case, “” are needed, as we are asking for a matching character value.\n\nPPDOnly <- Data |> filter(Condition == \"PPD\")\nhead(PPDOnly, 5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nWhile this works, using “==” to match can glitch, especially with character values. Using the %in% operator is a better way of identifying and extracting only the rows whose Condition column contains “PPD”\n\nData |> filter(Condition %in% \"PPD\") |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nSimilar to what we saw for select(), we can grab rows that contain various values at once. We would just need to modify the second part of the argument. If we wanted to grab rows whose Condition column contained either PPD or SEB, we would need to provide that argument as a vector, placing both within c()/\n\nData |> filter(Condition %in% c(\"PPD\", \"SEB\")) |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nAlternatively, we could have set up the vector externally, and then provided it to filter()\n\nTheseConditions <- c(\"PPD\", \"SEB\")\nData |> filter(Condition %in% TheseConditions) |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nWhile this works when we have a limited number of variant condition values, what if had many more but only wanted to exclude one value? As we saw when learning about Conditionals, when we add a ! in front of a logical value, we get the opposite logical value returned\n\nIsThisASpectralInstrument <- TRUE\n\n!IsThisASpectralInstrument\n\n[1] FALSE\n\n\nIn the context of the dplyr package, we can use ! within the filter() to remove rows that contain a certain value\n\nSubset <- Data |> filter(!Condition %in% \"SEB\")\nSubset |> pull(Condition) |> unique()\n\n[1] \"Ctrl\" \"PPD\" \n\n\nLikewise, we can also use it with the select() to exclude columns we don’t want to include\n\nSubset <- Data |> select(!timepoint)\nSubset[1:3,]\n\n bid Condition Date infant_sex ptype root singletsFSC\n1 INF0052 Ctrl 2025-07-26 Male HEU-hi 2098368 1894070\n2 INF0100 Ctrl 2025-07-26 Male HEU-lo 2020184 1791890\n3 INF0100 Ctrl 2025-07-26 Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570", + "objectID": "course/03_InsideFCSFile/index.html#display", + "href": "course/03_InsideFCSFile/index.html#display", + "title": "03 - Inside an FCS File", + "section": "Display", + "text": "Display\nThen there is a stretch matching whether a particular detector needs to be displayed as linear (in the case of time and scatter) or as log (for individual detectors).\n\nDetectors <- DescriptionList[412:472]\nDetectors\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"\n\n\nAnd a few final keywords with threshold, window scaling and other user selected settings.\n\nDetectors <- DescriptionList[473:476]\nDetectors\n\n$THRESHOLD\n[1] \"(FSC,50000)\"\n\n$TUBENAME\n[1] \"05\"\n\n$USERSETTINGNAME\n[1] \"DTR_CellCounts\"\n\n$`WINDOW EXTENSION`\n[1] \"3\"", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#mutate", - "href": "course/04_IntroToTidyverse/index.html#mutate", - "title": "04 - Introduction to Tidyverse", - "section": "mutate", - "text": "mutate\nAs we can see, with just these handful of functions, we have the building blocks to rearrange and subset a larger data.frame into a format that we prefer. But what if we wanted to alter the content of a column, or add new columns to an existing data.frame? This is where the mutate() function can be used.\nLet’s start by slimming down our current Data to a smaller workable example, highlighting the functions and pipes we learned about today\n\nTidyData <- Data |> filter(Condition %in% \"Ctrl\") |> filter(timepoint %in% \"0\") |>\n select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |>\n rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen)\n\n\nTidyData\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n\n\nThe mutate() function can be used to modify existing columns, as well as to create new ones. For example, let’s derrive the proportion of T cells from the overall CD45 gate. To do so, within the parenthesis, we would specify a new column name, and then divide the original columns:\n\nTidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count)\nTidyData\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n Tcells_ProportionCD45\n1 0.18003765\n2 0.14480820\n3 0.31015921\n4 0.18540010\n5 0.23110302\n6 0.07796568\n7 0.10221747\n8 0.12578030\n9 0.08839285\n10 0.23815220\n11 0.47942008\n12 0.27147570\n13 0.26442564\n14 0.22484948\n15 0.38022498\n16 0.21845195\n17 0.22564783\n18 0.11678076\n19 0.30514067\n20 0.15261613\n21 0.04313730\n22 0.14301785\n23 0.17238666\n\n\nWe can see that we have many significant digits being returned. Let’s round this new column to 2 significant digits by applying the round() function\n\nTidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2))\nTidyData \n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n Tcells_ProportionCD45 TcellsRounded\n1 0.18003765 0.18\n2 0.14480820 0.14\n3 0.31015921 0.31\n4 0.18540010 0.19\n5 0.23110302 0.23\n6 0.07796568 0.08\n7 0.10221747 0.10\n8 0.12578030 0.13\n9 0.08839285 0.09\n10 0.23815220 0.24\n11 0.47942008 0.48\n12 0.27147570 0.27\n13 0.26442564 0.26\n14 0.22484948 0.22\n15 0.38022498 0.38\n16 0.21845195 0.22\n17 0.22564783 0.23\n18 0.11678076 0.12\n19 0.30514067 0.31\n20 0.15261613 0.15\n21 0.04313730 0.04\n22 0.14301785 0.14\n23 0.17238666 0.17", + "objectID": "course/03_InsideFCSFile/index.html#flowcore-parameters", + "href": "course/03_InsideFCSFile/index.html#flowcore-parameters", + "title": "03 - Inside an FCS File", + "section": "flowCore Parameters", + "text": "flowCore Parameters\nDepending on the arguments selected during read.FCS(), we might also encounter additional keywords that are added in by flowCore. For example, we do not see these keywords when “transformation” is set to FALSE.\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = FALSE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot\n\n\n\nNoChange <- keyword(flowCoreCheck)\nDetectors <- NoChange [476:500]\nDetectors\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n\nBy contrast, if we had set “transformation” to TRUE:\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = TRUE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n599 keywords are stored in the 'description' slot\n\n\n\nYesChange <- keyword(flowCoreCheck)\nDetectors <- YesChange [476:500]\nDetectors\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n$transformation\n[1] \"applied\"\n\n$`flowCore_$P1Rmax`\n[1] \"272140\"\n\n$`flowCore_$P1Rmin`\n[1] \"0\"\n\n$`flowCore_$P2Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P2Rmin`\n[1] \"-111\"\n\n$`flowCore_$P3Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P3Rmin`\n[1] \"-111\"\n\n$`flowCore_$P4Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P4Rmin`\n[1] \"-111\"\n\n$`flowCore_$P5Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P5Rmin`\n[1] \"-111\"\n\n$`flowCore_$P6Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P6Rmin`\n[1] \"-111\"\n\n$`flowCore_$P7Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P7Rmin`\n[1] \"-111\"\n\n$`flowCore_$P8Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P8Rmin`\n[1] \"-26.3464946746826\"\n\n$`flowCore_$P9Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P9Rmin`\n[1] \"-111\"\n\n$`flowCore_$P10Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P10Rmin`\n[1] \"0\"\n\n$`flowCore_$P11Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P11Rmin`\n[1] \"-111\"\n\n$`flowCore_$P12Rmax`\n[1] \"4194304\"\n\n\n\n\nFor some flow cytometry R packages, you will notice when opening their exported .fcs outputs in commercial software that these flowCore keywords have ended up integrated. It is likely somewhere in the package code the author forgot to add set transformation to FALSE, which is why we are seeing these flowCore keywords after the fact.", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#arrange", - "href": "course/04_IntroToTidyverse/index.html#arrange", - "title": "04 - Introduction to Tidyverse", - "section": "arrange", - "text": "arrange\nAnd while we are here, let’s rearrange the rows so that they are descending based on the Tcell proportion. We can use this by using the desc() and arrange() functions from dplyr:\n\nTidyData <- TidyData |> arrange(desc(TcellsRounded))\n\nAnd let’s go ahead and filter() and identify the specimens that had more than 30% T cells as part of the overall CD45 gate (context, these samples were Cord Blood):\n\nTidyData |> filter(TcellsRounded > 0.3)\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0032 2025-08-05 0 Ctrl 361034 753064\n2 INF0159 2025-08-07 0 Ctrl 452551 1190219\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0166 2025-08-28 0 Ctrl 225650 739495\n Tcells_ProportionCD45 TcellsRounded\n1 0.4794201 0.48\n2 0.3802250 0.38\n3 0.3101592 0.31\n4 0.3051407 0.31\n\n\nWhich is we had wanted to just retrieve the specimen IDs, we could add pull() after a new pipe argument.\n\nTidyData |> filter(TcellsRounded > 0.3) |> pull(specimen)\n\n[1] \"INF0032\" \"INF0159\" \"INF0179\" \"INF0166\"\n\n\nAnd finally, since I may want to send the data to a supervisor, let’s go ahead and export this “tidyed” version of our data.frame out to it’s own .csv file. Working within our project folder, this would look like this:\n\nNewName <- paste0(\"MyNewDataset\", \".csv\")\nStorageLocation <- file.path(\"data\", NewName)\nStorageLocation\n\n[1] \"data/MyNewDataset.csv\"\n\n\n\nwrite.csv(TidyData, StorageLocation, row.names=FALSE)", + "objectID": "course/02_FilePaths/index.html", + "href": "course/02_FilePaths/index.html", + "title": "02 - File Paths", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nWelcome to the second week of Cytometry in R! This week we will learn about file.path, namely, how to communicate to our computer (and R) where various files are stored.", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "02 - File Paths" ] }, { - "objectID": "course/04_IntroToTidyverse/slides.html#read.csv", - "href": "course/04_IntroToTidyverse/slides.html#read.csv", - "title": "04 - Introduction to Tidyverse", - "section": "read.csv", - "text": "read.csv\n\n\n\n\n\n\n\n\n.\n\n\nWe will start by first loading in our copied over dataset (Dataset.csv) from it’s location in the project folder. If you are following the organization scheme we have been using throughout the course, your file path will look something like this:\n\n\n\n\n\n\n\n\n\n\nthefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"" - }, - { - "objectID": "course/04_IntroToTidyverse/slides.html#data.frame", - "href": "course/04_IntroToTidyverse/slides.html#data.frame", - "title": "04 - Introduction to Tidyverse", - "section": "data.frame", - "text": "data.frame\n\n\n\n\n\n\n\n\n.\n\n\nOr alternatively using the new-to-us glimpse() function\n\n\n\n\n\n\n\nglimpse(Data)\n\nError in `glimpse()`:\n! could not find function \"glimpse\"" - }, - { - "objectID": "course/04_IntroToTidyverse/slides.html#column-value-type", - "href": "course/04_IntroToTidyverse/slides.html#column-value-type", - "title": "04 - Introduction to Tidyverse", - "section": "Column value type", - "text": "Column value type\n\n\n\n\n\n\n\n\n.\n\n\nAs we saw last week, functions often need values that match a certain type (the paintbrush needing paint analogy). As we inspect the columns of Data, we can notice some of the columns contain values within that are character (ie. “char”) values. Others appear to contain numeric values (which are subtyped as either double (“ie. dbl”) or integer (ie. “int”)). At first glance, we do not appear to have any logical (ie. TRUE or FALSE) columns in this dataset." + "objectID": "course/02_FilePaths/index.html#set-up", + "href": "course/02_FilePaths/index.html#set-up", + "title": "02 - File Paths", + "section": "Set Up", + "text": "Set Up\nBefore we begin, let’s make sure you get the data needed for today transferred to your local computer, and then get the .fcs files copied over from there to your own working project folder. This is the process you will repeat each week throughout the course.\n\nNew Repository\nFirst off, login to your GitHub account. Once there, you will select the options to create a new repository (similar to what you did during Using GitHub)\n\n\n\nFor this week, let’s set this new repository up as a private repository, and call it Week2. This will keep things consistent with the file.paths we will be showing in the examples.\n\n\n\nOnce the new repository has been created, copy the URL.\n\n\n\nNext, open up Positron, set the interpreter to use R, and then select the option to bring in a “New Folder from Git”.\n\n\n\nPaste in your new repository’s url. Additionally, if you want to match file.paths shown in the examples, set your storage location to your local Documents folder (please note the start of the file.path will look differently depending on whether you are on Windows, MacOS, or Linux).\n\n\n\nYour new repository will then be imported from GitHub. Once this is done, create two subfolders (data and images) and a new .qmd file (naming it filepaths.qmd).\n\n\n\n\n\nSync\nWith this done, return to GitHub and open your forked version of the CytometryInR course folder. If you haven’t yet done so, click on sync to bring in this week’s code and datasets.\n\n\n\nReturning to Positron, you will need to switch Project Folders, switching from Week2 over to CytometryInR.\n\n\n\n\n\nPull\nOnce CytometryInR project folder has opened, you will need to pull in the new data from GitHub to your local computer.\n\n\n\n\n\nCopy Files to Week2\nOnce this is done, you will see within the course folder, containing this weeks folder (02_FilePaths). Within it there is a data folder with .fcs files. To avoid causing conflicts when bringing in next week’s materials, you will want to manually copy over these .fcs files (via your File Explorer) to the data folder within your “Week2” Project Folder.\n\n\n\n\n\nCommit and Push\nWhen you reopen your Week2 project folder in Positron, you should now be able to see the .fcs files within the data folder. Next, from the action bar on the far left, select the Source Control tab. Stage all the changes (as was done in Using Git), and write a short commit message.\n\n\n\nWith these files now being tracked by version control, push (ie. send) your changes to GitHub so that they are remotely backed up.\n\n\n\nAnd with this setup complete, you are now ready to proceed. Remember, run code and write notes in your working project folder (Week2 or otherwise named) to avoid conflicts next week in the CytometryInR folder when you are trying to bring in the Week #3 code and datasets.", + "crumbs": [ + "About", + "Intro to R", + "02 - File Paths" + ] }, { - "objectID": "course/04_IntroToTidyverse/slides.html#select-columns", - "href": "course/04_IntroToTidyverse/slides.html#select-columns", - "title": "04 - Introduction to Tidyverse", - "section": "select (Columns)", - "text": "select (Columns)\n\n\n\n\n\n\n\n\n.\n\n\nNow that we have read in our data, and have a general picture of the structure and contents, lets start learning the main dplyr functions we will be using throughout the course. To do this, lets go ahead and attach dplyr to our local environment via the library() call.\n\n\n\n\n\n\n\nlibrary(dplyr)" + "objectID": "course/02_FilePaths/index.html#working-directory", + "href": "course/02_FilePaths/index.html#working-directory", + "title": "02 - File Paths", + "section": "Working Directory", + "text": "Working Directory\nNow that we are back in our Week2 folder, let’s start by seeing our current location similarly to how our computer perceives it.\nWe will use getwd() function (ie. get working directory) to return the location of the folder we are currently inside of. For example, when getwd() is run within my Week2 project folder, I see the following location\n\ngetwd()\n\n\nThis returns a file path. The final location (Week2 in this case) is the Working Directory. Your computer when working in R will be descern other locations in relation to this directory.", + "crumbs": [ + "About", + "Intro to R", + "02 - File Paths" + ] }, { - "objectID": "course/04_IntroToTidyverse/slides.html#relocate", - "href": "course/04_IntroToTidyverse/slides.html#relocate", - "title": "04 - Introduction to Tidyverse", - "section": "relocate", - "text": "relocate\n\n\n\n\n\n\n\n\n.\n\n\nAlternatively, we occasionally want to move one column. While we could respecify the location using select(), specifying the names of all the other columns out in a line of code to just to rearrange one does not sound like a good use of time. For this reason, the second dplyr function we will be learning is the relocate() function." - }, - { - "objectID": "course/04_IntroToTidyverse/slides.html#rename", - "href": "course/04_IntroToTidyverse/slides.html#rename", - "title": "04 - Introduction to Tidyverse", - "section": "rename", - "text": "rename\n\n\n\n\n\n\n\n\n.\n\n\nAt this point, we are able to both move and select particular columns, allowing us to rearrange and subset a larger data.frame object however we want it to appear. However, as we encountered, some of the names contain special characters and spaces, requiring use of tick marks (``) to avoid issues. How can we change a column name?" - }, - { - "objectID": "course/04_IntroToTidyverse/slides.html#pull", - "href": "course/04_IntroToTidyverse/slides.html#pull", - "title": "04 - Introduction to Tidyverse", - "section": "pull", - "text": "pull\n\n\n\n\n\n\n\n\n.\n\n\nSometimes, we may want to retrieve individual values present in a column, to use within either a vector or a list. We can do this using the pull() function, which will retrieve the column contents and strip the column formatting\n\n\n\n\n\n\n\nData |> pull(Date) |> head(10)\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"" - }, - { - "objectID": "course/04_IntroToTidyverse/slides.html#filter-rows", - "href": "course/04_IntroToTidyverse/slides.html#filter-rows", - "title": "04 - Introduction to Tidyverse", - "section": "filter (Rows)", - "text": "filter (Rows)\n\n\n\n\n\n\n\n\n.\n\n\nSo far, we have been working with dplyr functions primarily used when working with and subsetting columns (including select(), pull(), rename() and relocate()). What if we wanted to work with rows of a data.frame? This is where the filter() function is used." - }, - { - "objectID": "course/04_IntroToTidyverse/slides.html#mutate", - "href": "course/04_IntroToTidyverse/slides.html#mutate", - "title": "04 - Introduction to Tidyverse", - "section": "mutate", - "text": "mutate\n\n\n\n\n\n\n\n\n.\n\n\nAs we can see, with just these handful of functions, we have the building blocks to rearrange and subset a larger data.frame into a format that we prefer. But what if we wanted to alter the content of a column, or add new columns to an existing data.frame? This is where the mutate() function can be used." - }, - { - "objectID": "course/04_IntroToTidyverse/slides.html#arrange", - "href": "course/04_IntroToTidyverse/slides.html#arrange", - "title": "04 - Introduction to Tidyverse", - "section": "arrange", - "text": "arrange\n\n\n\n\n\n\n\n\n.\n\n\nAnd while we are here, let’s rearrange the rows so that they are descending based on the Tcell proportion. We can use this by using the desc() and arrange() functions from dplyr:\n\n\n\n\n\n\n\nTidyData <- TidyData |> arrange(desc(TcellsRounded))" - }, - { - "objectID": "course/03_InsideFCSFile/slides.html#getting-set-up", - "href": "course/03_InsideFCSFile/slides.html#getting-set-up", - "title": "03 - Inside an FCS File", - "section": "Getting Set Up", - "text": "Getting Set Up" - }, - { - "objectID": "course/03_InsideFCSFile/slides.html#flowcore", - "href": "course/03_InsideFCSFile/slides.html#flowcore", - "title": "03 - Inside an FCS File", - "section": "flowCore", - "text": "flowCore\n\n\n\n\n\n\n\n\n.\n\n\nWe will be using the flowCore package, which is the oldest and most-frequently downloaded flow cytometry package on Bioconductor." - }, - { - "objectID": "course/03_InsideFCSFile/slides.html#flowframe", - "href": "course/03_InsideFCSFile/slides.html#flowframe", - "title": "03 - Inside an FCS File", - "section": "flowFrame", - "text": "flowFrame\n\n\n\n\n\n\n\n\n.\n\n\nFor read.FCS(), it accepts several arguments. The argument “filename” is where we provide our file.path to .fcs file that we wish to load into R. Let’s go ahead and do so\n\n\n\n\n\n\n\nread.FCS(filename=firstfile)" - }, - { - "objectID": "course/03_InsideFCSFile/slides.html#early-metadata", - "href": "course/03_InsideFCSFile/slides.html#early-metadata", - "title": "03 - Inside an FCS File", - "section": "Early Metadata", - "text": "Early Metadata\n\n\n\n\n\n\n\n\n.\n\n\nWithin the initial portion, we are getting back metadata keywords related to where and how the particular file was acquired. Keywords of potential interest include:\n\n\n\n\n\n\n\n\n\n\n\n\n\nStart Time\n\n\nWhat time was the .fcs file acquired\n\n\n\n\n\n\n\nDescriptionList$`$BTIM`\n\n[1] \"13:55:29.85\"" - }, - { - "objectID": "course/03_InsideFCSFile/slides.html#detector-values", - "href": "course/03_InsideFCSFile/slides.html#detector-values", - "title": "03 - Inside an FCS File", - "section": "Detector Values", - "text": "Detector Values\n\n\n\n\n\n\n\n\n.\n\n\nThe next major stretch of keywords encode parameter values associated with the individual detectors for at the time of acquisition.\n\n\n\n\n\n\n\nDetectors <- DescriptionList[20:384]\nDetectors\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"" - }, - { - "objectID": "course/03_InsideFCSFile/slides.html#middle-metadata", - "href": "course/03_InsideFCSFile/slides.html#middle-metadata", - "title": "03 - Inside an FCS File", - "section": "Middle Metadata", - "text": "Middle Metadata\n\n\n\n\n\n\n\n\n.\n\n\nOnce we are out of the detector keywords, we find the last of the $Metadata associated keywords.\n\n\n\n\n\n\n\nDetectors <- DescriptionList[385:398]\nDetectors\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"" - }, - { - "objectID": "course/03_InsideFCSFile/slides.html#laser-metadata", - "href": "course/03_InsideFCSFile/slides.html#laser-metadata", - "title": "03 - Inside an FCS File", - "section": "Laser Metadata", - "text": "Laser Metadata\n\n\n\n\n\n\n\n\n.\n\n\nNext up, there is a small stretch of keywords containing the values associated with the individual lasers as far as delays and area scaling factors for a particular day (also useful when plotted).\n\n\n\n\n\n\n\nDetectors <- DescriptionList[399:410]\nDetectors\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"" - }, - { - "objectID": "course/03_InsideFCSFile/slides.html#display", - "href": "course/03_InsideFCSFile/slides.html#display", - "title": "03 - Inside an FCS File", - "section": "Display", - "text": "Display\n\n\n\n\n\n\n\n\n.\n\n\nThen there is a stretch matching whether a particular detector needs to be displayed as linear (in the case of time and scatter) or as log (for individual detectors).\n\n\n\n\n\n\n\nDetectors <- DescriptionList[412:472]\nDetectors\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"" - }, - { - "objectID": "course/03_InsideFCSFile/slides.html#flowcore-parameters", - "href": "course/03_InsideFCSFile/slides.html#flowcore-parameters", - "title": "03 - Inside an FCS File", - "section": "flowCore Parameters", - "text": "flowCore Parameters\n\n\n\n\n\n\n\n\n.\n\n\nDepending on the arguments selected during read.FCS(), we might also encounter additional keywords that are added in by flowCore. For example, we do not see these keywords when “transformation” is set to FALSE.\n\n\n\n\n\n\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = FALSE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot" - }, - { - "objectID": "course/02_FilePaths/Downsampler.html", - "href": "course/02_FilePaths/Downsampler.html", - "title": "Downsampling", - "section": "", - "text": "Due to trying to keep the overall file size down, I am downsampling to 100 events. For anyone interested in how I did this, this Quarto Markdown Document contains the code needed to repeat the process." - }, - { - "objectID": "course/02_FilePaths/Downsampler.html#specify-file.path-and-identify-files", - "href": "course/02_FilePaths/Downsampler.html#specify-file.path-and-identify-files", - "title": "Downsampling", - "section": "Specify file.path and identify files", - "text": "Specify file.path and identify files\nDue to the counts being conducter on two separate instruments, the number of columns differs, so they will need to be loaded into separate GatingSet objects.\n\nStorageLocation <- file.path(\"course\", \"02_FilePaths\", \"data\")\nExisting <- list.files(StorageLocation, pattern=\".fcs\", full.names=TRUE)\nList1 <- Existing[1:2] # 3L Aurora\nList2 <- Existing[3:8] # 4L Aurora" - }, - { - "objectID": "course/02_FilePaths/Downsampler.html#load-.fcs-files-into-a-gatingset", - "href": "course/02_FilePaths/Downsampler.html#load-.fcs-files-into-a-gatingset", - "title": "Downsampling", - "section": "Load .fcs files into a GatingSet", - "text": "Load .fcs files into a GatingSet\nLoad in files to their respective GatingSet objects\n\ncs1 <- load_cytoset_from_fcs(List1, truncate_max_range = FALSE, transformation = FALSE)\ngs1 <- GatingSet(cs1)\n\ncs2 <- load_cytoset_from_fcs(List2, truncate_max_range = FALSE, transformation = FALSE)\ngs2 <- GatingSet(cs2)" + "objectID": "course/02_FilePaths/index.html#directories", + "href": "course/02_FilePaths/index.html#directories", + "title": "02 - File Paths", + "section": "Directories", + "text": "Directories\nWithin this working directory, we have a variety of project folders and files related to the course. We can see the folders that are present using the list.dirs() function.\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)\n\n\nWithin this list.dirs() function, we are specifying two arguments with which we will be working with later today, full.names and recursive. For now, lets set their arguments to FALSE, which means they conditions they implement are inactive (turned off).\n\n\nThe path argument is currently set to “.”, which is a stand-in for the present directory. In R, if an argument is not specified directly, it is inferred based on an order of expected arguments. Thus, if not present, we could still get the same output as seen before.\n\nlist.dirs(full.names=FALSE, recursive=FALSE)\n\n\n\n\nWithin Positron, in addition to visible folders, we also have hidden folders (denoted by the “.” in front of the folder name when using list.dirs()). In the case of one of our course website folders, we can see a “.quarto” folder shown in a lighter gray . The “.git” folder we saw from list.dirs() is typically hidden when viewing from Positron.\n\nIn the case of Week2, the two not-hidden folders we created are listed. We will see how to navigate these in a second.", + "crumbs": [ + "About", + "Intro to R", + "02 - File Paths" + ] }, { - "objectID": "course/01_InstallingRPackages/index.html", - "href": "course/01_InstallingRPackages/index.html", - "title": "01 - Installing R Packages", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nWelcome to the first week of Cytometry in R! This week we will be diving into how R packages work, and the how to go about installing them.\nBefore getting started, please make sure you have completed the creating a GitHub and Workstation Setup walk-throughs, since we will begin where they left off once the required software was successfully installed.", + "objectID": "course/02_FilePaths/index.html#variables", + "href": "course/02_FilePaths/index.html#variables", + "title": "02 - File Paths", + "section": "Variables", + "text": "Variables\nBefore exploring file paths, we need to have some basic R code knowledge that we can use to work with them. Within R, we have the ability to assign particular values (be they character strings, numbers or logicals) to objects (ie. variables) that can be used when called upon later.\nFor example:\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\nIn this case, the variable name is what the assignment arrow (“<-”) is pointing at. In this case, WhatDayDidIWriteThis\n\n\nWhen we run this, we create a variable, that will appear within the right-sidebar.\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\n\n\n\nThese variables can subsequently be retrieved by printing (ie. running) the name of the variable\n\nWhatDayDidIWriteThis \n\n[1] \"Saturday\"\n\n\n\n\nYou can create variables with almost any name you can think of\n\nTopSecretMeetingDay <- \"Saturday\"\n\n\n\nWith a few exceptions. R doesn’t play well with spaces:\n\nTop Secret Meeting Day <- \"Saturday\"\n\nError in parse(text = input): <text>:1:5: unexpected symbol\n1: Top Secret\n ^\n\n\n\n\nBut does play well with underscores:\n\nTop_Secret_Meeting_Day <- \"Saturday\"\n\n\n\nThe above (with individual words separated by _) is collectively known as snake case. The alternate way to help delineate variable names is “camelCase”, with first letter of each word being capitalized (seen in the previous example).\n\n\n\n\nTopSecretMeetingDay\n\n[1] \"Saturday\"\n\n\n\n\nYou can overwrite a Variable name by assigning a different value to it:\n\nTopSecretMeetingDay <- \"Monday\"\n\n\nTopSecretMeetingDay\n\n[1] \"Monday\"\n\n\n\n\nYou can also remove individual variables via the rm function\n\nrm(Top_Secret_Meeting_Day)\n\n\n\nOr if trying to remove all, via the right sidebar\n\n\n\nIn the prior case, we are creating a variable that is a “string” of character values, due to our use of “” around the word. We can see this when we use the str() function.\n\nFluorophores <- \"FITC\"\nstr(Fluorophores)\n\n chr \"FITC\"\n\n\nThe “chr” in front denotating that Fluorophores contains a character string.\n\n\nThis could also be retrieved using the class() function.\n\nclass(Fluorophores)\n\n[1] \"character\"\n\n\n\n\nAlternatively, we could assign a numeric value to a variable\n\nFluorophores <- 29\nstr(Fluorophores)\n\n num 29\n\n\nWhich returns “num”, ie. numeric.\n\n\nWe can also specify a logical (ie. True or FALSE) to a particular object\n\nIsPerCPCy5AGoodFluorophore <- FALSE\nstr(IsPerCPCy5AGoodFluorophore)\n\n logi FALSE\n\n\nWhich returns logi in front, denoting this variable contains a logical value.\n\n\nLast week, when we were installing dplyr, the reason that installation failed was install.packages() expects a character string. However, when we left off the ““, it looked within our local environments created variables for the dplyr variable, couldn’t find it, and thus failed.\nWe could of course, have assigned a character value to a variable name, and then used that variable name, which would have worked.\n\nPackageToInstall <- \"dplyr\"\n\ninstall.packages(PackageToInstall)", "crumbs": [ "About", - "Intro to R" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#set-up", - "href": "course/01_InstallingRPackages/index.html#set-up", - "title": "01 - Installing R Packages", - "section": "Set Up", - "text": "Set Up\nAlright, with the background out of the way, let’s get started!\n\n\n\n\n\n\nImportant\n\n\n\nPlease make sure to sync your forked version of the CytometryInR repository, and 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.\n\n\n\n\n\n\n\n\nWarning\n\n\n\nPlease remember to always copy over the new material from your local CytometryInR folder to a separate Project Folder that you created and named (ex. “Week_01” or “MyLearningFolder”, etc.). This will ensure any edits you make to the files do not affect your ability to bring in next week’s materials to the CytometryInR folder\n\n\n\n\nAfter pulling the new data and code locally, open CytometryInR, open the course folder, and open the 01_InstallingRPackages folder. From here, copy the index.qmd file to your own working Project Folder (ex. Week_01) where you can work on it without causing any conflicts. Then return to Positron and open up your working project folder (ex. Week_01).\n\n\n\nNext up, within Positron, let’s make sure to select R as the coding language being used for this session.\n\n\n\nNow that R is running within Positron, the console (lower portion of the screenn) is now able to run (ie. execute) any R code that is sent to it.", + "objectID": "course/02_FilePaths/index.html#indexing", + "href": "course/02_FilePaths/index.html#indexing", + "title": "02 - File Paths", + "section": "Indexing", + "text": "Indexing\nNot all variables contain single objects.\nFor example, we can modify Fluorophores and add additional entries:\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nstr(Fluorophores)\n\n chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n\n\nThe c stands for concatenate. It concatenates the objects into a larger object, known as a vector.\nIn this case, you notice in addition to the specification the values are characters, we get a [1:4], denoting four objects are present.\n\n\nWe can similarly retrieve this information using the length() function\n\nlength(Fluorophores)\n\n[1] 4\n\n\n\n\nWhen multiple objects are present, we can specify them individidually by providing their index number within square brackets [].\n\nFluorophores[1]\n\n[1] \"BV421\"\n\n\n\n\n\nFluorophores[3]\n\n[1] \"PE\"\n\n\n\n\nOr specify in sequence using a colon (:)\n\nFluorophores[3:4]\n\n[1] \"PE\" \"APC\"\n\n\n\n\nOr if not adjacent, reusing c within the square brackets\n\nFluorophores[c(1,4)]\n\n[1] \"BV421\" \"APC\" \n\n\n\n\nWe will revisit these concepts throughout the course, with what we have covered today, this will help us create file.paths and select fcs files that we want to work with via index number.", "crumbs": [ "About", - "Intro to R" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#checking-for-loaded-packages", - "href": "course/01_InstallingRPackages/index.html#checking-for-loaded-packages", - "title": "01 - Installing R Packages", - "section": "Checking for Loaded Packages", - "text": "Checking for Loaded Packages\nFor the contents (ie. the functions) of an R package to be available for your computer to use, they must first be activated (ie. loaded) into your local environment. We will first learn how to check what R packages are currently active.\n\n\n\nAccessing Help Documentation\nWithin your own index.qmd (or a new .qmd file that you created), type out/copy-paste the following sessionInfo() function:\n\nsessionInfo()\n\n\n\nIf you hover over the line of code within Positron, you will glimpse the help file for the particular function you are hovering over.\n\n\n\nIn this case, we can see the help documentation corresponding for sessionInfo(). Beyond hovering over the function, this can also be accessed by adding a ? directly in front of the function, and then running that line of code.\n\n?sessionInfo()\n\n\n\n\nWhen executed, the function’s help file documentation will open up within the Help tab in the secondary side bar on the right-side of the screen. Glancing at the top of the page we can see the name of the package that contains the sessionInfo() function ({utils}). Scrolling down the help page past all the documentation, we can see a link to the index page.\n\n\n\nAfter clicking, the Help tab switches from viewing the documentation for the sessionInfo() function, to showing all the functions within the utils package. Most R packages contain help documentation, so this process can be adapted to find out additional information about what a function does, and what arguments are needed to produce customized outputs.\n\n\n\n\n\nsessionInfo()\nWithin your .qmd file, let’s go ahead and run the following code-block:\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] htmlwidgets_1.6.4 BiocManager_1.30.27 compiler_4.5.2 \n [4] fastmap_1.2.0 cli_3.6.5 tools_4.5.2 \n [7] htmltools_0.5.9 otel_0.2.0 yaml_2.3.12 \n[10] rmarkdown_2.30 knitr_1.51 jsonlite_2.0.0 \n[13] xfun_0.56 digest_0.6.39 rlang_1.1.7 \n[16] evaluate_1.0.5 \n\n\n\n\nThe outputs that get returned by sessionInfo() will vary a bit depending on your computer’s operating system, and the version of R you have installed.\nFor today, let’s focus on the last two elements of the output:\n\n\n\nThe R software itself is made up of several base R packages, that are loaded automatically. These contain everything you need to read, write and run R code on your computer. You can see these packages are the stats, graphics, grDevices, utils, datasets, methods and base packages.\nAs we install additional R packages and load them using the library() function throughout this session, sporadically re-run sessionInfo() to see how this list of R packages changes.", + "objectID": "course/02_FilePaths/index.html#listing-files", + "href": "course/02_FilePaths/index.html#listing-files", + "title": "02 - File Paths", + "section": "Listing Files", + "text": "Listing Files\nAfter this detour into variables and indexing, let’s return our focus to how to use these in context of file paths. Working from within our Week2 project folder, let’s see what directories (folders) are present\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)\n\n\n\n\nWe can also list any files that are present within our working directory using the list.files() function.\n\nlist.files()\n\n\nIn this case, in addition to our filepaths.qmd file, we can see the LICENSE and README files created when we set up the repository.\n\n\nWe can also specify a particular folder we want to show items present within by changing the path argument. For example, if we wanted to see the contents of the “data” folder\n\nlist.files(path=\"data\", full.names=FALSE, recursive=FALSE)\n\n\nWhich in this case returns the fcs files we copied over at the start of this lesson.\n\n\nIn this case, there are no folders under “data”. Let’s go ahead and create a new one, calling it target.", "crumbs": [ "About", - "Intro to R" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#installing-from-cran", - "href": "course/01_InstallingRPackages/index.html#installing-from-cran", - "title": "01 - Installing R Packages", - "section": "Installing from CRAN", - "text": "Installing from CRAN\nWe will start by installing R packages that are part of the CRAN repository. This is the main R package repository, being part of the broader R software project. In the context of this course, R packages that work primarily with general data structure (rows, columns, matrices, etc.) or visualizations will predominantly be found within this repository.\nThese include the tidyverse packages. These packages have collectively made R easier to use by smoothing out some of the rough edges of base R, which is why R has seen major growth within the last decade. We will be installing several of these R packages today.\n\n\n\ndplyr\nOur first R package we will install during this session is the dplyr package. Since it is hosted on the CRAN repository, to install it, we will need to use the CRAN-specific installation function install.packages().\n\n?install.packages()\n\n\n\n\nFor the install.packages() function, we place within the () the name of the R package from CRAN that we wish to install.\n\ninstall.packages(\"dplyr\")\n\n\n\n\n\n\n\n\n\nTip\n\n\n\nA usual struggle point for beginners is that install.packages() requires ” ” to be placed around the package name. Forgetting them results in the error that we see below.\n\n\n\ninstall.packages(dplyr)\n\nError:\n! object 'dplyr' not found\n\n\n\n\n\ninstall.packages(\"dplyr\")\n\nGo ahead and click on “Run Cell” next to your code-block, to install the dplyr R package.\n\n\nWhen a package starts to install, you will see your console start to display text resembling that seen in the image below (varying a bit depending on your computers operating system).\n\n\n\nWithin this opening scrawl, you will see the location on your computer the R package is being installed to, as well as the file location for the R package being retrieved on CRAN.\nIf the package is successfully located, your computer will proceed to first download, then unpack (ie. unzip) it, before attempting to install to the target folder.\n\n\n\nThe final steps of the installation process involved various steps to verify everything was copied successfully, the help documentation assembled, and that the R package is capable of being loaded. If this is the case, you will see the “Done” line appear, as well as a mention where the original downloaded source package files has been stashed (usually a temp folder).\n\n\n\n\nAttaching packages via library()\nIf an R package has been installed successfully, we are now able to load it (ie. make it’s functions available) to our local environment using the library() function.\n\n?library()\n\n\n\nUnlike install.packages(), where we needed “” around the package name, the library() function does not require “” around the package name. Let’s go ahead and load in dplyr, making its respective functions to our local environment.\n\nlibrary(dplyr)\n\n\nAttaching package: 'dplyr'\n\n\nThe following objects are masked from 'package:stats':\n\n filter, lag\n\n\nThe following objects are masked from 'package:base':\n\n intersect, setdiff, setequal, union\n\n\n\n\nFrom the output, we can see that dplyr has been attached. There are also a couple functions within dplyr that have identical names to functions within the stats and base packages. To avoid confusion, these 6 functions are masked, which is why we get the additional messages.\nWith dplyr now loaded via the library() call, let’s check sessionInfo() to see what has changed.\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] dplyr_1.2.0 BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 \n [4] tidyselect_1.2.1 xfun_0.56 magrittr_2.0.4 \n [7] glue_1.8.0 tibble_3.3.1 knitr_1.51 \n[10] pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 \n[13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 \n[16] vctrs_0.7.1 compiler_4.5.2 tools_4.5.2 \n[19] evaluate_1.0.5 pillar_1.11.1 yaml_2.3.12 \n[22] otel_0.2.0 BiocManager_1.30.27 rlang_1.1.7 \n[25] jsonlite_2.0.0 htmlwidgets_1.6.4 \n\n\n\n\nSimilar to what was seen for the base R packages, dplyr is now attached. This means we should theoretically now have access to all its functions. We can verify this by seeing if we can look up the dplyr packages select() function and it’s respective help page.\n\n?select\n\n\n\n\nSince its parent package has been attached to our local environment (via the library() call), we can see dplyr functions appear as suggestions as we begin to type.\nBy contrast, is we check for the ggplot() function from the ggplot2 package (which we haven’t yet installed or attached via library()), no suggestions will pop up.\n\n?ggplot\n\nNo documentation for 'ggplot' in specified packages and libraries:\nyou could try '??ggplot'\n\n\n\n\nBeyond individual functions, some R packages also have help landing pages, that can be similarly accessed by adding a ? in front of the package name:\n\n\n\n\n\nUnattaching\nSo far, we have installed an R package, and then attached it (via library()). How would we reverse these steps?\nWell, to unload it from the local environment, there are a couple options. You could of course simply shut down Positron. The local environment only exist in context of when you open and close the session, which closing the program will do. All previously loaded R packages will be unattached, which is why when you start a new session you will need to load in all packages you plan on using via library().\nAlternatively, although less used, you could detach() it via your console:\n\ndetach(\"package:dplyr\", unload=TRUE)\n\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 \n [4] tidyselect_1.2.1 xfun_0.56 magrittr_2.0.4 \n [7] glue_1.8.0 tibble_3.3.1 knitr_1.51 \n[10] pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 \n[13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 \n[16] vctrs_0.7.1 compiler_4.5.2 tools_4.5.2 \n[19] evaluate_1.0.5 pillar_1.11.1 yaml_2.3.12 \n[22] otel_0.2.0 BiocManager_1.30.27 rlang_1.1.7 \n[25] jsonlite_2.0.0 htmlwidgets_1.6.4 \n\n\n\n\nLooking at the sessionInfo() output, dplyr is no longer attached to the local environment. Consequently, if we try to once again look for the documentation, no information will be retrieved.\n\n?dplyr\n\nNo documentation for 'dplyr' in specified packages and libraries:\nyou could try '??dplyr'\n\n\n\n\nThere is a workaround however, if we want to access functions from an unloaded R package. We can specify the R package’s name, followed by two :, and then the function name. The :: conveys the context to your computer that the package is present, but may not be attached.\n\n?dplyr::select()\n\nThis particular use case can be useful if we want to run a particular function, but not load in all a packages functions (which may have identical function names to other R packages we are using and cause some conflicts).\n\n\n\n\nRemoving Packages\nJust as we can install an R package, we can also uninstall an R package (although doing so is rare, most often when encountering package dependency conflict). To do so, we would use the remove.packages() function.\n\n?remove.packages()\n\n\nremove.packages(\"dplyr\")\n\nThis results in the package being removed entirely from our computer. We would then need to reinstall it if needed in the future.\n\n\n\n\nCommon Issues\nAs previously mentioned, CRAN is the main repository for R packages. But what if we tried to install an R package that is only found on Bioconductor or via GitHub using the install.packages() function?\nTo see what occurs, let’s try installing the PeacoQC package (which is found on Bioconductor).\n\ninstall.packages(\"PeacoQC\")\n\nInstalling package into '/home/david/R/x86_64-pc-linux-gnu-library/4.5'\n(as 'lib' is unspecified)\n\n\nWarning: package 'PeacoQC' is not available for this version of R\n\nA version of this package for your version of R might be available elsewhere,\nsee the ideas at\nhttps://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages\n\n\n\n\nAs you can see, the initial warning message suggest that PeacoQC is not available for your version of R. When I first started trying to learn R on my own during COVID, this particular message was the bane of my existence and I couldn’t figure out what was going on.\nThis is just a default warning message, that would apply for both a package having a version mismatch, but also shown when trying to install packages that are not found on CRAN.", + "objectID": "course/02_FilePaths/index.html#creating-directories", + "href": "course/02_FilePaths/index.html#creating-directories", + "title": "02 - File Paths", + "section": "Creating directories", + "text": "Creating directories\nAlternatively, we can also create a folder via R using the dir.create() function. Since we want it within data, we would modify the path accordingly\n\nNewFolderLocation <- file.path(\"data\", \"target2\")\n\ndir.create(path=NewFolderLocation)\n\n\n\n\nBefore continuing, let’s copy the first two .fcs files into both target and target2.\n\n\n\nGiven our working directory is set the top-level of the Week2 project folder, we can’t just check inside nested target folders directly. If we attempt to:\n\nlist.files(path=\"target\", full.names=FALSE, recursive=FALSE)\n\ncharacter(0)\n\n\n\n\nNo files are returned (ie, character(0)), since from our computers perspective, “target” doesn’t exist within the active working directory.\n\nfile.exists(\"target\")\n\n[1] FALSE\n\n\n\n\nOn the other hand, within it’s view, it knows that the data folder exist\n\nfile.exists(\"data\")\n\n\nSo here we encounter the first challenge when communicating to our computer where to search for and find files. We need to provide a file.path that incorporates the path of folders between where the computer is currently at (ie. the working directory) and the target file itself.", "crumbs": [ "About", - "Intro to R" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#installing-from-bioconductor", - "href": "course/01_InstallingRPackages/index.html#installing-from-bioconductor", - "title": "01 - Installing R Packages", - "section": "Installing from Bioconductor", - "text": "Installing from Bioconductor\nBioconductor is the second R package repository we will be working with throughout the course. While it contains far fewer packages than CRAN, it contains packages that are primarily used by the biomedical sciences. Following this link you can find it’s current flow and mass cytometry R packages.\nBioconductor R packages differ from CRAN R packages in a couple of ways. Bioconductor has different standards for acceptance than CRAN. They usually contain interoperable object-types, put more effort into documentation and continous testing to ensure that the R package remains functional across operating systems.\n\n\nTo install an R package that is located on Bioconductor, we first need to install the BiocManager package from CRAN. This package will allow us to install Bioconductor packages from their respective repository.\n\ninstall.packages(\"BiocManager\")\n\n\n\nOnce BiocManager is installed, we can attach it to our local environment using the library() function\n\nlibrary(BiocManager)\n\n\n\nWhen loaded, you will see an output showing the current Bioconductor and R versions.\nWe can then use BiocManager’s install() function to go back and install PeacoQC().\n\n\n\n\n\n\nTip\n\n\n\nAs always, don’t forget the “” when running an install() command.\n\n\n\n?install()\n\n\ninstall(\"PeacoQC\")\n\n\n\nWe see a similar opening sequence of installation steps as what we saw when installing the dplyr package from CRAN. However, in this case, several package dependencies (rjson, GlobalOptions, etc.) are present. Consequently, you can see these packages are also being downloaded from their respective repositories (either CRAN or Bioconductor), then unzipped and assembled before PeacoQC undergoes installation.\n\n\n\n\n\n\nNote\n\n\n\nBehind the scenes, within an R package, what package dependencies need to be installed are specified through the Description and Namespace files. If a package name is removed from these files, it will not be installed during the installation process\n\n\n\n\n\nWithin the scrawl of installation outputs, we can see individual dependencies undergoing installation similar to what we saw with dplyr, with a “Done (packagename)” being printed upon successful installation.\n\n\n\nThis process continues for each dependency being installed.\n\n\n\nAnd finally, once all the dependencies are installed, PeacoQC starts to install.\n\n\n\nOccasionally, during installation, you will see a pop-up windown like this one in the console. This let’s you know that some of the package dependencies have newer updated versions that are available to download. We are prompted to select between updating all, some or none. You will need to specify via the console how you want to proceed, by typing and entering one of the suggested options [a/s/n].\n\n\n\nAlternatively you may encounter a pop-up that resembles this one. Unlike the a/s/n output, we would need to provide a number for our intended choice. In this case, I went ahead and skipped all updates by typing 3 into the console, then hitting enter.\n\n\n\nGenerally, it’s okay to update if you have the time. Updates generally consist of minor improvements or bug fixes, that shouldn’t cause major issues. If you are short on time, you can go ahead and select skip the update by entering the value (n) for the none option.\n\n\n\nWith PeacoQC has been installed, we can load it via the library() call\n\n\n\n\n\n\nTip\n\n\n\nRemeber, library() doesn’t require ” ”\n\n\n\nlibrary(PeacoQC)\n\n\n\nAnd we can check to see if it has been attached to the local environment\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27 BiocStyle_2.38.0 \n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] htmlwidgets_1.6.4 IRanges_2.44.0 clue_0.3-66 \n[49] cluster_2.1.8.1 pkgconfig_2.0.3 pillar_1.11.1 \n[52] gtable_0.3.6 data.table_1.18.2.1 glue_1.8.0 \n[55] xfun_0.56 tibble_3.3.1 tidyselect_1.2.1 \n[58] knitr_1.51 farver_2.1.2 rjson_0.2.23 \n[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.2 \n[64] S7_0.2.1 \n\n\n\n\nAs you may have noticed, the section of loaded via namespace (but not attached) packages has grown larger. These packages are dependencies for the attached packages (dplyr, BiocManager and PeacoQC). Since the functions within these dependencies are only used selectively by the attached packages, they do not need to be active within the local environment.\n\n\n\nTo see what packages are installed (but not yet loaded), we can use the installed.packages() function to return a list of R packages for your computer.\n\ninstalled.packages()", + "objectID": "course/02_FilePaths/index.html#file-paths", + "href": "course/02_FilePaths/index.html#file-paths", + "title": "02 - File Paths", + "section": "File Paths", + "text": "File Paths\nOne way we can do this is through a file.path argument. We could potentially provide this by adding either a / or a  into the path argument, depending on your computers operating system.\n\nlist.files(path=\"data/target\", full.names=FALSE, recursive=FALSE)\n\n\n\nWhile this works in your particular context, if you are sharing the code with others who have a different operating system, these hard-coded “/” or “\" will cause the code for them to error out at these particular steps.\n\nFor that reason, it is better to assemble a file.path using the file.path() function. This function takes into account the operating system, removing your need to have to worry about this particular computing nuance, and write code that is reproducible and replicable for everyone.\n\nFolderLocation <- file.path(\"data\", \"target\")\nFolderLocation\n\n[1] \"data/target\"\n\n\n\nlist.files(path=FolderLocation, full.names=FALSE, recursive=FALSE)\n\n\n\n\nWe can also append additional locations to existing file paths, by including the variable name within the file.path() we are creating.\n\nFolderLocation <- \"data\"\nScreenshotFolder <- file.path(FolderLocation, \"target\")\nScreenshotFolder\n\n[1] \"data/target\"\n\n\n\nlist.files(path=ScreenshotFolder, full.names=FALSE, recursive=FALSE)\n\n\n\n\nAdditionally, list.files() has the ability to filter for files that contain a particular character string. This can be useful is we are searching for “.fcs” or “.csv” files, but also for files that contain a particular word. In the case of the ScreenshotFolders\n\nlist.files(path=ScreenshotFolder, pattern=\"ND050\", full.names=FALSE, recursive=FALSE)\n\n\nYou will notice, the index numbers are in the context of what is filtered, not all the folder contents.", "crumbs": [ "About", - "Intro to R" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#install-from-github", - "href": "course/01_InstallingRPackages/index.html#install-from-github", - "title": "01 - Installing R Packages", - "section": "Install from GitHub", - "text": "Install from GitHub\nIn addition to the CRAN and Bioconductor repositories, individual R packages can also be found on GitHub hosted on their respective developers GitHub accounts. Newer packages that are still being worked on (often in the process of submission to CRAN or Bioconductor) can be found here, as well as those where the author decided not to bother with a review process, and just made the packages immediately available, warts and all.\n\n\nWhile many gems of R packages can be found on GitHub, there are also a bunch of R packages that due to deprecation since when they were published and released have stopped working. This is often the case for R packages that are not maintained, which is why it’s useful to check the commits and issues pages to see when the last contribution occurred. We will take a closer look at how to do so later on.\n\n\nTo install packages from GitHub, you will need the remotes package, which can be found on CRAN.\n\n\n\n\n\n\nSpot Check #1\n\n\n\nTo install a package from CRAN, what function would you use? Click on the code-fold arrow below to reveal the answer.\n\n\n\n\nCode\ninstall.packages(\"remotes\")\n\n\n\n\nWith the remotes package now installed, we can attach it to our local environment.\n\n\n\n\n\n\nSpot Check #2\n\n\n\nWhat function would be used to do so?\n\n\n\n\nCode\nlibrary(remotes)\n\n\n\n\nAnd finally, we can use the install_github() function to download R packages from the invidual developers GitHub account.\n\n\n\n\n\n\nSpot Check #3\n\n\n\nHow would you look up the help documentation for this function?\n\n\n\n\nCode\n# Either by hovering over it within Positron or via\n\n?install_github()\n\n\n\n\nWe will be installing a small R package flowSpectrum for this example. It’s one of the packages created by Christopher Hall, whose small series of Flow Cytometry Data Analysis in R tutorials were immensely useful when I was first getting started learning R. flowSpectrum can be used to generate spectrum-style plots for spectral flow cytometry data.\n\n\n\nTo install an R package from GitHub, we first need the GitHub username (so hally166 in this case), which is followed by a “/”, and then the name of the package repository (so flowSpectrum in this case). Our code should consequently be:\n\ninstall_github(\"hally166/flowSpectrum\")\n\n\n\nWhen installing from GitHub, the opening installation scrawl will look different. Unlike R packages from CRAN or Bioconductor, which are usually shipped in an assembled binary format, R packages from GitHub start off as source code. So the first steps shown in the scrawl are the process of converting them to binary before proceeding.\nThis process of building R packages from source code is one of the reasons we needed to install Rtools (for Windows users) or Xcode Developer Tools (for MacOS) for this course. We will look at this topic in greater depth later in the course when we talk about creating R packages.", + "objectID": "course/02_FilePaths/index.html#selecting-for-patterns", + "href": "course/02_FilePaths/index.html#selecting-for-patterns", + "title": "02 - File Paths", + "section": "Selecting for Patterns", + "text": "Selecting for Patterns\nIf we currently listed the files within data, we get a return that looks like this:\n\nlist.files(\"data\", full.names=FALSE, recursive=FALSE)\n\n\n\n\nAs you can see, we are getting back both folders and individual .fcs files. We could consequently change the pattern to provide a character string that will only return the .fcs files. We will go ahead and assign this list to a variable named files, for later retrieval.\n\nfiles <- list.files(\"data\", pattern=\".fcs\", full.names=FALSE, recursive=FALSE)\nfiles\n\n\n\n\nOne of the R packages we will be using througout the course is the stringr package. It contains two functions that can be useful when identifying more complicated character strings. In this case, if we run the str_detect() function to identify which of the .fcs files within the files variable contains the “INF” character string, we get a vector of logical (ie. True or FALSE) outputs corresponding to each file.\n\n# install.packages(\"stringr\") # CRAN\nlibrary(stringr)\n\n\nstr_detect(files, \"INF\")\n\n\n\n\nSimilar to how we indexed the Fluorophore list (ex. Fluorophore[1:2]) which returned a subset, we can similarly use this logical vector to subset files that returned as TRUE for containing the pattern “INF”\n\nfiles[str_detect(files, \"INF\")]\n\n\n\n\nLet’s go ahead and save these subsetted file names to a new variable, called Infants.\n\nInfants <- files[str_detect(files, \"INF\")]", "crumbs": [ "About", - "Intro to R" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#troubleshooting-install-errors", - "href": "course/01_InstallingRPackages/index.html#troubleshooting-install-errors", - "title": "01 - Installing R Packages", - "section": "Troubleshooting Install Errors", - "text": "Troubleshooting Install Errors\nWe have now installed three R packages, dplyr, PeacoQC, and flowSpectrum. In my case, I did not encounter any errors during the installation. However, sometimes a package installation will fail due to an error encountered during the installation process. This can be due to a number of reasons, ranging from a missing dependency, or an update that caused a conflict. While these can occur for CRAN or Bioconductor packages, they are more frequently seen for GitHub packages where the Description/Namespace files may not have been fully updated yet to install all the required dependencies.\nWhen encountering an error, start of by first reading through the message to see if you can parse any useful information about what package failed to install, and if it list the missing dependency packages name. The later was the case in the error message example shown below.\n\n\n\nIf you encounter an installation error this week, please take screenshots of the error message and post them to this Discussion. This will help us troubleshoot your installation, as well as provide additional examples of installation errors that will be used to update this section in the future.", + "objectID": "course/02_FilePaths/index.html#conditionals", + "href": "course/02_FilePaths/index.html#conditionals", + "title": "02 - File Paths", + "section": "Conditionals", + "text": "Conditionals\nOne useful thing is that within R, we can set conditions on whether something is carried out. The most typical conditional you will encounter are the “If” statements. They typically take a form that resembles the following.\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n\n\nIn this case of the above, if the variable within the () is equal to true, the code within the {} will be executed.\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n[1] \"Take a break\"\n\n\n\n\nBy contrast, when the variable within the () is equal to false, the code within the {} will not be executed.\n\nNeedCoffee <- FALSE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n\n\nThese “If” statements will trigger as long as the specified condition within the () is TRUE. For a different example:\n\nRowNumber <- 299\n2 + RowNumber > 300\n\n[1] TRUE\n\n\n\nif (2 + RowNumber > 3){\n print(\"Stop Iterating\")\n}\n\n[1] \"Stop Iterating\"\n\n\n\n\nWhen you add an ! in front a conditional, it flips the expected outcome.\n\nItsRaining <- TRUE\n\nif (ItsRaining){print(\"Bring an Umbrella\")}\n\n[1] \"Bring an Umbrella\"\n\n\n\n!ItsRaining\n\n[1] FALSE\n\n\n\nif (!ItsRaining){print(\"Bring an Umbrella\")}\n\n\nItsRaining <- TRUE\n\nif (!ItsRaining){print(\"Bring Sunglasses\")}\n\n\n\nWe will explore more complicated conditionals throughout the course, but for now, let’s implement a couple simple ones in the context of copying over the .fcs files in Infants over to a new target3 folder.", "crumbs": [ "About", - "Intro to R" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#installing-specific-package-versions", - "href": "course/01_InstallingRPackages/index.html#installing-specific-package-versions", - "title": "01 - Installing R Packages", - "section": "Installing Specific-Package Versions", - "text": "Installing Specific-Package Versions\nWhile we may be tempted to think of R packages as static, they change quite often, as their develipers add new features, fix bugs, etc. To help keep track of these changes (essential for reproducibility and replicability), R packages have version numbers.\nWhen we run sessionInfo(), we can see an example of this, with the version number appearing after the package name.\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27 BiocStyle_2.38.0 \n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] htmlwidgets_1.6.4 IRanges_2.44.0 clue_0.3-66 \n[49] cluster_2.1.8.1 pkgconfig_2.0.3 pillar_1.11.1 \n[52] gtable_0.3.6 data.table_1.18.2.1 glue_1.8.0 \n[55] xfun_0.56 tibble_3.3.1 tidyselect_1.2.1 \n[58] knitr_1.51 farver_2.1.2 rjson_0.2.23 \n[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.2 \n[64] S7_0.2.1 \n\n\n\n\nAlternatively, we can retrieve the same information for the individual packages via the packageVersion() function\n\npackageVersion(\"PeacoQC\")\n\n[1] '1.20.0'\n\n\n\n\nAs well as from the citation() function.\n\ncitation(\"PeacoQC\")\n\nTo cite package 'PeacoQC' in publications use:\n\n Emmaneel A (2025). _PeacoQC: Peak-based selection of high quality\n cytometry data_. doi:10.18129/B9.bioc.PeacoQC\n <https://doi.org/10.18129/B9.bioc.PeacoQC>, R package version 1.20.0,\n <https://bioconductor.org/packages/PeacoQC>.\n\nA BibTeX entry for LaTeX users is\n\n @Manual{,\n title = {PeacoQC: Peak-based selection of high quality cytometry data},\n author = {Annelies Emmaneel},\n year = {2025},\n note = {R package version 1.20.0},\n url = {https://bioconductor.org/packages/PeacoQC},\n doi = {10.18129/B9.bioc.PeacoQC},\n }\n\n\n\n\nHow does a version number work? Lets say we have the following version number: 1.20.0\nThe first number of the version (1. in this case) denotes major changes, primarily those where after the version change the package may not be compatible with the code used in the prior version. As a consequence, this number changes rarely.\nThe second number (.20. in this case) is the minor version. Minor changes typically consist of new features that are added, that don’t affect the overall package function. These will change more frequently, especially for Bioconductor packages with fixed release cycles.\nThe final number (.0 in this case) is often used to denote small changes occuring within a minor release period, often bug-fixes or fixing typos within the documentation.\n\n\nWe may in the future need to install specific package versions (but wont be doing so today). As expected, which repository contains the R package influences how we would go about doing this.\nFor CRAN packages, we can use the remotes packages install_version() function. This allows us to provide the version number, and designate the repository location (the CRAN url in this case).\n\nremotes::install_version(\"ggplot2\", version = \"3.5.2\", repos = \"https://cloud.r-project.org\")\n\nFor GitHub-based R packages, the package versioning schema is not as strict as that of CRAN or Bioconductor. Typically, changes in R packagaes are put out by their developers as releases. When trying to install a particular release, we can add an additional argument to the install_github() function, specifying the release version’s tag number. For example:\n\nremotes::install_github(\"DavidRach/Luciernaga\", ref = \"v0.99.7\")\n\nAlternatively, if the developer doesn’t implement releases, you can provide the hash number of a particular commit.\n\nremotes::install_github(\"DavidRach/Luciernaga\", ref = \"8d1d694\")", + "objectID": "course/02_FilePaths/index.html#conditionals-in-practice", + "href": "course/02_FilePaths/index.html#conditionals-in-practice", + "title": "02 - File Paths", + "section": "Conditionals in practice", + "text": "Conditionals in practice\nFirst off, let’s write a conditional to check if there is a target3 folder within data.\n\nfiles_present <- list.files(\"data\", full.names=FALSE, recursive=FALSE)\nfiles_present\n\n\n\n\n\nFolderTarget3 <- file.path(\"data\", \"target3\")\ndir.exists(FolderTarget3)\n\n\n\n\nWe can write a conditional to create a folder if one does not yet exist.\n\nif (!dir.exists(FolderTarget3)){\n dir.create(FolderTarget3)\n}", "crumbs": [ "About", - "Intro to R" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#documentation-and-websites", - "href": "course/01_InstallingRPackages/index.html#documentation-and-websites", - "title": "01 - Installing R Packages", - "section": "Documentation and Websites", - "text": "Documentation and Websites\nWe have already seen a couple ways to access the help documentation contained within an R package via Positron. Beyond internal documentation, R packages often have external websites that contain additional walk-through articles (ie. vignettes) to better document how to use the package.\nFor CRAN-based packages, we can start off by searching for the package name. So, in the case of dplyr:\n\n\n\nTwo main suggestions pop up. One is the package’s CRAN page. Unfortunately, this one is not particularly user-friendly, although some text-based vignettes are accessible.\n\n\n\nBecause of this, many CRAN-based R packages (especially those part of the tidyverse) use pkgdown-generated websites hosted via a GitHub page (similar to the one used by this course. The second option on the search is dplyr’s pkgdown-style website\n\n\n\nWe can usually find the list of functions under the Reference tab, with the more extensive documentation vignettes being found under the Articles tab.\n\n\n\nGitHub-based packages will vary depending on their individual developers, but often will also use pkgdown-style websites. These often appear as links on the right-hand side, or within the repository’s ReadMe.\n\n\n\nFor Bioconductor-based packages, on the package’s page we can typically find the already rendered vignette articles, usually as either html or pdf files. For example, with PeacoQC:\n\n\n\nAdditionally, package vignettes can also be reached via the packages help index page. These will usually appear under User guides, package vignettes, and other documentation.", + "objectID": "course/02_FilePaths/index.html#copying-files", + "href": "course/02_FilePaths/index.html#copying-files", + "title": "02 - File Paths", + "section": "Copying Files", + "text": "Copying Files\nTo copy files to another folder location, we use the file.copy() function. It has two arguments that we will be working with, from being the .fcs files, and to being the folder location we wish to transfer them to. If we tried using them as we currently have them:\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)\n\n\n\n\nThe reason for this error is we are only working with a partial file path, as viewed from our Working directory. In this case, what is needed is the full file.path, so the file.path should also include the upstream folders from your current working directory.\n\ngetwd()\n\n\n\n\nIn this case, we can update the .fcs files location by switching the full.names argument within list.files() from FALSE, to TRUE.\n\nfiles_present <- list.files(\"data\", full.names=TRUE, recursive=FALSE)\nfiles_present\n\n\nAnd filter for those containing “INF” again\n\nInfants <- files_present[str_detect(files_present, \"INF\")]\n\nAnd then try again:\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)", "crumbs": [ "About", - "Intro to R" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/01_InstallingRPackages/slides.html#set-up", - "href": "course/01_InstallingRPackages/slides.html#set-up", - "title": "01 - Installing R Packages", - "section": "Set Up", - "text": "Set Up\nAlright, with the background out of the way, let’s get started!\n\n\n\n\n\n\n\nImportant\n\n\nPlease make sure to sync your forked version of the CytometryInR repository, and 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.\n\n\n\n\n\n\n\n\n\n\n\nWarning\n\n\nPlease remember to always copy over the new material from your local CytometryInR folder to a separate Project Folder that you created and named (ex. “Week_01” or “MyLearningFolder”, etc.). This will ensure any edits you make to the files do not affect your ability to bring in next week’s materials to the CytometryInR folder" + "objectID": "course/02_FilePaths/index.html#removing-files.", + "href": "course/02_FilePaths/index.html#removing-files.", + "title": "02 - File Paths", + "section": "Removing files.", + "text": "Removing files.\nJust like we can add files via R, we can also remove them. However, when we remove them via this route, they are removed permanently, not sent to the recycle bin. We will revisit how later on in the course after you have gained additional experience with file.paths.\n\n?unlink()", + "crumbs": [ + "About", + "Intro to R", + "02 - File Paths" + ] }, { - "objectID": "course/01_InstallingRPackages/slides.html#checking-for-loaded-packages", - "href": "course/01_InstallingRPackages/slides.html#checking-for-loaded-packages", + "objectID": "course/02_FilePaths/index.html#basename", + "href": "course/02_FilePaths/index.html#basename", + "title": "02 - File Paths", + "section": "Basename", + "text": "Basename\nIf we look at Infants with the full.names=TRUE, we see the additional pathing folder has been added, allowing us to successfully copy over the files.\n\nInfants\n\n\n\n\nIf we were trying to retrieve just the local file names from the full.names, we could do so with basename() function. We will use this in combination with additional arguments later in the course\n\nbasename(Infants)", + "crumbs": [ + "About", + "Intro to R", + "02 - File Paths" + ] + }, + { + "objectID": "course/02_FilePaths/index.html#recursive", + "href": "course/02_FilePaths/index.html#recursive", + "title": "02 - File Paths", + "section": "Recursive", + "text": "Recursive\nAnd finally that we have created additional nested folders and populated them with fcs files, let’s see what setting list.files() recursive argument to TRUE\n\nall_files_present <- list.files(full.names=TRUE, recursive=TRUE)\nall_files_present \n\n\n\n\nIn this case, all files in all folders within the working directory are shown. This can be useful when exploring folder contents, but if there are a lot of files present within the folder, it will take a while to return the list.", + "crumbs": [ + "About", + "Intro to R", + "02 - File Paths" + ] + }, + { + "objectID": "course/02_FilePaths/index.html#saving-changes-to-version-control", + "href": "course/02_FilePaths/index.html#saving-changes-to-version-control", + "title": "02 - File Paths", + "section": "Saving changes to Version Control", + "text": "Saving changes to Version Control\nAnd as is good practice, to maintain version control, let’s stage all the files and folders we created today within the Week2 Project Folder, write a commit message, and send these files back to GitHub until they are needed again next time.", + "crumbs": [ + "About", + "Intro to R", + "02 - File Paths" + ] + }, + { + "objectID": "course/02_FilePaths/slides.html#set-up", + "href": "course/02_FilePaths/slides.html#set-up", + "title": "02 - File Paths", + "section": "Set Up", + "text": "Set Up\n\n\n\n\n\n\n\n\n.\n\n\nBefore we begin, let’s make sure you get the data needed for today transferred to your local computer, and then get the .fcs files copied over from there to your own working project folder. This is the process you will repeat each week throughout the course." + }, + { + "objectID": "course/02_FilePaths/slides.html#working-directory", + "href": "course/02_FilePaths/slides.html#working-directory", + "title": "02 - File Paths", + "section": "Working Directory", + "text": "Working Directory\n\n\n\n\n\n\n\n\n.\n\n\nNow that we are back in our Week2 folder, let’s start by seeing our current location similarly to how our computer perceives it.\nWe will use getwd() function (ie. get working directory) to return the location of the folder we are currently inside of. For example, when getwd() is run within my Week2 project folder, I see the following location" + }, + { + "objectID": "course/02_FilePaths/slides.html#directories", + "href": "course/02_FilePaths/slides.html#directories", + "title": "02 - File Paths", + "section": "Directories", + "text": "Directories\n\n\n\n\n\n\n\n\n.\n\n\nWithin this working directory, we have a variety of project folders and files related to the course. We can see the folders that are present using the list.dirs() function.\n\n\n\n\n\n\n\n\n\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)" + }, + { + "objectID": "course/02_FilePaths/slides.html#variables", + "href": "course/02_FilePaths/slides.html#variables", + "title": "02 - File Paths", + "section": "Variables", + "text": "Variables\n\n\n\n\n\n\n\n\n.\n\n\nBefore exploring file paths, we need to have some basic R code knowledge that we can use to work with them. Within R, we have the ability to assign particular values (be they character strings, numbers or logicals) to objects (ie. variables) that can be used when called upon later.\nFor example:\n\n\n\n\n\n\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\n\n\n\n\n\n\n\n\n\n.\n\n\nIn this case, the variable name is what the assignment arrow (“<-”) is pointing at. In this case, WhatDayDidIWriteThis" + }, + { + "objectID": "course/02_FilePaths/slides.html#indexing", + "href": "course/02_FilePaths/slides.html#indexing", + "title": "02 - File Paths", + "section": "Indexing", + "text": "Indexing\n\n\n\n\n\n\n\n\n.\n\n\nNot all variables contain single objects.\nFor example, we can modify Fluorophores and add additional entries:\n\n\n\n\n\n\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nstr(Fluorophores)\n\n chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n\n\n\n\n\n\n\n\n\n\n\n.\n\n\nThe c stands for concatenate. It concatenates the objects into a larger object, known as a vector.\nIn this case, you notice in addition to the specification the values are characters, we get a [1:4], denoting four objects are present." + }, + { + "objectID": "course/02_FilePaths/slides.html#listing-files", + "href": "course/02_FilePaths/slides.html#listing-files", + "title": "02 - File Paths", + "section": "Listing Files", + "text": "Listing Files\n\n\n\n\n\n\n\n\n.\n\n\nAfter this detour into variables and indexing, let’s return our focus to how to use these in context of file paths. Working from within our Week2 project folder, let’s see what directories (folders) are present\n\n\n\n\n\n\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)" + }, + { + "objectID": "course/02_FilePaths/slides.html#creating-directories", + "href": "course/02_FilePaths/slides.html#creating-directories", + "title": "02 - File Paths", + "section": "Creating directories", + "text": "Creating directories\n\n\n\n\n\n\n\n\n.\n\n\nAlternatively, we can also create a folder via R using the dir.create() function. Since we want it within data, we would modify the path accordingly\n\n\n\n\n\n\n\nNewFolderLocation <- file.path(\"data\", \"target2\")\n\ndir.create(path=NewFolderLocation)" + }, + { + "objectID": "course/02_FilePaths/slides.html#file-paths", + "href": "course/02_FilePaths/slides.html#file-paths", + "title": "02 - File Paths", + "section": "File Paths", + "text": "File Paths\n\n\n\n\n\n\n\n\n.\n\n\nOne way we can do this is through a file.path argument. We could potentially provide this by adding either a “/” or a “\" into the path argument, depending on your computers operating system.\n\n\n\n\n\n\n\nlist.files(path=\"data/target\", full.names=FALSE, recursive=FALSE)" + }, + { + "objectID": "course/02_FilePaths/slides.html#selecting-for-patterns", + "href": "course/02_FilePaths/slides.html#selecting-for-patterns", + "title": "02 - File Paths", + "section": "Selecting for Patterns", + "text": "Selecting for Patterns\n\n\n\n\n\n\n\n\n.\n\n\nIf we currently listed the files within data, we get a return that looks like this:\n\n\n\n\n\n\n\nlist.files(\"data\", full.names=FALSE, recursive=FALSE)" + }, + { + "objectID": "course/02_FilePaths/slides.html#conditionals", + "href": "course/02_FilePaths/slides.html#conditionals", + "title": "02 - File Paths", + "section": "Conditionals", + "text": "Conditionals\n\n\n\n\n\n\n\n\n.\n\n\nOne useful thing is that within R, we can set conditions on whether something is carried out. The most typical conditional you will encounter are the “If” statements. They typically take a form that resembles the following.\n\n\n\n\n\n\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}" + }, + { + "objectID": "course/02_FilePaths/slides.html#conditionals-in-practice", + "href": "course/02_FilePaths/slides.html#conditionals-in-practice", + "title": "02 - File Paths", + "section": "Conditionals in practice", + "text": "Conditionals in practice\n\n\n\n\n\n\n\n\n.\n\n\nFirst off, let’s write a conditional to check if there is a target3 folder within data.\n\n\n\n\n\n\n\nfiles_present <- list.files(\"data\", full.names=FALSE, recursive=FALSE)\nfiles_present" + }, + { + "objectID": "course/02_FilePaths/slides.html#copying-files", + "href": "course/02_FilePaths/slides.html#copying-files", + "title": "02 - File Paths", + "section": "Copying Files", + "text": "Copying Files\n\n\n\n\n\n\n\n\n.\n\n\nTo copy files to another folder location, we use the file.copy() function. It has two arguments that we will be working with, from being the .fcs files, and to being the folder location we wish to transfer them to. If we tried using them as we currently have them:\n\n\n\n\n\n\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)" + }, + { + "objectID": "course/02_FilePaths/slides.html#removing-files.", + "href": "course/02_FilePaths/slides.html#removing-files.", + "title": "02 - File Paths", + "section": "Removing files.", + "text": "Removing files.\n\n\n\n\n\n\n\n\n.\n\n\nJust like we can add files via R, we can also remove them. However, when we remove them via this route, they are removed permanently, not sent to the recycle bin. We will revisit how later on in the course after you have gained additional experience with file.paths.\n\n\n\n\n\n\n\n?unlink()" + }, + { + "objectID": "course/02_FilePaths/slides.html#basename", + "href": "course/02_FilePaths/slides.html#basename", + "title": "02 - File Paths", + "section": "Basename", + "text": "Basename\n\n\n\n\n\n\n\n\n.\n\n\nIf we look at Infants with the full.names=TRUE, we see the additional pathing folder has been added, allowing us to successfully copy over the files.\n\n\n\n\n\n\n\nInfants" + }, + { + "objectID": "course/02_FilePaths/slides.html#recursive", + "href": "course/02_FilePaths/slides.html#recursive", + "title": "02 - File Paths", + "section": "Recursive", + "text": "Recursive\n\n\n\n\n\n\n\n\n.\n\n\nAnd finally that we have created additional nested folders and populated them with fcs files, let’s see what setting list.files() recursive argument to TRUE\n\n\n\n\n\n\n\nall_files_present <- list.files(full.names=TRUE, recursive=TRUE)\nall_files_present" + }, + { + "objectID": "course/02_FilePaths/slides.html#saving-changes-to-version-control", + "href": "course/02_FilePaths/slides.html#saving-changes-to-version-control", + "title": "02 - File Paths", + "section": "Saving changes to Version Control", + "text": "Saving changes to Version Control\n\n\n\n\n\n\n\n\n.\n\n\nAnd as is good practice, to maintain version control, let’s stage all the files and folders we created today within the Week2 Project Folder, write a commit message, and send these files back to GitHub until they are needed again next time." + }, + { + "objectID": "course/01_InstallingRPackages/slides_inperson.html#checking-for-loaded-packages", + "href": "course/01_InstallingRPackages/slides_inperson.html#checking-for-loaded-packages", "title": "01 - Installing R Packages", "section": "Checking for Loaded Packages", "text": "Checking for Loaded Packages\n\n\n\n\n\n\n\n\n.\n\n\nFor the contents (ie. the functions) of an R package to be available for your computer to use, they must first be activated (ie. loaded) into your local environment. We will first learn how to check what R packages are currently active." }, { - "objectID": "course/01_InstallingRPackages/slides.html#installing-from-cran", - "href": "course/01_InstallingRPackages/slides.html#installing-from-cran", + "objectID": "course/01_InstallingRPackages/slides_inperson.html#installing-from-cran", + "href": "course/01_InstallingRPackages/slides_inperson.html#installing-from-cran", "title": "01 - Installing R Packages", "section": "Installing from CRAN", "text": "Installing from CRAN\n\n\n\n\n\n\n\n\n.\n\n\nWe will start by installing R packages that are part of the CRAN repository. This is the main R package repository, being part of the broader R software project. In the context of this course, R packages that work primarily with general data structure (rows, columns, matrices, etc.) or visualizations will predominantly be found within this repository.\nThese include the tidyverse packages. These packages have collectively made R easier to use by smoothing out some of the rough edges of base R, which is why R has seen major growth within the last decade. We will be installing several of these R packages today." }, { - "objectID": "course/01_InstallingRPackages/slides.html#installing-from-bioconductor", - "href": "course/01_InstallingRPackages/slides.html#installing-from-bioconductor", + "objectID": "course/01_InstallingRPackages/slides_inperson.html#installing-from-bioconductor", + "href": "course/01_InstallingRPackages/slides_inperson.html#installing-from-bioconductor", "title": "01 - Installing R Packages", "section": "Installing from Bioconductor", "text": "Installing from Bioconductor\n\n\n\n\n\n\n\n\n.\n\n\nBioconductor is the second R package repository we will be working with throughout the course. While it contains far fewer packages than CRAN, it contains packages that are primarily used by the biomedical sciences. Following this link you can find it’s current flow and mass cytometry R packages.\nBioconductor R packages differ from CRAN R packages in a couple of ways. Bioconductor has different standards for acceptance than CRAN. They usually contain interoperable object-types, put more effort into documentation and continous testing to ensure that the R package remains functional across operating systems." }, { - "objectID": "course/01_InstallingRPackages/slides.html#install-from-github", - "href": "course/01_InstallingRPackages/slides.html#install-from-github", + "objectID": "course/01_InstallingRPackages/slides_inperson.html#install-from-github", + "href": "course/01_InstallingRPackages/slides_inperson.html#install-from-github", "title": "01 - Installing R Packages", "section": "Install from GitHub", "text": "Install from GitHub\n\n\n\n\n\n\n\n\n.\n\n\nIn addition to the CRAN and Bioconductor repositories, individual R packages can also be found on GitHub hosted on their respective developers GitHub accounts. Newer packages that are still being worked on (often in the process of submission to CRAN or Bioconductor) can be found here, as well as those where the author decided not to bother with a review process, and just made the packages immediately available, warts and all." }, { - "objectID": "course/01_InstallingRPackages/slides.html#troubleshooting-install-errors", - "href": "course/01_InstallingRPackages/slides.html#troubleshooting-install-errors", + "objectID": "course/01_InstallingRPackages/slides_inperson.html#troubleshooting-install-errors", + "href": "course/01_InstallingRPackages/slides_inperson.html#troubleshooting-install-errors", "title": "01 - Installing R Packages", "section": "Troubleshooting Install Errors", "text": "Troubleshooting Install Errors\n\n\n\n\n\n\n\n\n.\n\n\nWe have now installed three R packages, dplyr, PeacoQC, and flowSpectrum. In my case, I did not encounter any errors during the installation. However, sometimes a package installation will fail due to an error encountered during the installation process. This can be due to a number of reasons, ranging from a missing dependency, or an update that caused a conflict. While these can occur for CRAN or Bioconductor packages, they are more frequently seen for GitHub packages where the Description/Namespace files may not have been fully updated yet to install all the required dependencies.\nWhen encountering an error, start of by first reading through the message to see if you can parse any useful information about what package failed to install, and if it list the missing dependency packages name. The later was the case in the error message example shown below." }, { - "objectID": "course/01_InstallingRPackages/slides.html#installing-specific-package-versions", - "href": "course/01_InstallingRPackages/slides.html#installing-specific-package-versions", - "title": "01 - Installing R Packages", - "section": "Installing Specific-Package Versions", - "text": "Installing Specific-Package Versions\n\n\n\n\n\n\n\n\n.\n\n\nWhile we may be tempted to think of R packages as static, they change quite often, as their develipers add new features, fix bugs, etc. To help keep track of these changes (essential for reproducibility and replicability), R packages have version numbers.\nWhen we run sessionInfo(), we can see an example of this, with the version number appearing after the package name.\n\n\n\n\n\n\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27\n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] IRanges_2.44.0 clue_0.3-66 cluster_2.1.8.1 \n[49] pkgconfig_2.0.3 pillar_1.11.1 gtable_0.3.6 \n[52] data.table_1.18.2.1 glue_1.8.0 xfun_0.56 \n[55] tibble_3.3.1 tidyselect_1.2.1 knitr_1.51 \n[58] farver_2.1.2 rjson_0.2.23 htmltools_0.5.9 \n[61] rmarkdown_2.30 compiler_4.5.2 S7_0.2.1" - }, - { - "objectID": "course/01_InstallingRPackages/slides.html#documentation-and-websites", - "href": "course/01_InstallingRPackages/slides.html#documentation-and-websites", + "objectID": "course/01_InstallingRPackages/slides_inperson.html#documentation-and-websites", + "href": "course/01_InstallingRPackages/slides_inperson.html#documentation-and-websites", "title": "01 - Installing R Packages", "section": "Documentation and Websites", "text": "Documentation and Websites\n\n\n\n\n\n\n\n\n.\n\n\nWe have already seen a couple ways to access the help documentation contained within an R package via Positron. Beyond internal documentation, R packages often have external websites that contain additional walk-through articles (ie. vignettes) to better document how to use the package.\nFor CRAN-based packages, we can start off by searching for the package name. So, in the case of dplyr" }, { - "objectID": "course/00_WorkstationSetup/Windows.html", - "href": "course/00_WorkstationSetup/Windows.html", - "title": "Installing Software on Windows", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shots slides, click here\nThis is the software installation walkthrough for those whose computers are running Windows. Based on our pre-course interest form, you make up the majority of course participants." + "objectID": "course/00_WorkstationSetup/MacOSSlides.html#installing-r", + "href": "course/00_WorkstationSetup/MacOSSlides.html#installing-r", + "title": "Installing Software on MacOS", + "section": "Installing R", + "text": "Installing R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." }, { - "objectID": "course/00_WorkstationSetup/Windows.html#installing-r", - "href": "course/00_WorkstationSetup/Windows.html#installing-r", - "title": "Installing Software on Windows", - "section": "Installing R", - "text": "Installing R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nYou will then select your Operating System, in this case, Windows.\n\n\n\nAnd go ahead and select the Install R for the first time link.\n\n\n\nNext, you will select the download the current version option at the top of the page.\n\n\n\nThe popup window will then ask where you want to save the installer (.exe) file. We generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nAfter the download is complete, double click on the installer’s .exe file. This will open a popup asking you to select your preferred language.\n\n\n\nYou will then be prompted to acccept the software license (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\nOn Windows, R will normally save it’s software folder under Program Files.\n\n\n\nNext, please accept the defaults.\n\n\n\n\n\n\n\n\n\n\n\n\nWith the defaults accepted, the installation will commence. Feel free to go have a coffee/tea/beverage-of-your choice break while you wait.\n\n\n\nAnd if all goes well, the installation will complete without any issues." + "objectID": "course/00_WorkstationSetup/MacOSSlides.html#xcode-command-line-tools", + "href": "course/00_WorkstationSetup/MacOSSlides.html#xcode-command-line-tools", + "title": "Installing Software on MacOS", + "section": "Xcode Command Line Tools", + "text": "Xcode Command Line Tools\n\n\n\n\n\n\n\n\n.\n\n\nDepending on your version of macOS, you may or may not already have Git installed on your computer. The reason is that it comes bundled within the Xcode Command Line Tools.\nIf this is not your first foray into coding, you may have previously seen an installation pop-up along the lines of “XYZ requires command line developer tools. Would you like to install the tools now?” when installing an IDE (like Positron, Rstudio or Visual Studio Code)." }, { - "objectID": "course/00_WorkstationSetup/Windows.html#installing-rtools", - "href": "course/00_WorkstationSetup/Windows.html#installing-rtools", - "title": "Installing Software on Windows", - "section": "Installing RTools", - "text": "Installing RTools\nWe will now work on installing Rtools. This software is needed when building R packages from source, which we will need throughout the course for R packages hosted on GitHub.\nTo get started, we will return to the R installation page we visited previously and instead click on the Rtools option.\n\n\n\nNext, select the most recent version of Rtools to Download.\n\n\n\nYou will then select for your architecture. For the vast majority of Windows users, your computer will likely be be using a x86 chip architecture, so you would select the Rtools45 installer option.\nIf your computer however uses the ARM chip architecture, you would select the 64-bit ARM Rtools45 installer instead. If you are unsure, see the following.\n\n\n\nNext, you will select the location to save the Rtools installer to. We generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nOnce downloaded, double click on the .exe to launch the Rtools installer.\n\n\n\nSimilar to what we did when installing R, go ahead and keep the defaults.\n\n\n\nAnd click install to proceed with the installation.\n\n\n\nAnd wait while the installation wraps up.\n\n\n\nIf all goes well, you should see the following installation success page." + "objectID": "course/00_WorkstationSetup/MacOSSlides.html#install-positron", + "href": "course/00_WorkstationSetup/MacOSSlides.html#install-positron", + "title": "Installing Software on MacOS", + "section": "Install Positron", + "text": "Install Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." }, { - "objectID": "course/00_WorkstationSetup/Windows.html#installing-git", - "href": "course/00_WorkstationSetup/Windows.html#installing-git", - "title": "Installing Software on Windows", + "objectID": "course/00_WorkstationSetup/LinuxSlides.html#debian-based-distros", + "href": "course/00_WorkstationSetup/LinuxSlides.html#debian-based-distros", + "title": "Installing Software on Linux", + "section": "Debian-based Distros", + "text": "Debian-based Distros\nInstalling R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." + }, + { + "objectID": "course/00_WorkstationSetup/LinuxSlides.html#installing-git", + "href": "course/00_WorkstationSetup/LinuxSlides.html#installing-git", + "title": "Installing Software on Linux", "section": "Installing Git", - "text": "Installing Git\nGit is a version control software widely used among software developers and bioinformaticians. We will use it extensively throughout the course, both locally on our computers (to keep track of changes to our files), as well as in combination with GitHub(to maintain online backups of our files).\nWe will first navigate to the website and select the download from Windows option.\n\n\n\n\n\n\n\n\n\nWe will then proceed and select install 64-bit Git for Windows Setup option\n\n\n\n\n\n\n\nAs was the case with our installation of R and Rtools, a pop-up will appear asking for a location to save the installer to.\nOnce downloaded, double-click and proceed with the installation.\nYou will be asked to accept the Git License (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\nThen you will be asked to select the folder to save to software to (usually your Programs folder)\n\n\n\nAt this point, the Git installer will ask a series of increasingly niche questions. It is best to just accept all the default options, to avoid wandering too far down a “What is Vim?!?” rabbit-hole.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHaving made it through all the niche customization screens, we finally reach the install button.\n\n\n\nWe then can wait for the install to complete.\n\n\n\nAnd success, we have now installed Git." + "text": "Installing Git\n\n# sudo apt install git" }, { - "objectID": "course/00_WorkstationSetup/Windows.html#installing-positron", - "href": "course/00_WorkstationSetup/Windows.html#installing-positron", - "title": "Installing Software on Windows", + "objectID": "course/00_WorkstationSetup/LinuxSlides.html#installing-positron", + "href": "course/00_WorkstationSetup/LinuxSlides.html#installing-positron", + "title": "Installing Software on Linux", "section": "Installing Positron", - "text": "Installing Positron\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\nWith the license accepted, you will be able to select your operating system. In this case, we will select Windows, specifally the user level install.\n\n\n\nPlease note, if you are using a Windows computer with an ARM based chip (like is the case with Snapdragons), you will need to download the installed from the Positron’s GitHub Release Page, as they are still testing some features.\n\n\nYou will then be prompted to select the location you want to save the installer to. We will generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nOnce the download is complete, double click on the installer, and again accept the license agreement.\n\n\n\nGenerally, Positron will be store its software folder under Program Files.\n\n\n\nNext up, accept the default options for the following screens\n\n\n\n\n\n\nAnd finally, click Install.\n\n\n\n \n\nIf all goes well, you should then see the installation success page." + "text": "Installing Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will need to install Positron. It will be the integrated development environment (IDE) we will be using for the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." }, { - "objectID": "course/00_WorkstationSetup/index.html", - "href": "course/00_WorkstationSetup/index.html", - "title": "Workstation Setup", + "objectID": "course/00_WorkstationSetup/Linux.html", + "href": "course/00_WorkstationSetup/Linux.html", + "title": "Installing Software on Linux", "section": "", - "text": "In the previous section, we first set up your GitHub account. Then we modified your GitHub profile and added a README section. Finally, we forked the CytometryInR repository so that you can easily retrieve the new course materials each week.\nIt is now time to install the required software on your computer, which will get your work-station set up with everything needed for this course. Depending on your computers operating system, the installation requirements may differ a bit. In general, you will need to install the following software:\nR website : The programming language we will be using throughout the course.\nPositron : The integrated development environment (IDE) in which we will open, modify and run our code.\nGit : The version control software that will allow us to track changes to our files.\nAdditionally, Windows users will need to install:\nRTools : Used to build R packages from source code.\nYou can find the operating system specific installation walkthroughs below. Once you have completed your specific walkthrough, return to this page and proceed to the next section.\nPlease note: For those using university or company administered computers, please be aware that you may not have the necessary permissions to install these directly, and may need to reach out to your IT department to help get the software installed and running correctly.\nIf you are using your own computer, congratulations, you are your system administrator, and should already have the necessary permissions.", - "crumbs": [ - "About", - "Getting Started", - "00 - Workstation Setup" - ] + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nThis is the software installation walkthrough for those whose computers are running Linux. First off, welcome! Based on our pre-course interest form, there was a suprising number of you daily-drivers out there! However, a CytometryInR interest form is unlikely to be representative of the general population, so please stash all Year of the Linux desktop banners until further notice." }, { - "objectID": "course/00_WorkstationSetup/index.html#windows", - "href": "course/00_WorkstationSetup/index.html#windows", - "title": "Workstation Setup", - "section": "Windows", - "text": "Windows\n\nInstallation walkthrough for Windows", - "crumbs": [ - "About", - "Getting Started", - "00 - Workstation Setup" - ] - }, - { - "objectID": "course/00_WorkstationSetup/index.html#macos", - "href": "course/00_WorkstationSetup/index.html#macos", - "title": "Workstation Setup", - "section": "MacOS", - "text": "MacOS\n\nInstallation walkthrough for MacOS", - "crumbs": [ - "About", - "Getting Started", - "00 - Workstation Setup" - ] + "objectID": "course/00_WorkstationSetup/Linux.html#debian-based-distros", + "href": "course/00_WorkstationSetup/Linux.html#debian-based-distros", + "title": "Installing Software on Linux", + "section": "Debian-based Distros", + "text": "Debian-based Distros\n\nInstalling R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nOnce this is done, select your Linux Distro (or one that shares your package managers format).\n\n\n\nOn the landing page, you will find a bunch of relevant installation information, which is worthwhile giving a read-through when you have time.\n\n\n\nThe process to successfully install R can be summarized as follows:\nUpdate apt/sources.list to include the CRAN repository (allowing access to R packages)\n\n\n\nSince we are running on Debian stable (Trixie), we would add the following line to sources.list\n\n\n\nSo in practice, open sources.list:\n\n\n\nPaste the line, and “Ctrl + O”; “Enter”; “Ctrl + X” to save the changes.\n\n\n\nNext, we will need to retrieve the keyID used to sign. This can be fetched from Ubuntu via the terminal.\n\n\n\n\n\n\nThen we need to export and write it\n\n\n\nWhich if successful, will display the public key.\n\n\n\nWith the above set up, we can proceed via our apt package manager to install both r-base and r-base-dev (which contains the equivalent of Rtools for Windows, or Xcode Command Line Tools for macOS).\n\n\n\n\n\n\n\n\n\nAnd if all goes well, R should now be installed." }, { - "objectID": "course/00_WorkstationSetup/index.html#linux-debian", - "href": "course/00_WorkstationSetup/index.html#linux-debian", - "title": "Workstation Setup", - "section": "Linux (Debian)", - "text": "Linux (Debian)\n\nInstallation walkthrough for Linux", - "crumbs": [ - "About", - "Getting Started", - "00 - Workstation Setup" - ] + "objectID": "course/00_WorkstationSetup/Linux.html#installing-git", + "href": "course/00_WorkstationSetup/Linux.html#installing-git", + "title": "Installing Software on Linux", + "section": "Installing Git", + "text": "Installing Git\n\n# sudo apt install git" }, { - "objectID": "course/00_WorkstationSetup/MacOS.html", - "href": "course/00_WorkstationSetup/MacOS.html", - "title": "Installing Software on MacOS", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nThis is the software installation walkthrough for those whose computers are running MacOS. Based on our pre-course interest form, you make up a solid proportion of the course participants." + "objectID": "course/00_WorkstationSetup/Linux.html#installing-positron", + "href": "course/00_WorkstationSetup/Linux.html#installing-positron", + "title": "Installing Software on Linux", + "section": "Installing Positron", + "text": "Installing Positron\nFinally, you will need to install Positron. It will be the integrated development environment (IDE) we will be using for the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\n\n\n\nWith the license accepted, you will be able to select distribution and architecture.\n\n\n\nOnce the Download completes, proceed to install the .deb package as you would nornally. GUI example via Discover below.\n\n\n\nDepending on your configurations, you may be asked to exert your sudo powers.\n\n\n\nOnce this completes, you should now be able to launch the software for the first time." }, { - "objectID": "course/00_WorkstationSetup/MacOS.html#installing-r", - "href": "course/00_WorkstationSetup/MacOS.html#installing-r", - "title": "Installing Software on MacOS", + "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-r", + "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-r", + "title": "Installing Software on Windows", "section": "Installing R", - "text": "Installing R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nYou will then select your Operating System, in this case, macOS\n\n\n\nNext, you will need to select the appropiate download based on your computers architecture. On newer Macs (containing M1+ chips) this would the arm64 option on the center left of the screen. For the older Intel (pre-2020) Macs, you would select the x86_64 option. If you are unsure, check your About This Mac tab\n\n\n\nAfter the download has completed, launch the installer\n\n\n\nProceed through the Read Me\n\n\n\nYou will then be prompted to acccept the software license (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\n\n\n\nNext, you will need to navigate through several pages, keeping the defaults.\n\n\n\nAnd with any luck, you should see that the installation was successful." + "text": "Installing R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." }, { - "objectID": "course/00_WorkstationSetup/MacOS.html#xcode-command-line-tools", - "href": "course/00_WorkstationSetup/MacOS.html#xcode-command-line-tools", - "title": "Installing Software on MacOS", - "section": "Xcode Command Line Tools", - "text": "Xcode Command Line Tools\nDepending on your version of macOS, you may or may not already have Git installed on your computer. The reason is that it comes bundled within the Xcode Command Line Tools.\nIf this is not your first foray into coding, you may have previously seen an installation pop-up along the lines of “XYZ requires command line developer tools. Would you like to install the tools now?” when installing an IDE (like Positron, Rstudio or Visual Studio Code).\n\n\n\nSince these command line developer tools contain both Git, and also the equivalent of Rtools for Windows, we will need to install them for this course. To get started, first open your terminal.\n\n\n\nNext run the following code:\n\nxcode-select --install\n\n\n\n\nYou will then have the pop-up asking whether you want to install the command line tools (which contain Git). Select Install.\n\n\n\nYou will then be asked to accept the license\n\n\n\nYour installation will then proceed\n\n\n\nAnd if all goes well, the software will finish installing.\n\n\n\nAfter you complete Positron installation (next section), if you check the version control tab on the action bar on the far left side of the screen, you should see the following if Git was installed correctly.\n\n\n\nAlternatively, if you see this, you will need to reattempt the installation." + "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-rtools", + "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-rtools", + "title": "Installing Software on Windows", + "section": "Installing RTools", + "text": "Installing RTools\n\n\n\n\n\n\n\n\n.\n\n\nWe will now work on installing Rtools. This software is needed when building R packages from source, which we will need throughout the course for R packages hosted on GitHub.\nTo get started, we will return to the R installation page we visited previously and instead click on the Rtools option." }, { - "objectID": "course/00_WorkstationSetup/MacOS.html#install-positron", - "href": "course/00_WorkstationSetup/MacOS.html#install-positron", - "title": "Installing Software on MacOS", - "section": "Install Positron", - "text": "Install Positron\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\nWith the license accepted, you will be able to select your operating system and the relevant installer depending on whether you are on an M1+ (ARM) or older Intel (x86) Mac.\n\n\nOnce the Download completes, proceed to install the package as you normally would for any other program." + "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-git", + "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-git", + "title": "Installing Software on Windows", + "section": "Installing Git", + "text": "Installing Git\n\n\n\n\n\n\n\n\n.\n\n\nGit is a version control software widely used among software developers and bioinformaticians. We will use it extensively throughout the course, both locally on our computers (to keep track of changes to our files), as well as in combination with GitHub(to maintain online backups of our files).\nWe will first navigate to the website and select the download from Windows option." }, { - "objectID": "course/00_Quarto/index.html", - "href": "course/00_Quarto/index.html", - "title": "Introduction to Quarto", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - Quarto" - ] + "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-positron", + "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-positron", + "title": "Installing Software on Windows", + "section": "Installing Positron", + "text": "Installing Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." }, { - "objectID": "course/00_Quarto/index.html#renderpreview", - "href": "course/00_Quarto/index.html#renderpreview", + "objectID": "course/00_Quarto/slides.html#renderpreview", + "href": "course/00_Quarto/slides.html#renderpreview", "title": "Introduction to Quarto", "section": "Render/Preview", - "text": "Render/Preview\nThe preview button, at the upper-left end of the Editor, is used to render/knit a quarto document. This triggers the process by which code-chunks are run, and then the outputs are cobbled together into the file format type designated by the YAML header.\n\n\n\n\nHTML\nIn this case, the YAML header’s format argument is set to html. After clicking preview, we can see the various rendering steps appear in the console below. Since no errors occured, the html document was formed succesfully and appears as a file in the left side-bar. Additional, a preview of the document appears in the View tab of the right side-bar, allowing for quick visual inspection.\n\n\n\nAlternatively, we can render a document via the terminal, by entering “quarto render”, followed by the name of the document.\n\n\n\nThis results similar process as what we saw with the preview button\n\n\n\nWe can also open the .html document via our File Explorer, which will open it within our web browser.\n\n\n\nQuarto documents can be rendered (previewed) in other formats besides html. These include pdf, Word documents (docx), and slides (revealjs). This is set by the format argument within the YAML header.\n\n\nPDF\nBy switching the format argument from html to pdf, we can render the document as a pdf\n\n\n\nWe can see the pdf is now listed in the list of files, with a preview shown on the right side-bar.\n\n\n\n\n\nDocx\nWe can also generate Word documents (.docx) as well.\n\n\n\nIn this case, we can see that a Word document file was created, but nothing appears in the View tab. This is because the format is not yet supported for the View tab. We can however open and view the Word document via our File explorer.\n\n\n\nWhich shows a Word Document style output.", - "crumbs": [ - "About", - "Getting Started", - "00 - Quarto" - ] + "text": "Render/Preview\n\n\n\n\n\n\n\n\n.\n\n\nThe preview button, at the upper-left end of the Editor, is used to render/knit a quarto document. This triggers the process by which code-chunks are run, and then the outputs are cobbled together into the file format type designated by the YAML header." }, { - "objectID": "course/00_Quarto/index.html#yaml", - "href": "course/00_Quarto/index.html#yaml", + "objectID": "course/00_Quarto/slides.html#yaml", + "href": "course/00_Quarto/slides.html#yaml", "title": "Introduction to Quarto", "section": "YAML", - "text": "YAML\nWe can additionally provide additional custom inputs to the YAML header. A couple examples include providing the document author and date.\n\n\n\nWhich we can see are updated after we preview/render.", - "crumbs": [ - "About", - "Getting Started", - "00 - Quarto" - ] + "text": "YAML\n\n\n\n\n\n\n\n\n.\n\n\nWe can additionally provide additional custom inputs to the YAML header. A couple examples include providing the document author and date." }, { - "objectID": "course/00_Quarto/index.html#table-of-contents", - "href": "course/00_Quarto/index.html#table-of-contents", + "objectID": "course/00_Quarto/slides.html#table-of-contents", + "href": "course/00_Quarto/slides.html#table-of-contents", "title": "Introduction to Quarto", "section": "Table of Contents", - "text": "Table of Contents\nIn the previous section, we saw that we could provide headings and subheadings to our .qmd file by placing a # at the start of a line in the text portion of the document. A subheading was designated by a ##, with additional hierarchy being designated by appending an additional #.\n\n\n\nWe can use the heading information to generate a table of contents for our document. To do this, we add a toc argument to the yaml header, and set it to TRUE. After rendering, it appears on the upper-right side of the document.\n\n\n\nNotice, that the subheaders do not appear currently within the TOC.\n\n\n\nWe can fix this by setting a toc-expand argument in the YAML to true.", - "crumbs": [ - "About", - "Getting Started", - "00 - Quarto" - ] + "text": "Table of Contents\n\n\n\n\n\n\n\n\n.\n\n\nIn the previous section, we saw that we could provide headings and subheadings to our .qmd file by placing a # at the start of a line in the text portion of the document. A subheading was designated by a ##, with additional hierarchy being designated by appending an additional #." }, { - "objectID": "course/00_Quarto/index.html#code-chunk-arguments", - "href": "course/00_Quarto/index.html#code-chunk-arguments", + "objectID": "course/00_Quarto/slides.html#code-chunk-arguments", + "href": "course/00_Quarto/slides.html#code-chunk-arguments", "title": "Introduction to Quarto", "section": "Code Chunk Arguments", - "text": "Code Chunk Arguments\nAs we briefly touched on in the last section, code-chunks can be modified by including arguments, which affect whether a particular code chunk gets evaluated. In that example, we included a “#| eval: FALSE” to the install commands since we did not want them to be re-run subsequently. We will take a closer look at the other arguments in this section.\n\nEval\nThe code-chunk argument, “Eval”, is used to determine when a code-chunk get’s evaluated. When set to true (or by default if no eval argument is included), the code-chunks contents will be run/executed, and the output will appear. We can see this in the html output, as below the code block, we get back the address of my working directory.\n\n\n\nWhen we switch the Eval argument to FALSE, and then render the document, we can see that the code block remains, but we do not get any output for the code contained within.\nIn every-day practice, we will “use eval: FALSE” arguments when we want to keep the code for later use, but want to manually run the code contained within ourselves.\n\n\n\n\n\nEcho\nThe code-block argument “echo” dictates whether the code within the code-block is displayed within the document. So in the case when “echo: true”, we get both the code displayed, as well as the output that gets returned by the code.\n\n\n\nBy contrast, when “echo: FALSE”, we do not have the code displayed, but do get the output of that code being run.\nIn daily-practice, “echo: FALSE” gets often used when generating plots that we want to include in the report, without the code that generated them being displayed.\n\n\n\n\n\nInclude\nThe next code-chunk argument is include. Unlike echo, which focuses on whether the code is displayed, but still returns the output, include dictates behavior of both the code-block and it’s output. Unlike eval however, it will still run the code, which allows it to be available for the next code-chunk that might need it. When we set “include: false”, no trace of that code-chunk is present in the document. This is useful when making reports where we do not want to include the code used to generate a particular figure.\n\n\n\nBy contrast, when we set “include: true”, the code block and it’s output is once again included within the rendered document.\n\n\n\n\n\nCode-Fold\nOne of my favorites is “code-fold”. When we set it as “code-fold: show”, it displays the code, but provides a drop-down arrow that can be closed to compress the code.\n\n\n\nIn contrast, if we want to make the code-available for those that are interested, but not directly visible, we can set as “code-fold: true”\n\n\n\n\n\nWarnings\nWithin R, when code is executed, in addition to returning the output, R is capable of returning warnings (when something is not as expected, but not sufficient to elicit an error with a complete stop) or a message (text output that gets displayed, often telling about progress). While these are useful when running code yourself, it can be annoying when generating a report and the 2nd page is a bunch of warning text being displayed.\nFor example, when the R package ggcyto is loaded via the library call, it will automatically load several other packages, which typically results in these messages being outputted:\n\n\n\nWe can therefore set that code-chunk’s warning/message arguments to FALSE, therefore silencing the message outputs that would otherwise clutter up our report.", - "crumbs": [ - "About", - "Getting Started", - "00 - Quarto" - ] + "text": "Code Chunk Arguments\n\n\n\n\n\n\n\n\n.\n\n\nAs we briefly touched on in the last section, code-chunks can be modified by including arguments, which affect whether a particular code chunk gets evaluated. In that example, we included a “#| eval: FALSE” to the install commands since we did not want them to be re-run subsequently. We will take a closer look at the other arguments in this section.\n\n\n\n\n\nEval\n\n\n\n\n\n\n\n\n.\n\n\nThe code-chunk argument, “Eval”, is used to determine when a code-chunk get’s evaluated. When set to true (or by default if no eval argument is included), the code-chunks contents will be run/executed, and the output will appear. We can see this in the html output, as below the code block, we get back the address of my working directory." }, { - "objectID": "course/00_Quarto/index.html#text-styles", - "href": "course/00_Quarto/index.html#text-styles", + "objectID": "course/00_Quarto/slides.html#text-styles", + "href": "course/00_Quarto/slides.html#text-styles", "title": "Introduction to Quarto", "section": "Text Styles", - "text": "Text Styles\nQuarto primarily uses Markdown for text styling. Consequently, markdown arguments can be used within the text to change how various text appears.\n\n\n\nFor a regular text, This single asterisk on each side of a word will italicize.\n\n\n\nWhen the number of asterisk is doubled, This word is bolded.\n\n\n\nWhen three asterisk are used, both are applied.\n\n\n\nFor an underscore, the word of interest is surrounded by square brackets “[]”, with “{.underline}” adjacent.", - "crumbs": [ - "About", - "Getting Started", - "00 - Quarto" - ] + "text": "Text Styles\n\n\n\n\n\n\n\n\n.\n\n\nQuarto primarily uses Markdown for text styling. Consequently, markdown arguments can be used within the text to change how various text appears." }, { - "objectID": "course/00_Quarto/index.html#hyperlinks", - "href": "course/00_Quarto/index.html#hyperlinks", + "objectID": "course/00_Quarto/slides.html#hyperlinks", + "href": "course/00_Quarto/slides.html#hyperlinks", "title": "Introduction to Quarto", "section": "Hyperlinks", - "text": "Hyperlinks\nYou can link to a website by surrounding word of interest in [] and placing the url within () adjacent to it.", - "crumbs": [ - "About", - "Getting Started", - "00 - Quarto" - ] + "text": "Hyperlinks\n\n\n\n\n\n\n\n\n.\n\n\nYou can link to a website by surrounding word of interest in [] and placing the url within () adjacent to it." }, { - "objectID": "course/00_Quarto/index.html#images", - "href": "course/00_Quarto/index.html#images", + "objectID": "course/00_Quarto/slides.html#images", + "href": "course/00_Quarto/slides.html#images", "title": "Introduction to Quarto", "section": "Images", - "text": "Images\nYou can place images by adding the following, as long as the file.path to the image is correctly formatted. In my case, this is why I include images folders within my folders to simplify the copy and paste.", - "crumbs": [ - "About", - "Getting Started", - "00 - Quarto" - ] - }, - { - "objectID": "course/00_Positron/index.html", - "href": "course/00_Positron/index.html", - "title": "Using Positron", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "text": "Images\n\n\n\n\n\n\n\n\n.\n\n\nYou can place images by adding the following, as long as the file.path to the image is correctly formatted. In my case, this is why I include images folders within my folders to simplify the copy and paste." }, { - "objectID": "course/00_Positron/index.html#console", - "href": "course/00_Positron/index.html#console", + "objectID": "course/00_Positron/slides.html#console", + "href": "course/00_Positron/slides.html#console", "title": "Using Positron", "section": "Console", - "text": "Console\nAt the bottom of the sceen, you will first see the Console Tab. This is the tab where your lines of code when executed (run) will appear, as well as any messages, warnings or errors that get returned. On the right side of the console, you can find several buttons, among them restart R and delete session (for when you need a fresh start), and clear console (which keeps all previously run outputs and objects, but clears away the displayed text within the console).", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "text": "Console\n\n\n\n\n\n\n\n\n.\n\n\nAt the bottom of the sceen, you will first see the Console Tab. This is the tab where your lines of code when executed (run) will appear, as well as any messages, warnings or errors that get returned. On the right side of the console, you can find several buttons, among them restart R and delete session (for when you need a fresh start), and clear console (which keeps all previously run outputs and objects, but clears away the displayed text within the console)." }, { - "objectID": "course/00_Positron/index.html#terminal", - "href": "course/00_Positron/index.html#terminal", + "objectID": "course/00_Positron/slides.html#terminal", + "href": "course/00_Positron/slides.html#terminal", "title": "Using Positron", "section": "Terminal", - "text": "Terminal\nRight next to the Console tab is your Terminal tab. While the console tab is primarily used to run R code within Positron, the terminal is the interface where code containing system commands directed at at your computer is entered. We will use this less frequently, primarily in two context: 1) rendering Quarto documents, and 2) commiting changes to version control. Among the buttons on the right-side of the terminal to make note of are the + button to add a new terminal, and the trash/garbage can button to kill (stop) the terminal.\n\n\n\nThe other tabs (Problems, Output, Ports, Debug Console) are used less frequently. I usually will Problems and Debug when something goes wrong with the code, as various warning and error messages will end up being displayed there.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "text": "Terminal\n\n\n\n\n\n\n\n\n.\n\n\nRight next to the Console tab is your Terminal tab. While the console tab is primarily used to run R code within Positron, the terminal is the interface where code containing system commands directed at at your computer is entered. We will use this less frequently, primarily in two context: 1) rendering Quarto documents, and 2) commiting changes to version control. Among the buttons on the right-side of the terminal to make note of are the + button to add a new terminal, and the trash/garbage can button to kill (stop) the terminal." }, { - "objectID": "course/00_Positron/index.html#help", - "href": "course/00_Positron/index.html#help", + "objectID": "course/00_Positron/slides.html#help", + "href": "course/00_Positron/slides.html#help", "title": "Using Positron", "section": "Help", - "text": "Help\nWhen trying to evaluate how a particular function is working in R, you can hover over it and positron will open up the documentation for that particular function if available, alternatively, you can enter ?theParticularFunctionsName in the console and hit enter to similarly view what is occuring.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "text": "Help\n\n\n\n\n\n\n\n\n.\n\n\nWhen trying to evaluate how a particular function is working in R, you can hover over it and positron will open up the documentation for that particular function if available, alternatively, you can enter ?theParticularFunctionsName in the console and hit enter to similarly view what is occuring." }, { - "objectID": "course/00_Positron/index.html#variables", - "href": "course/00_Positron/index.html#variables", + "objectID": "course/00_Positron/slides.html#variables", + "href": "course/00_Positron/slides.html#variables", "title": "Using Positron", "section": "Variables", - "text": "Variables\nOn the upper-portion of the Secondary Side Bar, we can find the Session window, containing the Variables tab. As you run (execute) lines of code, and different variables, objects and functions are created, these become visible under the variables tab on the upper right.\n\n\n\nFor some types of objects (generally data.frames and other matrix-like objects), you can click on their listing under variables to expand to see additional details about the object (column names, etc.) as well as view a larger version which will appear within the Editor window.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "text": "Variables\n\n\n\n\n\n\n\n\n.\n\n\nOn the upper-portion of the Secondary Side Bar, we can find the Session window, containing the Variables tab. As you run (execute) lines of code, and different variables, objects and functions are created, these become visible under the variables tab on the upper right." }, { - "objectID": "course/00_Positron/index.html#plots", - "href": "course/00_Positron/index.html#plots", + "objectID": "course/00_Positron/slides.html#plots", + "href": "course/00_Positron/slides.html#plots", "title": "Using Positron", "section": "Plots", - "text": "Plots\nSimilarly, any generated Plots or Documents will appear within the Secondary Side Bar, either under Plots (bottom) or Viewer (top) tabs.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "text": "Plots\n\n\n\n\n\n\n\n\n.\n\n\nSimilarly, any generated Plots or Documents will appear within the Secondary Side Bar, either under Plots (bottom) or Viewer (top) tabs." }, { - "objectID": "course/00_Positron/index.html#view", - "href": "course/00_Positron/index.html#view", + "objectID": "course/00_Positron/slides.html#view", + "href": "course/00_Positron/slides.html#view", "title": "Using Positron", "section": "View", - "text": "View\nOn the upper bar multiple tabs can be found, which we will explore in due time. Most useful to point out is the View tab. If you accidentally close your console, session or plots window, and are trying to get them to reapper, you would need to reselect them from this tab.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "text": "View\n\n\n\n\n\n\n\n\n.\n\n\nOn the upper bar multiple tabs can be found, which we will explore in due time. Most useful to point out is the View tab. If you accidentally close your console, session or plots window, and are trying to get them to reapper, you would need to reselect them from this tab." }, { - "objectID": "course/00_Positron/index.html#pages", - "href": "course/00_Positron/index.html#pages", + "objectID": "course/00_Positron/slides.html#pages", + "href": "course/00_Positron/slides.html#pages", "title": "Using Positron", "section": "Pages", - "text": "Pages\nThe pages tab and the left-side bar show you everything that is currently within your project folder, including all the folders, and files. Once version control with Git is initiated, new files are relected showing up as green text and a dot, while modified tracked files are reflected by light brown text and a dot.\n\n\n\nThe dropdown arrows can be used to open and close specific folders to allow for better organization. There is also a scrollbar on the right-side of the side-bar to scroll through the entire folders contents.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "text": "Pages\n\n\n\n\n\n\n\n\n.\n\n\nThe pages tab and the left-side bar show you everything that is currently within your project folder, including all the folders, and files. Once version control with Git is initiated, new files are relected showing up as green text and a dot, while modified tracked files are reflected by light brown text and a dot." }, { - "objectID": "course/00_Positron/index.html#search", - "href": "course/00_Positron/index.html#search", + "objectID": "course/00_Positron/slides.html#search", + "href": "course/00_Positron/slides.html#search", "title": "Using Positron", "section": "Search", - "text": "Search\nThe search tab on the left side bar is something that I use routinely.\n\n\n\nIt can help locate code that you had been working on, but have since forgotten where it is at. Here is an example of finding the files where I had used a function that needed modifying within a local project folder’s files.\n\n\n\nSimilarly, if you need to replace a particular character string with another, the replace with field below can help simplify the task without having to track down and change 20 lines across 5 files.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "text": "Search\n\n\n\n\n\n\n\n\n.\n\n\nThe search tab on the left side bar is something that I use routinely." }, { - "objectID": "course/00_Positron/index.html#extensions", - "href": "course/00_Positron/index.html#extensions", + "objectID": "course/00_Positron/slides.html#extensions", + "href": "course/00_Positron/slides.html#extensions", "title": "Using Positron", "section": "Extensions", - "text": "Extensions\nOn the far-left side we can find the Activity bar, which contains several tabs. Which tab you have selected will then dictate the contents of your left side-bar.\nOccupying the left side bar are several tabs. One of these is Extensions, which shows “Plugins” (or the VScode equivalent) that extend the functionality of Positron further. The ones you have installed may vary, but the main ones in context of this course are Air (provides color and highlights syntax for R code to make interpretation easier) as well as Quarto (for rendering the various document types).", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "text": "Extensions\n\n\n\n\n\n\n\n\n.\n\n\nOn the far-left side we can find the Activity bar, which contains several tabs. Which tab you have selected will then dictate the contents of your left side-bar.\nOccupying the left side bar are several tabs. One of these is Extensions, which shows “Plugins” (or the VScode equivalent) that extend the functionality of Positron further. The ones you have installed may vary, but the main ones in context of this course are Air (provides color and highlights syntax for R code to make interpretation easier) as well as Quarto (for rendering the various document types)." }, { - "objectID": "course/00_Positron/index.html#git", - "href": "course/00_Positron/index.html#git", + "objectID": "course/00_Positron/slides.html#git", + "href": "course/00_Positron/slides.html#git", "title": "Using Positron", "section": "Git", - "text": "Git\nThe Git tab on the left side bar is where once version control is initiated for the project folder, we can see changes that have occurred to the individual files since the last commit. These changes can be added to a new commit by clicking on the + sign. This will be covered more extensively in the next section\n\n\n\nSimilarly, if you want to discard a change that has occured, the circular arrow will revert to the last commited version. Selecting and pressing the delete button will similarly work.\n\n\n\nSelecting the … options will highlight all the various git functions, some of which we will cover more extensively in the next section and throughout the course.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] - }, - { - "objectID": "course/00_Homeworks/index.html", - "href": "course/00_Homeworks/index.html", - "title": "Getting Help", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - Getting Help" - ] + "text": "Git\n\n\n\n\n\n\n\n\n.\n\n\nThe Git tab on the left side bar is where once version control is initiated for the project folder, we can see changes that have occurred to the individual files since the last commit. These changes can be added to a new commit by clicking on the + sign. This will be covered more extensively in the next section" }, { - "objectID": "course/00_Homeworks/index.html#discussions-forum", - "href": "course/00_Homeworks/index.html#discussions-forum", + "objectID": "course/00_Homeworks/slides.html#discussions-forum", + "href": "course/00_Homeworks/slides.html#discussions-forum", "title": "Getting Help", "section": "Discussions Forum", - "text": "Discussions Forum\nOn the course’s GitHub repository, we have opened up a Discussions page that we plan to use as a community forum. We hope that it will serve multiple functions, from providing a better sense of community for the online participants, to facilitating asking and receiving help on something that is not clear, provide feedback about something that it not working out, as well as a place to celebrate and show off your coding wins.\n\nTo keep the Discussions forum semi-organized, we have set up several categories, please select the appropiate category when opening a new discussion!\n\n\n\nCode of Conduct\n\nWe ask that all course participants read and adhere to the spirit of our Code of Conduct. We are all human, at different points in our learning journeys, so what may be obvious to you at your point of your learning journey may have necessarily be obvious to someone just getting started. This course is our giving back to those in the community, but is on a voluntary basis in addition to our regular workload. While we try to reply quickly, sometimes our cell sorters fully melt down sending everything into chaos. We will reply when we can.\n\n\n\n\nAnnouncements\n\nWhen we send out an email to all participants, we will also repost it as an announcement. This ensures that even if you are not on our mailing list, you will still be able to have access to important information and course updates.\n\n\n\n\n\n\n\nGeneral\n\nThis section category can be used for any discussions that you think are worth having, that don’t fall under any of the other category. Good examples are continuing a discussion that was held during one of the livestreams; wanting to discuss and dive further into a given week’s topic; or bringing in additional resources that you found useful to understandingn something that didn’t click initially. This space is for the community to shape as they see best.\n\n\n\n\n\n\n\nIdeas\n\nHave an idea for a new topic or a way to improve the course? We would love to hear them. Provide as many details, and ideally, an example, and if it is doable, we will try to implement them.\n\n\n\n\n\n\n\nIntroductions\n\nOnline courses can be odd in terms of replicating in-person dynamics. Fortunately, we have gathered the largest cohort of “cytometrist with no-to-little flow experience trying to learn R at the same time” that the world has ever seen, so best to take advantage of this while we can. Treat this section as if we had just met at a conference, tell us about yourself, what brings you here, and what you want to hopefully be able to do after the course ends.", - "crumbs": [ - "About", - "Getting Started", - "00 - Getting Help" - ] + "text": "Discussions Forum\n\n\n\n\n\n\n\n\n.\n\n\nOn the course’s GitHub repository, we have opened up a Discussions page that we plan to use as a community forum. We hope that it will serve multiple functions, from providing a better sense of community for the online participants, to facilitating asking and receiving help on something that is not clear, provide feedback about something that it not working out, as well as a place to celebrate and show off your coding wins." }, { - "objectID": "course/00_Homeworks/index.html#polls", - "href": "course/00_Homeworks/index.html#polls", + "objectID": "course/00_Homeworks/slides.html#polls", + "href": "course/00_Homeworks/slides.html#polls", "title": "Getting Help", "section": "Polls", - "text": "Polls\n\nOccasionally, we will need to gather community feedback on what is working and what is not working. We will sporadically post Polls for this purpose.\n\n\n\n\n\n\nQ&A\n\nThe Questions and Answers (Q&A) section is where you go if something is not clear, not working, and you are trying to troubleshoot your way through it. First thing before posting, search! to see if someone has already asked the question. If you don’t find anything, go ahead and open a new discussion.\nSince we are not at your computer, and don’t have your dataset, when troubleshooting it is best to include a minimal reproducible example of the issuen you are encountering, slimming down the number of files needed to be transferred, and generalizing down the code so that other course participants and instructors can follow along. If this is not doable, or if the problem requires added context (and larger files), create a new repository on your GitHub, make it public, and share the links to it in your post. The goal would be to download the folder and be able to replicate the issue that you are encountering.\n\n\n\n\n\n\n\n\n\n\nShow and Tell\n\nWhere Q&A section is for getting help on code that is frustratingly not working, Show and Tell is where to go and celebrate when you finally get things to work. Share your wins, show us the extra pretty graphs, bizarre autofluorescence signatures, or odd outputs that just make you laugh.", - "crumbs": [ - "About", - "Getting Started", - "00 - Getting Help" - ] + "text": "Polls\n\n\n\n\n\n\n\n\n\n.\n\n\nOccasionally, we will need to gather community feedback on what is working and what is not working. We will sporadically post Polls for this purpose." }, { - "objectID": "course/00_Homeworks/index.html#issues", - "href": "course/00_Homeworks/index.html#issues", + "objectID": "course/00_Homeworks/slides.html#issues", + "href": "course/00_Homeworks/slides.html#issues", "title": "Getting Help", "section": "Issues", - "text": "Issues\nMost of the time, if you are having trouble getting you code to run, you should first stop after some initial troubleshooting should be to open a new Discussion under the Q&A category. Here you will be able to get both community and instructor help and suggestions to hopefully resolve whatever is going on.\n\nThe Issues page is primarily meant for course-specific problems that require the course instructor intervention to fix. For example, we release a new week of material, and while it runs fine for both Windows and Linux, the code fails to run for all MacOS users. While you may be able to find workarounds on your own, it’s ultimately our responsibility to help provide a solution so that everyone can move forward. This is the situation where opening an Issue is appropiate.\n\n\n\nSimilarly, if our code contains a wrong argument, is returning a deprecation warning, etc. open an issue to let us know. While we may not be able to fix something that is not directly related to our code, we can redirect it to the package maintainers so that they can fix the issue.\nAnd likewise, if you find multiple typos in the documentation, you can open an issue and propose carrying out a pull-request to fix them.", - "crumbs": [ - "About", - "Getting Started", - "00 - Getting Help" - ] + "text": "Issues" }, { - "objectID": "course/00_Homeworks/index.html#submitting-take-home-problems", - "href": "course/00_Homeworks/index.html#submitting-take-home-problems", + "objectID": "course/00_Homeworks/slides.html#submitting-take-home-problems", + "href": "course/00_Homeworks/slides.html#submitting-take-home-problems", "title": "Getting Help", "section": "Submitting Take-Home Problems", - "text": "Submitting Take-Home Problems\nEach week, during the course, we introduce and cover the main concepts for the particular concept. Our goal is to provide you with the necessary code and enough code to be able to get the jist. However, to become comfortable and be able to apply what you have learned, you will need to explore beyond our examples, try it with your own datasets, encounter things that don’t work, and troubleshoot your way through them. It’s this cycle of venturing into the unknown that develops strong coding skills that are needed to overcome any barrier you encounter. The goal of the take-home questions is to provide some less curated problems that will take a little longer to answer to help get you started on your own exploration of the topic.\nAs previously mentioned, these take-home problems are completely optional. If you are in the middle of solving them and want to seek feedback from then community and course instructors, open a Discussion under the general category is the way to go.\nHowever, if you have completed them, and want course instructor feedback, you can submit them to us in the form of a pull-request to the CytometryInR repo’s homework branch. We will take a look, offer constructive suggestions, and when ready merge the solution. This will also result in GitHub listing you as a contributor to the course.\nWe will outline the basic steps of how to set up and open a pull-request, to help simplify the process.\n\nSync your Fork\nFirst off, make sure to Sync your fork of the Cytometry in R project. That makes sure that all the commits present are up-to-date and simplifies the process of having the pull-request being merged.\n\n\n\n\n\n\n\n\n\n\n\nPull to Local\nHaving Synced your branch on GitHub, return to your computer, open the CytometryInR repository and pull in the changes locally.\n\n\n\n\nCreate own Folder under Homeworks\nUnder the course folder, you will find folders for each week. Within these folders find the homework folder. This will appear empty except for a README file with ionstructions. It is within this folder you will need to create your own folder.\nTo ensure there are no conflicts on the pull-request merge, please use your GitHub username as the folder name.\n\n\n\nOnce you have your folder inside homework, go ahead and copy anything you are turning in from their respective working project folders. Remember, the goal is minimal reproducible example is the goal. Rendered Quarto Documents are preferred, but we will also accept scripts and small data files and images. a README.MD file with anything you want me to know,\n\n\n\n\n\n\n\n\nSign off Commit\nNow that everything is present, Sign Off and Commit the change.\n\n\n\n\n\nPush Branch to GitHub.\nProceed to push the branch to GitHub.\n\n\n\n\n\nRe-sync if necessary\nIf additional changes have occured to the parent CytometryInR repository, go ahead and update your branch. As long as your edits occurred within your folder inside homework folders, they should still be able to merge.\n\n\n\n\n\n\n\n\nOpen a pull-request\nTo start a pull request, click to see how your commit is ahead by\n\n\n\nNext, switch from the parent CytometryInR main branch (used for the website and course) to the homework branch for that respective week (used for the take-home problems).\n\n\n\nOnce this is done, select Pull request\n\n\n\nMake sure to triple check it’s bound for the homeworks branch. If you see that it is not capable of merging, verify that your commit only contains files within your respective homework username folder. Fill in the required fields of the pull request.\n\n\n\nAnd when ready, create the pull request.\n\n\n\n\nWait for Feedback\nOn our end, once you have created a pull request, we will review your work, offer constructive suggestions, etc. If I ask for revisions, all you would need to do is update your files, commit again on your side of the local forked repository.\n\n\n\n\n\nFinal Review and Merge\nIf all is good, we will merge the pull request and your solution to the take-home problems will now be available on the homework branch.\n\n\n\n\n\nAfter course\nAfter the course completes, we will merge homework branch with the main branch, making the community solutions to the take-home problems additional coding examples that can be used by others following along after the course concludes.", - "crumbs": [ - "About", - "Getting Started", - "00 - Getting Help" - ] - }, - { - "objectID": "course/00_GitHub/index.html", - "href": "course/00_GitHub/index.html", - "title": "Using GitHub", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] + "text": "Submitting Take-Home Problems\n\n\n\n\n\n\n\n\n.\n\n\nEach week, during the course, we introduce and cover the main concepts for the particular concept. Our goal is to provide you with the necessary code and enough code to be able to get the jist. However, to become comfortable and be able to apply what you have learned, you will need to explore beyond our examples, try it with your own datasets, encounter things that don’t work, and troubleshoot your way through them. It’s this cycle of venturing into the unknown that develops strong coding skills that are needed to overcome any barrier you encounter. The goal of the take-home questions is to provide some less curated problems that will take a little longer to answer to help get you started on your own exploration of the topic." }, { - "objectID": "course/00_GitHub/index.html#creating-an-account", - "href": "course/00_GitHub/index.html#creating-an-account", + "objectID": "course/00_GitHub/slides.html#creating-an-account", + "href": "course/00_GitHub/slides.html#creating-an-account", "title": "Using GitHub", "section": "Creating an Account", - "text": "Creating an Account\nWe will first navigate to the GitHub homepage. If you haven’t previously created an account, click on the button to sign up for an account.\n\n\n\nOn the sign-up page, you will fill in various details needed to create an account. Please remember that GitHub usernames are visible to others. Additionally, if you end up sharing code with others as part of a manuscript, or use GitHub to create a personal portfolio website in the future, your username will appear as part of the URL.\nFor example, in my case, my user name is DavidRach, so my GitHub profile ends up as: https://github.com/DavidRach. For our course, the core’s GitHub user name is UMGCCCFCSR, so the github profile ends up as https://github.com/UMGCCCFCSR, while the course website ends up as https://umgcccfcsr.github.io/CytometryInR/\n\n\n\nOnce you have entered your new account information, you will need your account creation by entering the code sent to the email address that you provided.\n\n\n\nOnce account creation has been confirmed, please proceed to login to GitHub for the first time.", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] + "text": "Creating an Account\n\n\n\n\n\n\n\n\n.\n\n\nWe will first navigate to the GitHub homepage. If you haven’t previously created an account, click on the button to sign up for an account." }, { - "objectID": "course/00_GitHub/index.html#github-profile", - "href": "course/00_GitHub/index.html#github-profile", + "objectID": "course/00_GitHub/slides.html#github-profile", + "href": "course/00_GitHub/slides.html#github-profile", "title": "Using GitHub", "section": "GitHub Profile", - "text": "GitHub Profile\nUpon creating a brand new account, your GitHub homepage will initially look rather empty, and can be intimidating to navigate for the first time.\nFor now, on the upper right, go ahead and click on the default profile picture icon…\n\n\n\nAnd then select Profile…\n\n\n\nYou are now on your public GitHub profile page. For a newly created account, it will look something like this:\n\n\n\nFor a more established account, this page will look a little different, and can be customized to highlight various projects that you are working on.\nFor this course, we will have you set up a basic GitHub profile page for now, although you are free to customize and personalize it as much as you may want to in the future!\nTo start, first select the edit profile button on the left below the default profile icon.\n\n\n\nYou can then proceed to fill in any details that you feel are relevant and are comfortable sharing.\n\n\n\nWith the quick access details filled in, it is now time to navigate to the Settings tab. You will return to the previous menu dropdown on the upper right, and instead of selecting Profile, click on the Settings option.\n\n\n\nYou should now end up within your Public Profile Settings page.\nFeel free to edit the default profile picture, and any other fields that you feel are relevant. Once done, continue to scroll down the page past ORCID ID.\n\n\n\nWhen you reach Contributions and Activity, go ahead and select the option to include private repositories in the activity summary graphic. Then scroll down and click save. You will now be returned to your GitHub profile page.\n\n\n\nAt the top of the profile, you will see a “Your contributions” calendar graph. For a new account, it will look like this:\n\n\n\nIf you are just starting out, this chart will be mostly empty, but will fill in as you work on projects, see here as an example.\nEvery time you save your code (ie. make a commit), the activity will be reflected in this chart. By clicking the option in settings, code made within a private repository will remain private, but will count toward your contribution chart. As you progress through the course, this will provide a nice visual reminder of the progress you have made, and the obstacles that you have overcome.", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] + "text": "GitHub Profile\n\n\n\n\n\n\n\n\n.\n\n\nUpon creating a brand new account, your GitHub homepage will initially look rather empty, and can be intimidating to navigate for the first time.\nFor now, on the upper right, go ahead and click on the default profile picture icon…" }, { - "objectID": "course/00_GitHub/index.html#github-readme", - "href": "course/00_GitHub/index.html#github-readme", + "objectID": "course/00_GitHub/slides.html#github-readme", + "href": "course/00_GitHub/slides.html#github-readme", "title": "Using GitHub", "section": "GitHub ReadMe", - "text": "GitHub ReadMe\nWith this done, we modify your GitHub profile by adding one customized element, a ReadMe page. This will be used for a couple projects during the course, and can be personalized further in the future.\nTo create a ReadMe page for your profile, we will navigate to the upper right of the screen and click on the + sign.\n\n\n\nWe will then select the Create New Repository option.\n\n\n\nYou will next create a repository (folder), naming it exactly the same as your username. This will be recognized by GitHub as being a special type of repository corresponding to the ReadMe section of your profile.\nFor options, leave the visibility as Public, and Add README set to On. And proceed to Create Repository.\n\n\n\nHaving created the repository (folder), you will see it has been populated by a few default files. For now, you will be editing the README.md file. On a new repository, the easiest way to access it is by clicking the green option on the right side of your screen.\n\n\n\nWith the README.md file now opened, you will be able to see generic filler text that is suggested by GitHub.\nFor this course, I will ask you to add a couple elements for now. You are free to return and further personalize it later if you wish to do so.\n\n\n\nThe type of file that we are working with is a Markdown file, which can allow for a bunch of customizations which we will cover throughout the course.\nFor now, please add and customize the following questions:\nCytometry In R\nLocation: Baltimore, Maryland, USA\nMy Favorite Fluorophore/Metal-Isotope: Spark Blue 550\nPrevious Coding Experience: Repeatedly Calling IT\nWhat I Hope to Get From This Course: A faster way to match FlowSOM clusters to their likely cell type.\n\n\n\nNext, to save you will select the green “Commit changes” button. We will cover the meaning of “Commit” more in-depth during the Git section.\nFor now, write a short summary of the change you made to the file in the “Commit message”, and any additional details within the “Extended description” field. When ready, click the green “Commit changes” button.\n\n\n\nYou will now be able to see the updated README.md file, as you can see in our example below. To make additional edits, you would select the pencil icon on the right-center side of the screen.\n\n\n\nNext, navigate back to your profile page (by clicking on either your username or the Overview option on the tabs).\nYou will see that the README file contents are now displayed on the upper portion of your GitHub profile. Feel free to circle back and customize this further to your liking.\nIn this last example, we created your first repository (folder). Since this is public, it is now shown below the README section of the profile under your repositories. You can also see that your commits made in the process of making the changes are now shown both in the Contributions graph, and under the Contributor Activity summary at the bottom of the page.", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] + "text": "GitHub ReadMe\n\n\n\n\n\n\n\n\n.\n\n\nWith this done, we modify your GitHub profile by adding one customized element, a ReadMe page. This will be used for a couple projects during the course, and can be personalized further in the future.\nTo create a ReadMe page for your profile, we will navigate to the upper right of the screen and click on the + sign." }, { - "objectID": "course/00_GitHub/index.html#github-repository", - "href": "course/00_GitHub/index.html#github-repository", + "objectID": "course/00_GitHub/slides.html#github-repository", + "href": "course/00_GitHub/slides.html#github-repository", "title": "Using GitHub", "section": "GitHub Repository", - "text": "GitHub Repository\nHaving set up your GitHub profile, it now is time to make sure you have access to our course materials. We will have you navigate to our course’s GitHub profile\nOn the profile page, you will be able to see our version of the README, our repositories, and the Contributions graph and Contribution activity sections.\nPlease click on the CytometryInR to navigate to its repository (folder)\n\n\n\nOn this page, you will see several elements that you will be circling back to throughout the course.\nFor our course, we will be extentsively ussing the Discussions page as a community forum. If you have any questions, are looking for feedback, or want to show off something that you worked on, this is the place for it. This will also help make sure\n\n\n\nThe Issues tab is where you will need to go to open an Issue if you encounter a bug (or major documentation typo), so that I can cicle back and correct them when I have the chance.\n\n\n\nTo submit the optional take-home problems, you would turn in these problems by going to the Pull Request tab, and initiating a pull request between your forked version of the project and our “homework” branch (more details on this later).\n\n\n\nOptionally, you can “Star” a repository. This is basically the GitHub equivalent of liking a project. In our case, we will often star a repository since it will be saved under the Stars tab of our profile, which makes finding it again significantly easier a few weeks later after forgetting the repository name.\n\n\n\nTo see projects that you have starred, you can select the Stars option from the same dropdown you used to get to Settings.\n\n\n\nOr from your GitHub profile, you can see these under Stars tab.", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] + "text": "GitHub Repository\n\n\n\n\n\n\n\n\n.\n\n\nHaving set up your GitHub profile, it now is time to make sure you have access to our course materials. We will have you navigate to our course’s GitHub profile\nOn the profile page, you will be able to see our version of the README, our repositories, and the Contributions graph and Contribution activity sections.\nPlease click on the CytometryInR to navigate to its repository (folder)" }, { - "objectID": "course/00_GitHub/index.html#forking-cytometryinr", - "href": "course/00_GitHub/index.html#forking-cytometryinr", + "objectID": "course/00_GitHub/slides.html#forking-cytometryinr", + "href": "course/00_GitHub/slides.html#forking-cytometryinr", "title": "Using GitHub", "section": "Forking CytometryInR", - "text": "Forking CytometryInR\nBefore we go further, we will need you to make your own copy of the course repository (ie. fork it). This will allow you to quickly retrieve all the new materials and code corrections by simply rereshing (ie. syncing) your forked version with our upstream parent branch once a week.\n\n\nTo fork the course repository, you will select the “Fork repository” option on the upper-center portion of your screen.\n\n\n\nBy “Fork-ing” a repository, you are basically copying the contents from that repository to a newly created repository on your own GitHub. Forked projects are still linked to the original (parent) fork, and can retrieve any updates via syncing, as well as return changes via a pull request.\nFor this course, when you create the fork, keep the existing repository name (“CytometryInR”). Importantly, select the copy main branch option. This will ensure you only get the code and data needed for the course copied over, and don’t end up with your entire hard-drive filled will website elements, or other people’s solutions to the take-home problems.\n\n\n\nOnce you have created the fork, you will see your copy of the forked repository under your own username. Seeing as you have just now forked the project, you will see the notification that you are up to date with the existing version of the CytometryInR course repository.\nAs we go through the course, and new material is released each week on Sunday at 2200 EST (Monday 0300 GMT+0), you will see this changed to behind the main branch by a number of commits, and have the option to sync in the changes to your fork to gain access to that week’s material.\n\n\n\nIf you remember, previously under your GitHub profile, the Repositories tab only contained the repository corresponding to your ReadMe section.\n\n\n\nYou should however now be able to see your fork of the CytometryInR repository. As you add project specific repositories throughout the course, they will also appear here.", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] - }, - { - "objectID": "course/00_Git/index.html", - "href": "course/00_Git/index.html", - "title": "Version Control with Git", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] + "text": "Forking CytometryInR\n\n\n\n\n\n\n\n\n.\n\n\nBefore we go further, we will need you to make your own copy of the course repository (ie. fork it). This will allow you to quickly retrieve all the new materials and code corrections by simply rereshing (ie. syncing) your forked version with our upstream parent branch once a week." }, { - "objectID": "course/00_Git/index.html#new-folder-from-template", - "href": "course/00_Git/index.html#new-folder-from-template", + "objectID": "course/00_Git/slides.html#new-folder-from-template", + "href": "course/00_Git/slides.html#new-folder-from-template", "title": "Version Control with Git", "section": "New Folder from Template", - "text": "New Folder from Template\nSince Positron can use multiple programming languages, when we select “New Folder from Template” we will be asked what kind of folder template we want to use. Since we are working in R, we will select the “R Project” option.\n\n\n\nWe will next be asked to name the new project folder and a storage location.\nOne thing I would like to remind everyone who is just starting to code is that it is best to avoid using special characters (ex. @ $ # ^ ! ; : ,) in any folder or file name. This is because when coding, these can be misinterpreted as commands.\nWhile spaces are generally okay, it is often to best stick to to stick to hyphens (-), underscores (_). We will explore naming conventions in more depth at a later time.\n\n\n\nAnother useful thing to know when getting started with version control, it is best to save your files within your local computer, avoid using OneDrive or other cloud storage options for the time reason. The reason behind is that permissions to write/save to the cloud locations can sometimes be quite finicky, and some autosave/indexing behaviors can cause issues. akes things easier to save or modify without running into permission issues. For most of our course examples, we will be saving our Project Folders under the Documents Folder.\nHaving named our new Project Folder, and designated a storage location, go ahead and check the Initialize Git Repository option. This will indicate to version control to monitor content and changes to files within this folder.\n\n\n\nThe next setup screen will verify which version of R you wish to use. Since we are just getting started, your most recent version of R (usually system) should work. We will also leave the “renv” (reproducible environment setup) option unchecked for the time being (we will revisit the concept later in the course).\n\n\n\nAnd if all goes well, we should see the “New Folder Created” popup.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] + "text": "New Folder from Template\n\n\n\n\n\n\n\n\n.\n\n\nSince Positron can use multiple programming languages, when we select “New Folder from Template” we will be asked what kind of folder template we want to use. Since we are working in R, we will select the “R Project” option." }, { - "objectID": "course/00_Git/index.html#creating-subfolders", - "href": "course/00_Git/index.html#creating-subfolders", + "objectID": "course/00_Git/slides.html#creating-subfolders", + "href": "course/00_Git/slides.html#creating-subfolders", "title": "Version Control with Git", "section": "Creating SubFolders", - "text": "Creating SubFolders\nOnce your new project folder has opened, you should be seeing the main layout elements that we briefly covered in the Positron walk-through.\nFor this section, we will primarily be focused on what is happening within the primary side bar on the left, where changes to the individual files within the folder since the last save/commit will be reflected by colored text.\nFor my own projects, there are some elements of organization that I go ahead and add for each new folder. These include both a data and an images subfolders to help keep things a little more organized.\nTo create these folders, we would click on the respective add folder (+) button on the side bar. Files and Folders can be clicked and dragged within the primary side bar to move things to new folder locations.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] + "text": "Creating SubFolders\n\n\n\n\n\n\n\n\n.\n\n\nOnce your new project folder has opened, you should be seeing the main layout elements that we briefly covered in the Positron walk-through.\nFor this section, we will primarily be focused on what is happening within the primary side bar on the left, where changes to the individual files within the folder since the last save/commit will be reflected by colored text.\nFor my own projects, there are some elements of organization that I go ahead and add for each new folder. These include both a data and an images subfolders to help keep things a little more organized.\nTo create these folders, we would click on the respective add folder (+) button on the side bar. Files and Folders can be clicked and dragged within the primary side bar to move things to new folder locations." }, { - "objectID": "course/00_Git/index.html#creating-files", - "href": "course/00_Git/index.html#creating-files", + "objectID": "course/00_Git/slides.html#creating-files", + "href": "course/00_Git/slides.html#creating-files", "title": "Version Control with Git", "section": "Creating Files", - "text": "Creating Files\nIn context of this course, we will primarily be working with two types of files when coding:\n\nR Scripts: These files end in .R. These contain only code (with occasional # comment line). These are often used for self-contained code that once we get them working we rarely need to modify.\nQuarto Markdowns: These files end in .qmd. They contain a .yaml header, followed by a mix of regular written text (often explanations or other documentation), and sections (ie. chunks) that contain code. These are used when we are still getting the code to work, when we need to modify inputs frequently, or simply when we need to document what and why we are doing something to make life easier for our future-self two months from now.\n\n\n\nIn this example, I will go ahead and select the new file icon\n\n\n\nThenn I will name the file, and designate it as a Quarto Markdown file by adding the .qmd at the end of the name to denote the file type.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] + "text": "Creating Files\n\n\n\n\n\n\n\n\n.\n\n\nIn context of this course, we will primarily be working with two types of files when coding:\n\nR Scripts: These files end in .R. These contain only code (with occasional # comment line). These are often used for self-contained code that once we get them working we rarely need to modify.\nQuarto Markdowns: These files end in .qmd. They contain a .yaml header, followed by a mix of regular written text (often explanations or other documentation), and sections (ie. chunks) that contain code. These are used when we are still getting the code to work, when we need to modify inputs frequently, or simply when we need to document what and why we are doing something to make life easier for our future-self two months from now." }, { - "objectID": "course/00_Git/index.html#qmd-files", - "href": "course/00_Git/index.html#qmd-files", + "objectID": "course/00_Git/slides.html#qmd-files", + "href": "course/00_Git/slides.html#qmd-files", "title": "Version Control with Git", "section": "QMD Files", - "text": "QMD Files\nOnce this is done, we can now see we have a new .qmd file (“Example.qmd” in this case).\n\nYAML\nAs previously mentioned, the start of a Quarto Markdown file containg a YAML code chunk that is used to set formatting choices (we will explore this in-depth during the next section)\nWhat designates the location of the YAML block are three hyphens at the start, and three hyphens at the end. For this example, we will also provide a “title:” and “format:” field for the time being (see additional options here).\n\n\n\n\n\nText\nWith a basic YAML formatting block now in place, we can build out other elements of our Quarto Markdown document. Unless otherwise specified, everything else in the document is assumed to be text, so I will go ahead and provide an initial text description of what I am trying to do.\n\n\n\n\n\nCode-Chunks\nHaving provided some initial text for documentation, we can then add code-block chunks to start writing some code.\nThe easiest way to do do this is to click the respective option on the upper-right of the Editor screen. Since Positron can handle multiple programming languages, so the chunk is inserted, we will need to select the language we use to be used within the code chunk (R in this case).\n\n\n\nYou will notice, that the inserted code block starts off with three backticks (`) and then “{r}”. The end of the code block is denoted by an additional three backticks.\nWe can also add new code blocks by simply typing these elements into the location we want to place a code chunk (as long as we are careful to add 3 backticks also at the end).\n\n\n\n\n\n\n\n\nRunning Code\nNow that we have two code-chunks written, we can write lines of code within them. For this example, I will use two beginner friendly functions, print(“Hello”), which will print the contents contained between the ” ” to the console, and getwd() which will return the location of the folder you are working within (ie. the working directory).\nTo run/execute these lines of code, we have a couple options. We can click on the Run Cell option that appears on the upper-left side of the code chunk. Additionally, it has a companion option that will run all code chunks above it.\n\n\n\nWhen a code block is successfully run, you will see within the console (lower bottom of the screen) the line of code be run, with any returned outputs appear directly after.\n\n\n\nAn alternative to clicking the Run Cell button is to click on the line of code you are interested in running, then press (Ctrl + Enter)/(Command + Enter). This will execute the line of code that you have clicked on. This can be useful in scenarios where you want to run a specific line, and not the entire code-chunk.\n\n\n\nUsing this approach, you can see the location (ie. file path) of the current working directory was returned to the Console.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] + "text": "QMD Files\n\n\n\n\n\n\n\n\n.\n\n\nOnce this is done, we can now see we have a new .qmd file (“Example.qmd” in this case).\n\n\n\n\n\nYAML\n\n\n\n\n\n\n\n\n.\n\n\nAs previously mentioned, the start of a Quarto Markdown file containg a YAML code chunk that is used to set formatting choices (we will explore this in-depth during the next section)\nWhat designates the location of the YAML block are three hyphens at the start, and three hyphens at the end. For this example, we will also provide a “title:” and “format:” field for the time being (see additional options here)." }, { - "objectID": "course/00_Git/index.html#local-version-control", - "href": "course/00_Git/index.html#local-version-control", + "objectID": "course/00_Git/slides.html#local-version-control", + "href": "course/00_Git/slides.html#local-version-control", "title": "Version Control with Git", "section": "Local Version Control", - "text": "Local Version Control\nHaving introduced the main elements of a Quarto Markdown file, let’s turn our attention to the tab within the editor showing our newly created .qmd file.\nWe can see there is a solid circle next to the file name, and it is appearing as green. The circle denotes unsaved changes, which we can correct by clicking on the Save Button to save the changes to our file.\n\n\n\n\nUntracked\nIf we turn our attention to the left primary sidebar, we can see that within our GitPractie folder there are three files, our Example.qmd, and the default README.md and .gitignore files. These all show up in green text with U’s to the right of the file names.\nThis denotes that the version control tracking software Git is currently considering them as “Untracked” files. While saving the document via the Save button means we will still have our changes when we reopen Positron, we won’t have any history of changes that we can use to revert back to the way all the files appeared at this exact point in time should something go wrong.\nWe will next go the address bar on the very far left, and select the Git tab.\n\n\n\nOn the Git tab, we can see that each of the three files are shown underneath a “Changes” drop-down. This contains the files that have undergone changes since the last commit. In our case, since we haven’t updated the save-state yet, this last commit would be the initial creation of the project folder.\n\n\n\nTo have version control track these individual files going forward, we can do so in two separate ways. We can add them individually by clicking the + symbol next to the individual names.\n\n\n\n\n\nStaged\nThis will result in the files being moved to the “Staged” dropdown. This denotes files being tracked with the intention of being recorded as the next save-state or waypoint (ie. a commit).\n\n\n\n\n\nCommit\nTo create a new commit (save-state or waypoint), once we have the files we want to track staged, we will write a commit message, and then press commit.\nA commit message is a brief description of the changes that have occurred to the files between this commit and the previous one. Make this short description informative enough that if you need to revert back in the future, you can quickly identify the commit you need to fall back to (more about this later).\n\n\n\nIf this your first time using version control, you will likely encounter the following pop-up asking that you provide a user.name and user.email. This is used to designate the author of the changes.If you get this popup, go ahead and select “Open Git Log”\n\n\n\n\n\nUserName and UserEmail\nThe Output tab at the bottom of the screen will open, showing the messages that led to the popup.\nThe important part to note is the commands that will be needed to provide your user name and email to the computer for authoring the commit. Typically, your email will be the same one you used for your GitHub account.\n\n\n\nFrom the displayed message, go ahead and copy\n“git config –global user.email”you@example.com””\nThen click on the adjacent terminal tab. You will paste the command in, but do not hit enter just yet.\nWindows users, please note, depending on your settings, if trying to paste from the keyboard into the terminal, you may need to press “Ctrl + Shift + V” instead of the usual “Ctrl + V”.\n\n\n\nWith the command now pasted (or typed), use your keyboard arrows to navigate to the email portion, and replace the generic email with your email address used for your GitHub account.\nMake sure that the quotation marks (“) around the email address remain present, as they help the computer identify where your email address starts and ends. Once satisfied that your email address is correct, press enter.\n\n\n\nNext up, repeat the process, this time copying over the command needed to set your user name to the terminal. Repeat the editing process to provide your name between the “” marks. Then press enter.\n\n\n\n\n\n\n\n\nFirst Commit\nNow that your user.name and email address have been provided, Git should be able to provide an author to the commit message. Reattempt to press commit button.\nIf this is successful, you will see your initial commit appear on the bottom half of the left primary side bar, under the Graph dropdown. Congrats! Your files are now being tracked by version control.\n\n\n\nIf you hover with your mouse arrow just over the commit, you can see the longer commit message and additional details appear.\nIf you click on the commit tab, a new display will open in the editor, displaying the changes that occured in that commit compared to the previous one. In this case, since we added everything since the previous commit, nothing appears on the left side, while the entire documents contents appear highlighted in green on the right.\nGreen highlighting is used to show additions, while red highlighting is used to show deletions.\n\n\n\nHaving completed this initial commit, for this example, let’s imitate a typical workflow and make some additional changes to the file before we make a second commit. Within text portions of the .qmd file, use of # denotes a section header in markdown, so let’s add a header for Introduction and click save.\n\n\n\n\n\nModified\nWithin the left primary sidebar, we can see that the Git tracking has updated. Examples.qmd is visible once again. However, becuase it is now a tracked file, instead of showing up with the “U/Untracked” green highlight, it now appears as a brownish-red with a “M/Modified”.\nLet’s make an additional change to the .qmd file by adding another section (# Setup) and a code block with a commented out line (denoted by the # at the line start), before pressing Save.\n\n\n\nIf we were now to click on the Example.qmd file in the left primary sidebar, it will open the same kind of tracking display we saw previously. This time, we can see changes since our last commit. These appear as the green highlights along the scroll-bar, corresponding to the # Introduction and # Setup headers that we have added in since the last commit.\n\n\n\nFor a larger document, we can scroll down to see the various highlighted regions.\n\n\n\nWe could now repeat the steps showed above, staging the file, writing a commit message, and commiting again by clicking on the designated buttons.\nAn important question is how often should we commit, vs. just hit save? Well… it depends :D Let’s think about this in context of a video game. If you made commits at regular intervals throughout the day (or more frequently when doing something particularly risky), you are more likely to be close enough to a particular commit (waypoint/save-state) that you can quickly revert back to without loosing any progress. Alternatively, if your last commit was last week, you will not have any intermediate versions to fall back to.\n\n\nCommit via Terminal\nHaving demonstrated how to commit changes to Git via the left primary side-bar, for this second commit, let’s do it the alternate way via the terminal (tab on the panel at the bottom of your screen).\n\n\n\nAfter clicking on the terminal tab, click on blinking command line.\nThe command to stage a file is “git add”, followed by the name of the file you want to stage.\nIn this case, you would enter “git add Example.qmd” and press Enter. \n\n\nYou will see after pressing enter a new blank terminal line appear. If you glance at the left-sidebar, you can see that Example.qmd now appears under the Staged Changes dropdown.\n\n\n\nNext up, let’s write the git commit via the terminal. In this case, the command would be “git commit -m” (-m denoting message). The commit text is then surrounded by “” marks.\nFor example: “git commit -m”Added section headers to my QMD file””\nPress enter to save the commit.\n\n\n\nAnd you should see your second commit now appear in the left primary sidebar underneath the graphs dropdown.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] + "text": "Local Version Control\n\n\n\n\n\n\n\n\n.\n\n\nHaving introduced the main elements of a Quarto Markdown file, let’s turn our attention to the tab within the editor showing our newly created .qmd file.\nWe can see there is a solid circle next to the file name, and it is appearing as green. The circle denotes unsaved changes, which we can correct by clicking on the Save Button to save the changes to our file." }, { - "objectID": "course/00_Git/index.html#remote-version-control", - "href": "course/00_Git/index.html#remote-version-control", + "objectID": "course/00_Git/slides.html#remote-version-control", + "href": "course/00_Git/slides.html#remote-version-control", "title": "Version Control with Git", "section": "Remote Version Control", - "text": "Remote Version Control\n\nCopying Project Folder to GitHub\nWhile having local version control in place is helpful when you need to revert back after encountering issues, where Git shines is the ability to pass your changes to your online GitHub repository.\nNot only does this allow you to switch between computers, but should something disastrous happen to your main computer, you still have all your hard work backed up and readily assessible.\nFor this subsection, first, double check that Positron is still connected to your GitHub account by checking the user tab on the bottom-left. If not, repeat the connection setup.\n\n\n\nSince our project was created using the “New Folder from Template” option, it currently only exist locally. What we want to do next is to copy it to our GitHub account, creating a new repository in the process.\nTo do this, we will first need to install the usethis R package. Within your console, you would run the following line of code:\n\ninstall.packages(\"usethis\")\n\nDepending on what R packages you already have installed on your computer, you may get a prompt asking if you want to update/install additional dependencies. Go ahead and type the number corresponding to Update All, and press enter.\nThe package and all it’s dependencies should then install. If an error message appears, read through it, and follow provided instructions. Go to Discussions if need help.\n\n\nOnce the usethis package is installed, we need to activate it within R by calling it with the library command. This makes all the tools (ie. functions) within an R package available for use within Positron.\nIn your console, you would type:\n\nlibrary(usethis)\n\n\n\n\nWith library called, you now have access to the functions (tools) within the usethis R package. One of these is the use_github() function.\nIn Positron, if you hover over a function, it will pull up the associated help file which will provide you information about the arguments the function expects to receive, and what they do.\nFor use_github(), the main thing to remember for now is since this is a personal project being used for testing, we don’t necessarily want to share it with the entire world, so we should set the “private” argument equal to TRUE when creating a new repository.\n\n\n\nTaking this information that we have now gathered, we can now within our Quarto Markdown create a code chunk, write out the line of code calling the function, and providing the Private=TRUE argument within the ().\nWithin a code chunk, adding a # in front of a line of code, will comment it out, resulting in that line of code not being run. Since we have already installed the usethis package, and we don’t want to reinstall it every single time, let’s go ahead and comment out that line. Go ahead and press Enter.\n\n\n\nWe will see a message pop-up in the console. In this case, we had not saved before pressing enter, so there are uncommitted changes within the folder. The pop-up is asking whether you want to save these as well before sending the Folder to GitHub.\nIn this case I will chose to ignore the uncommitted changes by entering 3 (for Definitely) in the console and hitting enter on my keyboard.\n\n\n\nThe usethis R package will then execute the series of git commands that are needed to set up a GitHub repository (ie. the messages being displayed in the console window), and when finished will open a pop-up asking whether you want to see your new repository in your default Web Browser. I will go ahead and select yes in this case.\n\n\n\nAfter the browser opens, you can see that the elements I had staged and committed within Positron are now present within the GitHub repository. Since I had only staged Example.qmd, it is the only file that was backed up. We can also see the commit history online by clicking on the commit clock.\n\n\n\nAs we would expect, we only see our two commit messages. One important thing to note is the commit hash numbers, that denote a particular commit. If we decided to revert/fall back to a prior commit in the future, this would be the number we would need to provide to Git to return to that previous commit/save-state\n\n\n\nSimilarly, on GitHub, we have an option to Browse a Repository at a particular point in time. This will be quite useful later in the future when troubleshooting what major changes occurred between versions of an R package.\n\n\n\n\n\nCode Chunk Arguments\nHaving successfully connected our local Project Folder to a remote GitHub repository, let’s return to Positron.\nBefore continuing, if we left the code chunk that created the GitHub repository as is, every time we ran all code chunks in the document, it would try to recreate the GitHub repository. We don’t want this to happen, as the setup was a one-time operation.\nWhile we could add # in front of every line of code (or delete the code chunk entirely) it is often useful to have these set-up code chunks around to remind us what arguments we need to provide next time we need to a similar setup and are mind blanking on what to do.\nFortunately, Quarto allows us to set conditions on whether a chunk is run (ie. evaluated). We will discuss the conditiona arguments in more depth in the next section, but for now, we can modify the code chunk as follows.\nOn the next line after the {r}, we will add a hashtag (#), then a pipe (|), followed by a space. This is the setup for a code-chunk specific argument. We will then add “eval: FALSE”, which signals that the particular code-chunk should not be evaluated (ie, should not be run).\n\n\n\n\n\nREADME\nNow that we have connected our local Project Folder to GitHub, and have gotten a basic introduction to the “git add”, “git commit” arguments, let’s turn our focus to the other files currently listed as untracked by Git within our folder, the README.md and the .gitignore files.\nWhen setting up our GitHub account, we encounted an example of a README.md file. This file often provides a brief description of the project, and an outline of what the other files in the folder are for. As you may have gathered, even software developers are forgetful/under-caffenaited, and having notes to catch back up to speed is important.\n\n\n\n\n\n.gitignore\nWe additionally have a .gitignore file. Within a project, there are often some files that we will never want version control to track. These could be files that are too large for GitHub (ex. really large .fcs files), or files containing sensitive information (passwords, history, credentials, etc.).\nWhen the names of these file (or the file type shothand) are added to the .gitignore file, they are ignored by version control, and no longer appear on the primary left side bar.\n\n\n\nLet’s proceed and stage both the README.md and .gitignore file, so that changes to these files will be tracked. We can of course select both from the primary left side bar and write a short commit message.\n\n\n\n\n\n\nOr alternatively, if we want to stage all uncommitted files present in a single step, we could in the terminal use the “git add .”\nWe can then write our git commit using “git commit -m”.\nBoth approaches work, and you may switch between them based on preferrence.\n\n\n\nYou will notice after having committed, that if you look at the Graph dropdown on the bottom half of the primary left side-bar that something has changed.\nThere are now separate icons denoted as main and origin/main. These correspond to the last commit present locally (main), and the last commit on remote (ie. GitHub, origin/main).\nLocal is ahead since you just made the commit with the changes inactivating the code-chunk, and you have not passed these changes up to GitHub yet.\n\n\n\n\n\nPull\nBefore sending (ie. pushing up) our updated commit to GitHub, especially if you are working on a project from multiple computers (or as part of a team) to bring in (ie. pull down) any changes that might be on GitHub that are not present locally.\nThis ensures that everything is up to date, and you don’t end up with mismatched commits that are incompatible with each other and trigger an error message.\nTo pull in changes from GitHub, at the top of the primary left side-bar, you can select the … button to open a drop-down menu of Git options. You would then select “Pull”.\nAlternatively, you could do the same thing via the terminal by running the “git pull” command.\n\n\n\n\n\nPush\nIn our case, there was no new material present on our GitHub repository that were not already present locally, so all that is returned is the “Already up to date” message.\nWe are now good to proceed to push (ie. send) the updated commit up to our GitHub repository.\nWe can do this by either pressing the Sync changes button, or via the terminal entering the “git push” command.\n\n\n\nAnd now, if you glance down at left side-bar’s graph section, you will see that both the main and origin/main icons are now present for the most recent commit.\n\n\n\nIf we switch to our Web browser, we can see that this is also now the case for our GitHub repository that now also has the most recent changes.\n\n\n\n\n\nReverting to Prior Commit\nFor most daily-workflows, you will only need the git commands that we have introduced above (git add, commit, pull, push). The next two areas (reverting to a prior commit, and branches) are more specialized, and will be covered in greater depth later in the course. We are briefly covering them here. If you are at the point where your last remaining neuron has disconnected, and you feel you need to take a break from version control, feel free to skip to the next section and we will revisit these topics later in the course.\n\n–\nIn most cases, if your code stops working, you can identify the issue and fix it in the existing version, never needing to resort to reverting to a previous commit (save-state). The times you would need to revert would be if you deleted important files, or the new files are hopeless mess that is not worth trying to sort through. In those cases, reverting back might be better approach.\nTo imitate a falling back scenario, lets create and additional file, stage and commit it to end up a commit ahead of where we are currently at within the Project Folder.\n\n\n\nNow being one (or several) commits ahead, if we wanted to revert back, we would first need to identify the commit we want to revert back to and copy the commit hash number.\n\n\n\nThen, opening the terminal, we can enter “git reset” and paste the hash afterwards. We can then press enter.\n\n\n\nYou will notice our additional commit has been removed, although the newer files we were working on subsequent last commit are still present.\n\n\n\nIf however, we had wanted to return to the exact same state as the previous commit (removing all subsequent created files), we could do so by adding in the –hard argument. Before starting, save any newer files you want to keep in a completely different folder, because they will be permanently removed.\nThen, enter “git reset –hard thecommithashnumber” into the terminal, which would result in a “hard” return to the previous commits save-state. You may need to close and reopen Positron to see the changes reflected.\n\n\nBranches\nBranches are an useful Git feature that we will start using extensively later in the course. Branching allows you to create a parallel/carbon-copy of your existing repository, which you can then edit without affecting the main branch. This is particularly useful for projects that may get messy or drawn out. By isolating these edits to a parallel branch, if they don’t work, your main branch remains safe. Alternatively, if you like the changes that occurred in the branch, you can pull these changes from the branch back to main, bringing the timelines back together.\n\n\nWithin the terminal, entering “git branch” will show the existing branches. In this case, only main is present since we haven’t yet created a new branch.\n\n\n\nWe can create a new branch in the terminal by entering “git branch” followed by the name of our desired branch. In this case, we are creating a branch called Week1\n\n\n\nNow, when we check “git branch” again in the terminal, which returns the two branches, Week1 and main. The * is located next to main, indicating that we are currently within the main branch.\n\n\n\nBesides the terminal, we can also create a new branch via Positron. To do so, we first click on the Git tab in the Actions Bar.\nOnce the left-side bar displays the version control display, we can click on the … button (to the right of changes)to gain access to the Git options drop-down.\nFrom here, we click on Branch, and then select Create Branch.\n\n\n\nUsing Git branch, we saw that we were still within the main branch. In the terminal, we can switch over to the Week1 branch by using the “git checkout” command, followed by the branch we wish to switch to.\n\n\n\nThis results in us switching over to the Week1 branch.\n\n\n\nHaving switched (ie. checkout) to the Week 1 branch, let’s create the file BranchTest.qmd, which will exist within this branch, but not yet in the main branch.\n\n\n\nHaving created the file, let’s stage and then commit it. This will put the Week1 branch ahead of the main branch by a single commit.\n\n\n\nWith our changes staged and committed, if we look at the left side-bar’s graph section, our Week1 branch is now ahead of the origin/main branch by one commit.\n\n\n\nIf we were to check on GitHub, we can see that no new files are present on the main branch, but can see the notification listing recent changes to Week1 branch.\n\n\n\nUsing the drop-down, we can switch from displaying the main branch to the Week1 branch, where we can see the new file.\n\n\n\nIf we click the green compare and pull request button, we end up on this screen. This compares how the two branches are different from each other.\n\n\n\nWe will delve into branches again at a later point. For now, remember that by creating and prunning parallel branches, you can develop knowing that even if something goes wrong, your main branch remains safe.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] + "text": "Remote Version Control\nCopying Project Folder to GitHub\n\n\n\n\n\n\n\n\n.\n\n\nWhile having local version control in place is helpful when you need to revert back after encountering issues, where Git shines is the ability to pass your changes to your online GitHub repository.\nNot only does this allow you to switch between computers, but should something disastrous happen to your main computer, you still have all your hard work backed up and readily assessible.\nFor this subsection, first, double check that Positron is still connected to your GitHub account by checking the user tab on the bottom-left. If not, repeat the connection setup." }, { - "objectID": "course/00_Floreada/index.html", - "href": "course/00_Floreada/index.html", + "objectID": "course/00_Floreada/slides.html#floreada", + "href": "course/00_Floreada/slides.html#floreada", "title": "Using Floreada", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - Floreada" - ] + "section": "Floreada", + "text": "Floreada\nLoading Dataset\n\n\n\n\n\n\n\n\n.\n\n\nFirst, open your web browser and navigate to the website\nClick on Start to proceed to the next page." }, { - "objectID": "course/00_Floreada/index.html#floreada", - "href": "course/00_Floreada/index.html#floreada", - "title": "Using Floreada", - "section": "Floreada", - "text": "Floreada\n\nLoading Dataset\nFirst, open your web browser and navigate to the website\nClick on Start to proceed to the next page.\n\n\n\n\n\n\nOnce that is done, select the File tab on the upper navigation bar. Then click on Open File(s).\n\n\n\n\n\n\n\nFrom there, select your .fcs files of interest, and click Open.\n\n\n\nThe .fcs files will now load in, and you should see a view similar to the one below. On the left side-bar, you have your gating options (Rectangle, Polygon, Range, Elipse, Quad, etc). Next to these on the right you have the FCS files that are loaded into the workspace. Then on the right, you have the visual display for your selected specimen.\n\n\n\n\n\nSwitching Axis Markers\nIf you left click on the axis name (SSC-H or FSC-H in this case), you will be able to select other markers by which to gate your specimen. For the provided example, we were using a raw spectral flow cytometry .fcs file, so the names of the detectors are present.\n\n\n\nFor now, I plan to start off by gating for singlets. I switch the y-axis to FSC-H, and then proceed to switch the x-axis to FSC-A.\n\n\n\n\n\nCreating Gates\nWith this done, I can now select the Poly gate tab on the upper left.\n\n\n\nThen manually click on the locations on the plot to add the individual gate nodes.\n\n\n\nTo complete the gate, I click back to the original node point. At this point, the popup will allow you to name the gate.\n\n\n\nTo adjust the polygon gate, you can click on a node and drag it to expand or contract in a particular direction\n\n\n\nTo move the entire gate, first click on a node to select the gate, then click in the center of the gate to adjust its location.\n\n\n\n\n\nAdditional Gates\nUnfortunately for those with the force-of-habit from using other softwares, double-clicking within the gate doesn’t do anything. To continue gating on the selected cells, you will need to click on the newly created gate name on the left. This will result in visualizing the isolated cells.\n\n\n\nOnce this is done, you can repeat the previous steps to change the axis markers and create a second gate. For this example, we went with a “Cells” gate to exclude debris from this particular sample.\n\n\n\nHaving created the “Cells” gate, we will be switching gating based on FSC and SSC to using the detector parameters.\nThe samples in this example were acquired to derive the cell counts and concentration of various cell populations within cryopreserved cord and peripheral blood mononuclear cells (CBMC and PBMC) specimens after thawing.\nThey were stained with CD19 BV421, CD45 PE, and CD14 APC on a 5-Laser Cytek Aurora, before unmixing, this would correspond respectively to V1, YG1/B4, R1/YG4 peaks respectively.\n\n\n\n\nScaling/Transformation\nWhen we switch the axis, we can see that the scaling/transformation is not ideal, as the staining and not-staining populations are scrunched up together in the center of the plot.\n\n\n\nTo change the scaling/transformation, we need to click directly on the axis.\n\n\n\nFrom there, when we click on the drop-down, we see the various transformation options. We will select Logicle, given we are working with spectral flow cytometry files.\n\n\n\nThis y-axis values are subsequently visualized with the logicle transformation applied, increasing our resolution between the positive and negative population.\n\n\n\nWe can then repeat this for the x-axis, adjusting the fine-tune options for the scaling as needed.\n\n\n\n\n\nNavigating Gating Hierarchy\nWith this done, let’s first draw a rectangle gate for the CD45+ (B4-A) cells.\n\n\n\nAnd then selecting that population by clicking on the gate name, let’s proceed and gate the CD19+ cells (V2-A).\n\n\n\nAs you can see, we now have the various gates present in the gating hierarchy for the respective .fcs file. To return to a previous gated population, we would click on the parent population above it.\n\n\n\nWe can subsequently add an additional gate at this gating level for the likely debris population (the threshold setting was suboptimal for this experimental run).\n\n\n\n\n\nCopying Gates\nThis was the process for gating for a single specimen. To copy gates over to the other specimens, we have two options. First, holding down your Ctrl (or equivalent) button, you can click on the individual gate names.\n\n\n\nFrom there, you can drag them down to the next specimen and apply them.\n\n\n\nAlternatively, you can drag down the highlighted gated to the Pipelines Tab, and apply to All Files. This will result in the gates being copied to all specimens in the experiment.\n\n\n\n\n\n\nAdjustments within Pipelines will carry over to all other respective unmodified specimens that share it’s gates.\n\n\n\nOnce this is done, I recommend cycling through the gates for each specimen, just to ensure that the gates were positioned correctly before saving the workspace.\n\n\n\n\n\nSaving Workspace\nWith everyone now “correctly” gated, we can proceed to save the workspace so that we can reopen it later from another browser.\nTo do this we open the File tab from the upper navigation bar, and select Save Workspace.\n\n\n\nFrom there we have a couple options, for now let’s select Floreada Workspace. Where it is saved at will depend on your individual browser settings, so watch for a popup.\n\n\n\nAlternatively (and crucially for the CytoML pipeline) we can also choose to save it as a FlowJo v10 .wsp file.\n\n\n\nIn both cases, you will end up with Workspace files that can be used later to access your created gates\n\n\n\n\n\nReopening Workspace\nTo reopen the Floreada workspace within the browser, reopen the website, and select the Open File(s) option.\n\n\n\nFrom there, select both the Floreada Workspace file as well as the .fcs files\n\n\n\nAt which point you will now be back to the point you last saved at.", - "crumbs": [ - "About", - "Getting Started", - "00 - Floreada" - ] - }, - { - "objectID": "course/00_Floreada/index.html#cytoml", - "href": "course/00_Floreada/index.html#cytoml", + "objectID": "course/00_Floreada/slides.html#cytoml", + "href": "course/00_Floreada/slides.html#cytoml", "title": "Using Floreada", "section": "CytoML", - "text": "CytoML\nDue to a unknown formatting bug, the Floreada produced FlowJo v10 .wsp is not directly accessible by CytoML at the time of this course. However, the issue is resolved as soon as the file is opened the first time within FlowJo v10, regardless of whether you have a log in or not. Strange? Yes, but we will take the workaround.\nSo, for anyone on Windows or MacOS, download FlowJo v10. Once installed, open the software, and close the login popups. Once there, open the Floreada created FlowJo.wsp file. Since you haven’t logged in, it won’t show any events. But it will correct the formatting bug. Close the software, and return to R. Your Floreada sourced .WSP file should now be readable by CytoML.\nOdd? For sure. Fixable? Likely, I will set a reminder to work with the Floreada and CytoML devs to see if we can cut out the need for this workaround.", - "crumbs": [ - "About", - "Getting Started", - "00 - Floreada" - ] - }, - { - "objectID": "course/00_BonusContent/index.html", - "href": "course/00_BonusContent/index.html", - "title": "Bonus Content", - "section": "", - "text": "This is a miscellaneous page to host walk-throughs of topics that come up via the Discussion Page. Rather than re-explain how to in the comments, I want to have a place to post short-walkthroughs to solve these issues, while avoiding incorporating it into the existing walk-throughs at this point in time. I hope you find it useful, and pardon the organized chaos of miscellaneous topics." - }, - { - "objectID": "course/00_BonusContent/index.html#windows-arm", - "href": "course/00_BonusContent/index.html#windows-arm", - "title": "Bonus Content", - "section": "Windows Arm", - "text": "Windows Arm\n\nPositron\nOn the main Positron installation page, only the installers for Windows Computers with x86 chips are currently shown. There is a beta (experimental) version of Positron for Windows ARM (ex. Snapdragons), but it needs to be installed from Positron’s GitHub releases page.\n\nPlease note, you should download the most recent version that is available to you, as they continue to update it and fix bugs. As of February 04, 2026, you would also need to install Quarto separately.\nTo install Quarto, first navigate to their website. Quarto for Windows ARM was implemented in 2023, so the regular installer should work.\n\nAlso, you would need a Python arm64 installation installed if you decide you want to venture into using Python at any point." - }, - { - "objectID": "course/00_BonusContent/index.html#visual-mode", - "href": "course/00_BonusContent/index.html#visual-mode", - "title": "Bonus Content", - "section": "Visual Mode", - "text": "Visual Mode\nWithin Positron, there exist a toggle button to switch between source and visual mode on Quarto documents. But what do you do when you can’t find it?\n\nTuns out…. Visual Mode is currently broken, so the developers removed it about two weeks ago.\nThe current way to switch to it is via right-click, then select edit visual mode.\n\nVice versa, once there, you can revert by right-clicking and selecting Edit Source Mode\n\nThe process of figuring what is going on highlights how to use a GitHub Discussion Page. This is Positrons when I searched for visual button. I then found that a similar question was asked 3 days ago that led me to the linked thread above." - }, - { - "objectID": "course/00_BonusContent/index.html#not-detecting-git", - "href": "course/00_BonusContent/index.html#not-detecting-git", - "title": "Bonus Content", - "section": "Not Detecting Git", - "text": "Not Detecting Git\nIf you leave the “Initialize Git Repository” option unclicked when setting up a New Folder from Template, Git will not be active within your project folder.\n\nAs a result, when you try to use the usethis packages use_github(private=true) function, you will get an error that resembles the one below\n\nTo initiate a Git repository after the fact, you will need to go to the Version Control tab in the action bar, and select the option.\n\nThen, you will need to stage the files you want to work with, and commit them.\n\nuse_github(private=TRUE) should now be functional at that point. However, you can also choose to continue via Positron’s interface instead by selecting Publish.\n\nIt will then ask you whether you want to save it as either a Public or a Private repository.\n\nAnd if all goes well, you will see the “Successs” pop-up in the lower-right" - }, - { - "objectID": "course/00_BonusContent/PullConflicts/index.html", - "href": "course/00_BonusContent/PullConflicts/index.html", - "title": "Take-Home Problems - Pull Fix Resolution", - "section": "", - "text": "Background\nFor those who have turned in the homework to the Cytometry in R - homework branches, many report having encountered merge issues pulling in the next week’s data if the pull request hasn’t been resolved yet. Creating a parallel branch, and submitting homework from there to the homework branch might solve the issue? But we will need to test that out. For now, here are the steps we used to resolve the issue locally without needing to delete and re-download.\n\n\nGetting Started\nStart off checking your GitHub forked version of the CytometryInR, notice how many commits behind you are.\n\n\nIf you haven’t submitted the optional Take-Home problems via a pull-request, proceed to do so.\n\n\nThis was an example of the page you see when submitting the pull request. Upon submission, your branch may show merge conflicts due to difference in rendered docs. This is okay, we will resolve it on our end.\n\n\nWhat we will end up doing is ignore the changes and accept the current version. This issue is likely due to the weekly updating of the data resulting in new sidebar links. We will then mark these issues as resolved\n\nWe will then mark the issues as resolved.\n\n\nOn return to the homework, we will be able to merge the branch once again. We will likely make our suggestions at this point for this branch.\n\n\nHowever, after pull request has been merged, you will see your branch is way ahead (due to everyone elses homework commits). This is the area we will need to address via the new branch method.\n\n\nFor now, proceed to discard the changes (you don’t need the other participants homeworks cluttering your folder)\n\n\nYou will then appear as caught up with the main branch.\n\n\nOn return to Positron, attempt to pull\n\n\nHowever, since your homework commit is still present, you will receive a pop-up asking you to see the GitLog. If you scroll up the problem log, it will give you several options.\n\n\nYou will need to enter the following code into your terminal tab:\n\ngit config pull.rebase TRUE\n\n\n\nThis will result in a branched appearance, and the button asking you to sync the changes.\n\n\nUpon doing so you will have a restored status vs. the main cytometry in R project folder.\n\n\n\nTake Away\nWe have encountered a first growing pain for the course, in that the pull-request method we have been using still causes merge conflicts. We will be going to a homework branch to homework branch pull-request approach going forward, I will send out additional instructions on how to do so shortly.\nThanks for your patience!\nDavid\n\n\nAdditional Resources" - }, - { - "objectID": "course/index.html", - "href": "course/index.html", - "title": "Cytometry in R", - "section": "", - "text": "Cytometry in R is a free virtual mini-course being organized by the Flow Cytometry Shared Resource Core at the University of Maryland’s Greenebaum Comprehensive Cancer Center. This course is a passion project arising from our desire to contribute back to the community.\nWe 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." - }, - { - "objectID": "course/index.html#resources", - "href": "course/index.html#resources", - "title": "Cytometry in R", - "section": "Resources", - "text": "Resources\nCourse materials can be found here. The livestream recordings are available via YouTube" - }, - { - "objectID": "course/index.html#in-person-baltimore", - "href": "course/index.html#in-person-baltimore", - "title": "Cytometry in R", - "section": "In-Person (Baltimore)", - "text": "In-Person (Baltimore)\nFor those joining us in person, the class is being offered on Thursday from 4-5 pm EST in Bressler Research Building Room 7-035. Monitors to plug your laptops in will be available on a first come, first served basis. These in-person sessions will not be recorded, but with the smaller class size you will have our undivided attention should you have any questions." - }, - { - "objectID": "course/index.html#virtual-worldwide", - "href": "course/index.html#virtual-worldwide", - "title": "Cytometry in R", - "section": "Virtual (Worldwide)", - "text": "Virtual (Worldwide)\nFor those joining us virtually, we will have three separate livestreams throughout the week on YouTube. These will be offered on:\n\nTuesday 2200 EST (Wednesday 0300 GMT+0)\nWednesday 1600 EST (Wednesday 2100 GMT+0)\nThursday 1000 EST (Thursday 1500 GMT+0)\n\nAll three livestreams will be recorded and available on YouTube immediately afterwards." - }, - { - "objectID": "course/index.html#discussion-forum", - "href": "course/index.html#discussion-forum", - "title": "Cytometry in R", - "section": "Discussion Forum", - "text": "Discussion Forum\nWe will be using the Cytometry in R Discussions page as a community forum, and a place to ask questions, celebrate wins, and provide feedback. After creating a a GitHub account, pleae go introduce yourself." - }, - { - "objectID": "ExistingResources.html", - "href": "ExistingResources.html", - "title": "Existing Resources", - "section": "", - "text": "We are not the first “Cytometry in R” course, nor will we be the last. This page is linking to the already existant online Cytometry in R resources that we have encountered and benefited from during our own learning journey. May they prove useful to you as you progress your way through yours!\n\n\n\nChristopher Hall - Flow Cytometry Data Analysis in R\nCytometry-R-Scripts: R scripts to help with your flow cytometry analysis\nR_flowcytometry_course: The files and presentation from the Cytometry Core Facility flow cytometry data analysis course in R\n\nInstallation and Loading Data\n(1) Flow Cytometry Data Analysis in R - Installation and Loading Data\n\n\n\n\nCompensation, Cleaning, Transformation, Visualization\n(2) Flow Cytometry Data Analysis in R: compensation, cleaning, transformation, visualization\n\n\n\n\nGating with flowWorkspace\n(3) Flow Cytometry Data Analysis in R: gating with flowWorkspace\n\n\n\n\nVisualization\n(4) Flow Cytometry Data Analysis in R: Visualisation\n\n\n\n\n\n\n\nOzette Technologies - BioC 2023 Workshop\nWorkshop given at the Bioc2023 conference, authored by Arpan Neupane and Andrew McDavid.\nWorkshop: Reproducible and programmatic analysis of flow cytometry experiments with the cytoverse\n\n\n\n\n\n\nPritam Kumar Panda - Flow Cytometry Data Analysis & Visualization in R using CytoExploreR\nFlow-Cytometry-analysis-in-R\nCytoExploreR-Interactive-visualization\n\nComplete Guide\nFlow Cytometry Data Analysis & Visualization in R using CytoExploreR: Complete Guide\n\n\n\n\n\n\n\nBioinformatics DotCa - Introduction to Flow Cytometry in R\n\nIntroduction to Flow Cytometry in R\nIntroduction to Flow Cytometry in R\n\n\n\n\nExploring FCM Data in R\nExploring FCM Data in R\n\n\n\n\nProcessing and Quality Assurance of FCM Data\nProcessing and Quality Assurance of FCM Data\n\n\n\n\n1D Dynamic Gating\n1D Dynamic Gating\n\n\n\n\nClustering and Additional FCM Tools\nClustering and Additional FCM Tools\n\n\n\n\n\nTulika Rai - Learn Innovatively With Me\n\nflowAI Flow Cytometry Data Cleaning using R\nflowAI Flow Cytometry Data Cleaning using R: A Step-by-step Tutorial\n\n\n\n\ntSNE UMAP TRIMAP colorization or Transformation using R script\ntSNE UMAP TRIMAP colorization or Transformation using R script\n\n\n\n\n\n\n\nGivanna Putri - Introduction to Cytometry Data Analysis in R workshop\nACS 2021 Workshops - Introduction to Cytometry Data Analysis in R workshop\n\n\n\n\n\n\nTimothy Keyes -\n{tidytof}: Predicting Patient Outcomes from Single-cell Data using Tidy Data Principles\n\n\n\n\n\n\nRyan Duggan - Cytometry on Air\nCytometry on Air: Analyzing Flow Cytometry Data in R Presentation by TJ Chen and Greg Finak,\n\n\n\n\n\n\nGuillaume Beyrend - Learn Cytometry\nLearn Cytometry Originally appeared to have been paywalled, doesn’t currently appear to be the case.\n\n\n\n\nHong Qin - flow analysis in R\n\nFlow Analysis in R\nflow analysis in R, bio125, Spring 2015\n\n\n\n\nFlow Cytometer Data Analysis\nBIO233 demo, flow cytometer data analysis, simple example\n\n\n\n\n\n\n\nSwayam Prabha - Flow cytometry data analysis in R/Bioconductor\nLecture 15 : Flow cytometry data analysis in R/Bioconductor" + "text": "CytoML\n\n\n\n\n\n\n\n\n.\n\n\nDue to a unknown formatting bug, the Floreada produced FlowJo v10 .wsp is not directly accessible by CytoML at the time of this course. However, the issue is resolved as soon as the file is opened the first time within FlowJo v10, regardless of whether you have a log in or not. Strange? Yes, but we will take the workaround.\nSo, for anyone on Windows or MacOS, download FlowJo v10. Once installed, open the software, and close the login popups. Once there, open the Floreada created FlowJo.wsp file. Since you haven’t logged in, it won’t show any events. But it will correct the formatting bug. Close the software, and return to R. Your Floreada sourced .WSP file should now be readable by CytoML.\nOdd? For sure. Fixable? Likely, I will set a reminder to work with the Floreada and CytoML devs to see if we can cut out the need for this workaround." }, { - "objectID": "index.html", - "href": "index.html", - "title": "About", + "objectID": "course/00_BonusContent/PullConflicts/UpdatedPullRequest.html", + "href": "course/00_BonusContent/PullConflicts/UpdatedPullRequest.html", + "title": "Updated Pull Request Protocol", "section": "", - "text": "Cytometry in R is a free weekly mini-course being offered both in-person and online by the Flow Cytometry Shared Resource staff at the University of Maryland Greenebaum Comprehensive Cancer Center. Its primary audience is for those with prior flow cytometry knowledge, who have limited previous experience with the programming language R. However, we welcome everyone regardless of their existing  flow cytometry  or coding experience.\nThis course is a passion project arising from our desire to contribute back to the community. We are excited that so many of you have chosen to sign up, and look forward to helping you get started on your own learning journeys.\nFor more information on topics-covered, please see our schedule. Course materials can be found here or via the Course tab in the navigation bar. The livestream recordings are available via YouTube\n\n\nAbout\n\n\nMotivation\nWhile many cytometry enthusiast express an interest in learning how to carry out flow cytometry analyses in R, they often do not know where to start. Additionally, many of the limited existing resources are focused towards users with intermediate bioinformatic skills, contributing to a greater barrier for entry for those just starting out. Our motivation in offering this mini-course tailored towards beginners is to make the learning journey smoother than the one we ourselves experienced.\n\nWhile designing the course, we kept the following concepts in mind:\n\nBeginning coders benefit both by having detailed examples that they can initially work through on their own time, as well as less defined problems that through troubleshooting enable the acquisition of the thought-process and skills needed for coding.\nSome topics will take individuals a longer time to fully grasp. Providing a format and resources that enable being able to revisit the material multiple times is incredibly helpful. Likewise, life is busy, and missing a workshop session is highly probable. If this happens, it shouldn’t make or break the ability of the individual to understanding the rest of the course.\nConsistency is key, and being able to apply what you are learning to your own datasets, files, and questions of interest helps achieve this.\n\n\n\n\n\nCourse Details\n\nEach week, the mini-course will cover a particular topic for an hour. This individual class is offered on multiple days, at different times, both in-person and online. We invite you to attend the one that best fits your schedule each week. If life gets busy and you can’t make regular day, the online livestream recordings will be available on YouTube.\n \n\nCourse Materials\n\nWe will release the course materials for the upcoming week on Monday 1700 EST (Monday 2200 GMT+0) via our course website and GitHub. These materials will normally be Quarto Markdown documents containing code, explanation, and other resources needed for that week. If you have your own data, you can use your own data! If you don’t have any data, we will make sure to provide some of our own available data for each lesson so that you can use it and be able to follow along.\nIn our commitment to open-source and open-science, all teaching materials are freely offered under a CC-BY-SA license, while all code examples are offered under the AGPL3-0 copyleft license.\n \n\n\nIn-Person (Baltimore)\n\nFor those who are local and attending in person, the class will be offered on Thursday from 4-5 pm EST in Bressler Research Building Conference Room 7-035 (around the corner from the Flow Core).\nIf you have your own laptop, feel free to bring it. If you don’t have a laptop, please reach out, the Flow Core has 6 laptops running Linux that we can lend out to participants for use during the session.\nFor those who arrive early, we will have a limited number of second screens with provided mouse and keyboard that you can plug a laptop into via HDMI cable to set up a larger workstation. For those arriving later, the room has enough space (and electrical plugs) for up to 20 people, but you will need to balance a laptop on your lap.\n \n\n\nOnline (Worldwide)\n\nFor those joining us virtually, we will have three separate livestreams throughout the week on YouTube. These will be offered on:\n\nTuesday 2200 EST (Wednesday 0300 GMT+0)\nWednesday 1600 EST (Wednesday 2100 GMT+0)\nThursday 1000 EST (Thursday 1500 GMT+0)\n\n \n\n\nRecordings\n\nAll three livestreams will be recorded and available on YouTube immediately afterwards. Our plan is to eventually circle back after the course and properly edit them (ie. less minutes of random background noise, highlighting the relevant lines of code, time-stamps, subtitles, translations, etc.) later on as time allows, so that they can serve as a more permanent resource.  \n\n\nDiscussion Forum\n\nWe will be using our GitHub Discussions page as a community forum. This will allow us to answer questions, and benefit from insights from others in the community. One advantage of having so many people signed up for the course is that if you have a question, someone else likely does as well, so go start a post and ask it!\n \n\n\nOptional Take-Home Problems\n\nEach week, we will offer optional take-home problems. These are intended to allow you to work with your own data on similar problems, but in a not-so-structured manner. Challenges that you and overcome during the process will help grow your problem solving and debugging skills, and help solidify concepts covered during the course.\nTo get feedback on these problems, you can reach out to the community on the Discussions page, or once far enough open a pull request to the homework branch and we will provide additional feedback.\n \n\n\nCost\nIs there a cost to participate? No, it’s absolutely free! Is there a catch? Yes, you learn R, and may wind up with strong feelings about flowframes vs. cytoframes. This is also our first year offering this course, so we will sporadically ask you to fill out a feedback forms to help us improve.\n\n \n\n\nComputing Requirements\n\nFor those attending online, you will need a computer with internet access. Operating system shouldn’t matter, as we will be offering code examples for Windows, Mac and Linux. As with all things flow-cytometry software, having a faster CPU with multiple cores, more RAM and greater storage space is generally helpful, but not a deal breaker.\n\nYou will need to be able to install the required software (R, Rtools, Positron, Quarto, and Git) as well as install and compile R packages from the CRAN and Bioconductor repositories (as well as a few GitHub-based R packages). Installation walkthroughs for each computer operating system can be found here.\nFor those using university or company administered computers, please be aware that you may not have the necessary permissions to install these directly, and may need to reach out to your IT department to help get these initial requirements set up. If you are using your own computer, congratulations, you are your system administrator, and should already have the necessary permissions.\n\nFor those attending in-person, we have set up a pop-up computer lab in the conference room. For those who arrive early, we have a limited number of second screens with provided mouse and keyboard that you can plug a laptop into via HDMI cable to set up a workstation. For those arriving later, the room has enough space (and electrical plugs) for 20 people, but you will need to balance a laptop on your lap. If you have your own laptop, feel free to bring it. If you don’t have a laptop, the flow core has 6 loaner laptops running Linux that we can let participants use for that session.\n\n\n\n\nLicense\nIn our commitment to open-science and open-source, all teaching materials are freely offered under a CC-BY-SA license, while all code examples are offered under the AGPL3-0 copyleft license." + "text": "Background\nDue to an encountered issue pulling in new updates for CytometryInR when you have an optional take-home problem still waiting to be reviewed, we will be modifying the protocol for submitting a pull request. You will first create a local homework branch, and submit from your branch to our homework branch. That should hopefully prevent any incoming changes from main to main from becoming conflicted.\n\n\nGetting Started\nThe first step is to open Positron, and navigate through the dropdown options to the Create a Branch option\n\n\nAnd provide a name (since the homework was for Week 02, we set it as Week 02)\n\n\nNext, select the option to Publish the Branch\n\n\nFrom here, importantly, select the option to make it a branch of YOUR forked CytometryInR version (since you don’t have permissions for the main course repository)\n\n\nAt this point, your new branch will have been created. You can check by entering the following code in the terminal, and verifying the * is next to the Week02 branch\n\ngit branch\n\n\n\nOnce you have confirmed you are in your homework branch, go ahead and transfer in all the files you will be submitting for the optional take-home problems\n\n\nAnd once done, make a commit as you would normally\n\n\nAs you can see, you will now be ahead of the main branch by one commit. Go ahead and sync your branch to GitHub so the contents are available remotely for use in the pull-request.\n\n\nOnce synced, you will notice that your branch is now up to date with the remote (cloud) icon. Next, proceed to checkout to the main branch, either via the dropdown or via the terminal using\n\ngit checkout main\n\n\n\nReturning to GitHub, you will see that your homework branch has received the incoming changes. You are now safe to sync your fork to bring in changes from the main course CytometryInR repository.\n\n\nAnd confirm yes.\n\n\nReturning to Positron, once verified you are in your main branch, proceed to pull in changes\n\n\nIf you switch between branches, you will notice you have both the new changes to main, as well as your week specific side branch co-existing peacefully.\n\n\nYou are then safe to make a pullrequest from your homework branch, to our homework branch, without running into risk of an additional commit from our end (or delay in reviewing) causing issues.\n\n\n\n\nAdditional Resources\nThis method should hopefully avoid the previously encountered issues. Apologies once again to those who encountered the issue! Still learning how to use some of these aspects of Version control in a GitHub context." }, { - "objectID": "Schedule.html", - "href": "Schedule.html", - "title": "Cytometry in R", + "objectID": "course/00_BonusContent/Immport/images/index.html", + "href": "course/00_BonusContent/Immport/images/index.html", + "title": "ImmPort - Downloading Datasets", "section": "", - "text": "Cytometry in R: A Course for Beginners\nCytometry in R is a free virtual mini-course being organized by the Flow Cytometry Shared Resource core at the University of Maryland’s Greenebaum Comprehensive Cancer Center. This course is a passion project arising from our desire to contribute back to the community. We are excited that you have chosen to take part and look forward to helping you get started on your own learning journey.\nCourse materials can be found here or via the Course tab in the navigation bar. The livestream recordings are available via YouTube\n\n\n\nPre-Course Walkthroughs\n\nWeek 0: January 26, 2026 In these pre-course walk-throughs, we ensure that everyone creates a GitHub account, and has their computer properly set up with the required software (including R, Positron, and Git). We then start to build individual participants familiarity with the software infrastructure that they will be using throughout the rest of the course.\n \n\n\nInstalling R Packages\n\nWeek 1: February 2, 2026 During this first session, we learn how to install R packages from the various repositories (CRAN, Bioconductor, GitHub), and how to troubleshoot the more typical errors that occur during this process.\n \n\n\nFile Paths\n\nWeek 2: February 9, 2026 For this second session, we focus on how to programmatically tell your computer where to locate your experimental files, introducing the concept of file paths. We explore how the various operating systems (Linux, MacOS, Windows) specify their respective folders and files, and how to identify where you are currently within the directory. Our goal by the end of this session is to have walked you through how to figure out where an .fcs file of interest is stored, and convey to your computer where you want it copied/moved to, without encountering the common pitfalls.\n \n\n\nInside an .FCS file\n\nWeek 3: February 16, 2026 In the course of this third session we will slice into an .FCS file and find out what the individual components that make it up are. In the process, we will cover the concepts of main data structures within R (vectors, matrices, data.frames, list) and how to identify what we are working with. Additionally, we will explore how various cytometry softwares store their metadata variables under various keywords that can be useful to know about.\n \n\n\nIntroduction to the Tidyverse\n\nWeek 4: February 23, 2026 Within this fourth session, we explore how the various tidyverse packages can be utilized to reorganize rows and columns of data in ways that are useful for data analysis. We will primarily work with the MFI expression data we isolated from within the .fcs file in the previous session, identifying and isolating events that meet certain criterias. We introduce the concepts behind “tidy” data and how it can improve our workflows.\n \n\n\nGating Sets\n\nWeek 5: March 2, 2026 As part of this fifth session, we learn about the two main flow cytometry infrastructure packages in R we will be working with during the course, flowcore and flowWorkspace. Throughout the session, we will compare how they differ in naming, memory usage, and accessing .fcs file metadata. We additionally explore how to add keywords to their respective metadata for use in filtering specimens of interest from the larger set of .fcs files.\n \n\n\nVisualizing with ggplot2\n\nWeek 6: March 9, 2026 During this session we provide an introduction to the ggplot2 package. We will take the datasets we have collected from the previous sessions and see how in varying in different arguments at the respective plot layers we can produce and customize many different forms of plots, focusing on both cytometry and statistics plots. We close out providing links to additional helpful resources and highlight the TidyTuesday project.\n \n\n\nApplying Transformations and Compensation\n\nWeek 7: March 16, 2026 For this seventh session, we take a closer look at the raw values of the data within our .fcs files, and explore the various ways to transform (ie. scale) flow cytometry data in R to better visualize “positive” and “negative populations”. In the process, we visualize the differences resulting from applying different transformations commonly used by commercial software. Similarly, we learn how to apply and visualize compensation in context of conventional flow cytometry files.\n \n\n\nManual and Automated Gating\n\nWeek 8: March 23, 2026 Within this session, we explore various ways to implement gating for flow cytometry files in R. We will explore manual approaches utilizing flowGate, as well as automated options with openCyto 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.\n \n\n\nConference Break 1\nNo class week of March 30, 2026. If you are attending the ABRF conference, track me down at the Complex Data Analysis in Flow Cytometry: Navigating the Landscape talk on Monday, March 30th at 4:30 PM.\n \n\n\nIt’s Raining Functions!\n\nWeek 9: April 6, 2026 In the course of this ninth session, we tackle one of the harder but most useful concepts to learn for a beginner, namely functions. 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 package.\n \n\n\nDownsampling and Concatenation\n\nWeek 10: April 13, 2026 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.\n \n\n\nRetrieving data for Statistics\n\nWeek 11: April 20, 2026 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.\n \n\n\nSpectral Signatures\n\nWeek 12: April 27, 2026 As part of this session, we will explore how to extract fluorescent signatures from our raw spectral flow cytometry reference controls. Building on prior concepts, we will learn to isolate median signatures from positive and negative gates, and how to derrive and plot normalized signatures. We also introduce plotly package and it’s interactive plotting features, before showcasing various packages attempts at facilitating signature retrieval.\n \n\n\nSimilarities and Hotspots\n\nWeek 13: May 4, 2026 During this session, we will utilize the spectral signature matrix isolated from raw spectral flow cytometry controls and evaluate different ways of evaluating how similar different fluorescent signatures are to each other. In the process, we will gain better understanding of the metrics behind similarity (cosine), panel complexity (kappa), and unmixing-dependent spreading (collinearity).\n \n\n\nUnmixing in R\n\nWeek 14: May 11, 2026 In the course of this session, we will attempt a reach goal of many, namely carry out unmixing of raw .fcs files using the spectral signatures we have isolated from our unmixing controls, and write to new .fcs files. After evaluating the necessary internals, we will explore how various current cytometry R packages have implemented their own unmixing functions, and the various limitations that each approach has encountered.\n \n\n\nCleaning Algorithms\n\nWeek 15: May 18, 2026 In the span of this session, we will directly compare how various Bioconductor data cleanup algorithms (namely PeacoQC, FlowAI, FlowCut, and FlowClean) tackle distinguishing and removing bad quality events. We will see how they perform with previously identified good quality and horrific quality .fcs files. We will whether the implemented algorithmic decisions made sense, and how to customize them within our workflows to achieve our own desired goals.\n \n\n\nClustering Algorithms\n\nWeek 16: May 25, 2026 As part of this session, we venture away from supervised and semi-supervised analyses to explore unsupervised clustering approaches, namely FlowSOM and Phenograph. We will compare outcomes depending markers included, transformations applied, and panel used to gain a greater familiarity with how they work. We wrap up by investigating ways to visualize marker expression of cells ending up in each cluster, and how to backgate them to our manual gates.\n \n\n\nNormalization: Batch Effect or Real Biology\n\nWeek 17: June 1, 2026 During this session, we will dive into evaluating the performance of two commonly used normalization algorithms, CytoNorm and CyCombine. We will utilize our ggplot2 and functional programming toolkits to create a customized workflow to visualize the differences for our respective cell populations before and after normalization, to better evaluate how the respective parameter choices can affect the process.\n \n\n\nConference Break 2\nNo class week of June 8, 2026. If you are attending the Cyto conference, track me down at my talks (Open-Source automation on June 7, 10:30-11:30AM at Grand Ballroom; and Semi-supervised pipeline on June 9, 10:30-11:45AM atRoom 2DEF) or poster (grab some Cytometry in R course hex stickers!)\n \n\n\nDimensionality Visualization\n\nWeek 18: June 15, 2026 For this session, we explore how dimensionality visualization algorithms perform tSNE and UMAP in R using our raw and unmixed samples. In the process, we will explore how markers included, number of cells, and presence of bad quality events can impact the final visualizations. Finally, we will provide an overview of how to link to Python to additionally run PaCMAP and PHATE visualizations for use in R.\n \n\n\nAnnotating Unsupervised Clusters\n\nWeek 19: June 22, 2026 In the course of this session, we explore ways to scale our efficiency in figuring out what an unsupervised cluster of cells may be, by employing several annotation packages. We explore how these work under the hood in their decision making process, and how to link them to reference data from external repositories for additional evaluation.\n \n\n\nThe Art of GitHub Diving\n\nWeek 20: June 29, 2026 Within this session, we delve into the art of investigating a new-to-you GitHub repository. We discuss the overall structure of R packages stored as source files within GitHub repositories, and how to leverage this knowledge when troubleshooting errors thrown by underdocumented R packages. We discuss how to modify identified functions, evaluate them, and process to submit helpful bug reports back to the original project to help fix the issue.\n \n\n\nXML Files All The Way Down\n\nWeek 21: July 6, 2026 Breaking news alert, most of the experiment templates and worksheet layouts we work with as cytometrist are .xml files. In this session, we learn some additional coding tools to allow us to work with these types of files to extract useful data. In this session, we test out our new problem solving abilities to retrieve data from SpectroFlo and Diva .xml files to monitor how our core’s flow cytometers behaved for various users last week.\n \n\n\nUtilizing Bioconductor packages\n\nWeek 22: July 13, 2026 Many of the R packages for Flow Cytometry we have utilized in this course were packages from the Bioconductor project. We take a look at what makes Bioconductor packages unique compared to packages found on GitHub and CRAN, explore some of their specific infrastructure types for flow cytometry data, and highlight some useful packages for downstream analysis that we haven’t had time to properly explore.\n \n\n\nBuilding your First R package\n\nWeek 23: July 20, 2026 For most of the course, we have been working with R packages that other individuals built and maintained. In this session, we leverage all your hard work from the rest of the course and corral the unwieldly arsenal of functions you wrote into your first R package for easier use. We will discuss the individual pieces of an R package, the importance of a well-setup namespace file, and how to generate help page manuals to refer future-you back to what your individual function arguments actually do.\n \n\n\nEveryone Get’s a Quarto Website\n\nWeek 24: July 27, 2026 In this session, we will extend the knowledge of .R and .qmd files you have gained from the course and extend them to create your own website using Quarto. We discuss the additional files that are required, how to customize and render the website locally, and finally set up Quarto Pub or GitHub Pages website that we are to access online.\n \n\n\nReproducibility and Replicability\n\nWeek 25: August 3, 2026 Throughout the course, we emphasized the importance of making your workspaces and code reproducible and replicable. But what do we mean by these terms, and are there best practices we could add to our existing workflow to do this more efficiently? We explore a couple community-led efforts within the cytometry space and troubleshoot their implementation into a previously published pipeline.\n \n\n\nConference Break 3\nNo class week of August 10, 2026. If you are attending the BioC conference, track me down at my talk/poster.\n \n\n\nOpen Source Licenses\n\nWeek 26: August 17, 2026 For this course, we have relied extensively on open-source software to create our own data analysis pipelines. In the process, you may have some recollection of the various license names. But what impact do all these different names have in the end? We take a brief deep-dive into the ecosystem of free and open-source licenses, and evaluate what their respective license terms mean for us as individual users of the code, as well as potential developers extending existing codebases.\n \n\n\nValidating Algorthmic Tools\n\nWeek 27: August 24, 2026 We will be the first to admit, new implementations of algorithms as R packages are awesome! We appreciate the effort that went into them and making them available to the community at large. But what is the best way of evaluating whether they behave as promised, or work for our dataset? During this session, we share tips and tricks to gain better understanding of how a new R package works, and things to watch out for when evaluating complicated algortithms. We wrap with walkthrough of how to generate simulated datasets with known distributions for use in testing.\n \n\n\nDatabases and Repositories\n\nWeek 28: August 31, 2026 During this session, we will learn how to identify and retrieve .fcs files from databases. While many of us are accustomed to working with large datasets of our own making, many of us are increasingly encountering larger-than-memory datasets, as well as files stored in large repositories. In this session, we will explore several database focused R packages, before investigating how to identify and retrieve .fcs files and associated metadata of interest from repositories, namely ImmPort (and maybe FlowRepository if it can be pinged that afternoon).\n \n\n\nAssembling Web Data\n\nWeek 29: September 7, 2026 In this session, we briefly delve into the concepts of web-scraping and APIs in general. We highlight useful packages, namely httr2 and rvest, and best practices implemented to allow respectful retrieval of useful data without crashing someone’s server like some AI startup bot. We finish by providing a list of additional useful resources for those interested in learning more.\n \n\n\nFuture Directions\n\nWeek 30: September 14, 2026 In this final of the planned sessions, we revisit our solutions to the challenge problems set out during the beginning of the course. We also discuss potential future topics to visit in the future, and any additional resources that proved helpful throughout the course.", - "crumbs": [ - "About", - "Cytometry Core" - ] + "text": "To download data from the ImmPort Shared Data Repository, first navigate to the website\n\nFor help setting up Aspera Connect, see the following help documentation" }, { "objectID": "PackageWalkthroughs.html#flowcore", @@ -1804,861 +1631,1132 @@ "text": "flowMagic" }, { - "objectID": "course/00_BonusContent/Immport/images/index.html", - "href": "course/00_BonusContent/Immport/images/index.html", - "title": "ImmPort - Downloading Datasets", + "objectID": "Schedule.html", + "href": "Schedule.html", + "title": "Cytometry in R", "section": "", - "text": "To download data from the ImmPort Shared Data Repository, first navigate to the website\n\nFor help setting up Aspera Connect, see the following help documentation" + "text": "Cytometry in R: A Course for Beginners\nCytometry in R is a free virtual mini-course being organized by the Flow Cytometry Shared Resource core at the University of Maryland’s Greenebaum Comprehensive Cancer Center. This course is a passion project arising from our desire to contribute back to the community. We are excited that you have chosen to take part and look forward to helping you get started on your own learning journey.\nCourse materials can be found here or via the Course tab in the navigation bar. The livestream recordings are available via YouTube\n\n\n\nPre-Course Walkthroughs\n\nWeek 0: January 26, 2026 In these pre-course walk-throughs, we ensure that everyone creates a GitHub account, and has their computer properly set up with the required software (including R, Positron, and Git). We then start to build individual participants familiarity with the software infrastructure that they will be using throughout the rest of the course.\n \n\n\nInstalling R Packages\n\nWeek 1: February 2, 2026 During this first session, we learn how to install R packages from the various repositories (CRAN, Bioconductor, GitHub), and how to troubleshoot the more typical errors that occur during this process.\n \n\n\nFile Paths\n\nWeek 2: February 9, 2026 For this second session, we focus on how to programmatically tell your computer where to locate your experimental files, introducing the concept of file paths. We explore how the various operating systems (Linux, MacOS, Windows) specify their respective folders and files, and how to identify where you are currently within the directory. Our goal by the end of this session is to have walked you through how to figure out where an .fcs file of interest is stored, and convey to your computer where you want it copied/moved to, without encountering the common pitfalls.\n \n\n\nInside an .FCS file\n\nWeek 3: February 16, 2026 In the course of this third session we will slice into an .FCS file and find out what the individual components that make it up are. In the process, we will cover the concepts of main data structures within R (vectors, matrices, data.frames, list) and how to identify what we are working with. Additionally, we will explore how various cytometry softwares store their metadata variables under various keywords that can be useful to know about.\n \n\n\nIntroduction to the Tidyverse\n\nWeek 4: February 23, 2026 Within this fourth session, we explore how the various tidyverse packages can be utilized to reorganize rows and columns of data in ways that are useful for data analysis. We will primarily work with the MFI expression data we isolated from within the .fcs file in the previous session, identifying and isolating events that meet certain criterias. We introduce the concepts behind “tidy” data and how it can improve our workflows.\n \n\n\nGating Sets\n\nWeek 5: March 2, 2026 As part of this fifth session, we learn about the two main flow cytometry infrastructure packages in R we will be working with during the course, flowcore and flowWorkspace. Throughout the session, we will compare how they differ in naming, memory usage, and accessing .fcs file metadata. We additionally explore how to add keywords to their respective metadata for use in filtering specimens of interest from the larger set of .fcs files.\n \n\n\nVisualizing with ggplot2\n\nWeek 6: March 9, 2026 During this session we provide an introduction to the ggplot2 package. We will take the datasets we have collected from the previous sessions and see how in varying in different arguments at the respective plot layers we can produce and customize many different forms of plots, focusing on both cytometry and statistics plots. We close out providing links to additional helpful resources and highlight the TidyTuesday project.\n \n\n\nApplying Transformations and Compensation\n\nWeek 7: March 16, 2026 For this seventh session, we take a closer look at the raw values of the data within our .fcs files, and explore the various ways to transform (ie. scale) flow cytometry data in R to better visualize “positive” and “negative populations”. In the process, we visualize the differences resulting from applying different transformations commonly used by commercial software. Similarly, we learn how to apply and visualize compensation in context of conventional flow cytometry files.\n \n\n\nManual and Automated Gating\n\nWeek 8: March 23, 2026 Within this session, we explore various ways to implement gating for flow cytometry files in R. We will explore manual approaches utilizing flowGate, as well as automated options with openCyto 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.\n \n\n\nConference Break 1\nNo class week of March 30, 2026. If you are attending the ABRF conference, track me down at the Complex Data Analysis in Flow Cytometry: Navigating the Landscape talk on Monday, March 30th at 4:30 PM.\n \n\n\nIt’s Raining Functions!\n\nWeek 9: April 6, 2026 In the course of this ninth session, we tackle one of the harder but most useful concepts to learn for a beginner, namely functions. 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 package.\n \n\n\nDownsampling and Concatenation\n\nWeek 10: April 13, 2026 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.\n \n\n\nRetrieving data for Statistics\n\nWeek 11: April 20, 2026 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.\n \n\n\nSpectral Signatures\n\nWeek 12: April 27, 2026 As part of this session, we will explore how to extract fluorescent signatures from our raw spectral flow cytometry reference controls. Building on prior concepts, we will learn to isolate median signatures from positive and negative gates, and how to derrive and plot normalized signatures. We also introduce plotly package and it’s interactive plotting features, before showcasing various packages attempts at facilitating signature retrieval.\n \n\n\nSimilarities and Hotspots\n\nWeek 13: May 4, 2026 During this session, we will utilize the spectral signature matrix isolated from raw spectral flow cytometry controls and evaluate different ways of evaluating how similar different fluorescent signatures are to each other. In the process, we will gain better understanding of the metrics behind similarity (cosine), panel complexity (kappa), and unmixing-dependent spreading (collinearity).\n \n\n\nUnmixing in R\n\nWeek 14: May 11, 2026 In the course of this session, we will attempt a reach goal of many, namely carry out unmixing of raw .fcs files using the spectral signatures we have isolated from our unmixing controls, and write to new .fcs files. After evaluating the necessary internals, we will explore how various current cytometry R packages have implemented their own unmixing functions, and the various limitations that each approach has encountered.\n \n\n\nCleaning Algorithms\n\nWeek 15: May 18, 2026 In the span of this session, we will directly compare how various Bioconductor data cleanup algorithms (namely PeacoQC, FlowAI, FlowCut, and FlowClean) tackle distinguishing and removing bad quality events. We will see how they perform with previously identified good quality and horrific quality .fcs files. We will whether the implemented algorithmic decisions made sense, and how to customize them within our workflows to achieve our own desired goals.\n \n\n\nClustering Algorithms\n\nWeek 16: May 25, 2026 As part of this session, we venture away from supervised and semi-supervised analyses to explore unsupervised clustering approaches, namely FlowSOM and Phenograph. We will compare outcomes depending markers included, transformations applied, and panel used to gain a greater familiarity with how they work. We wrap up by investigating ways to visualize marker expression of cells ending up in each cluster, and how to backgate them to our manual gates.\n \n\n\nNormalization: Batch Effect or Real Biology\n\nWeek 17: June 1, 2026 During this session, we will dive into evaluating the performance of two commonly used normalization algorithms, CytoNorm and CyCombine. We will utilize our ggplot2 and functional programming toolkits to create a customized workflow to visualize the differences for our respective cell populations before and after normalization, to better evaluate how the respective parameter choices can affect the process.\n \n\n\nConference Break 2\nNo class week of June 8, 2026. If you are attending the Cyto conference, track me down at my talks (Open-Source automation on June 7, 10:30-11:30AM at Grand Ballroom; and Semi-supervised pipeline on June 9, 10:30-11:45AM atRoom 2DEF) or poster (grab some Cytometry in R course hex stickers!)\n \n\n\nDimensionality Visualization\n\nWeek 18: June 15, 2026 For this session, we explore how dimensionality visualization algorithms perform tSNE and UMAP in R using our raw and unmixed samples. In the process, we will explore how markers included, number of cells, and presence of bad quality events can impact the final visualizations. Finally, we will provide an overview of how to link to Python to additionally run PaCMAP and PHATE visualizations for use in R.\n \n\n\nAnnotating Unsupervised Clusters\n\nWeek 19: June 22, 2026 In the course of this session, we explore ways to scale our efficiency in figuring out what an unsupervised cluster of cells may be, by employing several annotation packages. We explore how these work under the hood in their decision making process, and how to link them to reference data from external repositories for additional evaluation.\n \n\n\nThe Art of GitHub Diving\n\nWeek 20: June 29, 2026 Within this session, we delve into the art of investigating a new-to-you GitHub repository. We discuss the overall structure of R packages stored as source files within GitHub repositories, and how to leverage this knowledge when troubleshooting errors thrown by underdocumented R packages. We discuss how to modify identified functions, evaluate them, and process to submit helpful bug reports back to the original project to help fix the issue.\n \n\n\nXML Files All The Way Down\n\nWeek 21: July 6, 2026 Breaking news alert, most of the experiment templates and worksheet layouts we work with as cytometrist are .xml files. In this session, we learn some additional coding tools to allow us to work with these types of files to extract useful data. In this session, we test out our new problem solving abilities to retrieve data from SpectroFlo and Diva .xml files to monitor how our core’s flow cytometers behaved for various users last week.\n \n\n\nUtilizing Bioconductor packages\n\nWeek 22: July 13, 2026 Many of the R packages for Flow Cytometry we have utilized in this course were packages from the Bioconductor project. We take a look at what makes Bioconductor packages unique compared to packages found on GitHub and CRAN, explore some of their specific infrastructure types for flow cytometry data, and highlight some useful packages for downstream analysis that we haven’t had time to properly explore.\n \n\n\nBuilding your First R package\n\nWeek 23: July 20, 2026 For most of the course, we have been working with R packages that other individuals built and maintained. In this session, we leverage all your hard work from the rest of the course and corral the unwieldly arsenal of functions you wrote into your first R package for easier use. We will discuss the individual pieces of an R package, the importance of a well-setup namespace file, and how to generate help page manuals to refer future-you back to what your individual function arguments actually do.\n \n\n\nEveryone Get’s a Quarto Website\n\nWeek 24: July 27, 2026 In this session, we will extend the knowledge of .R and .qmd files you have gained from the course and extend them to create your own website using Quarto. We discuss the additional files that are required, how to customize and render the website locally, and finally set up Quarto Pub or GitHub Pages website that we are to access online.\n \n\n\nReproducibility and Replicability\n\nWeek 25: August 3, 2026 Throughout the course, we emphasized the importance of making your workspaces and code reproducible and replicable. But what do we mean by these terms, and are there best practices we could add to our existing workflow to do this more efficiently? We explore a couple community-led efforts within the cytometry space and troubleshoot their implementation into a previously published pipeline.\n \n\n\nConference Break 3\nNo class week of August 10, 2026. If you are attending the BioC conference, track me down at my talk/poster.\n \n\n\nOpen Source Licenses\n\nWeek 26: August 17, 2026 For this course, we have relied extensively on open-source software to create our own data analysis pipelines. In the process, you may have some recollection of the various license names. But what impact do all these different names have in the end? We take a brief deep-dive into the ecosystem of free and open-source licenses, and evaluate what their respective license terms mean for us as individual users of the code, as well as potential developers extending existing codebases.\n \n\n\nValidating Algorthmic Tools\n\nWeek 27: August 24, 2026 We will be the first to admit, new implementations of algorithms as R packages are awesome! We appreciate the effort that went into them and making them available to the community at large. But what is the best way of evaluating whether they behave as promised, or work for our dataset? During this session, we share tips and tricks to gain better understanding of how a new R package works, and things to watch out for when evaluating complicated algortithms. We wrap with walkthrough of how to generate simulated datasets with known distributions for use in testing.\n \n\n\nDatabases and Repositories\n\nWeek 28: August 31, 2026 During this session, we will learn how to identify and retrieve .fcs files from databases. While many of us are accustomed to working with large datasets of our own making, many of us are increasingly encountering larger-than-memory datasets, as well as files stored in large repositories. In this session, we will explore several database focused R packages, before investigating how to identify and retrieve .fcs files and associated metadata of interest from repositories, namely ImmPort (and maybe FlowRepository if it can be pinged that afternoon).\n \n\n\nAssembling Web Data\n\nWeek 29: September 7, 2026 In this session, we briefly delve into the concepts of web-scraping and APIs in general. We highlight useful packages, namely httr2 and rvest, and best practices implemented to allow respectful retrieval of useful data without crashing someone’s server like some AI startup bot. We finish by providing a list of additional useful resources for those interested in learning more.\n \n\n\nFuture Directions\n\nWeek 30: September 14, 2026 In this final of the planned sessions, we revisit our solutions to the challenge problems set out during the beginning of the course. We also discuss potential future topics to visit in the future, and any additional resources that proved helpful throughout the course.", + "crumbs": [ + "About", + "Cytometry Core" + ] }, { - "objectID": "course/00_BonusContent/PullConflicts/UpdatedPullRequest.html", - "href": "course/00_BonusContent/PullConflicts/UpdatedPullRequest.html", - "title": "Updated Pull Request Protocol", + "objectID": "index.html", + "href": "index.html", + "title": "About", "section": "", - "text": "Background\nDue to an encountered issue pulling in new updates for CytometryInR when you have an optional take-home problem still waiting to be reviewed, we will be modifying the protocol for submitting a pull request. You will first create a local homework branch, and submit from your branch to our homework branch. That should hopefully prevent any incoming changes from main to main from becoming conflicted.\n\n\nGetting Started\nThe first step is to open Positron, and navigate through the dropdown options to the Create a Branch option\n\n\nAnd provide a name (since the homework was for Week 02, we set it as Week 02)\n\n\nNext, select the option to Publish the Branch\n\n\nFrom here, importantly, select the option to make it a branch of YOUR forked CytometryInR version (since you don’t have permissions for the main course repository)\n\n\nAt this point, your new branch will have been created. You can check by entering the following code in the terminal, and verifying the * is next to the Week02 branch\n\ngit branch\n\n\n\nOnce you have confirmed you are in your homework branch, go ahead and transfer in all the files you will be submitting for the optional take-home problems\n\n\nAnd once done, make a commit as you would normally\n\n\nAs you can see, you will now be ahead of the main branch by one commit. Go ahead and sync your branch to GitHub so the contents are available remotely for use in the pull-request.\n\n\nOnce synced, you will notice that your branch is now up to date with the remote (cloud) icon. Next, proceed to checkout to the main branch, either via the dropdown or via the terminal using\n\ngit checkout main\n\n\n\nReturning to GitHub, you will see that your homework branch has received the incoming changes. You are now safe to sync your fork to bring in changes from the main course CytometryInR repository.\n\n\nAnd confirm yes.\n\n\nReturning to Positron, once verified you are in your main branch, proceed to pull in changes\n\n\nIf you switch between branches, you will notice you have both the new changes to main, as well as your week specific side branch co-existing peacefully.\n\n\nYou are then safe to make a pullrequest from your homework branch, to our homework branch, without running into risk of an additional commit from our end (or delay in reviewing) causing issues.\n\n\n\n\nAdditional Resources\nThis method should hopefully avoid the previously encountered issues. Apologies once again to those who encountered the issue! Still learning how to use some of these aspects of Version control in a GitHub context." - }, - { - "objectID": "course/00_Floreada/slides.html#floreada", - "href": "course/00_Floreada/slides.html#floreada", - "title": "Using Floreada", - "section": "Floreada", - "text": "Floreada\nLoading Dataset\n\n\n\n\n\n\n\n\n.\n\n\nFirst, open your web browser and navigate to the website\nClick on Start to proceed to the next page." + "text": "Cytometry in R is a free weekly mini-course being offered both in-person and online by the Flow Cytometry Shared Resource staff at the University of Maryland Greenebaum Comprehensive Cancer Center. Its primary audience is for those with prior flow cytometry knowledge, who have limited previous experience with the programming language R. However, we welcome everyone regardless of their existing  flow cytometry  or coding experience.\nThis course is a passion project arising from our desire to contribute back to the community. We are excited that so many of you have chosen to sign up, and look forward to helping you get started on your own learning journeys.\nFor more information on topics-covered, please see our schedule. Course materials can be found here or via the Course tab in the navigation bar. The livestream recordings are available via YouTube\n\n\nAbout\n\n\nMotivation\nWhile many cytometry enthusiast express an interest in learning how to carry out flow cytometry analyses in R, they often do not know where to start. Additionally, many of the limited existing resources are focused towards users with intermediate bioinformatic skills, contributing to a greater barrier for entry for those just starting out. Our motivation in offering this mini-course tailored towards beginners is to make the learning journey smoother than the one we ourselves experienced.\n\nWhile designing the course, we kept the following concepts in mind:\n\nBeginning coders benefit both by having detailed examples that they can initially work through on their own time, as well as less defined problems that through troubleshooting enable the acquisition of the thought-process and skills needed for coding.\nSome topics will take individuals a longer time to fully grasp. Providing a format and resources that enable being able to revisit the material multiple times is incredibly helpful. Likewise, life is busy, and missing a workshop session is highly probable. If this happens, it shouldn’t make or break the ability of the individual to understanding the rest of the course.\nConsistency is key, and being able to apply what you are learning to your own datasets, files, and questions of interest helps achieve this.\n\n\n\n\n\nCourse Details\n\nEach week, the mini-course will cover a particular topic for an hour. This individual class is offered on multiple days, at different times, both in-person and online. We invite you to attend the one that best fits your schedule each week. If life gets busy and you can’t make regular day, the online livestream recordings will be available on YouTube.\n \n\nCourse Materials\n\nWe will release the course materials for the upcoming week on Monday 1700 EST (Monday 2200 GMT+0) via our course website and GitHub. These materials will normally be Quarto Markdown documents containing code, explanation, and other resources needed for that week. If you have your own data, you can use your own data! If you don’t have any data, we will make sure to provide some of our own available data for each lesson so that you can use it and be able to follow along.\nIn our commitment to open-source and open-science, all teaching materials are freely offered under a CC-BY-SA license, while all code examples are offered under the AGPL3-0 copyleft license.\n \n\n\nIn-Person (Baltimore)\n\nFor those who are local and attending in person, the class will be offered on Thursday from 4-5 pm EST in Bressler Research Building Conference Room 7-035 (around the corner from the Flow Core).\nIf you have your own laptop, feel free to bring it. If you don’t have a laptop, please reach out, the Flow Core has 6 laptops running Linux that we can lend out to participants for use during the session.\nFor those who arrive early, we will have a limited number of second screens with provided mouse and keyboard that you can plug a laptop into via HDMI cable to set up a larger workstation. For those arriving later, the room has enough space (and electrical plugs) for up to 20 people, but you will need to balance a laptop on your lap.\n \n\n\nOnline (Worldwide)\n\nFor those joining us virtually, we will have three separate livestreams throughout the week on YouTube. These will be offered on:\n\nTuesday 2200 EST (Wednesday 0300 GMT+0)\nWednesday 1600 EST (Wednesday 2100 GMT+0)\nThursday 1000 EST (Thursday 1500 GMT+0)\n\n \n\n\nRecordings\n\nAll three livestreams will be recorded and available on YouTube immediately afterwards. Our plan is to eventually circle back after the course and properly edit them (ie. less minutes of random background noise, highlighting the relevant lines of code, time-stamps, subtitles, translations, etc.) later on as time allows, so that they can serve as a more permanent resource.  \n\n\nDiscussion Forum\n\nWe will be using our GitHub Discussions page as a community forum. This will allow us to answer questions, and benefit from insights from others in the community. One advantage of having so many people signed up for the course is that if you have a question, someone else likely does as well, so go start a post and ask it!\n \n\n\nOptional Take-Home Problems\n\nEach week, we will offer optional take-home problems. These are intended to allow you to work with your own data on similar problems, but in a not-so-structured manner. Challenges that you and overcome during the process will help grow your problem solving and debugging skills, and help solidify concepts covered during the course.\nTo get feedback on these problems, you can reach out to the community on the Discussions page, or once far enough open a pull request to the homework branch and we will provide additional feedback.\n \n\n\nCost\nIs there a cost to participate? No, it’s absolutely free! Is there a catch? Yes, you learn R, and may wind up with strong feelings about flowframes vs. cytoframes. This is also our first year offering this course, so we will sporadically ask you to fill out a feedback forms to help us improve.\n\n \n\n\nComputing Requirements\n\nFor those attending online, you will need a computer with internet access. Operating system shouldn’t matter, as we will be offering code examples for Windows, Mac and Linux. As with all things flow-cytometry software, having a faster CPU with multiple cores, more RAM and greater storage space is generally helpful, but not a deal breaker.\n\nYou will need to be able to install the required software (R, Rtools, Positron, Quarto, and Git) as well as install and compile R packages from the CRAN and Bioconductor repositories (as well as a few GitHub-based R packages). Installation walkthroughs for each computer operating system can be found here.\nFor those using university or company administered computers, please be aware that you may not have the necessary permissions to install these directly, and may need to reach out to your IT department to help get these initial requirements set up. If you are using your own computer, congratulations, you are your system administrator, and should already have the necessary permissions.\n\nFor those attending in-person, we have set up a pop-up computer lab in the conference room. For those who arrive early, we have a limited number of second screens with provided mouse and keyboard that you can plug a laptop into via HDMI cable to set up a workstation. For those arriving later, the room has enough space (and electrical plugs) for 20 people, but you will need to balance a laptop on your lap. If you have your own laptop, feel free to bring it. If you don’t have a laptop, the flow core has 6 loaner laptops running Linux that we can let participants use for that session.\n\n\n\n\nLicense\nIn our commitment to open-science and open-source, all teaching materials are freely offered under a CC-BY-SA license, while all code examples are offered under the AGPL3-0 copyleft license." }, { - "objectID": "course/00_Floreada/slides.html#cytoml", - "href": "course/00_Floreada/slides.html#cytoml", - "title": "Using Floreada", - "section": "CytoML", - "text": "CytoML\n\n\n\n\n\n\n\n\n.\n\n\nDue to a unknown formatting bug, the Floreada produced FlowJo v10 .wsp is not directly accessible by CytoML at the time of this course. However, the issue is resolved as soon as the file is opened the first time within FlowJo v10, regardless of whether you have a log in or not. Strange? Yes, but we will take the workaround.\nSo, for anyone on Windows or MacOS, download FlowJo v10. Once installed, open the software, and close the login popups. Once there, open the Floreada created FlowJo.wsp file. Since you haven’t logged in, it won’t show any events. But it will correct the formatting bug. Close the software, and return to R. Your Floreada sourced .WSP file should now be readable by CytoML.\nOdd? For sure. Fixable? Likely, I will set a reminder to work with the Floreada and CytoML devs to see if we can cut out the need for this workaround." + "objectID": "ExistingResources.html", + "href": "ExistingResources.html", + "title": "Existing Resources", + "section": "", + "text": "We are not the first “Cytometry in R” course, nor will we be the last. This page is linking to the already existant online Cytometry in R resources that we have encountered and benefited from during our own learning journey. May they prove useful to you as you progress your way through yours!\n\n\n\nChristopher Hall - Flow Cytometry Data Analysis in R\nCytometry-R-Scripts: R scripts to help with your flow cytometry analysis\nR_flowcytometry_course: The files and presentation from the Cytometry Core Facility flow cytometry data analysis course in R\n\nInstallation and Loading Data\n(1) Flow Cytometry Data Analysis in R - Installation and Loading Data\n\n\n\n\nCompensation, Cleaning, Transformation, Visualization\n(2) Flow Cytometry Data Analysis in R: compensation, cleaning, transformation, visualization\n\n\n\n\nGating with flowWorkspace\n(3) Flow Cytometry Data Analysis in R: gating with flowWorkspace\n\n\n\n\nVisualization\n(4) Flow Cytometry Data Analysis in R: Visualisation\n\n\n\n\n\n\n\nOzette Technologies - BioC 2023 Workshop\nWorkshop given at the Bioc2023 conference, authored by Arpan Neupane and Andrew McDavid.\nWorkshop: Reproducible and programmatic analysis of flow cytometry experiments with the cytoverse\n\n\n\n\n\n\nPritam Kumar Panda - Flow Cytometry Data Analysis & Visualization in R using CytoExploreR\nFlow-Cytometry-analysis-in-R\nCytoExploreR-Interactive-visualization\n\nComplete Guide\nFlow Cytometry Data Analysis & Visualization in R using CytoExploreR: Complete Guide\n\n\n\n\n\n\n\nBioinformatics DotCa - Introduction to Flow Cytometry in R\n\nIntroduction to Flow Cytometry in R\nIntroduction to Flow Cytometry in R\n\n\n\n\nExploring FCM Data in R\nExploring FCM Data in R\n\n\n\n\nProcessing and Quality Assurance of FCM Data\nProcessing and Quality Assurance of FCM Data\n\n\n\n\n1D Dynamic Gating\n1D Dynamic Gating\n\n\n\n\nClustering and Additional FCM Tools\nClustering and Additional FCM Tools\n\n\n\n\n\nTulika Rai - Learn Innovatively With Me\n\nflowAI Flow Cytometry Data Cleaning using R\nflowAI Flow Cytometry Data Cleaning using R: A Step-by-step Tutorial\n\n\n\n\ntSNE UMAP TRIMAP colorization or Transformation using R script\ntSNE UMAP TRIMAP colorization or Transformation using R script\n\n\n\n\n\n\n\nGivanna Putri - Introduction to Cytometry Data Analysis in R workshop\nACS 2021 Workshops - Introduction to Cytometry Data Analysis in R workshop\n\n\n\n\n\n\nTimothy Keyes -\n{tidytof}: Predicting Patient Outcomes from Single-cell Data using Tidy Data Principles\n\n\n\n\n\n\nRyan Duggan - Cytometry on Air\nCytometry on Air: Analyzing Flow Cytometry Data in R Presentation by TJ Chen and Greg Finak,\n\n\n\n\n\n\nGuillaume Beyrend - Learn Cytometry\nLearn Cytometry Originally appeared to have been paywalled, doesn’t currently appear to be the case.\n\n\n\n\nHong Qin - flow analysis in R\n\nFlow Analysis in R\nflow analysis in R, bio125, Spring 2015\n\n\n\n\nFlow Cytometer Data Analysis\nBIO233 demo, flow cytometer data analysis, simple example\n\n\n\n\n\n\n\nSwayam Prabha - Flow cytometry data analysis in R/Bioconductor\nLecture 15 : Flow cytometry data analysis in R/Bioconductor" }, { - "objectID": "course/00_Git/slides.html#new-folder-from-template", - "href": "course/00_Git/slides.html#new-folder-from-template", - "title": "Version Control with Git", - "section": "New Folder from Template", - "text": "New Folder from Template\n\n\n\n\n\n\n\n\n.\n\n\nSince Positron can use multiple programming languages, when we select “New Folder from Template” we will be asked what kind of folder template we want to use. Since we are working in R, we will select the “R Project” option." + "objectID": "course/index.html", + "href": "course/index.html", + "title": "Cytometry in R", + "section": "", + "text": "Cytometry in R is a free virtual mini-course being organized by the Flow Cytometry Shared Resource Core at the University of Maryland’s Greenebaum Comprehensive Cancer Center. This course is a passion project arising from our desire to contribute back to the community.\nWe 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." }, { - "objectID": "course/00_Git/slides.html#creating-subfolders", - "href": "course/00_Git/slides.html#creating-subfolders", - "title": "Version Control with Git", - "section": "Creating SubFolders", - "text": "Creating SubFolders\n\n\n\n\n\n\n\n\n.\n\n\nOnce your new project folder has opened, you should be seeing the main layout elements that we briefly covered in the Positron walk-through.\nFor this section, we will primarily be focused on what is happening within the primary side bar on the left, where changes to the individual files within the folder since the last save/commit will be reflected by colored text.\nFor my own projects, there are some elements of organization that I go ahead and add for each new folder. These include both a data and an images subfolders to help keep things a little more organized.\nTo create these folders, we would click on the respective add folder (+) button on the side bar. Files and Folders can be clicked and dragged within the primary side bar to move things to new folder locations." + "objectID": "course/index.html#resources", + "href": "course/index.html#resources", + "title": "Cytometry in R", + "section": "Resources", + "text": "Resources\nCourse materials can be found here. The livestream recordings are available via YouTube" }, { - "objectID": "course/00_Git/slides.html#creating-files", - "href": "course/00_Git/slides.html#creating-files", - "title": "Version Control with Git", - "section": "Creating Files", - "text": "Creating Files\n\n\n\n\n\n\n\n\n.\n\n\nIn context of this course, we will primarily be working with two types of files when coding:\n\nR Scripts: These files end in .R. These contain only code (with occasional # comment line). These are often used for self-contained code that once we get them working we rarely need to modify.\nQuarto Markdowns: These files end in .qmd. They contain a .yaml header, followed by a mix of regular written text (often explanations or other documentation), and sections (ie. chunks) that contain code. These are used when we are still getting the code to work, when we need to modify inputs frequently, or simply when we need to document what and why we are doing something to make life easier for our future-self two months from now." + "objectID": "course/index.html#in-person-baltimore", + "href": "course/index.html#in-person-baltimore", + "title": "Cytometry in R", + "section": "In-Person (Baltimore)", + "text": "In-Person (Baltimore)\nFor those joining us in person, the class is being offered on Thursday from 4-5 pm EST in Bressler Research Building Room 7-035. Monitors to plug your laptops in will be available on a first come, first served basis. These in-person sessions will not be recorded, but with the smaller class size you will have our undivided attention should you have any questions." }, { - "objectID": "course/00_Git/slides.html#qmd-files", - "href": "course/00_Git/slides.html#qmd-files", - "title": "Version Control with Git", - "section": "QMD Files", - "text": "QMD Files\n\n\n\n\n\n\n\n\n.\n\n\nOnce this is done, we can now see we have a new .qmd file (“Example.qmd” in this case).\n\n\n\n\n\nYAML\n\n\n\n\n\n\n\n\n.\n\n\nAs previously mentioned, the start of a Quarto Markdown file containg a YAML code chunk that is used to set formatting choices (we will explore this in-depth during the next section)\nWhat designates the location of the YAML block are three hyphens at the start, and three hyphens at the end. For this example, we will also provide a “title:” and “format:” field for the time being (see additional options here)." + "objectID": "course/index.html#virtual-worldwide", + "href": "course/index.html#virtual-worldwide", + "title": "Cytometry in R", + "section": "Virtual (Worldwide)", + "text": "Virtual (Worldwide)\nFor those joining us virtually, we will have three separate livestreams throughout the week on YouTube. These will be offered on:\n\nTuesday 2200 EST (Wednesday 0300 GMT+0)\nWednesday 1600 EST (Wednesday 2100 GMT+0)\nThursday 1000 EST (Thursday 1500 GMT+0)\n\nAll three livestreams will be recorded and available on YouTube immediately afterwards." }, { - "objectID": "course/00_Git/slides.html#local-version-control", - "href": "course/00_Git/slides.html#local-version-control", - "title": "Version Control with Git", - "section": "Local Version Control", - "text": "Local Version Control\n\n\n\n\n\n\n\n\n.\n\n\nHaving introduced the main elements of a Quarto Markdown file, let’s turn our attention to the tab within the editor showing our newly created .qmd file.\nWe can see there is a solid circle next to the file name, and it is appearing as green. The circle denotes unsaved changes, which we can correct by clicking on the Save Button to save the changes to our file." + "objectID": "course/index.html#discussion-forum", + "href": "course/index.html#discussion-forum", + "title": "Cytometry in R", + "section": "Discussion Forum", + "text": "Discussion Forum\nWe will be using the Cytometry in R Discussions page as a community forum, and a place to ask questions, celebrate wins, and provide feedback. After creating a a GitHub account, pleae go introduce yourself." }, { - "objectID": "course/00_Git/slides.html#remote-version-control", - "href": "course/00_Git/slides.html#remote-version-control", - "title": "Version Control with Git", - "section": "Remote Version Control", - "text": "Remote Version Control\nCopying Project Folder to GitHub\n\n\n\n\n\n\n\n\n.\n\n\nWhile having local version control in place is helpful when you need to revert back after encountering issues, where Git shines is the ability to pass your changes to your online GitHub repository.\nNot only does this allow you to switch between computers, but should something disastrous happen to your main computer, you still have all your hard work backed up and readily assessible.\nFor this subsection, first, double check that Positron is still connected to your GitHub account by checking the user tab on the bottom-left. If not, repeat the connection setup." + "objectID": "course/00_BonusContent/PullConflicts/index.html", + "href": "course/00_BonusContent/PullConflicts/index.html", + "title": "Take-Home Problems - Pull Fix Resolution", + "section": "", + "text": "Background\nFor those who have turned in the homework to the Cytometry in R - homework branches, many report having encountered merge issues pulling in the next week’s data if the pull request hasn’t been resolved yet. Creating a parallel branch, and submitting homework from there to the homework branch might solve the issue? But we will need to test that out. For now, here are the steps we used to resolve the issue locally without needing to delete and re-download.\n\n\nGetting Started\nStart off checking your GitHub forked version of the CytometryInR, notice how many commits behind you are.\n\n\nIf you haven’t submitted the optional Take-Home problems via a pull-request, proceed to do so.\n\n\nThis was an example of the page you see when submitting the pull request. Upon submission, your branch may show merge conflicts due to difference in rendered docs. This is okay, we will resolve it on our end.\n\n\nWhat we will end up doing is ignore the changes and accept the current version. This issue is likely due to the weekly updating of the data resulting in new sidebar links. We will then mark these issues as resolved\n\nWe will then mark the issues as resolved.\n\n\nOn return to the homework, we will be able to merge the branch once again. We will likely make our suggestions at this point for this branch.\n\n\nHowever, after pull request has been merged, you will see your branch is way ahead (due to everyone elses homework commits). This is the area we will need to address via the new branch method.\n\n\nFor now, proceed to discard the changes (you don’t need the other participants homeworks cluttering your folder)\n\n\nYou will then appear as caught up with the main branch.\n\n\nOn return to Positron, attempt to pull\n\n\nHowever, since your homework commit is still present, you will receive a pop-up asking you to see the GitLog. If you scroll up the problem log, it will give you several options.\n\n\nYou will need to enter the following code into your terminal tab:\n\ngit config pull.rebase TRUE\n\n\n\nThis will result in a branched appearance, and the button asking you to sync the changes.\n\n\nUpon doing so you will have a restored status vs. the main cytometry in R project folder.\n\n\n\nTake Away\nWe have encountered a first growing pain for the course, in that the pull-request method we have been using still causes merge conflicts. We will be going to a homework branch to homework branch pull-request approach going forward, I will send out additional instructions on how to do so shortly.\nThanks for your patience!\nDavid\n\n\nAdditional Resources" }, { - "objectID": "course/00_GitHub/slides.html#creating-an-account", - "href": "course/00_GitHub/slides.html#creating-an-account", - "title": "Using GitHub", - "section": "Creating an Account", - "text": "Creating an Account\n\n\n\n\n\n\n\n\n.\n\n\nWe will first navigate to the GitHub homepage. If you haven’t previously created an account, click on the button to sign up for an account." + "objectID": "course/00_BonusContent/index.html", + "href": "course/00_BonusContent/index.html", + "title": "Bonus Content", + "section": "", + "text": "This is a miscellaneous page to host walk-throughs of topics that come up via the Discussion Page. Rather than re-explain how to in the comments, I want to have a place to post short-walkthroughs to solve these issues, while avoiding incorporating it into the existing walk-throughs at this point in time. I hope you find it useful, and pardon the organized chaos of miscellaneous topics." }, { - "objectID": "course/00_GitHub/slides.html#github-profile", - "href": "course/00_GitHub/slides.html#github-profile", - "title": "Using GitHub", - "section": "GitHub Profile", - "text": "GitHub Profile\n\n\n\n\n\n\n\n\n.\n\n\nUpon creating a brand new account, your GitHub homepage will initially look rather empty, and can be intimidating to navigate for the first time.\nFor now, on the upper right, go ahead and click on the default profile picture icon…" + "objectID": "course/00_BonusContent/index.html#windows-arm", + "href": "course/00_BonusContent/index.html#windows-arm", + "title": "Bonus Content", + "section": "Windows Arm", + "text": "Windows Arm\n\nPositron\nOn the main Positron installation page, only the installers for Windows Computers with x86 chips are currently shown. There is a beta (experimental) version of Positron for Windows ARM (ex. Snapdragons), but it needs to be installed from Positron’s GitHub releases page.\n\nPlease note, you should download the most recent version that is available to you, as they continue to update it and fix bugs. As of February 04, 2026, you would also need to install Quarto separately.\nTo install Quarto, first navigate to their website. Quarto for Windows ARM was implemented in 2023, so the regular installer should work.\n\nAlso, you would need a Python arm64 installation installed if you decide you want to venture into using Python at any point." }, { - "objectID": "course/00_GitHub/slides.html#github-readme", - "href": "course/00_GitHub/slides.html#github-readme", - "title": "Using GitHub", - "section": "GitHub ReadMe", - "text": "GitHub ReadMe\n\n\n\n\n\n\n\n\n.\n\n\nWith this done, we modify your GitHub profile by adding one customized element, a ReadMe page. This will be used for a couple projects during the course, and can be personalized further in the future.\nTo create a ReadMe page for your profile, we will navigate to the upper right of the screen and click on the + sign." + "objectID": "course/00_BonusContent/index.html#visual-mode", + "href": "course/00_BonusContent/index.html#visual-mode", + "title": "Bonus Content", + "section": "Visual Mode", + "text": "Visual Mode\nWithin Positron, there exist a toggle button to switch between source and visual mode on Quarto documents. But what do you do when you can’t find it?\n\nTuns out…. Visual Mode is currently broken, so the developers removed it about two weeks ago.\nThe current way to switch to it is via right-click, then select edit visual mode.\n\nVice versa, once there, you can revert by right-clicking and selecting Edit Source Mode\n\nThe process of figuring what is going on highlights how to use a GitHub Discussion Page. This is Positrons when I searched for visual button. I then found that a similar question was asked 3 days ago that led me to the linked thread above." }, { - "objectID": "course/00_GitHub/slides.html#github-repository", - "href": "course/00_GitHub/slides.html#github-repository", - "title": "Using GitHub", - "section": "GitHub Repository", - "text": "GitHub Repository\n\n\n\n\n\n\n\n\n.\n\n\nHaving set up your GitHub profile, it now is time to make sure you have access to our course materials. We will have you navigate to our course’s GitHub profile\nOn the profile page, you will be able to see our version of the README, our repositories, and the Contributions graph and Contribution activity sections.\nPlease click on the CytometryInR to navigate to its repository (folder)" + "objectID": "course/00_BonusContent/index.html#not-detecting-git", + "href": "course/00_BonusContent/index.html#not-detecting-git", + "title": "Bonus Content", + "section": "Not Detecting Git", + "text": "Not Detecting Git\nIf you leave the “Initialize Git Repository” option unclicked when setting up a New Folder from Template, Git will not be active within your project folder.\n\nAs a result, when you try to use the usethis packages use_github(private=true) function, you will get an error that resembles the one below\n\nTo initiate a Git repository after the fact, you will need to go to the Version Control tab in the action bar, and select the option.\n\nThen, you will need to stage the files you want to work with, and commit them.\n\nuse_github(private=TRUE) should now be functional at that point. However, you can also choose to continue via Positron’s interface instead by selecting Publish.\n\nIt will then ask you whether you want to save it as either a Public or a Private repository.\n\nAnd if all goes well, you will see the “Successs” pop-up in the lower-right" }, { - "objectID": "course/00_GitHub/slides.html#forking-cytometryinr", - "href": "course/00_GitHub/slides.html#forking-cytometryinr", - "title": "Using GitHub", - "section": "Forking CytometryInR", - "text": "Forking CytometryInR\n\n\n\n\n\n\n\n\n.\n\n\nBefore we go further, we will need you to make your own copy of the course repository (ie. fork it). This will allow you to quickly retrieve all the new materials and code corrections by simply rereshing (ie. syncing) your forked version with our upstream parent branch once a week." + "objectID": "course/00_Floreada/index.html", + "href": "course/00_Floreada/index.html", + "title": "Using Floreada", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "crumbs": [ + "About", + "Getting Started", + "00 - Floreada" + ] }, { - "objectID": "course/00_Homeworks/slides.html#discussions-forum", - "href": "course/00_Homeworks/slides.html#discussions-forum", + "objectID": "course/00_Floreada/index.html#floreada", + "href": "course/00_Floreada/index.html#floreada", + "title": "Using Floreada", + "section": "Floreada", + "text": "Floreada\n\nLoading Dataset\nFirst, open your web browser and navigate to the website\nClick on Start to proceed to the next page.\n\n\n\n\n\n\nOnce that is done, select the File tab on the upper navigation bar. Then click on Open File(s).\n\n\n\n\n\n\n\nFrom there, select your .fcs files of interest, and click Open.\n\n\n\nThe .fcs files will now load in, and you should see a view similar to the one below. On the left side-bar, you have your gating options (Rectangle, Polygon, Range, Elipse, Quad, etc). Next to these on the right you have the FCS files that are loaded into the workspace. Then on the right, you have the visual display for your selected specimen.\n\n\n\n\n\nSwitching Axis Markers\nIf you left click on the axis name (SSC-H or FSC-H in this case), you will be able to select other markers by which to gate your specimen. For the provided example, we were using a raw spectral flow cytometry .fcs file, so the names of the detectors are present.\n\n\n\nFor now, I plan to start off by gating for singlets. I switch the y-axis to FSC-H, and then proceed to switch the x-axis to FSC-A.\n\n\n\n\n\nCreating Gates\nWith this done, I can now select the Poly gate tab on the upper left.\n\n\n\nThen manually click on the locations on the plot to add the individual gate nodes.\n\n\n\nTo complete the gate, I click back to the original node point. At this point, the popup will allow you to name the gate.\n\n\n\nTo adjust the polygon gate, you can click on a node and drag it to expand or contract in a particular direction\n\n\n\nTo move the entire gate, first click on a node to select the gate, then click in the center of the gate to adjust its location.\n\n\n\n\n\nAdditional Gates\nUnfortunately for those with the force-of-habit from using other softwares, double-clicking within the gate doesn’t do anything. To continue gating on the selected cells, you will need to click on the newly created gate name on the left. This will result in visualizing the isolated cells.\n\n\n\nOnce this is done, you can repeat the previous steps to change the axis markers and create a second gate. For this example, we went with a “Cells” gate to exclude debris from this particular sample.\n\n\n\nHaving created the “Cells” gate, we will be switching gating based on FSC and SSC to using the detector parameters.\nThe samples in this example were acquired to derive the cell counts and concentration of various cell populations within cryopreserved cord and peripheral blood mononuclear cells (CBMC and PBMC) specimens after thawing.\nThey were stained with CD19 BV421, CD45 PE, and CD14 APC on a 5-Laser Cytek Aurora, before unmixing, this would correspond respectively to V1, YG1/B4, R1/YG4 peaks respectively.\n\n\n\n\nScaling/Transformation\nWhen we switch the axis, we can see that the scaling/transformation is not ideal, as the staining and not-staining populations are scrunched up together in the center of the plot.\n\n\n\nTo change the scaling/transformation, we need to click directly on the axis.\n\n\n\nFrom there, when we click on the drop-down, we see the various transformation options. We will select Logicle, given we are working with spectral flow cytometry files.\n\n\n\nThis y-axis values are subsequently visualized with the logicle transformation applied, increasing our resolution between the positive and negative population.\n\n\n\nWe can then repeat this for the x-axis, adjusting the fine-tune options for the scaling as needed.\n\n\n\n\n\nNavigating Gating Hierarchy\nWith this done, let’s first draw a rectangle gate for the CD45+ (B4-A) cells.\n\n\n\nAnd then selecting that population by clicking on the gate name, let’s proceed and gate the CD19+ cells (V2-A).\n\n\n\nAs you can see, we now have the various gates present in the gating hierarchy for the respective .fcs file. To return to a previous gated population, we would click on the parent population above it.\n\n\n\nWe can subsequently add an additional gate at this gating level for the likely debris population (the threshold setting was suboptimal for this experimental run).\n\n\n\n\n\nCopying Gates\nThis was the process for gating for a single specimen. To copy gates over to the other specimens, we have two options. First, holding down your Ctrl (or equivalent) button, you can click on the individual gate names.\n\n\n\nFrom there, you can drag them down to the next specimen and apply them.\n\n\n\nAlternatively, you can drag down the highlighted gated to the Pipelines Tab, and apply to All Files. This will result in the gates being copied to all specimens in the experiment.\n\n\n\n\n\n\nAdjustments within Pipelines will carry over to all other respective unmodified specimens that share it’s gates.\n\n\n\nOnce this is done, I recommend cycling through the gates for each specimen, just to ensure that the gates were positioned correctly before saving the workspace.\n\n\n\n\n\nSaving Workspace\nWith everyone now “correctly” gated, we can proceed to save the workspace so that we can reopen it later from another browser.\nTo do this we open the File tab from the upper navigation bar, and select Save Workspace.\n\n\n\nFrom there we have a couple options, for now let’s select Floreada Workspace. Where it is saved at will depend on your individual browser settings, so watch for a popup.\n\n\n\nAlternatively (and crucially for the CytoML pipeline) we can also choose to save it as a FlowJo v10 .wsp file.\n\n\n\nIn both cases, you will end up with Workspace files that can be used later to access your created gates\n\n\n\n\n\nReopening Workspace\nTo reopen the Floreada workspace within the browser, reopen the website, and select the Open File(s) option.\n\n\n\nFrom there, select both the Floreada Workspace file as well as the .fcs files\n\n\n\nAt which point you will now be back to the point you last saved at.", + "crumbs": [ + "About", + "Getting Started", + "00 - Floreada" + ] + }, + { + "objectID": "course/00_Floreada/index.html#cytoml", + "href": "course/00_Floreada/index.html#cytoml", + "title": "Using Floreada", + "section": "CytoML", + "text": "CytoML\nDue to a unknown formatting bug, the Floreada produced FlowJo v10 .wsp is not directly accessible by CytoML at the time of this course. However, the issue is resolved as soon as the file is opened the first time within FlowJo v10, regardless of whether you have a log in or not. Strange? Yes, but we will take the workaround.\nSo, for anyone on Windows or MacOS, download FlowJo v10. Once installed, open the software, and close the login popups. Once there, open the Floreada created FlowJo.wsp file. Since you haven’t logged in, it won’t show any events. But it will correct the formatting bug. Close the software, and return to R. Your Floreada sourced .WSP file should now be readable by CytoML.\nOdd? For sure. Fixable? Likely, I will set a reminder to work with the Floreada and CytoML devs to see if we can cut out the need for this workaround.", + "crumbs": [ + "About", + "Getting Started", + "00 - Floreada" + ] + }, + { + "objectID": "course/00_Git/index.html", + "href": "course/00_Git/index.html", + "title": "Version Control with Git", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] + }, + { + "objectID": "course/00_Git/index.html#new-folder-from-template", + "href": "course/00_Git/index.html#new-folder-from-template", + "title": "Version Control with Git", + "section": "New Folder from Template", + "text": "New Folder from Template\nSince Positron can use multiple programming languages, when we select “New Folder from Template” we will be asked what kind of folder template we want to use. Since we are working in R, we will select the “R Project” option.\n\n\n\nWe will next be asked to name the new project folder and a storage location.\nOne thing I would like to remind everyone who is just starting to code is that it is best to avoid using special characters (ex. @ $ # ^ ! ; : ,) in any folder or file name. This is because when coding, these can be misinterpreted as commands.\nWhile spaces are generally okay, it is often to best stick to to stick to hyphens (-), underscores (_). We will explore naming conventions in more depth at a later time.\n\n\n\nAnother useful thing to know when getting started with version control, it is best to save your files within your local computer, avoid using OneDrive or other cloud storage options for the time reason. The reason behind is that permissions to write/save to the cloud locations can sometimes be quite finicky, and some autosave/indexing behaviors can cause issues. akes things easier to save or modify without running into permission issues. For most of our course examples, we will be saving our Project Folders under the Documents Folder.\nHaving named our new Project Folder, and designated a storage location, go ahead and check the Initialize Git Repository option. This will indicate to version control to monitor content and changes to files within this folder.\n\n\n\nThe next setup screen will verify which version of R you wish to use. Since we are just getting started, your most recent version of R (usually system) should work. We will also leave the “renv” (reproducible environment setup) option unchecked for the time being (we will revisit the concept later in the course).\n\n\n\nAnd if all goes well, we should see the “New Folder Created” popup.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] + }, + { + "objectID": "course/00_Git/index.html#creating-subfolders", + "href": "course/00_Git/index.html#creating-subfolders", + "title": "Version Control with Git", + "section": "Creating SubFolders", + "text": "Creating SubFolders\nOnce your new project folder has opened, you should be seeing the main layout elements that we briefly covered in the Positron walk-through.\nFor this section, we will primarily be focused on what is happening within the primary side bar on the left, where changes to the individual files within the folder since the last save/commit will be reflected by colored text.\nFor my own projects, there are some elements of organization that I go ahead and add for each new folder. These include both a data and an images subfolders to help keep things a little more organized.\nTo create these folders, we would click on the respective add folder (+) button on the side bar. Files and Folders can be clicked and dragged within the primary side bar to move things to new folder locations.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] + }, + { + "objectID": "course/00_Git/index.html#creating-files", + "href": "course/00_Git/index.html#creating-files", + "title": "Version Control with Git", + "section": "Creating Files", + "text": "Creating Files\nIn context of this course, we will primarily be working with two types of files when coding:\n\nR Scripts: These files end in .R. These contain only code (with occasional # comment line). These are often used for self-contained code that once we get them working we rarely need to modify.\nQuarto Markdowns: These files end in .qmd. They contain a .yaml header, followed by a mix of regular written text (often explanations or other documentation), and sections (ie. chunks) that contain code. These are used when we are still getting the code to work, when we need to modify inputs frequently, or simply when we need to document what and why we are doing something to make life easier for our future-self two months from now.\n\n\n\nIn this example, I will go ahead and select the new file icon\n\n\n\nThenn I will name the file, and designate it as a Quarto Markdown file by adding the .qmd at the end of the name to denote the file type.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] + }, + { + "objectID": "course/00_Git/index.html#qmd-files", + "href": "course/00_Git/index.html#qmd-files", + "title": "Version Control with Git", + "section": "QMD Files", + "text": "QMD Files\nOnce this is done, we can now see we have a new .qmd file (“Example.qmd” in this case).\n\nYAML\nAs previously mentioned, the start of a Quarto Markdown file containg a YAML code chunk that is used to set formatting choices (we will explore this in-depth during the next section)\nWhat designates the location of the YAML block are three hyphens at the start, and three hyphens at the end. For this example, we will also provide a “title:” and “format:” field for the time being (see additional options here).\n\n\n\n\n\nText\nWith a basic YAML formatting block now in place, we can build out other elements of our Quarto Markdown document. Unless otherwise specified, everything else in the document is assumed to be text, so I will go ahead and provide an initial text description of what I am trying to do.\n\n\n\n\n\nCode-Chunks\nHaving provided some initial text for documentation, we can then add code-block chunks to start writing some code.\nThe easiest way to do do this is to click the respective option on the upper-right of the Editor screen. Since Positron can handle multiple programming languages, so the chunk is inserted, we will need to select the language we use to be used within the code chunk (R in this case).\n\n\n\nYou will notice, that the inserted code block starts off with three backticks (`) and then “{r}”. The end of the code block is denoted by an additional three backticks.\nWe can also add new code blocks by simply typing these elements into the location we want to place a code chunk (as long as we are careful to add 3 backticks also at the end).\n\n\n\n\n\n\n\n\nRunning Code\nNow that we have two code-chunks written, we can write lines of code within them. For this example, I will use two beginner friendly functions, print(“Hello”), which will print the contents contained between the ” ” to the console, and getwd() which will return the location of the folder you are working within (ie. the working directory).\nTo run/execute these lines of code, we have a couple options. We can click on the Run Cell option that appears on the upper-left side of the code chunk. Additionally, it has a companion option that will run all code chunks above it.\n\n\n\nWhen a code block is successfully run, you will see within the console (lower bottom of the screen) the line of code be run, with any returned outputs appear directly after.\n\n\n\nAn alternative to clicking the Run Cell button is to click on the line of code you are interested in running, then press (Ctrl + Enter)/(Command + Enter). This will execute the line of code that you have clicked on. This can be useful in scenarios where you want to run a specific line, and not the entire code-chunk.\n\n\n\nUsing this approach, you can see the location (ie. file path) of the current working directory was returned to the Console.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] + }, + { + "objectID": "course/00_Git/index.html#local-version-control", + "href": "course/00_Git/index.html#local-version-control", + "title": "Version Control with Git", + "section": "Local Version Control", + "text": "Local Version Control\nHaving introduced the main elements of a Quarto Markdown file, let’s turn our attention to the tab within the editor showing our newly created .qmd file.\nWe can see there is a solid circle next to the file name, and it is appearing as green. The circle denotes unsaved changes, which we can correct by clicking on the Save Button to save the changes to our file.\n\n\n\n\nUntracked\nIf we turn our attention to the left primary sidebar, we can see that within our GitPractie folder there are three files, our Example.qmd, and the default README.md and .gitignore files. These all show up in green text with U’s to the right of the file names.\nThis denotes that the version control tracking software Git is currently considering them as “Untracked” files. While saving the document via the Save button means we will still have our changes when we reopen Positron, we won’t have any history of changes that we can use to revert back to the way all the files appeared at this exact point in time should something go wrong.\nWe will next go the address bar on the very far left, and select the Git tab.\n\n\n\nOn the Git tab, we can see that each of the three files are shown underneath a “Changes” drop-down. This contains the files that have undergone changes since the last commit. In our case, since we haven’t updated the save-state yet, this last commit would be the initial creation of the project folder.\n\n\n\nTo have version control track these individual files going forward, we can do so in two separate ways. We can add them individually by clicking the + symbol next to the individual names.\n\n\n\n\n\nStaged\nThis will result in the files being moved to the “Staged” dropdown. This denotes files being tracked with the intention of being recorded as the next save-state or waypoint (ie. a commit).\n\n\n\n\n\nCommit\nTo create a new commit (save-state or waypoint), once we have the files we want to track staged, we will write a commit message, and then press commit.\nA commit message is a brief description of the changes that have occurred to the files between this commit and the previous one. Make this short description informative enough that if you need to revert back in the future, you can quickly identify the commit you need to fall back to (more about this later).\n\n\n\nIf this your first time using version control, you will likely encounter the following pop-up asking that you provide a user.name and user.email. This is used to designate the author of the changes.If you get this popup, go ahead and select “Open Git Log”\n\n\n\n\n\nUserName and UserEmail\nThe Output tab at the bottom of the screen will open, showing the messages that led to the popup.\nThe important part to note is the commands that will be needed to provide your user name and email to the computer for authoring the commit. Typically, your email will be the same one you used for your GitHub account.\n\n\n\nFrom the displayed message, go ahead and copy\n“git config –global user.email”you@example.com””\nThen click on the adjacent terminal tab. You will paste the command in, but do not hit enter just yet.\nWindows users, please note, depending on your settings, if trying to paste from the keyboard into the terminal, you may need to press “Ctrl + Shift + V” instead of the usual “Ctrl + V”.\n\n\n\nWith the command now pasted (or typed), use your keyboard arrows to navigate to the email portion, and replace the generic email with your email address used for your GitHub account.\nMake sure that the quotation marks (“) around the email address remain present, as they help the computer identify where your email address starts and ends. Once satisfied that your email address is correct, press enter.\n\n\n\nNext up, repeat the process, this time copying over the command needed to set your user name to the terminal. Repeat the editing process to provide your name between the “” marks. Then press enter.\n\n\n\n\n\n\n\n\nFirst Commit\nNow that your user.name and email address have been provided, Git should be able to provide an author to the commit message. Reattempt to press commit button.\nIf this is successful, you will see your initial commit appear on the bottom half of the left primary side bar, under the Graph dropdown. Congrats! Your files are now being tracked by version control.\n\n\n\nIf you hover with your mouse arrow just over the commit, you can see the longer commit message and additional details appear.\nIf you click on the commit tab, a new display will open in the editor, displaying the changes that occured in that commit compared to the previous one. In this case, since we added everything since the previous commit, nothing appears on the left side, while the entire documents contents appear highlighted in green on the right.\nGreen highlighting is used to show additions, while red highlighting is used to show deletions.\n\n\n\nHaving completed this initial commit, for this example, let’s imitate a typical workflow and make some additional changes to the file before we make a second commit. Within text portions of the .qmd file, use of # denotes a section header in markdown, so let’s add a header for Introduction and click save.\n\n\n\n\n\nModified\nWithin the left primary sidebar, we can see that the Git tracking has updated. Examples.qmd is visible once again. However, becuase it is now a tracked file, instead of showing up with the “U/Untracked” green highlight, it now appears as a brownish-red with a “M/Modified”.\nLet’s make an additional change to the .qmd file by adding another section (# Setup) and a code block with a commented out line (denoted by the # at the line start), before pressing Save.\n\n\n\nIf we were now to click on the Example.qmd file in the left primary sidebar, it will open the same kind of tracking display we saw previously. This time, we can see changes since our last commit. These appear as the green highlights along the scroll-bar, corresponding to the # Introduction and # Setup headers that we have added in since the last commit.\n\n\n\nFor a larger document, we can scroll down to see the various highlighted regions.\n\n\n\nWe could now repeat the steps showed above, staging the file, writing a commit message, and commiting again by clicking on the designated buttons.\nAn important question is how often should we commit, vs. just hit save? Well… it depends :D Let’s think about this in context of a video game. If you made commits at regular intervals throughout the day (or more frequently when doing something particularly risky), you are more likely to be close enough to a particular commit (waypoint/save-state) that you can quickly revert back to without loosing any progress. Alternatively, if your last commit was last week, you will not have any intermediate versions to fall back to.\n\n\nCommit via Terminal\nHaving demonstrated how to commit changes to Git via the left primary side-bar, for this second commit, let’s do it the alternate way via the terminal (tab on the panel at the bottom of your screen).\n\n\n\nAfter clicking on the terminal tab, click on blinking command line.\nThe command to stage a file is “git add”, followed by the name of the file you want to stage.\nIn this case, you would enter “git add Example.qmd” and press Enter. \n\n\nYou will see after pressing enter a new blank terminal line appear. If you glance at the left-sidebar, you can see that Example.qmd now appears under the Staged Changes dropdown.\n\n\n\nNext up, let’s write the git commit via the terminal. In this case, the command would be “git commit -m” (-m denoting message). The commit text is then surrounded by “” marks.\nFor example: “git commit -m”Added section headers to my QMD file””\nPress enter to save the commit.\n\n\n\nAnd you should see your second commit now appear in the left primary sidebar underneath the graphs dropdown.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] + }, + { + "objectID": "course/00_Git/index.html#remote-version-control", + "href": "course/00_Git/index.html#remote-version-control", + "title": "Version Control with Git", + "section": "Remote Version Control", + "text": "Remote Version Control\n\nCopying Project Folder to GitHub\nWhile having local version control in place is helpful when you need to revert back after encountering issues, where Git shines is the ability to pass your changes to your online GitHub repository.\nNot only does this allow you to switch between computers, but should something disastrous happen to your main computer, you still have all your hard work backed up and readily assessible.\nFor this subsection, first, double check that Positron is still connected to your GitHub account by checking the user tab on the bottom-left. If not, repeat the connection setup.\n\n\n\nSince our project was created using the “New Folder from Template” option, it currently only exist locally. What we want to do next is to copy it to our GitHub account, creating a new repository in the process.\nTo do this, we will first need to install the usethis R package. Within your console, you would run the following line of code:\n\ninstall.packages(\"usethis\")\n\nDepending on what R packages you already have installed on your computer, you may get a prompt asking if you want to update/install additional dependencies. Go ahead and type the number corresponding to Update All, and press enter.\nThe package and all it’s dependencies should then install. If an error message appears, read through it, and follow provided instructions. Go to Discussions if need help.\n\n\nOnce the usethis package is installed, we need to activate it within R by calling it with the library command. This makes all the tools (ie. functions) within an R package available for use within Positron.\nIn your console, you would type:\n\nlibrary(usethis)\n\n\n\n\nWith library called, you now have access to the functions (tools) within the usethis R package. One of these is the use_github() function.\nIn Positron, if you hover over a function, it will pull up the associated help file which will provide you information about the arguments the function expects to receive, and what they do.\nFor use_github(), the main thing to remember for now is since this is a personal project being used for testing, we don’t necessarily want to share it with the entire world, so we should set the “private” argument equal to TRUE when creating a new repository.\n\n\n\nTaking this information that we have now gathered, we can now within our Quarto Markdown create a code chunk, write out the line of code calling the function, and providing the Private=TRUE argument within the ().\nWithin a code chunk, adding a # in front of a line of code, will comment it out, resulting in that line of code not being run. Since we have already installed the usethis package, and we don’t want to reinstall it every single time, let’s go ahead and comment out that line. Go ahead and press Enter.\n\n\n\nWe will see a message pop-up in the console. In this case, we had not saved before pressing enter, so there are uncommitted changes within the folder. The pop-up is asking whether you want to save these as well before sending the Folder to GitHub.\nIn this case I will chose to ignore the uncommitted changes by entering 3 (for Definitely) in the console and hitting enter on my keyboard.\n\n\n\nThe usethis R package will then execute the series of git commands that are needed to set up a GitHub repository (ie. the messages being displayed in the console window), and when finished will open a pop-up asking whether you want to see your new repository in your default Web Browser. I will go ahead and select yes in this case.\n\n\n\nAfter the browser opens, you can see that the elements I had staged and committed within Positron are now present within the GitHub repository. Since I had only staged Example.qmd, it is the only file that was backed up. We can also see the commit history online by clicking on the commit clock.\n\n\n\nAs we would expect, we only see our two commit messages. One important thing to note is the commit hash numbers, that denote a particular commit. If we decided to revert/fall back to a prior commit in the future, this would be the number we would need to provide to Git to return to that previous commit/save-state\n\n\n\nSimilarly, on GitHub, we have an option to Browse a Repository at a particular point in time. This will be quite useful later in the future when troubleshooting what major changes occurred between versions of an R package.\n\n\n\n\n\nCode Chunk Arguments\nHaving successfully connected our local Project Folder to a remote GitHub repository, let’s return to Positron.\nBefore continuing, if we left the code chunk that created the GitHub repository as is, every time we ran all code chunks in the document, it would try to recreate the GitHub repository. We don’t want this to happen, as the setup was a one-time operation.\nWhile we could add # in front of every line of code (or delete the code chunk entirely) it is often useful to have these set-up code chunks around to remind us what arguments we need to provide next time we need to a similar setup and are mind blanking on what to do.\nFortunately, Quarto allows us to set conditions on whether a chunk is run (ie. evaluated). We will discuss the conditiona arguments in more depth in the next section, but for now, we can modify the code chunk as follows.\nOn the next line after the {r}, we will add a hashtag (#), then a pipe (|), followed by a space. This is the setup for a code-chunk specific argument. We will then add “eval: FALSE”, which signals that the particular code-chunk should not be evaluated (ie, should not be run).\n\n\n\n\n\nREADME\nNow that we have connected our local Project Folder to GitHub, and have gotten a basic introduction to the “git add”, “git commit” arguments, let’s turn our focus to the other files currently listed as untracked by Git within our folder, the README.md and the .gitignore files.\nWhen setting up our GitHub account, we encounted an example of a README.md file. This file often provides a brief description of the project, and an outline of what the other files in the folder are for. As you may have gathered, even software developers are forgetful/under-caffenaited, and having notes to catch back up to speed is important.\n\n\n\n\n\n.gitignore\nWe additionally have a .gitignore file. Within a project, there are often some files that we will never want version control to track. These could be files that are too large for GitHub (ex. really large .fcs files), or files containing sensitive information (passwords, history, credentials, etc.).\nWhen the names of these file (or the file type shothand) are added to the .gitignore file, they are ignored by version control, and no longer appear on the primary left side bar.\n\n\n\nLet’s proceed and stage both the README.md and .gitignore file, so that changes to these files will be tracked. We can of course select both from the primary left side bar and write a short commit message.\n\n\n\n\n\n\nOr alternatively, if we want to stage all uncommitted files present in a single step, we could in the terminal use the “git add .”\nWe can then write our git commit using “git commit -m”.\nBoth approaches work, and you may switch between them based on preferrence.\n\n\n\nYou will notice after having committed, that if you look at the Graph dropdown on the bottom half of the primary left side-bar that something has changed.\nThere are now separate icons denoted as main and origin/main. These correspond to the last commit present locally (main), and the last commit on remote (ie. GitHub, origin/main).\nLocal is ahead since you just made the commit with the changes inactivating the code-chunk, and you have not passed these changes up to GitHub yet.\n\n\n\n\n\nPull\nBefore sending (ie. pushing up) our updated commit to GitHub, especially if you are working on a project from multiple computers (or as part of a team) to bring in (ie. pull down) any changes that might be on GitHub that are not present locally.\nThis ensures that everything is up to date, and you don’t end up with mismatched commits that are incompatible with each other and trigger an error message.\nTo pull in changes from GitHub, at the top of the primary left side-bar, you can select the … button to open a drop-down menu of Git options. You would then select “Pull”.\nAlternatively, you could do the same thing via the terminal by running the “git pull” command.\n\n\n\n\n\nPush\nIn our case, there was no new material present on our GitHub repository that were not already present locally, so all that is returned is the “Already up to date” message.\nWe are now good to proceed to push (ie. send) the updated commit up to our GitHub repository.\nWe can do this by either pressing the Sync changes button, or via the terminal entering the “git push” command.\n\n\n\nAnd now, if you glance down at left side-bar’s graph section, you will see that both the main and origin/main icons are now present for the most recent commit.\n\n\n\nIf we switch to our Web browser, we can see that this is also now the case for our GitHub repository that now also has the most recent changes.\n\n\n\n\n\nReverting to Prior Commit\nFor most daily-workflows, you will only need the git commands that we have introduced above (git add, commit, pull, push). The next two areas (reverting to a prior commit, and branches) are more specialized, and will be covered in greater depth later in the course. We are briefly covering them here. If you are at the point where your last remaining neuron has disconnected, and you feel you need to take a break from version control, feel free to skip to the next section and we will revisit these topics later in the course.\n\n–\nIn most cases, if your code stops working, you can identify the issue and fix it in the existing version, never needing to resort to reverting to a previous commit (save-state). The times you would need to revert would be if you deleted important files, or the new files are hopeless mess that is not worth trying to sort through. In those cases, reverting back might be better approach.\nTo imitate a falling back scenario, lets create and additional file, stage and commit it to end up a commit ahead of where we are currently at within the Project Folder.\n\n\n\nNow being one (or several) commits ahead, if we wanted to revert back, we would first need to identify the commit we want to revert back to and copy the commit hash number.\n\n\n\nThen, opening the terminal, we can enter “git reset” and paste the hash afterwards. We can then press enter.\n\n\n\nYou will notice our additional commit has been removed, although the newer files we were working on subsequent last commit are still present.\n\n\n\nIf however, we had wanted to return to the exact same state as the previous commit (removing all subsequent created files), we could do so by adding in the –hard argument. Before starting, save any newer files you want to keep in a completely different folder, because they will be permanently removed.\nThen, enter “git reset –hard thecommithashnumber” into the terminal, which would result in a “hard” return to the previous commits save-state. You may need to close and reopen Positron to see the changes reflected.\n\n\nBranches\nBranches are an useful Git feature that we will start using extensively later in the course. Branching allows you to create a parallel/carbon-copy of your existing repository, which you can then edit without affecting the main branch. This is particularly useful for projects that may get messy or drawn out. By isolating these edits to a parallel branch, if they don’t work, your main branch remains safe. Alternatively, if you like the changes that occurred in the branch, you can pull these changes from the branch back to main, bringing the timelines back together.\n\n\nWithin the terminal, entering “git branch” will show the existing branches. In this case, only main is present since we haven’t yet created a new branch.\n\n\n\nWe can create a new branch in the terminal by entering “git branch” followed by the name of our desired branch. In this case, we are creating a branch called Week1\n\n\n\nNow, when we check “git branch” again in the terminal, which returns the two branches, Week1 and main. The * is located next to main, indicating that we are currently within the main branch.\n\n\n\nBesides the terminal, we can also create a new branch via Positron. To do so, we first click on the Git tab in the Actions Bar.\nOnce the left-side bar displays the version control display, we can click on the … button (to the right of changes)to gain access to the Git options drop-down.\nFrom here, we click on Branch, and then select Create Branch.\n\n\n\nUsing Git branch, we saw that we were still within the main branch. In the terminal, we can switch over to the Week1 branch by using the “git checkout” command, followed by the branch we wish to switch to.\n\n\n\nThis results in us switching over to the Week1 branch.\n\n\n\nHaving switched (ie. checkout) to the Week 1 branch, let’s create the file BranchTest.qmd, which will exist within this branch, but not yet in the main branch.\n\n\n\nHaving created the file, let’s stage and then commit it. This will put the Week1 branch ahead of the main branch by a single commit.\n\n\n\nWith our changes staged and committed, if we look at the left side-bar’s graph section, our Week1 branch is now ahead of the origin/main branch by one commit.\n\n\n\nIf we were to check on GitHub, we can see that no new files are present on the main branch, but can see the notification listing recent changes to Week1 branch.\n\n\n\nUsing the drop-down, we can switch from displaying the main branch to the Week1 branch, where we can see the new file.\n\n\n\nIf we click the green compare and pull request button, we end up on this screen. This compares how the two branches are different from each other.\n\n\n\nWe will delve into branches again at a later point. For now, remember that by creating and prunning parallel branches, you can develop knowing that even if something goes wrong, your main branch remains safe.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] + }, + { + "objectID": "course/00_GitHub/index.html", + "href": "course/00_GitHub/index.html", + "title": "Using GitHub", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] + }, + { + "objectID": "course/00_GitHub/index.html#creating-an-account", + "href": "course/00_GitHub/index.html#creating-an-account", + "title": "Using GitHub", + "section": "Creating an Account", + "text": "Creating an Account\nWe will first navigate to the GitHub homepage. If you haven’t previously created an account, click on the button to sign up for an account.\n\n\n\nOn the sign-up page, you will fill in various details needed to create an account. Please remember that GitHub usernames are visible to others. Additionally, if you end up sharing code with others as part of a manuscript, or use GitHub to create a personal portfolio website in the future, your username will appear as part of the URL.\nFor example, in my case, my user name is DavidRach, so my GitHub profile ends up as: https://github.com/DavidRach. For our course, the core’s GitHub user name is UMGCCCFCSR, so the github profile ends up as https://github.com/UMGCCCFCSR, while the course website ends up as https://umgcccfcsr.github.io/CytometryInR/\n\n\n\nOnce you have entered your new account information, you will need your account creation by entering the code sent to the email address that you provided.\n\n\n\nOnce account creation has been confirmed, please proceed to login to GitHub for the first time.", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] + }, + { + "objectID": "course/00_GitHub/index.html#github-profile", + "href": "course/00_GitHub/index.html#github-profile", + "title": "Using GitHub", + "section": "GitHub Profile", + "text": "GitHub Profile\nUpon creating a brand new account, your GitHub homepage will initially look rather empty, and can be intimidating to navigate for the first time.\nFor now, on the upper right, go ahead and click on the default profile picture icon…\n\n\n\nAnd then select Profile…\n\n\n\nYou are now on your public GitHub profile page. For a newly created account, it will look something like this:\n\n\n\nFor a more established account, this page will look a little different, and can be customized to highlight various projects that you are working on.\nFor this course, we will have you set up a basic GitHub profile page for now, although you are free to customize and personalize it as much as you may want to in the future!\nTo start, first select the edit profile button on the left below the default profile icon.\n\n\n\nYou can then proceed to fill in any details that you feel are relevant and are comfortable sharing.\n\n\n\nWith the quick access details filled in, it is now time to navigate to the Settings tab. You will return to the previous menu dropdown on the upper right, and instead of selecting Profile, click on the Settings option.\n\n\n\nYou should now end up within your Public Profile Settings page.\nFeel free to edit the default profile picture, and any other fields that you feel are relevant. Once done, continue to scroll down the page past ORCID ID.\n\n\n\nWhen you reach Contributions and Activity, go ahead and select the option to include private repositories in the activity summary graphic. Then scroll down and click save. You will now be returned to your GitHub profile page.\n\n\n\nAt the top of the profile, you will see a “Your contributions” calendar graph. For a new account, it will look like this:\n\n\n\nIf you are just starting out, this chart will be mostly empty, but will fill in as you work on projects, see here as an example.\nEvery time you save your code (ie. make a commit), the activity will be reflected in this chart. By clicking the option in settings, code made within a private repository will remain private, but will count toward your contribution chart. As you progress through the course, this will provide a nice visual reminder of the progress you have made, and the obstacles that you have overcome.", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] + }, + { + "objectID": "course/00_GitHub/index.html#github-readme", + "href": "course/00_GitHub/index.html#github-readme", + "title": "Using GitHub", + "section": "GitHub ReadMe", + "text": "GitHub ReadMe\nWith this done, we modify your GitHub profile by adding one customized element, a ReadMe page. This will be used for a couple projects during the course, and can be personalized further in the future.\nTo create a ReadMe page for your profile, we will navigate to the upper right of the screen and click on the + sign.\n\n\n\nWe will then select the Create New Repository option.\n\n\n\nYou will next create a repository (folder), naming it exactly the same as your username. This will be recognized by GitHub as being a special type of repository corresponding to the ReadMe section of your profile.\nFor options, leave the visibility as Public, and Add README set to On. And proceed to Create Repository.\n\n\n\nHaving created the repository (folder), you will see it has been populated by a few default files. For now, you will be editing the README.md file. On a new repository, the easiest way to access it is by clicking the green option on the right side of your screen.\n\n\n\nWith the README.md file now opened, you will be able to see generic filler text that is suggested by GitHub.\nFor this course, I will ask you to add a couple elements for now. You are free to return and further personalize it later if you wish to do so.\n\n\n\nThe type of file that we are working with is a Markdown file, which can allow for a bunch of customizations which we will cover throughout the course.\nFor now, please add and customize the following questions:\nCytometry In R\nLocation: Baltimore, Maryland, USA\nMy Favorite Fluorophore/Metal-Isotope: Spark Blue 550\nPrevious Coding Experience: Repeatedly Calling IT\nWhat I Hope to Get From This Course: A faster way to match FlowSOM clusters to their likely cell type.\n\n\n\nNext, to save you will select the green “Commit changes” button. We will cover the meaning of “Commit” more in-depth during the Git section.\nFor now, write a short summary of the change you made to the file in the “Commit message”, and any additional details within the “Extended description” field. When ready, click the green “Commit changes” button.\n\n\n\nYou will now be able to see the updated README.md file, as you can see in our example below. To make additional edits, you would select the pencil icon on the right-center side of the screen.\n\n\n\nNext, navigate back to your profile page (by clicking on either your username or the Overview option on the tabs).\nYou will see that the README file contents are now displayed on the upper portion of your GitHub profile. Feel free to circle back and customize this further to your liking.\nIn this last example, we created your first repository (folder). Since this is public, it is now shown below the README section of the profile under your repositories. You can also see that your commits made in the process of making the changes are now shown both in the Contributions graph, and under the Contributor Activity summary at the bottom of the page.", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] + }, + { + "objectID": "course/00_GitHub/index.html#github-repository", + "href": "course/00_GitHub/index.html#github-repository", + "title": "Using GitHub", + "section": "GitHub Repository", + "text": "GitHub Repository\nHaving set up your GitHub profile, it now is time to make sure you have access to our course materials. We will have you navigate to our course’s GitHub profile\nOn the profile page, you will be able to see our version of the README, our repositories, and the Contributions graph and Contribution activity sections.\nPlease click on the CytometryInR to navigate to its repository (folder)\n\n\n\nOn this page, you will see several elements that you will be circling back to throughout the course.\nFor our course, we will be extentsively ussing the Discussions page as a community forum. If you have any questions, are looking for feedback, or want to show off something that you worked on, this is the place for it. This will also help make sure\n\n\n\nThe Issues tab is where you will need to go to open an Issue if you encounter a bug (or major documentation typo), so that I can cicle back and correct them when I have the chance.\n\n\n\nTo submit the optional take-home problems, you would turn in these problems by going to the Pull Request tab, and initiating a pull request between your forked version of the project and our “homework” branch (more details on this later).\n\n\n\nOptionally, you can “Star” a repository. This is basically the GitHub equivalent of liking a project. In our case, we will often star a repository since it will be saved under the Stars tab of our profile, which makes finding it again significantly easier a few weeks later after forgetting the repository name.\n\n\n\nTo see projects that you have starred, you can select the Stars option from the same dropdown you used to get to Settings.\n\n\n\nOr from your GitHub profile, you can see these under Stars tab.", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] + }, + { + "objectID": "course/00_GitHub/index.html#forking-cytometryinr", + "href": "course/00_GitHub/index.html#forking-cytometryinr", + "title": "Using GitHub", + "section": "Forking CytometryInR", + "text": "Forking CytometryInR\nBefore we go further, we will need you to make your own copy of the course repository (ie. fork it). This will allow you to quickly retrieve all the new materials and code corrections by simply rereshing (ie. syncing) your forked version with our upstream parent branch once a week.\n\n\nTo fork the course repository, you will select the “Fork repository” option on the upper-center portion of your screen.\n\n\n\nBy “Fork-ing” a repository, you are basically copying the contents from that repository to a newly created repository on your own GitHub. Forked projects are still linked to the original (parent) fork, and can retrieve any updates via syncing, as well as return changes via a pull request.\nFor this course, when you create the fork, keep the existing repository name (“CytometryInR”). Importantly, select the copy main branch option. This will ensure you only get the code and data needed for the course copied over, and don’t end up with your entire hard-drive filled will website elements, or other people’s solutions to the take-home problems.\n\n\n\nOnce you have created the fork, you will see your copy of the forked repository under your own username. Seeing as you have just now forked the project, you will see the notification that you are up to date with the existing version of the CytometryInR course repository.\nAs we go through the course, and new material is released each week on Sunday at 2200 EST (Monday 0300 GMT+0), you will see this changed to behind the main branch by a number of commits, and have the option to sync in the changes to your fork to gain access to that week’s material.\n\n\n\nIf you remember, previously under your GitHub profile, the Repositories tab only contained the repository corresponding to your ReadMe section.\n\n\n\nYou should however now be able to see your fork of the CytometryInR repository. As you add project specific repositories throughout the course, they will also appear here.", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] + }, + { + "objectID": "course/00_Homeworks/index.html", + "href": "course/00_Homeworks/index.html", + "title": "Getting Help", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "crumbs": [ + "About", + "Getting Started", + "00 - Getting Help" + ] + }, + { + "objectID": "course/00_Homeworks/index.html#discussions-forum", + "href": "course/00_Homeworks/index.html#discussions-forum", "title": "Getting Help", "section": "Discussions Forum", - "text": "Discussions Forum\n\n\n\n\n\n\n\n\n.\n\n\nOn the course’s GitHub repository, we have opened up a Discussions page that we plan to use as a community forum. We hope that it will serve multiple functions, from providing a better sense of community for the online participants, to facilitating asking and receiving help on something that is not clear, provide feedback about something that it not working out, as well as a place to celebrate and show off your coding wins." + "text": "Discussions Forum\nOn the course’s GitHub repository, we have opened up a Discussions page that we plan to use as a community forum. We hope that it will serve multiple functions, from providing a better sense of community for the online participants, to facilitating asking and receiving help on something that is not clear, provide feedback about something that it not working out, as well as a place to celebrate and show off your coding wins.\n\nTo keep the Discussions forum semi-organized, we have set up several categories, please select the appropiate category when opening a new discussion!\n\n\n\nCode of Conduct\n\nWe ask that all course participants read and adhere to the spirit of our Code of Conduct. We are all human, at different points in our learning journeys, so what may be obvious to you at your point of your learning journey may have necessarily be obvious to someone just getting started. This course is our giving back to those in the community, but is on a voluntary basis in addition to our regular workload. While we try to reply quickly, sometimes our cell sorters fully melt down sending everything into chaos. We will reply when we can.\n\n\n\n\nAnnouncements\n\nWhen we send out an email to all participants, we will also repost it as an announcement. This ensures that even if you are not on our mailing list, you will still be able to have access to important information and course updates.\n\n\n\n\n\n\n\nGeneral\n\nThis section category can be used for any discussions that you think are worth having, that don’t fall under any of the other category. Good examples are continuing a discussion that was held during one of the livestreams; wanting to discuss and dive further into a given week’s topic; or bringing in additional resources that you found useful to understandingn something that didn’t click initially. This space is for the community to shape as they see best.\n\n\n\n\n\n\n\nIdeas\n\nHave an idea for a new topic or a way to improve the course? We would love to hear them. Provide as many details, and ideally, an example, and if it is doable, we will try to implement them.\n\n\n\n\n\n\n\nIntroductions\n\nOnline courses can be odd in terms of replicating in-person dynamics. Fortunately, we have gathered the largest cohort of “cytometrist with no-to-little flow experience trying to learn R at the same time” that the world has ever seen, so best to take advantage of this while we can. Treat this section as if we had just met at a conference, tell us about yourself, what brings you here, and what you want to hopefully be able to do after the course ends.", + "crumbs": [ + "About", + "Getting Started", + "00 - Getting Help" + ] }, { - "objectID": "course/00_Homeworks/slides.html#polls", - "href": "course/00_Homeworks/slides.html#polls", + "objectID": "course/00_Homeworks/index.html#polls", + "href": "course/00_Homeworks/index.html#polls", "title": "Getting Help", "section": "Polls", - "text": "Polls\n\n\n\n\n\n\n\n\n\n.\n\n\nOccasionally, we will need to gather community feedback on what is working and what is not working. We will sporadically post Polls for this purpose." + "text": "Polls\n\nOccasionally, we will need to gather community feedback on what is working and what is not working. We will sporadically post Polls for this purpose.\n\n\n\n\n\n\nQ&A\n\nThe Questions and Answers (Q&A) section is where you go if something is not clear, not working, and you are trying to troubleshoot your way through it. First thing before posting, search! to see if someone has already asked the question. If you don’t find anything, go ahead and open a new discussion.\nSince we are not at your computer, and don’t have your dataset, when troubleshooting it is best to include a minimal reproducible example of the issuen you are encountering, slimming down the number of files needed to be transferred, and generalizing down the code so that other course participants and instructors can follow along. If this is not doable, or if the problem requires added context (and larger files), create a new repository on your GitHub, make it public, and share the links to it in your post. The goal would be to download the folder and be able to replicate the issue that you are encountering.\n\n\n\n\n\n\n\n\n\n\nShow and Tell\n\nWhere Q&A section is for getting help on code that is frustratingly not working, Show and Tell is where to go and celebrate when you finally get things to work. Share your wins, show us the extra pretty graphs, bizarre autofluorescence signatures, or odd outputs that just make you laugh.", + "crumbs": [ + "About", + "Getting Started", + "00 - Getting Help" + ] }, { - "objectID": "course/00_Homeworks/slides.html#issues", - "href": "course/00_Homeworks/slides.html#issues", + "objectID": "course/00_Homeworks/index.html#issues", + "href": "course/00_Homeworks/index.html#issues", "title": "Getting Help", "section": "Issues", - "text": "Issues" + "text": "Issues\nMost of the time, if you are having trouble getting you code to run, you should first stop after some initial troubleshooting should be to open a new Discussion under the Q&A category. Here you will be able to get both community and instructor help and suggestions to hopefully resolve whatever is going on.\n\nThe Issues page is primarily meant for course-specific problems that require the course instructor intervention to fix. For example, we release a new week of material, and while it runs fine for both Windows and Linux, the code fails to run for all MacOS users. While you may be able to find workarounds on your own, it’s ultimately our responsibility to help provide a solution so that everyone can move forward. This is the situation where opening an Issue is appropiate.\n\n\n\nSimilarly, if our code contains a wrong argument, is returning a deprecation warning, etc. open an issue to let us know. While we may not be able to fix something that is not directly related to our code, we can redirect it to the package maintainers so that they can fix the issue.\nAnd likewise, if you find multiple typos in the documentation, you can open an issue and propose carrying out a pull-request to fix them.", + "crumbs": [ + "About", + "Getting Started", + "00 - Getting Help" + ] }, { - "objectID": "course/00_Homeworks/slides.html#submitting-take-home-problems", - "href": "course/00_Homeworks/slides.html#submitting-take-home-problems", + "objectID": "course/00_Homeworks/index.html#submitting-take-home-problems", + "href": "course/00_Homeworks/index.html#submitting-take-home-problems", "title": "Getting Help", "section": "Submitting Take-Home Problems", - "text": "Submitting Take-Home Problems\n\n\n\n\n\n\n\n\n.\n\n\nEach week, during the course, we introduce and cover the main concepts for the particular concept. Our goal is to provide you with the necessary code and enough code to be able to get the jist. However, to become comfortable and be able to apply what you have learned, you will need to explore beyond our examples, try it with your own datasets, encounter things that don’t work, and troubleshoot your way through them. It’s this cycle of venturing into the unknown that develops strong coding skills that are needed to overcome any barrier you encounter. The goal of the take-home questions is to provide some less curated problems that will take a little longer to answer to help get you started on your own exploration of the topic." + "text": "Submitting Take-Home Problems\nEach week, during the course, we introduce and cover the main concepts for the particular concept. Our goal is to provide you with the necessary code and enough code to be able to get the jist. However, to become comfortable and be able to apply what you have learned, you will need to explore beyond our examples, try it with your own datasets, encounter things that don’t work, and troubleshoot your way through them. It’s this cycle of venturing into the unknown that develops strong coding skills that are needed to overcome any barrier you encounter. The goal of the take-home questions is to provide some less curated problems that will take a little longer to answer to help get you started on your own exploration of the topic.\nAs previously mentioned, these take-home problems are completely optional. If you are in the middle of solving them and want to seek feedback from then community and course instructors, open a Discussion under the general category is the way to go.\nHowever, if you have completed them, and want course instructor feedback, you can submit them to us in the form of a pull-request to the CytometryInR repo’s homework branch. We will take a look, offer constructive suggestions, and when ready merge the solution. This will also result in GitHub listing you as a contributor to the course.\nWe will outline the basic steps of how to set up and open a pull-request, to help simplify the process.\n\nSync your Fork\nFirst off, make sure to Sync your fork of the Cytometry in R project. That makes sure that all the commits present are up-to-date and simplifies the process of having the pull-request being merged.\n\n\n\n\n\n\n\n\n\n\n\nPull to Local\nHaving Synced your branch on GitHub, return to your computer, open the CytometryInR repository and pull in the changes locally.\n\n\n\n\nCreate own Folder under Homeworks\nUnder the course folder, you will find folders for each week. Within these folders find the homework folder. This will appear empty except for a README file with ionstructions. It is within this folder you will need to create your own folder.\nTo ensure there are no conflicts on the pull-request merge, please use your GitHub username as the folder name.\n\n\n\nOnce you have your folder inside homework, go ahead and copy anything you are turning in from their respective working project folders. Remember, the goal is minimal reproducible example is the goal. Rendered Quarto Documents are preferred, but we will also accept scripts and small data files and images. a README.MD file with anything you want me to know,\n\n\n\n\n\n\n\n\nSign off Commit\nNow that everything is present, Sign Off and Commit the change.\n\n\n\n\n\nPush Branch to GitHub.\nProceed to push the branch to GitHub.\n\n\n\n\n\nRe-sync if necessary\nIf additional changes have occured to the parent CytometryInR repository, go ahead and update your branch. As long as your edits occurred within your folder inside homework folders, they should still be able to merge.\n\n\n\n\n\n\n\n\nOpen a pull-request\nTo start a pull request, click to see how your commit is ahead by\n\n\n\nNext, switch from the parent CytometryInR main branch (used for the website and course) to the homework branch for that respective week (used for the take-home problems).\n\n\n\nOnce this is done, select Pull request\n\n\n\nMake sure to triple check it’s bound for the homeworks branch. If you see that it is not capable of merging, verify that your commit only contains files within your respective homework username folder. Fill in the required fields of the pull request.\n\n\n\nAnd when ready, create the pull request.\n\n\n\n\nWait for Feedback\nOn our end, once you have created a pull request, we will review your work, offer constructive suggestions, etc. If I ask for revisions, all you would need to do is update your files, commit again on your side of the local forked repository.\n\n\n\n\n\nFinal Review and Merge\nIf all is good, we will merge the pull request and your solution to the take-home problems will now be available on the homework branch.\n\n\n\n\n\nAfter course\nAfter the course completes, we will merge homework branch with the main branch, making the community solutions to the take-home problems additional coding examples that can be used by others following along after the course concludes.", + "crumbs": [ + "About", + "Getting Started", + "00 - Getting Help" + ] }, { - "objectID": "course/00_Positron/slides.html#console", - "href": "course/00_Positron/slides.html#console", + "objectID": "course/00_Positron/index.html", + "href": "course/00_Positron/index.html", + "title": "Using Positron", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] + }, + { + "objectID": "course/00_Positron/index.html#console", + "href": "course/00_Positron/index.html#console", "title": "Using Positron", "section": "Console", - "text": "Console\n\n\n\n\n\n\n\n\n.\n\n\nAt the bottom of the sceen, you will first see the Console Tab. This is the tab where your lines of code when executed (run) will appear, as well as any messages, warnings or errors that get returned. On the right side of the console, you can find several buttons, among them restart R and delete session (for when you need a fresh start), and clear console (which keeps all previously run outputs and objects, but clears away the displayed text within the console)." + "text": "Console\nAt the bottom of the sceen, you will first see the Console Tab. This is the tab where your lines of code when executed (run) will appear, as well as any messages, warnings or errors that get returned. On the right side of the console, you can find several buttons, among them restart R and delete session (for when you need a fresh start), and clear console (which keeps all previously run outputs and objects, but clears away the displayed text within the console).", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/00_Positron/slides.html#terminal", - "href": "course/00_Positron/slides.html#terminal", + "objectID": "course/00_Positron/index.html#terminal", + "href": "course/00_Positron/index.html#terminal", "title": "Using Positron", "section": "Terminal", - "text": "Terminal\n\n\n\n\n\n\n\n\n.\n\n\nRight next to the Console tab is your Terminal tab. While the console tab is primarily used to run R code within Positron, the terminal is the interface where code containing system commands directed at at your computer is entered. We will use this less frequently, primarily in two context: 1) rendering Quarto documents, and 2) commiting changes to version control. Among the buttons on the right-side of the terminal to make note of are the + button to add a new terminal, and the trash/garbage can button to kill (stop) the terminal." + "text": "Terminal\nRight next to the Console tab is your Terminal tab. While the console tab is primarily used to run R code within Positron, the terminal is the interface where code containing system commands directed at at your computer is entered. We will use this less frequently, primarily in two context: 1) rendering Quarto documents, and 2) commiting changes to version control. Among the buttons on the right-side of the terminal to make note of are the + button to add a new terminal, and the trash/garbage can button to kill (stop) the terminal.\n\n\n\nThe other tabs (Problems, Output, Ports, Debug Console) are used less frequently. I usually will Problems and Debug when something goes wrong with the code, as various warning and error messages will end up being displayed there.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/00_Positron/slides.html#help", - "href": "course/00_Positron/slides.html#help", + "objectID": "course/00_Positron/index.html#help", + "href": "course/00_Positron/index.html#help", "title": "Using Positron", "section": "Help", - "text": "Help\n\n\n\n\n\n\n\n\n.\n\n\nWhen trying to evaluate how a particular function is working in R, you can hover over it and positron will open up the documentation for that particular function if available, alternatively, you can enter ?theParticularFunctionsName in the console and hit enter to similarly view what is occuring." + "text": "Help\nWhen trying to evaluate how a particular function is working in R, you can hover over it and positron will open up the documentation for that particular function if available, alternatively, you can enter ?theParticularFunctionsName in the console and hit enter to similarly view what is occuring.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/00_Positron/slides.html#variables", - "href": "course/00_Positron/slides.html#variables", + "objectID": "course/00_Positron/index.html#variables", + "href": "course/00_Positron/index.html#variables", "title": "Using Positron", "section": "Variables", - "text": "Variables\n\n\n\n\n\n\n\n\n.\n\n\nOn the upper-portion of the Secondary Side Bar, we can find the Session window, containing the Variables tab. As you run (execute) lines of code, and different variables, objects and functions are created, these become visible under the variables tab on the upper right." + "text": "Variables\nOn the upper-portion of the Secondary Side Bar, we can find the Session window, containing the Variables tab. As you run (execute) lines of code, and different variables, objects and functions are created, these become visible under the variables tab on the upper right.\n\n\n\nFor some types of objects (generally data.frames and other matrix-like objects), you can click on their listing under variables to expand to see additional details about the object (column names, etc.) as well as view a larger version which will appear within the Editor window.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/00_Positron/slides.html#plots", - "href": "course/00_Positron/slides.html#plots", + "objectID": "course/00_Positron/index.html#plots", + "href": "course/00_Positron/index.html#plots", "title": "Using Positron", "section": "Plots", - "text": "Plots\n\n\n\n\n\n\n\n\n.\n\n\nSimilarly, any generated Plots or Documents will appear within the Secondary Side Bar, either under Plots (bottom) or Viewer (top) tabs." + "text": "Plots\nSimilarly, any generated Plots or Documents will appear within the Secondary Side Bar, either under Plots (bottom) or Viewer (top) tabs.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/00_Positron/slides.html#view", - "href": "course/00_Positron/slides.html#view", + "objectID": "course/00_Positron/index.html#view", + "href": "course/00_Positron/index.html#view", "title": "Using Positron", "section": "View", - "text": "View\n\n\n\n\n\n\n\n\n.\n\n\nOn the upper bar multiple tabs can be found, which we will explore in due time. Most useful to point out is the View tab. If you accidentally close your console, session or plots window, and are trying to get them to reapper, you would need to reselect them from this tab." + "text": "View\nOn the upper bar multiple tabs can be found, which we will explore in due time. Most useful to point out is the View tab. If you accidentally close your console, session or plots window, and are trying to get them to reapper, you would need to reselect them from this tab.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/00_Positron/slides.html#pages", - "href": "course/00_Positron/slides.html#pages", + "objectID": "course/00_Positron/index.html#pages", + "href": "course/00_Positron/index.html#pages", "title": "Using Positron", "section": "Pages", - "text": "Pages\n\n\n\n\n\n\n\n\n.\n\n\nThe pages tab and the left-side bar show you everything that is currently within your project folder, including all the folders, and files. Once version control with Git is initiated, new files are relected showing up as green text and a dot, while modified tracked files are reflected by light brown text and a dot." + "text": "Pages\nThe pages tab and the left-side bar show you everything that is currently within your project folder, including all the folders, and files. Once version control with Git is initiated, new files are relected showing up as green text and a dot, while modified tracked files are reflected by light brown text and a dot.\n\n\n\nThe dropdown arrows can be used to open and close specific folders to allow for better organization. There is also a scrollbar on the right-side of the side-bar to scroll through the entire folders contents.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/00_Positron/slides.html#search", - "href": "course/00_Positron/slides.html#search", + "objectID": "course/00_Positron/index.html#search", + "href": "course/00_Positron/index.html#search", "title": "Using Positron", "section": "Search", - "text": "Search\n\n\n\n\n\n\n\n\n.\n\n\nThe search tab on the left side bar is something that I use routinely." + "text": "Search\nThe search tab on the left side bar is something that I use routinely.\n\n\n\nIt can help locate code that you had been working on, but have since forgotten where it is at. Here is an example of finding the files where I had used a function that needed modifying within a local project folder’s files.\n\n\n\nSimilarly, if you need to replace a particular character string with another, the replace with field below can help simplify the task without having to track down and change 20 lines across 5 files.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/00_Positron/slides.html#extensions", - "href": "course/00_Positron/slides.html#extensions", + "objectID": "course/00_Positron/index.html#extensions", + "href": "course/00_Positron/index.html#extensions", "title": "Using Positron", "section": "Extensions", - "text": "Extensions\n\n\n\n\n\n\n\n\n.\n\n\nOn the far-left side we can find the Activity bar, which contains several tabs. Which tab you have selected will then dictate the contents of your left side-bar.\nOccupying the left side bar are several tabs. One of these is Extensions, which shows “Plugins” (or the VScode equivalent) that extend the functionality of Positron further. The ones you have installed may vary, but the main ones in context of this course are Air (provides color and highlights syntax for R code to make interpretation easier) as well as Quarto (for rendering the various document types)." + "text": "Extensions\nOn the far-left side we can find the Activity bar, which contains several tabs. Which tab you have selected will then dictate the contents of your left side-bar.\nOccupying the left side bar are several tabs. One of these is Extensions, which shows “Plugins” (or the VScode equivalent) that extend the functionality of Positron further. The ones you have installed may vary, but the main ones in context of this course are Air (provides color and highlights syntax for R code to make interpretation easier) as well as Quarto (for rendering the various document types).", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/00_Positron/slides.html#git", - "href": "course/00_Positron/slides.html#git", + "objectID": "course/00_Positron/index.html#git", + "href": "course/00_Positron/index.html#git", "title": "Using Positron", "section": "Git", - "text": "Git\n\n\n\n\n\n\n\n\n.\n\n\nThe Git tab on the left side bar is where once version control is initiated for the project folder, we can see changes that have occurred to the individual files since the last commit. These changes can be added to a new commit by clicking on the + sign. This will be covered more extensively in the next section" + "text": "Git\nThe Git tab on the left side bar is where once version control is initiated for the project folder, we can see changes that have occurred to the individual files since the last commit. These changes can be added to a new commit by clicking on the + sign. This will be covered more extensively in the next section\n\n\n\nSimilarly, if you want to discard a change that has occured, the circular arrow will revert to the last commited version. Selecting and pressing the delete button will similarly work.\n\n\n\nSelecting the … options will highlight all the various git functions, some of which we will cover more extensively in the next section and throughout the course.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/00_Quarto/slides.html#renderpreview", - "href": "course/00_Quarto/slides.html#renderpreview", + "objectID": "course/00_Quarto/index.html", + "href": "course/00_Quarto/index.html", + "title": "Introduction to Quarto", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "crumbs": [ + "About", + "Getting Started", + "00 - Quarto" + ] + }, + { + "objectID": "course/00_Quarto/index.html#renderpreview", + "href": "course/00_Quarto/index.html#renderpreview", "title": "Introduction to Quarto", "section": "Render/Preview", - "text": "Render/Preview\n\n\n\n\n\n\n\n\n.\n\n\nThe preview button, at the upper-left end of the Editor, is used to render/knit a quarto document. This triggers the process by which code-chunks are run, and then the outputs are cobbled together into the file format type designated by the YAML header." + "text": "Render/Preview\nThe preview button, at the upper-left end of the Editor, is used to render/knit a quarto document. This triggers the process by which code-chunks are run, and then the outputs are cobbled together into the file format type designated by the YAML header.\n\n\n\n\nHTML\nIn this case, the YAML header’s format argument is set to html. After clicking preview, we can see the various rendering steps appear in the console below. Since no errors occured, the html document was formed succesfully and appears as a file in the left side-bar. Additional, a preview of the document appears in the View tab of the right side-bar, allowing for quick visual inspection.\n\n\n\nAlternatively, we can render a document via the terminal, by entering “quarto render”, followed by the name of the document.\n\n\n\nThis results similar process as what we saw with the preview button\n\n\n\nWe can also open the .html document via our File Explorer, which will open it within our web browser.\n\n\n\nQuarto documents can be rendered (previewed) in other formats besides html. These include pdf, Word documents (docx), and slides (revealjs). This is set by the format argument within the YAML header.\n\n\nPDF\nBy switching the format argument from html to pdf, we can render the document as a pdf\n\n\n\nWe can see the pdf is now listed in the list of files, with a preview shown on the right side-bar.\n\n\n\n\n\nDocx\nWe can also generate Word documents (.docx) as well.\n\n\n\nIn this case, we can see that a Word document file was created, but nothing appears in the View tab. This is because the format is not yet supported for the View tab. We can however open and view the Word document via our File explorer.\n\n\n\nWhich shows a Word Document style output.", + "crumbs": [ + "About", + "Getting Started", + "00 - Quarto" + ] }, { - "objectID": "course/00_Quarto/slides.html#yaml", - "href": "course/00_Quarto/slides.html#yaml", + "objectID": "course/00_Quarto/index.html#yaml", + "href": "course/00_Quarto/index.html#yaml", "title": "Introduction to Quarto", "section": "YAML", - "text": "YAML\n\n\n\n\n\n\n\n\n.\n\n\nWe can additionally provide additional custom inputs to the YAML header. A couple examples include providing the document author and date." + "text": "YAML\nWe can additionally provide additional custom inputs to the YAML header. A couple examples include providing the document author and date.\n\n\n\nWhich we can see are updated after we preview/render.", + "crumbs": [ + "About", + "Getting Started", + "00 - Quarto" + ] }, { - "objectID": "course/00_Quarto/slides.html#table-of-contents", - "href": "course/00_Quarto/slides.html#table-of-contents", + "objectID": "course/00_Quarto/index.html#table-of-contents", + "href": "course/00_Quarto/index.html#table-of-contents", "title": "Introduction to Quarto", "section": "Table of Contents", - "text": "Table of Contents\n\n\n\n\n\n\n\n\n.\n\n\nIn the previous section, we saw that we could provide headings and subheadings to our .qmd file by placing a # at the start of a line in the text portion of the document. A subheading was designated by a ##, with additional hierarchy being designated by appending an additional #." + "text": "Table of Contents\nIn the previous section, we saw that we could provide headings and subheadings to our .qmd file by placing a # at the start of a line in the text portion of the document. A subheading was designated by a ##, with additional hierarchy being designated by appending an additional #.\n\n\n\nWe can use the heading information to generate a table of contents for our document. To do this, we add a toc argument to the yaml header, and set it to TRUE. After rendering, it appears on the upper-right side of the document.\n\n\n\nNotice, that the subheaders do not appear currently within the TOC.\n\n\n\nWe can fix this by setting a toc-expand argument in the YAML to true.", + "crumbs": [ + "About", + "Getting Started", + "00 - Quarto" + ] }, { - "objectID": "course/00_Quarto/slides.html#code-chunk-arguments", - "href": "course/00_Quarto/slides.html#code-chunk-arguments", + "objectID": "course/00_Quarto/index.html#code-chunk-arguments", + "href": "course/00_Quarto/index.html#code-chunk-arguments", "title": "Introduction to Quarto", "section": "Code Chunk Arguments", - "text": "Code Chunk Arguments\n\n\n\n\n\n\n\n\n.\n\n\nAs we briefly touched on in the last section, code-chunks can be modified by including arguments, which affect whether a particular code chunk gets evaluated. In that example, we included a “#| eval: FALSE” to the install commands since we did not want them to be re-run subsequently. We will take a closer look at the other arguments in this section.\n\n\n\n\n\nEval\n\n\n\n\n\n\n\n\n.\n\n\nThe code-chunk argument, “Eval”, is used to determine when a code-chunk get’s evaluated. When set to true (or by default if no eval argument is included), the code-chunks contents will be run/executed, and the output will appear. We can see this in the html output, as below the code block, we get back the address of my working directory." + "text": "Code Chunk Arguments\nAs we briefly touched on in the last section, code-chunks can be modified by including arguments, which affect whether a particular code chunk gets evaluated. In that example, we included a “#| eval: FALSE” to the install commands since we did not want them to be re-run subsequently. We will take a closer look at the other arguments in this section.\n\nEval\nThe code-chunk argument, “Eval”, is used to determine when a code-chunk get’s evaluated. When set to true (or by default if no eval argument is included), the code-chunks contents will be run/executed, and the output will appear. We can see this in the html output, as below the code block, we get back the address of my working directory.\n\n\n\nWhen we switch the Eval argument to FALSE, and then render the document, we can see that the code block remains, but we do not get any output for the code contained within.\nIn every-day practice, we will “use eval: FALSE” arguments when we want to keep the code for later use, but want to manually run the code contained within ourselves.\n\n\n\n\n\nEcho\nThe code-block argument “echo” dictates whether the code within the code-block is displayed within the document. So in the case when “echo: true”, we get both the code displayed, as well as the output that gets returned by the code.\n\n\n\nBy contrast, when “echo: FALSE”, we do not have the code displayed, but do get the output of that code being run.\nIn daily-practice, “echo: FALSE” gets often used when generating plots that we want to include in the report, without the code that generated them being displayed.\n\n\n\n\n\nInclude\nThe next code-chunk argument is include. Unlike echo, which focuses on whether the code is displayed, but still returns the output, include dictates behavior of both the code-block and it’s output. Unlike eval however, it will still run the code, which allows it to be available for the next code-chunk that might need it. When we set “include: false”, no trace of that code-chunk is present in the document. This is useful when making reports where we do not want to include the code used to generate a particular figure.\n\n\n\nBy contrast, when we set “include: true”, the code block and it’s output is once again included within the rendered document.\n\n\n\n\n\nCode-Fold\nOne of my favorites is “code-fold”. When we set it as “code-fold: show”, it displays the code, but provides a drop-down arrow that can be closed to compress the code.\n\n\n\nIn contrast, if we want to make the code-available for those that are interested, but not directly visible, we can set as “code-fold: true”\n\n\n\n\n\nWarnings\nWithin R, when code is executed, in addition to returning the output, R is capable of returning warnings (when something is not as expected, but not sufficient to elicit an error with a complete stop) or a message (text output that gets displayed, often telling about progress). While these are useful when running code yourself, it can be annoying when generating a report and the 2nd page is a bunch of warning text being displayed.\nFor example, when the R package ggcyto is loaded via the library call, it will automatically load several other packages, which typically results in these messages being outputted:\n\n\n\nWe can therefore set that code-chunk’s warning/message arguments to FALSE, therefore silencing the message outputs that would otherwise clutter up our report.", + "crumbs": [ + "About", + "Getting Started", + "00 - Quarto" + ] }, { - "objectID": "course/00_Quarto/slides.html#text-styles", - "href": "course/00_Quarto/slides.html#text-styles", + "objectID": "course/00_Quarto/index.html#text-styles", + "href": "course/00_Quarto/index.html#text-styles", "title": "Introduction to Quarto", "section": "Text Styles", - "text": "Text Styles\n\n\n\n\n\n\n\n\n.\n\n\nQuarto primarily uses Markdown for text styling. Consequently, markdown arguments can be used within the text to change how various text appears." - }, - { - "objectID": "course/00_Quarto/slides.html#hyperlinks", - "href": "course/00_Quarto/slides.html#hyperlinks", - "title": "Introduction to Quarto", - "section": "Hyperlinks", - "text": "Hyperlinks\n\n\n\n\n\n\n\n\n.\n\n\nYou can link to a website by surrounding word of interest in [] and placing the url within () adjacent to it." - }, - { - "objectID": "course/00_Quarto/slides.html#images", - "href": "course/00_Quarto/slides.html#images", - "title": "Introduction to Quarto", - "section": "Images", - "text": "Images\n\n\n\n\n\n\n\n\n.\n\n\nYou can place images by adding the following, as long as the file.path to the image is correctly formatted. In my case, this is why I include images folders within my folders to simplify the copy and paste." - }, - { - "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-r", - "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-r", - "title": "Installing Software on Windows", - "section": "Installing R", - "text": "Installing R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." - }, - { - "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-rtools", - "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-rtools", - "title": "Installing Software on Windows", - "section": "Installing RTools", - "text": "Installing RTools\n\n\n\n\n\n\n\n\n.\n\n\nWe will now work on installing Rtools. This software is needed when building R packages from source, which we will need throughout the course for R packages hosted on GitHub.\nTo get started, we will return to the R installation page we visited previously and instead click on the Rtools option." - }, - { - "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-git", - "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-git", - "title": "Installing Software on Windows", - "section": "Installing Git", - "text": "Installing Git\n\n\n\n\n\n\n\n\n.\n\n\nGit is a version control software widely used among software developers and bioinformaticians. We will use it extensively throughout the course, both locally on our computers (to keep track of changes to our files), as well as in combination with GitHub(to maintain online backups of our files).\nWe will first navigate to the website and select the download from Windows option." - }, - { - "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-positron", - "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-positron", - "title": "Installing Software on Windows", - "section": "Installing Positron", - "text": "Installing Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." - }, - { - "objectID": "course/00_WorkstationSetup/Linux.html", - "href": "course/00_WorkstationSetup/Linux.html", - "title": "Installing Software on Linux", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nThis is the software installation walkthrough for those whose computers are running Linux. First off, welcome! Based on our pre-course interest form, there was a suprising number of you daily-drivers out there! However, a CytometryInR interest form is unlikely to be representative of the general population, so please stash all Year of the Linux desktop banners until further notice." - }, - { - "objectID": "course/00_WorkstationSetup/Linux.html#debian-based-distros", - "href": "course/00_WorkstationSetup/Linux.html#debian-based-distros", - "title": "Installing Software on Linux", - "section": "Debian-based Distros", - "text": "Debian-based Distros\n\nInstalling R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nOnce this is done, select your Linux Distro (or one that shares your package managers format).\n\n\n\nOn the landing page, you will find a bunch of relevant installation information, which is worthwhile giving a read-through when you have time.\n\n\n\nThe process to successfully install R can be summarized as follows:\nUpdate apt/sources.list to include the CRAN repository (allowing access to R packages)\n\n\n\nSince we are running on Debian stable (Trixie), we would add the following line to sources.list\n\n\n\nSo in practice, open sources.list:\n\n\n\nPaste the line, and “Ctrl + O”; “Enter”; “Ctrl + X” to save the changes.\n\n\n\nNext, we will need to retrieve the keyID used to sign. This can be fetched from Ubuntu via the terminal.\n\n\n\n\n\n\nThen we need to export and write it\n\n\n\nWhich if successful, will display the public key.\n\n\n\nWith the above set up, we can proceed via our apt package manager to install both r-base and r-base-dev (which contains the equivalent of Rtools for Windows, or Xcode Command Line Tools for macOS).\n\n\n\n\n\n\n\n\n\nAnd if all goes well, R should now be installed." - }, - { - "objectID": "course/00_WorkstationSetup/Linux.html#installing-git", - "href": "course/00_WorkstationSetup/Linux.html#installing-git", - "title": "Installing Software on Linux", - "section": "Installing Git", - "text": "Installing Git\n\n# sudo apt install git" - }, - { - "objectID": "course/00_WorkstationSetup/Linux.html#installing-positron", - "href": "course/00_WorkstationSetup/Linux.html#installing-positron", - "title": "Installing Software on Linux", - "section": "Installing Positron", - "text": "Installing Positron\nFinally, you will need to install Positron. It will be the integrated development environment (IDE) we will be using for the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\n\n\n\nWith the license accepted, you will be able to select distribution and architecture.\n\n\n\nOnce the Download completes, proceed to install the .deb package as you would nornally. GUI example via Discover below.\n\n\n\nDepending on your configurations, you may be asked to exert your sudo powers.\n\n\n\nOnce this completes, you should now be able to launch the software for the first time." - }, - { - "objectID": "course/00_WorkstationSetup/LinuxSlides.html#debian-based-distros", - "href": "course/00_WorkstationSetup/LinuxSlides.html#debian-based-distros", - "title": "Installing Software on Linux", - "section": "Debian-based Distros", - "text": "Debian-based Distros\nInstalling R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." + "text": "Text Styles\nQuarto primarily uses Markdown for text styling. Consequently, markdown arguments can be used within the text to change how various text appears.\n\n\n\nFor a regular text, This single asterisk on each side of a word will italicize.\n\n\n\nWhen the number of asterisk is doubled, This word is bolded.\n\n\n\nWhen three asterisk are used, both are applied.\n\n\n\nFor an underscore, the word of interest is surrounded by square brackets “[]”, with “{.underline}” adjacent.", + "crumbs": [ + "About", + "Getting Started", + "00 - Quarto" + ] }, { - "objectID": "course/00_WorkstationSetup/LinuxSlides.html#installing-git", - "href": "course/00_WorkstationSetup/LinuxSlides.html#installing-git", - "title": "Installing Software on Linux", - "section": "Installing Git", - "text": "Installing Git\n\n# sudo apt install git" + "objectID": "course/00_Quarto/index.html#hyperlinks", + "href": "course/00_Quarto/index.html#hyperlinks", + "title": "Introduction to Quarto", + "section": "Hyperlinks", + "text": "Hyperlinks\nYou can link to a website by surrounding word of interest in [] and placing the url within () adjacent to it.", + "crumbs": [ + "About", + "Getting Started", + "00 - Quarto" + ] }, { - "objectID": "course/00_WorkstationSetup/LinuxSlides.html#installing-positron", - "href": "course/00_WorkstationSetup/LinuxSlides.html#installing-positron", - "title": "Installing Software on Linux", - "section": "Installing Positron", - "text": "Installing Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will need to install Positron. It will be the integrated development environment (IDE) we will be using for the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." + "objectID": "course/00_Quarto/index.html#images", + "href": "course/00_Quarto/index.html#images", + "title": "Introduction to Quarto", + "section": "Images", + "text": "Images\nYou can place images by adding the following, as long as the file.path to the image is correctly formatted. In my case, this is why I include images folders within my folders to simplify the copy and paste.", + "crumbs": [ + "About", + "Getting Started", + "00 - Quarto" + ] }, { - "objectID": "course/00_WorkstationSetup/MacOSSlides.html#installing-r", - "href": "course/00_WorkstationSetup/MacOSSlides.html#installing-r", + "objectID": "course/00_WorkstationSetup/MacOS.html", + "href": "course/00_WorkstationSetup/MacOS.html", + "title": "Installing Software on MacOS", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nThis is the software installation walkthrough for those whose computers are running MacOS. Based on our pre-course interest form, you make up a solid proportion of the course participants." + }, + { + "objectID": "course/00_WorkstationSetup/MacOS.html#installing-r", + "href": "course/00_WorkstationSetup/MacOS.html#installing-r", "title": "Installing Software on MacOS", "section": "Installing R", - "text": "Installing R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." + "text": "Installing R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nYou will then select your Operating System, in this case, macOS\n\n\n\nNext, you will need to select the appropiate download based on your computers architecture. On newer Macs (containing M1+ chips) this would the arm64 option on the center left of the screen. For the older Intel (pre-2020) Macs, you would select the x86_64 option. If you are unsure, check your About This Mac tab\n\n\n\nAfter the download has completed, launch the installer\n\n\n\nProceed through the Read Me\n\n\n\nYou will then be prompted to acccept the software license (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\n\n\n\nNext, you will need to navigate through several pages, keeping the defaults.\n\n\n\nAnd with any luck, you should see that the installation was successful." }, { - "objectID": "course/00_WorkstationSetup/MacOSSlides.html#xcode-command-line-tools", - "href": "course/00_WorkstationSetup/MacOSSlides.html#xcode-command-line-tools", + "objectID": "course/00_WorkstationSetup/MacOS.html#xcode-command-line-tools", + "href": "course/00_WorkstationSetup/MacOS.html#xcode-command-line-tools", "title": "Installing Software on MacOS", "section": "Xcode Command Line Tools", - "text": "Xcode Command Line Tools\n\n\n\n\n\n\n\n\n.\n\n\nDepending on your version of macOS, you may or may not already have Git installed on your computer. The reason is that it comes bundled within the Xcode Command Line Tools.\nIf this is not your first foray into coding, you may have previously seen an installation pop-up along the lines of “XYZ requires command line developer tools. Would you like to install the tools now?” when installing an IDE (like Positron, Rstudio or Visual Studio Code)." + "text": "Xcode Command Line Tools\nDepending on your version of macOS, you may or may not already have Git installed on your computer. The reason is that it comes bundled within the Xcode Command Line Tools.\nIf this is not your first foray into coding, you may have previously seen an installation pop-up along the lines of “XYZ requires command line developer tools. Would you like to install the tools now?” when installing an IDE (like Positron, Rstudio or Visual Studio Code).\n\n\n\nSince these command line developer tools contain both Git, and also the equivalent of Rtools for Windows, we will need to install them for this course. To get started, first open your terminal.\n\n\n\nNext run the following code:\n\nxcode-select --install\n\n\n\n\nYou will then have the pop-up asking whether you want to install the command line tools (which contain Git). Select Install.\n\n\n\nYou will then be asked to accept the license\n\n\n\nYour installation will then proceed\n\n\n\nAnd if all goes well, the software will finish installing.\n\n\n\nAfter you complete Positron installation (next section), if you check the version control tab on the action bar on the far left side of the screen, you should see the following if Git was installed correctly.\n\n\n\nAlternatively, if you see this, you will need to reattempt the installation." }, { - "objectID": "course/00_WorkstationSetup/MacOSSlides.html#install-positron", - "href": "course/00_WorkstationSetup/MacOSSlides.html#install-positron", + "objectID": "course/00_WorkstationSetup/MacOS.html#install-positron", + "href": "course/00_WorkstationSetup/MacOS.html#install-positron", "title": "Installing Software on MacOS", "section": "Install Positron", - "text": "Install Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." - }, - { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#checking-for-loaded-packages", - "href": "course/01_InstallingRPackages/slides_inperson.html#checking-for-loaded-packages", - "title": "01 - Installing R Packages", - "section": "Checking for Loaded Packages", - "text": "Checking for Loaded Packages\n\n\n\n\n\n\n\n\n.\n\n\nFor the contents (ie. the functions) of an R package to be available for your computer to use, they must first be activated (ie. loaded) into your local environment. We will first learn how to check what R packages are currently active." - }, - { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#installing-from-cran", - "href": "course/01_InstallingRPackages/slides_inperson.html#installing-from-cran", - "title": "01 - Installing R Packages", - "section": "Installing from CRAN", - "text": "Installing from CRAN\n\n\n\n\n\n\n\n\n.\n\n\nWe will start by installing R packages that are part of the CRAN repository. This is the main R package repository, being part of the broader R software project. In the context of this course, R packages that work primarily with general data structure (rows, columns, matrices, etc.) or visualizations will predominantly be found within this repository.\nThese include the tidyverse packages. These packages have collectively made R easier to use by smoothing out some of the rough edges of base R, which is why R has seen major growth within the last decade. We will be installing several of these R packages today." - }, - { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#installing-from-bioconductor", - "href": "course/01_InstallingRPackages/slides_inperson.html#installing-from-bioconductor", - "title": "01 - Installing R Packages", - "section": "Installing from Bioconductor", - "text": "Installing from Bioconductor\n\n\n\n\n\n\n\n\n.\n\n\nBioconductor is the second R package repository we will be working with throughout the course. While it contains far fewer packages than CRAN, it contains packages that are primarily used by the biomedical sciences. Following this link you can find it’s current flow and mass cytometry R packages.\nBioconductor R packages differ from CRAN R packages in a couple of ways. Bioconductor has different standards for acceptance than CRAN. They usually contain interoperable object-types, put more effort into documentation and continous testing to ensure that the R package remains functional across operating systems." - }, - { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#install-from-github", - "href": "course/01_InstallingRPackages/slides_inperson.html#install-from-github", - "title": "01 - Installing R Packages", - "section": "Install from GitHub", - "text": "Install from GitHub\n\n\n\n\n\n\n\n\n.\n\n\nIn addition to the CRAN and Bioconductor repositories, individual R packages can also be found on GitHub hosted on their respective developers GitHub accounts. Newer packages that are still being worked on (often in the process of submission to CRAN or Bioconductor) can be found here, as well as those where the author decided not to bother with a review process, and just made the packages immediately available, warts and all." - }, - { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#troubleshooting-install-errors", - "href": "course/01_InstallingRPackages/slides_inperson.html#troubleshooting-install-errors", - "title": "01 - Installing R Packages", - "section": "Troubleshooting Install Errors", - "text": "Troubleshooting Install Errors\n\n\n\n\n\n\n\n\n.\n\n\nWe have now installed three R packages, dplyr, PeacoQC, and flowSpectrum. In my case, I did not encounter any errors during the installation. However, sometimes a package installation will fail due to an error encountered during the installation process. This can be due to a number of reasons, ranging from a missing dependency, or an update that caused a conflict. While these can occur for CRAN or Bioconductor packages, they are more frequently seen for GitHub packages where the Description/Namespace files may not have been fully updated yet to install all the required dependencies.\nWhen encountering an error, start of by first reading through the message to see if you can parse any useful information about what package failed to install, and if it list the missing dependency packages name. The later was the case in the error message example shown below." - }, - { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#documentation-and-websites", - "href": "course/01_InstallingRPackages/slides_inperson.html#documentation-and-websites", - "title": "01 - Installing R Packages", - "section": "Documentation and Websites", - "text": "Documentation and Websites\n\n\n\n\n\n\n\n\n.\n\n\nWe have already seen a couple ways to access the help documentation contained within an R package via Positron. Beyond internal documentation, R packages often have external websites that contain additional walk-through articles (ie. vignettes) to better document how to use the package.\nFor CRAN-based packages, we can start off by searching for the package name. So, in the case of dplyr" + "text": "Install Positron\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\nWith the license accepted, you will be able to select your operating system and the relevant installer depending on whether you are on an M1+ (ARM) or older Intel (x86) Mac.\n\n\nOnce the Download completes, proceed to install the package as you normally would for any other program." }, { - "objectID": "course/02_FilePaths/slides.html#set-up", - "href": "course/02_FilePaths/slides.html#set-up", - "title": "02 - File Paths", - "section": "Set Up", - "text": "Set Up\n\n\n\n\n\n\n\n\n.\n\n\nBefore we begin, let’s make sure you get the data needed for today transferred to your local computer, and then get the .fcs files copied over from there to your own working project folder. This is the process you will repeat each week throughout the course." + "objectID": "course/00_WorkstationSetup/index.html", + "href": "course/00_WorkstationSetup/index.html", + "title": "Workstation Setup", + "section": "", + "text": "In the previous section, we first set up your GitHub account. Then we modified your GitHub profile and added a README section. Finally, we forked the CytometryInR repository so that you can easily retrieve the new course materials each week.\nIt is now time to install the required software on your computer, which will get your work-station set up with everything needed for this course. Depending on your computers operating system, the installation requirements may differ a bit. In general, you will need to install the following software:\nR website : The programming language we will be using throughout the course.\nPositron : The integrated development environment (IDE) in which we will open, modify and run our code.\nGit : The version control software that will allow us to track changes to our files.\nAdditionally, Windows users will need to install:\nRTools : Used to build R packages from source code.\nYou can find the operating system specific installation walkthroughs below. Once you have completed your specific walkthrough, return to this page and proceed to the next section.\nPlease note: For those using university or company administered computers, please be aware that you may not have the necessary permissions to install these directly, and may need to reach out to your IT department to help get the software installed and running correctly.\nIf you are using your own computer, congratulations, you are your system administrator, and should already have the necessary permissions.", + "crumbs": [ + "About", + "Getting Started", + "00 - Workstation Setup" + ] }, { - "objectID": "course/02_FilePaths/slides.html#working-directory", - "href": "course/02_FilePaths/slides.html#working-directory", - "title": "02 - File Paths", - "section": "Working Directory", - "text": "Working Directory\n\n\n\n\n\n\n\n\n.\n\n\nNow that we are back in our Week2 folder, let’s start by seeing our current location similarly to how our computer perceives it.\nWe will use getwd() function (ie. get working directory) to return the location of the folder we are currently inside of. For example, when getwd() is run within my Week2 project folder, I see the following location" + "objectID": "course/00_WorkstationSetup/index.html#windows", + "href": "course/00_WorkstationSetup/index.html#windows", + "title": "Workstation Setup", + "section": "Windows", + "text": "Windows\n\nInstallation walkthrough for Windows", + "crumbs": [ + "About", + "Getting Started", + "00 - Workstation Setup" + ] }, { - "objectID": "course/02_FilePaths/slides.html#directories", - "href": "course/02_FilePaths/slides.html#directories", - "title": "02 - File Paths", - "section": "Directories", - "text": "Directories\n\n\n\n\n\n\n\n\n.\n\n\nWithin this working directory, we have a variety of project folders and files related to the course. We can see the folders that are present using the list.dirs() function.\n\n\n\n\n\n\n\n\n\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)" + "objectID": "course/00_WorkstationSetup/index.html#macos", + "href": "course/00_WorkstationSetup/index.html#macos", + "title": "Workstation Setup", + "section": "MacOS", + "text": "MacOS\n\nInstallation walkthrough for MacOS", + "crumbs": [ + "About", + "Getting Started", + "00 - Workstation Setup" + ] }, { - "objectID": "course/02_FilePaths/slides.html#variables", - "href": "course/02_FilePaths/slides.html#variables", - "title": "02 - File Paths", - "section": "Variables", - "text": "Variables\n\n\n\n\n\n\n\n\n.\n\n\nBefore exploring file paths, we need to have some basic R code knowledge that we can use to work with them. Within R, we have the ability to assign particular values (be they character strings, numbers or logicals) to objects (ie. variables) that can be used when called upon later.\nFor example:\n\n\n\n\n\n\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\n\n\n\n\n\n\n\n\n\n.\n\n\nIn this case, the variable name is what the assignment arrow (“<-”) is pointing at. In this case, WhatDayDidIWriteThis" + "objectID": "course/00_WorkstationSetup/index.html#linux-debian", + "href": "course/00_WorkstationSetup/index.html#linux-debian", + "title": "Workstation Setup", + "section": "Linux (Debian)", + "text": "Linux (Debian)\n\nInstallation walkthrough for Linux", + "crumbs": [ + "About", + "Getting Started", + "00 - Workstation Setup" + ] }, { - "objectID": "course/02_FilePaths/slides.html#indexing", - "href": "course/02_FilePaths/slides.html#indexing", - "title": "02 - File Paths", - "section": "Indexing", - "text": "Indexing\n\n\n\n\n\n\n\n\n.\n\n\nNot all variables contain single objects.\nFor example, we can modify Fluorophores and add additional entries:\n\n\n\n\n\n\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nstr(Fluorophores)\n\n chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n\n\n\n\n\n\n\n\n\n\n\n.\n\n\nThe c stands for concatenate. It concatenates the objects into a larger object, known as a vector.\nIn this case, you notice in addition to the specification the values are characters, we get a [1:4], denoting four objects are present." + "objectID": "course/00_WorkstationSetup/Windows.html", + "href": "course/00_WorkstationSetup/Windows.html", + "title": "Installing Software on Windows", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shots slides, click here\nThis is the software installation walkthrough for those whose computers are running Windows. Based on our pre-course interest form, you make up the majority of course participants." }, { - "objectID": "course/02_FilePaths/slides.html#listing-files", - "href": "course/02_FilePaths/slides.html#listing-files", - "title": "02 - File Paths", - "section": "Listing Files", - "text": "Listing Files\n\n\n\n\n\n\n\n\n.\n\n\nAfter this detour into variables and indexing, let’s return our focus to how to use these in context of file paths. Working from within our Week2 project folder, let’s see what directories (folders) are present\n\n\n\n\n\n\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)" + "objectID": "course/00_WorkstationSetup/Windows.html#installing-r", + "href": "course/00_WorkstationSetup/Windows.html#installing-r", + "title": "Installing Software on Windows", + "section": "Installing R", + "text": "Installing R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nYou will then select your Operating System, in this case, Windows.\n\n\n\nAnd go ahead and select the Install R for the first time link.\n\n\n\nNext, you will select the download the current version option at the top of the page.\n\n\n\nThe popup window will then ask where you want to save the installer (.exe) file. We generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nAfter the download is complete, double click on the installer’s .exe file. This will open a popup asking you to select your preferred language.\n\n\n\nYou will then be prompted to acccept the software license (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\nOn Windows, R will normally save it’s software folder under Program Files.\n\n\n\nNext, please accept the defaults.\n\n\n\n\n\n\n\n\n\n\n\n\nWith the defaults accepted, the installation will commence. Feel free to go have a coffee/tea/beverage-of-your choice break while you wait.\n\n\n\nAnd if all goes well, the installation will complete without any issues." }, { - "objectID": "course/02_FilePaths/slides.html#creating-directories", - "href": "course/02_FilePaths/slides.html#creating-directories", - "title": "02 - File Paths", - "section": "Creating directories", - "text": "Creating directories\n\n\n\n\n\n\n\n\n.\n\n\nAlternatively, we can also create a folder via R using the dir.create() function. Since we want it within data, we would modify the path accordingly\n\n\n\n\n\n\n\nNewFolderLocation <- file.path(\"data\", \"target2\")\n\ndir.create(path=NewFolderLocation)" + "objectID": "course/00_WorkstationSetup/Windows.html#installing-rtools", + "href": "course/00_WorkstationSetup/Windows.html#installing-rtools", + "title": "Installing Software on Windows", + "section": "Installing RTools", + "text": "Installing RTools\nWe will now work on installing Rtools. This software is needed when building R packages from source, which we will need throughout the course for R packages hosted on GitHub.\nTo get started, we will return to the R installation page we visited previously and instead click on the Rtools option.\n\n\n\nNext, select the most recent version of Rtools to Download.\n\n\n\nYou will then select for your architecture. For the vast majority of Windows users, your computer will likely be be using a x86 chip architecture, so you would select the Rtools45 installer option.\nIf your computer however uses the ARM chip architecture, you would select the 64-bit ARM Rtools45 installer instead. If you are unsure, see the following.\n\n\n\nNext, you will select the location to save the Rtools installer to. We generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nOnce downloaded, double click on the .exe to launch the Rtools installer.\n\n\n\nSimilar to what we did when installing R, go ahead and keep the defaults.\n\n\n\nAnd click install to proceed with the installation.\n\n\n\nAnd wait while the installation wraps up.\n\n\n\nIf all goes well, you should see the following installation success page." }, { - "objectID": "course/02_FilePaths/slides.html#file-paths", - "href": "course/02_FilePaths/slides.html#file-paths", - "title": "02 - File Paths", - "section": "File Paths", - "text": "File Paths\n\n\n\n\n\n\n\n\n.\n\n\nOne way we can do this is through a file.path argument. We could potentially provide this by adding either a “/” or a “\" into the path argument, depending on your computers operating system.\n\n\n\n\n\n\n\nlist.files(path=\"data/target\", full.names=FALSE, recursive=FALSE)" + "objectID": "course/00_WorkstationSetup/Windows.html#installing-git", + "href": "course/00_WorkstationSetup/Windows.html#installing-git", + "title": "Installing Software on Windows", + "section": "Installing Git", + "text": "Installing Git\nGit is a version control software widely used among software developers and bioinformaticians. We will use it extensively throughout the course, both locally on our computers (to keep track of changes to our files), as well as in combination with GitHub(to maintain online backups of our files).\nWe will first navigate to the website and select the download from Windows option.\n\n\n\n\n\n\n\n\n\nWe will then proceed and select install 64-bit Git for Windows Setup option\n\n\n\n\n\n\n\nAs was the case with our installation of R and Rtools, a pop-up will appear asking for a location to save the installer to.\nOnce downloaded, double-click and proceed with the installation.\nYou will be asked to accept the Git License (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\nThen you will be asked to select the folder to save to software to (usually your Programs folder)\n\n\n\nAt this point, the Git installer will ask a series of increasingly niche questions. It is best to just accept all the default options, to avoid wandering too far down a “What is Vim?!?” rabbit-hole.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHaving made it through all the niche customization screens, we finally reach the install button.\n\n\n\nWe then can wait for the install to complete.\n\n\n\nAnd success, we have now installed Git." }, { - "objectID": "course/02_FilePaths/slides.html#selecting-for-patterns", - "href": "course/02_FilePaths/slides.html#selecting-for-patterns", - "title": "02 - File Paths", - "section": "Selecting for Patterns", - "text": "Selecting for Patterns\n\n\n\n\n\n\n\n\n.\n\n\nIf we currently listed the files within data, we get a return that looks like this:\n\n\n\n\n\n\n\nlist.files(\"data\", full.names=FALSE, recursive=FALSE)" + "objectID": "course/00_WorkstationSetup/Windows.html#installing-positron", + "href": "course/00_WorkstationSetup/Windows.html#installing-positron", + "title": "Installing Software on Windows", + "section": "Installing Positron", + "text": "Installing Positron\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\nWith the license accepted, you will be able to select your operating system. In this case, we will select Windows, specifally the user level install.\n\n\n\nPlease note, if you are using a Windows computer with an ARM based chip (like is the case with Snapdragons), you will need to download the installed from the Positron’s GitHub Release Page, as they are still testing some features.\n\n\nYou will then be prompted to select the location you want to save the installer to. We will generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nOnce the download is complete, double click on the installer, and again accept the license agreement.\n\n\n\nGenerally, Positron will be store its software folder under Program Files.\n\n\n\nNext up, accept the default options for the following screens\n\n\n\n\n\n\nAnd finally, click Install.\n\n\n\n \n\nIf all goes well, you should then see the installation success page." }, { - "objectID": "course/02_FilePaths/slides.html#conditionals", - "href": "course/02_FilePaths/slides.html#conditionals", - "title": "02 - File Paths", - "section": "Conditionals", - "text": "Conditionals\n\n\n\n\n\n\n\n\n.\n\n\nOne useful thing is that within R, we can set conditions on whether something is carried out. The most typical conditional you will encounter are the “If” statements. They typically take a form that resembles the following.\n\n\n\n\n\n\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}" + "objectID": "course/01_InstallingRPackages/slides.html#set-up", + "href": "course/01_InstallingRPackages/slides.html#set-up", + "title": "01 - Installing R Packages", + "section": "Set Up", + "text": "Set Up\nAlright, with the background out of the way, let’s get started!\n\n\n\n\n\n\n\nImportant\n\n\nPlease make sure to sync your forked version of the CytometryInR repository, and 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.\n\n\n\n\n\n\n\n\n\n\n\nWarning\n\n\nPlease remember to always copy over the new material from your local CytometryInR folder to a separate Project Folder that you created and named (ex. “Week_01” or “MyLearningFolder”, etc.). This will ensure any edits you make to the files do not affect your ability to bring in next week’s materials to the CytometryInR folder" }, { - "objectID": "course/02_FilePaths/slides.html#conditionals-in-practice", - "href": "course/02_FilePaths/slides.html#conditionals-in-practice", - "title": "02 - File Paths", - "section": "Conditionals in practice", - "text": "Conditionals in practice\n\n\n\n\n\n\n\n\n.\n\n\nFirst off, let’s write a conditional to check if there is a target3 folder within data.\n\n\n\n\n\n\n\nfiles_present <- list.files(\"data\", full.names=FALSE, recursive=FALSE)\nfiles_present" + "objectID": "course/01_InstallingRPackages/slides.html#checking-for-loaded-packages", + "href": "course/01_InstallingRPackages/slides.html#checking-for-loaded-packages", + "title": "01 - Installing R Packages", + "section": "Checking for Loaded Packages", + "text": "Checking for Loaded Packages\n\n\n\n\n\n\n\n\n.\n\n\nFor the contents (ie. the functions) of an R package to be available for your computer to use, they must first be activated (ie. loaded) into your local environment. We will first learn how to check what R packages are currently active." }, { - "objectID": "course/02_FilePaths/slides.html#copying-files", - "href": "course/02_FilePaths/slides.html#copying-files", - "title": "02 - File Paths", - "section": "Copying Files", - "text": "Copying Files\n\n\n\n\n\n\n\n\n.\n\n\nTo copy files to another folder location, we use the file.copy() function. It has two arguments that we will be working with, from being the .fcs files, and to being the folder location we wish to transfer them to. If we tried using them as we currently have them:\n\n\n\n\n\n\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)" + "objectID": "course/01_InstallingRPackages/slides.html#installing-from-cran", + "href": "course/01_InstallingRPackages/slides.html#installing-from-cran", + "title": "01 - Installing R Packages", + "section": "Installing from CRAN", + "text": "Installing from CRAN\n\n\n\n\n\n\n\n\n.\n\n\nWe will start by installing R packages that are part of the CRAN repository. This is the main R package repository, being part of the broader R software project. In the context of this course, R packages that work primarily with general data structure (rows, columns, matrices, etc.) or visualizations will predominantly be found within this repository.\nThese include the tidyverse packages. These packages have collectively made R easier to use by smoothing out some of the rough edges of base R, which is why R has seen major growth within the last decade. We will be installing several of these R packages today." }, { - "objectID": "course/02_FilePaths/slides.html#removing-files.", - "href": "course/02_FilePaths/slides.html#removing-files.", - "title": "02 - File Paths", - "section": "Removing files.", - "text": "Removing files.\n\n\n\n\n\n\n\n\n.\n\n\nJust like we can add files via R, we can also remove them. However, when we remove them via this route, they are removed permanently, not sent to the recycle bin. We will revisit how later on in the course after you have gained additional experience with file.paths.\n\n\n\n\n\n\n\n?unlink()" + "objectID": "course/01_InstallingRPackages/slides.html#installing-from-bioconductor", + "href": "course/01_InstallingRPackages/slides.html#installing-from-bioconductor", + "title": "01 - Installing R Packages", + "section": "Installing from Bioconductor", + "text": "Installing from Bioconductor\n\n\n\n\n\n\n\n\n.\n\n\nBioconductor is the second R package repository we will be working with throughout the course. While it contains far fewer packages than CRAN, it contains packages that are primarily used by the biomedical sciences. Following this link you can find it’s current flow and mass cytometry R packages.\nBioconductor R packages differ from CRAN R packages in a couple of ways. Bioconductor has different standards for acceptance than CRAN. They usually contain interoperable object-types, put more effort into documentation and continous testing to ensure that the R package remains functional across operating systems." }, { - "objectID": "course/02_FilePaths/slides.html#basename", - "href": "course/02_FilePaths/slides.html#basename", - "title": "02 - File Paths", - "section": "Basename", - "text": "Basename\n\n\n\n\n\n\n\n\n.\n\n\nIf we look at Infants with the full.names=TRUE, we see the additional pathing folder has been added, allowing us to successfully copy over the files.\n\n\n\n\n\n\n\nInfants" + "objectID": "course/01_InstallingRPackages/slides.html#install-from-github", + "href": "course/01_InstallingRPackages/slides.html#install-from-github", + "title": "01 - Installing R Packages", + "section": "Install from GitHub", + "text": "Install from GitHub\n\n\n\n\n\n\n\n\n.\n\n\nIn addition to the CRAN and Bioconductor repositories, individual R packages can also be found on GitHub hosted on their respective developers GitHub accounts. Newer packages that are still being worked on (often in the process of submission to CRAN or Bioconductor) can be found here, as well as those where the author decided not to bother with a review process, and just made the packages immediately available, warts and all." }, { - "objectID": "course/02_FilePaths/slides.html#recursive", - "href": "course/02_FilePaths/slides.html#recursive", - "title": "02 - File Paths", - "section": "Recursive", - "text": "Recursive\n\n\n\n\n\n\n\n\n.\n\n\nAnd finally that we have created additional nested folders and populated them with fcs files, let’s see what setting list.files() recursive argument to TRUE\n\n\n\n\n\n\n\nall_files_present <- list.files(full.names=TRUE, recursive=TRUE)\nall_files_present" + "objectID": "course/01_InstallingRPackages/slides.html#troubleshooting-install-errors", + "href": "course/01_InstallingRPackages/slides.html#troubleshooting-install-errors", + "title": "01 - Installing R Packages", + "section": "Troubleshooting Install Errors", + "text": "Troubleshooting Install Errors\n\n\n\n\n\n\n\n\n.\n\n\nWe have now installed three R packages, dplyr, PeacoQC, and flowSpectrum. In my case, I did not encounter any errors during the installation. However, sometimes a package installation will fail due to an error encountered during the installation process. This can be due to a number of reasons, ranging from a missing dependency, or an update that caused a conflict. While these can occur for CRAN or Bioconductor packages, they are more frequently seen for GitHub packages where the Description/Namespace files may not have been fully updated yet to install all the required dependencies.\nWhen encountering an error, start of by first reading through the message to see if you can parse any useful information about what package failed to install, and if it list the missing dependency packages name. The later was the case in the error message example shown below." }, { - "objectID": "course/02_FilePaths/slides.html#saving-changes-to-version-control", - "href": "course/02_FilePaths/slides.html#saving-changes-to-version-control", - "title": "02 - File Paths", - "section": "Saving changes to Version Control", - "text": "Saving changes to Version Control\n\n\n\n\n\n\n\n\n.\n\n\nAnd as is good practice, to maintain version control, let’s stage all the files and folders we created today within the Week2 Project Folder, write a commit message, and send these files back to GitHub until they are needed again next time." + "objectID": "course/01_InstallingRPackages/slides.html#installing-specific-package-versions", + "href": "course/01_InstallingRPackages/slides.html#installing-specific-package-versions", + "title": "01 - Installing R Packages", + "section": "Installing Specific-Package Versions", + "text": "Installing Specific-Package Versions\n\n\n\n\n\n\n\n\n.\n\n\nWhile we may be tempted to think of R packages as static, they change quite often, as their develipers add new features, fix bugs, etc. To help keep track of these changes (essential for reproducibility and replicability), R packages have version numbers.\nWhen we run sessionInfo(), we can see an example of this, with the version number appearing after the package name.\n\n\n\n\n\n\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27\n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] IRanges_2.44.0 clue_0.3-66 cluster_2.1.8.1 \n[49] pkgconfig_2.0.3 pillar_1.11.1 gtable_0.3.6 \n[52] data.table_1.18.2.1 glue_1.8.0 xfun_0.56 \n[55] tibble_3.3.1 tidyselect_1.2.1 knitr_1.51 \n[58] farver_2.1.2 rjson_0.2.23 htmltools_0.5.9 \n[61] rmarkdown_2.30 compiler_4.5.2 S7_0.2.1" }, { - "objectID": "course/02_FilePaths/index.html", - "href": "course/02_FilePaths/index.html", - "title": "02 - File Paths", + "objectID": "course/01_InstallingRPackages/slides.html#documentation-and-websites", + "href": "course/01_InstallingRPackages/slides.html#documentation-and-websites", + "title": "01 - Installing R Packages", + "section": "Documentation and Websites", + "text": "Documentation and Websites\n\n\n\n\n\n\n\n\n.\n\n\nWe have already seen a couple ways to access the help documentation contained within an R package via Positron. Beyond internal documentation, R packages often have external websites that contain additional walk-through articles (ie. vignettes) to better document how to use the package.\nFor CRAN-based packages, we can start off by searching for the package name. So, in the case of dplyr" + }, + { + "objectID": "course/01_InstallingRPackages/index.html", + "href": "course/01_InstallingRPackages/index.html", + "title": "01 - Installing R Packages", "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nWelcome to the second week of Cytometry in R! This week we will learn about file.path, namely, how to communicate to our computer (and R) where various files are stored.", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nWelcome to the first week of Cytometry in R! This week we will be diving into how R packages work, and the how to go about installing them.\nBefore getting started, please make sure you have completed the creating a GitHub and Workstation Setup walk-throughs, since we will begin where they left off once the required software was successfully installed.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Intro to R" ] }, { - "objectID": "course/02_FilePaths/index.html#set-up", - "href": "course/02_FilePaths/index.html#set-up", - "title": "02 - File Paths", + "objectID": "course/01_InstallingRPackages/index.html#set-up", + "href": "course/01_InstallingRPackages/index.html#set-up", + "title": "01 - Installing R Packages", "section": "Set Up", - "text": "Set Up\nBefore we begin, let’s make sure you get the data needed for today transferred to your local computer, and then get the .fcs files copied over from there to your own working project folder. This is the process you will repeat each week throughout the course.\n\nNew Repository\nFirst off, login to your GitHub account. Once there, you will select the options to create a new repository (similar to what you did during Using GitHub)\n\n\n\nFor this week, let’s set this new repository up as a private repository, and call it Week2. This will keep things consistent with the file.paths we will be showing in the examples.\n\n\n\nOnce the new repository has been created, copy the URL.\n\n\n\nNext, open up Positron, set the interpreter to use R, and then select the option to bring in a “New Folder from Git”.\n\n\n\nPaste in your new repository’s url. Additionally, if you want to match file.paths shown in the examples, set your storage location to your local Documents folder (please note the start of the file.path will look differently depending on whether you are on Windows, MacOS, or Linux).\n\n\n\nYour new repository will then be imported from GitHub. Once this is done, create two subfolders (data and images) and a new .qmd file (naming it filepaths.qmd).\n\n\n\n\n\nSync\nWith this done, return to GitHub and open your forked version of the CytometryInR course folder. If you haven’t yet done so, click on sync to bring in this week’s code and datasets.\n\n\n\nReturning to Positron, you will need to switch Project Folders, switching from Week2 over to CytometryInR.\n\n\n\n\n\nPull\nOnce CytometryInR project folder has opened, you will need to pull in the new data from GitHub to your local computer.\n\n\n\n\n\nCopy Files to Week2\nOnce this is done, you will see within the course folder, containing this weeks folder (02_FilePaths). Within it there is a data folder with .fcs files. To avoid causing conflicts when bringing in next week’s materials, you will want to manually copy over these .fcs files (via your File Explorer) to the data folder within your “Week2” Project Folder.\n\n\n\n\n\nCommit and Push\nWhen you reopen your Week2 project folder in Positron, you should now be able to see the .fcs files within the data folder. Next, from the action bar on the far left, select the Source Control tab. Stage all the changes (as was done in Using Git), and write a short commit message.\n\n\n\nWith these files now being tracked by version control, push (ie. send) your changes to GitHub so that they are remotely backed up.\n\n\n\nAnd with this setup complete, you are now ready to proceed. Remember, run code and write notes in your working project folder (Week2 or otherwise named) to avoid conflicts next week in the CytometryInR folder when you are trying to bring in the Week #3 code and datasets.", + "text": "Set Up\nAlright, with the background out of the way, let’s get started!\n\n\n\n\n\n\nImportant\n\n\n\nPlease make sure to sync your forked version of the CytometryInR repository, and 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.\n\n\n\n\n\n\n\n\nWarning\n\n\n\nPlease remember to always copy over the new material from your local CytometryInR folder to a separate Project Folder that you created and named (ex. “Week_01” or “MyLearningFolder”, etc.). This will ensure any edits you make to the files do not affect your ability to bring in next week’s materials to the CytometryInR folder\n\n\n\n\nAfter pulling the new data and code locally, open CytometryInR, open the course folder, and open the 01_InstallingRPackages folder. From here, copy the index.qmd file to your own working Project Folder (ex. Week_01) where you can work on it without causing any conflicts. Then return to Positron and open up your working project folder (ex. Week_01).\n\n\n\nNext up, within Positron, let’s make sure to select R as the coding language being used for this session.\n\n\n\nNow that R is running within Positron, the console (lower portion of the screenn) is now able to run (ie. execute) any R code that is sent to it.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Intro to R" ] }, { - "objectID": "course/02_FilePaths/index.html#working-directory", - "href": "course/02_FilePaths/index.html#working-directory", - "title": "02 - File Paths", - "section": "Working Directory", - "text": "Working Directory\nNow that we are back in our Week2 folder, let’s start by seeing our current location similarly to how our computer perceives it.\nWe will use getwd() function (ie. get working directory) to return the location of the folder we are currently inside of. For example, when getwd() is run within my Week2 project folder, I see the following location\n\ngetwd()\n\n\nThis returns a file path. The final location (Week2 in this case) is the Working Directory. Your computer when working in R will be descern other locations in relation to this directory.", + "objectID": "course/01_InstallingRPackages/index.html#checking-for-loaded-packages", + "href": "course/01_InstallingRPackages/index.html#checking-for-loaded-packages", + "title": "01 - Installing R Packages", + "section": "Checking for Loaded Packages", + "text": "Checking for Loaded Packages\nFor the contents (ie. the functions) of an R package to be available for your computer to use, they must first be activated (ie. loaded) into your local environment. We will first learn how to check what R packages are currently active.\n\n\n\nAccessing Help Documentation\nWithin your own index.qmd (or a new .qmd file that you created), type out/copy-paste the following sessionInfo() function:\n\nsessionInfo()\n\n\n\nIf you hover over the line of code within Positron, you will glimpse the help file for the particular function you are hovering over.\n\n\n\nIn this case, we can see the help documentation corresponding for sessionInfo(). Beyond hovering over the function, this can also be accessed by adding a ? directly in front of the function, and then running that line of code.\n\n?sessionInfo()\n\n\n\n\nWhen executed, the function’s help file documentation will open up within the Help tab in the secondary side bar on the right-side of the screen. Glancing at the top of the page we can see the name of the package that contains the sessionInfo() function ({utils}). Scrolling down the help page past all the documentation, we can see a link to the index page.\n\n\n\nAfter clicking, the Help tab switches from viewing the documentation for the sessionInfo() function, to showing all the functions within the utils package. Most R packages contain help documentation, so this process can be adapted to find out additional information about what a function does, and what arguments are needed to produce customized outputs.\n\n\n\n\n\nsessionInfo()\nWithin your .qmd file, let’s go ahead and run the following code-block:\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] htmlwidgets_1.6.4 BiocManager_1.30.27 compiler_4.5.2 \n [4] fastmap_1.2.0 cli_3.6.5 tools_4.5.2 \n [7] htmltools_0.5.9 otel_0.2.0 yaml_2.3.12 \n[10] rmarkdown_2.30 knitr_1.51 jsonlite_2.0.0 \n[13] xfun_0.56 digest_0.6.39 rlang_1.1.7 \n[16] evaluate_1.0.5 \n\n\n\n\nThe outputs that get returned by sessionInfo() will vary a bit depending on your computer’s operating system, and the version of R you have installed.\nFor today, let’s focus on the last two elements of the output:\n\n\n\nThe R software itself is made up of several base R packages, that are loaded automatically. These contain everything you need to read, write and run R code on your computer. You can see these packages are the stats, graphics, grDevices, utils, datasets, methods and base packages.\nAs we install additional R packages and load them using the library() function throughout this session, sporadically re-run sessionInfo() to see how this list of R packages changes.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Intro to R" ] }, { - "objectID": "course/02_FilePaths/index.html#directories", - "href": "course/02_FilePaths/index.html#directories", - "title": "02 - File Paths", - "section": "Directories", - "text": "Directories\nWithin this working directory, we have a variety of project folders and files related to the course. We can see the folders that are present using the list.dirs() function.\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)\n\n\nWithin this list.dirs() function, we are specifying two arguments with which we will be working with later today, full.names and recursive. For now, lets set their arguments to FALSE, which means they conditions they implement are inactive (turned off).\n\n\nThe path argument is currently set to “.”, which is a stand-in for the present directory. In R, if an argument is not specified directly, it is inferred based on an order of expected arguments. Thus, if not present, we could still get the same output as seen before.\n\nlist.dirs(full.names=FALSE, recursive=FALSE)\n\n\n\n\nWithin Positron, in addition to visible folders, we also have hidden folders (denoted by the “.” in front of the folder name when using list.dirs()). In the case of one of our course website folders, we can see a “.quarto” folder shown in a lighter gray . The “.git” folder we saw from list.dirs() is typically hidden when viewing from Positron.\n\nIn the case of Week2, the two not-hidden folders we created are listed. We will see how to navigate these in a second.", + "objectID": "course/01_InstallingRPackages/index.html#installing-from-cran", + "href": "course/01_InstallingRPackages/index.html#installing-from-cran", + "title": "01 - Installing R Packages", + "section": "Installing from CRAN", + "text": "Installing from CRAN\nWe will start by installing R packages that are part of the CRAN repository. This is the main R package repository, being part of the broader R software project. In the context of this course, R packages that work primarily with general data structure (rows, columns, matrices, etc.) or visualizations will predominantly be found within this repository.\nThese include the tidyverse packages. These packages have collectively made R easier to use by smoothing out some of the rough edges of base R, which is why R has seen major growth within the last decade. We will be installing several of these R packages today.\n\n\n\ndplyr\nOur first R package we will install during this session is the dplyr package. Since it is hosted on the CRAN repository, to install it, we will need to use the CRAN-specific installation function install.packages().\n\n?install.packages()\n\n\n\n\nFor the install.packages() function, we place within the () the name of the R package from CRAN that we wish to install.\n\ninstall.packages(\"dplyr\")\n\n\n\n\n\n\n\n\n\nTip\n\n\n\nA usual struggle point for beginners is that install.packages() requires ” ” to be placed around the package name. Forgetting them results in the error that we see below.\n\n\n\ninstall.packages(dplyr)\n\nError:\n! object 'dplyr' not found\n\n\n\n\n\ninstall.packages(\"dplyr\")\n\nGo ahead and click on “Run Cell” next to your code-block, to install the dplyr R package.\n\n\nWhen a package starts to install, you will see your console start to display text resembling that seen in the image below (varying a bit depending on your computers operating system).\n\n\n\nWithin this opening scrawl, you will see the location on your computer the R package is being installed to, as well as the file location for the R package being retrieved on CRAN.\nIf the package is successfully located, your computer will proceed to first download, then unpack (ie. unzip) it, before attempting to install to the target folder.\n\n\n\nThe final steps of the installation process involved various steps to verify everything was copied successfully, the help documentation assembled, and that the R package is capable of being loaded. If this is the case, you will see the “Done” line appear, as well as a mention where the original downloaded source package files has been stashed (usually a temp folder).\n\n\n\n\nAttaching packages via library()\nIf an R package has been installed successfully, we are now able to load it (ie. make it’s functions available) to our local environment using the library() function.\n\n?library()\n\n\n\nUnlike install.packages(), where we needed “” around the package name, the library() function does not require “” around the package name. Let’s go ahead and load in dplyr, making its respective functions to our local environment.\n\nlibrary(dplyr)\n\n\nAttaching package: 'dplyr'\n\n\nThe following objects are masked from 'package:stats':\n\n filter, lag\n\n\nThe following objects are masked from 'package:base':\n\n intersect, setdiff, setequal, union\n\n\n\n\nFrom the output, we can see that dplyr has been attached. There are also a couple functions within dplyr that have identical names to functions within the stats and base packages. To avoid confusion, these 6 functions are masked, which is why we get the additional messages.\nWith dplyr now loaded via the library() call, let’s check sessionInfo() to see what has changed.\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] dplyr_1.2.0 BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 \n [4] tidyselect_1.2.1 xfun_0.56 magrittr_2.0.4 \n [7] glue_1.8.0 tibble_3.3.1 knitr_1.51 \n[10] pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 \n[13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 \n[16] vctrs_0.7.1 compiler_4.5.2 tools_4.5.2 \n[19] evaluate_1.0.5 pillar_1.11.1 yaml_2.3.12 \n[22] otel_0.2.0 BiocManager_1.30.27 rlang_1.1.7 \n[25] jsonlite_2.0.0 htmlwidgets_1.6.4 \n\n\n\n\nSimilar to what was seen for the base R packages, dplyr is now attached. This means we should theoretically now have access to all its functions. We can verify this by seeing if we can look up the dplyr packages select() function and it’s respective help page.\n\n?select\n\n\n\n\nSince its parent package has been attached to our local environment (via the library() call), we can see dplyr functions appear as suggestions as we begin to type.\nBy contrast, is we check for the ggplot() function from the ggplot2 package (which we haven’t yet installed or attached via library()), no suggestions will pop up.\n\n?ggplot\n\nNo documentation for 'ggplot' in specified packages and libraries:\nyou could try '??ggplot'\n\n\n\n\nBeyond individual functions, some R packages also have help landing pages, that can be similarly accessed by adding a ? in front of the package name:\n\n\n\n\n\nUnattaching\nSo far, we have installed an R package, and then attached it (via library()). How would we reverse these steps?\nWell, to unload it from the local environment, there are a couple options. You could of course simply shut down Positron. The local environment only exist in context of when you open and close the session, which closing the program will do. All previously loaded R packages will be unattached, which is why when you start a new session you will need to load in all packages you plan on using via library().\nAlternatively, although less used, you could detach() it via your console:\n\ndetach(\"package:dplyr\", unload=TRUE)\n\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 \n [4] tidyselect_1.2.1 xfun_0.56 magrittr_2.0.4 \n [7] glue_1.8.0 tibble_3.3.1 knitr_1.51 \n[10] pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 \n[13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 \n[16] vctrs_0.7.1 compiler_4.5.2 tools_4.5.2 \n[19] evaluate_1.0.5 pillar_1.11.1 yaml_2.3.12 \n[22] otel_0.2.0 BiocManager_1.30.27 rlang_1.1.7 \n[25] jsonlite_2.0.0 htmlwidgets_1.6.4 \n\n\n\n\nLooking at the sessionInfo() output, dplyr is no longer attached to the local environment. Consequently, if we try to once again look for the documentation, no information will be retrieved.\n\n?dplyr\n\nNo documentation for 'dplyr' in specified packages and libraries:\nyou could try '??dplyr'\n\n\n\n\nThere is a workaround however, if we want to access functions from an unloaded R package. We can specify the R package’s name, followed by two :, and then the function name. The :: conveys the context to your computer that the package is present, but may not be attached.\n\n?dplyr::select()\n\nThis particular use case can be useful if we want to run a particular function, but not load in all a packages functions (which may have identical function names to other R packages we are using and cause some conflicts).\n\n\n\n\nRemoving Packages\nJust as we can install an R package, we can also uninstall an R package (although doing so is rare, most often when encountering package dependency conflict). To do so, we would use the remove.packages() function.\n\n?remove.packages()\n\n\nremove.packages(\"dplyr\")\n\nThis results in the package being removed entirely from our computer. We would then need to reinstall it if needed in the future.\n\n\n\n\nCommon Issues\nAs previously mentioned, CRAN is the main repository for R packages. But what if we tried to install an R package that is only found on Bioconductor or via GitHub using the install.packages() function?\nTo see what occurs, let’s try installing the PeacoQC package (which is found on Bioconductor).\n\ninstall.packages(\"PeacoQC\")\n\nInstalling package into '/home/david/R/x86_64-pc-linux-gnu-library/4.5'\n(as 'lib' is unspecified)\n\n\nWarning: package 'PeacoQC' is not available for this version of R\n\nA version of this package for your version of R might be available elsewhere,\nsee the ideas at\nhttps://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages\n\n\n\n\nAs you can see, the initial warning message suggest that PeacoQC is not available for your version of R. When I first started trying to learn R on my own during COVID, this particular message was the bane of my existence and I couldn’t figure out what was going on.\nThis is just a default warning message, that would apply for both a package having a version mismatch, but also shown when trying to install packages that are not found on CRAN.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Intro to R" ] }, { - "objectID": "course/02_FilePaths/index.html#variables", - "href": "course/02_FilePaths/index.html#variables", - "title": "02 - File Paths", - "section": "Variables", - "text": "Variables\nBefore exploring file paths, we need to have some basic R code knowledge that we can use to work with them. Within R, we have the ability to assign particular values (be they character strings, numbers or logicals) to objects (ie. variables) that can be used when called upon later.\nFor example:\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\nIn this case, the variable name is what the assignment arrow (“<-”) is pointing at. In this case, WhatDayDidIWriteThis\n\n\nWhen we run this, we create a variable, that will appear within the right-sidebar.\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\n\n\n\nThese variables can subsequently be retrieved by printing (ie. running) the name of the variable\n\nWhatDayDidIWriteThis \n\n[1] \"Saturday\"\n\n\n\n\nYou can create variables with almost any name you can think of\n\nTopSecretMeetingDay <- \"Saturday\"\n\n\n\nWith a few exceptions. R doesn’t play well with spaces:\n\nTop Secret Meeting Day <- \"Saturday\"\n\nError in parse(text = input): <text>:1:5: unexpected symbol\n1: Top Secret\n ^\n\n\n\n\nBut does play well with underscores:\n\nTop_Secret_Meeting_Day <- \"Saturday\"\n\n\n\nThe above (with individual words separated by _) is collectively known as snake case. The alternate way to help delineate variable names is “camelCase”, with first letter of each word being capitalized (seen in the previous example).\n\n\n\n\nTopSecretMeetingDay\n\n[1] \"Saturday\"\n\n\n\n\nYou can overwrite a Variable name by assigning a different value to it:\n\nTopSecretMeetingDay <- \"Monday\"\n\n\nTopSecretMeetingDay\n\n[1] \"Monday\"\n\n\n\n\nYou can also remove individual variables via the rm function\n\nrm(Top_Secret_Meeting_Day)\n\n\n\nOr if trying to remove all, via the right sidebar\n\n\n\nIn the prior case, we are creating a variable that is a “string” of character values, due to our use of “” around the word. We can see this when we use the str() function.\n\nFluorophores <- \"FITC\"\nstr(Fluorophores)\n\n chr \"FITC\"\n\n\nThe “chr” in front denotating that Fluorophores contains a character string.\n\n\nThis could also be retrieved using the class() function.\n\nclass(Fluorophores)\n\n[1] \"character\"\n\n\n\n\nAlternatively, we could assign a numeric value to a variable\n\nFluorophores <- 29\nstr(Fluorophores)\n\n num 29\n\n\nWhich returns “num”, ie. numeric.\n\n\nWe can also specify a logical (ie. True or FALSE) to a particular object\n\nIsPerCPCy5AGoodFluorophore <- FALSE\nstr(IsPerCPCy5AGoodFluorophore)\n\n logi FALSE\n\n\nWhich returns logi in front, denoting this variable contains a logical value.\n\n\nLast week, when we were installing dplyr, the reason that installation failed was install.packages() expects a character string. However, when we left off the ““, it looked within our local environments created variables for the dplyr variable, couldn’t find it, and thus failed.\nWe could of course, have assigned a character value to a variable name, and then used that variable name, which would have worked.\n\nPackageToInstall <- \"dplyr\"\n\ninstall.packages(PackageToInstall)", + "objectID": "course/01_InstallingRPackages/index.html#installing-from-bioconductor", + "href": "course/01_InstallingRPackages/index.html#installing-from-bioconductor", + "title": "01 - Installing R Packages", + "section": "Installing from Bioconductor", + "text": "Installing from Bioconductor\nBioconductor is the second R package repository we will be working with throughout the course. While it contains far fewer packages than CRAN, it contains packages that are primarily used by the biomedical sciences. Following this link you can find it’s current flow and mass cytometry R packages.\nBioconductor R packages differ from CRAN R packages in a couple of ways. Bioconductor has different standards for acceptance than CRAN. They usually contain interoperable object-types, put more effort into documentation and continous testing to ensure that the R package remains functional across operating systems.\n\n\nTo install an R package that is located on Bioconductor, we first need to install the BiocManager package from CRAN. This package will allow us to install Bioconductor packages from their respective repository.\n\ninstall.packages(\"BiocManager\")\n\n\n\nOnce BiocManager is installed, we can attach it to our local environment using the library() function\n\nlibrary(BiocManager)\n\n\n\nWhen loaded, you will see an output showing the current Bioconductor and R versions.\nWe can then use BiocManager’s install() function to go back and install PeacoQC().\n\n\n\n\n\n\nTip\n\n\n\nAs always, don’t forget the “” when running an install() command.\n\n\n\n?install()\n\n\ninstall(\"PeacoQC\")\n\n\n\nWe see a similar opening sequence of installation steps as what we saw when installing the dplyr package from CRAN. However, in this case, several package dependencies (rjson, GlobalOptions, etc.) are present. Consequently, you can see these packages are also being downloaded from their respective repositories (either CRAN or Bioconductor), then unzipped and assembled before PeacoQC undergoes installation.\n\n\n\n\n\n\nNote\n\n\n\nBehind the scenes, within an R package, what package dependencies need to be installed are specified through the Description and Namespace files. If a package name is removed from these files, it will not be installed during the installation process\n\n\n\n\n\nWithin the scrawl of installation outputs, we can see individual dependencies undergoing installation similar to what we saw with dplyr, with a “Done (packagename)” being printed upon successful installation.\n\n\n\nThis process continues for each dependency being installed.\n\n\n\nAnd finally, once all the dependencies are installed, PeacoQC starts to install.\n\n\n\nOccasionally, during installation, you will see a pop-up windown like this one in the console. This let’s you know that some of the package dependencies have newer updated versions that are available to download. We are prompted to select between updating all, some or none. You will need to specify via the console how you want to proceed, by typing and entering one of the suggested options [a/s/n].\n\n\n\nAlternatively you may encounter a pop-up that resembles this one. Unlike the a/s/n output, we would need to provide a number for our intended choice. In this case, I went ahead and skipped all updates by typing 3 into the console, then hitting enter.\n\n\n\nGenerally, it’s okay to update if you have the time. Updates generally consist of minor improvements or bug fixes, that shouldn’t cause major issues. If you are short on time, you can go ahead and select skip the update by entering the value (n) for the none option.\n\n\n\nWith PeacoQC has been installed, we can load it via the library() call\n\n\n\n\n\n\nTip\n\n\n\nRemeber, library() doesn’t require ” ”\n\n\n\nlibrary(PeacoQC)\n\n\n\nAnd we can check to see if it has been attached to the local environment\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27 BiocStyle_2.38.0 \n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] htmlwidgets_1.6.4 IRanges_2.44.0 clue_0.3-66 \n[49] cluster_2.1.8.1 pkgconfig_2.0.3 pillar_1.11.1 \n[52] gtable_0.3.6 data.table_1.18.2.1 glue_1.8.0 \n[55] xfun_0.56 tibble_3.3.1 tidyselect_1.2.1 \n[58] knitr_1.51 farver_2.1.2 rjson_0.2.23 \n[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.2 \n[64] S7_0.2.1 \n\n\n\n\nAs you may have noticed, the section of loaded via namespace (but not attached) packages has grown larger. These packages are dependencies for the attached packages (dplyr, BiocManager and PeacoQC). Since the functions within these dependencies are only used selectively by the attached packages, they do not need to be active within the local environment.\n\n\n\nTo see what packages are installed (but not yet loaded), we can use the installed.packages() function to return a list of R packages for your computer.\n\ninstalled.packages()", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Intro to R" ] }, { - "objectID": "course/02_FilePaths/index.html#indexing", - "href": "course/02_FilePaths/index.html#indexing", - "title": "02 - File Paths", - "section": "Indexing", - "text": "Indexing\nNot all variables contain single objects.\nFor example, we can modify Fluorophores and add additional entries:\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nstr(Fluorophores)\n\n chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n\n\nThe c stands for concatenate. It concatenates the objects into a larger object, known as a vector.\nIn this case, you notice in addition to the specification the values are characters, we get a [1:4], denoting four objects are present.\n\n\nWe can similarly retrieve this information using the length() function\n\nlength(Fluorophores)\n\n[1] 4\n\n\n\n\nWhen multiple objects are present, we can specify them individidually by providing their index number within square brackets [].\n\nFluorophores[1]\n\n[1] \"BV421\"\n\n\n\n\n\nFluorophores[3]\n\n[1] \"PE\"\n\n\n\n\nOr specify in sequence using a colon (:)\n\nFluorophores[3:4]\n\n[1] \"PE\" \"APC\"\n\n\n\n\nOr if not adjacent, reusing c within the square brackets\n\nFluorophores[c(1,4)]\n\n[1] \"BV421\" \"APC\" \n\n\n\n\nWe will revisit these concepts throughout the course, with what we have covered today, this will help us create file.paths and select fcs files that we want to work with via index number.", + "objectID": "course/01_InstallingRPackages/index.html#install-from-github", + "href": "course/01_InstallingRPackages/index.html#install-from-github", + "title": "01 - Installing R Packages", + "section": "Install from GitHub", + "text": "Install from GitHub\nIn addition to the CRAN and Bioconductor repositories, individual R packages can also be found on GitHub hosted on their respective developers GitHub accounts. Newer packages that are still being worked on (often in the process of submission to CRAN or Bioconductor) can be found here, as well as those where the author decided not to bother with a review process, and just made the packages immediately available, warts and all.\n\n\nWhile many gems of R packages can be found on GitHub, there are also a bunch of R packages that due to deprecation since when they were published and released have stopped working. This is often the case for R packages that are not maintained, which is why it’s useful to check the commits and issues pages to see when the last contribution occurred. We will take a closer look at how to do so later on.\n\n\nTo install packages from GitHub, you will need the remotes package, which can be found on CRAN.\n\n\n\n\n\n\nSpot Check #1\n\n\n\nTo install a package from CRAN, what function would you use? Click on the code-fold arrow below to reveal the answer.\n\n\n\n\nCode\ninstall.packages(\"remotes\")\n\n\n\n\nWith the remotes package now installed, we can attach it to our local environment.\n\n\n\n\n\n\nSpot Check #2\n\n\n\nWhat function would be used to do so?\n\n\n\n\nCode\nlibrary(remotes)\n\n\n\n\nAnd finally, we can use the install_github() function to download R packages from the invidual developers GitHub account.\n\n\n\n\n\n\nSpot Check #3\n\n\n\nHow would you look up the help documentation for this function?\n\n\n\n\nCode\n# Either by hovering over it within Positron or via\n\n?install_github()\n\n\n\n\nWe will be installing a small R package flowSpectrum for this example. It’s one of the packages created by Christopher Hall, whose small series of Flow Cytometry Data Analysis in R tutorials were immensely useful when I was first getting started learning R. flowSpectrum can be used to generate spectrum-style plots for spectral flow cytometry data.\n\n\n\nTo install an R package from GitHub, we first need the GitHub username (so hally166 in this case), which is followed by a “/”, and then the name of the package repository (so flowSpectrum in this case). Our code should consequently be:\n\ninstall_github(\"hally166/flowSpectrum\")\n\n\n\nWhen installing from GitHub, the opening installation scrawl will look different. Unlike R packages from CRAN or Bioconductor, which are usually shipped in an assembled binary format, R packages from GitHub start off as source code. So the first steps shown in the scrawl are the process of converting them to binary before proceeding.\nThis process of building R packages from source code is one of the reasons we needed to install Rtools (for Windows users) or Xcode Developer Tools (for MacOS) for this course. We will look at this topic in greater depth later in the course when we talk about creating R packages.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Intro to R" ] }, { - "objectID": "course/02_FilePaths/index.html#listing-files", - "href": "course/02_FilePaths/index.html#listing-files", - "title": "02 - File Paths", - "section": "Listing Files", - "text": "Listing Files\nAfter this detour into variables and indexing, let’s return our focus to how to use these in context of file paths. Working from within our Week2 project folder, let’s see what directories (folders) are present\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)\n\n\n\n\nWe can also list any files that are present within our working directory using the list.files() function.\n\nlist.files()\n\n\nIn this case, in addition to our filepaths.qmd file, we can see the LICENSE and README files created when we set up the repository.\n\n\nWe can also specify a particular folder we want to show items present within by changing the path argument. For example, if we wanted to see the contents of the “data” folder\n\nlist.files(path=\"data\", full.names=FALSE, recursive=FALSE)\n\n\nWhich in this case returns the fcs files we copied over at the start of this lesson.\n\n\nIn this case, there are no folders under “data”. Let’s go ahead and create a new one, calling it target.", + "objectID": "course/01_InstallingRPackages/index.html#troubleshooting-install-errors", + "href": "course/01_InstallingRPackages/index.html#troubleshooting-install-errors", + "title": "01 - Installing R Packages", + "section": "Troubleshooting Install Errors", + "text": "Troubleshooting Install Errors\nWe have now installed three R packages, dplyr, PeacoQC, and flowSpectrum. In my case, I did not encounter any errors during the installation. However, sometimes a package installation will fail due to an error encountered during the installation process. This can be due to a number of reasons, ranging from a missing dependency, or an update that caused a conflict. While these can occur for CRAN or Bioconductor packages, they are more frequently seen for GitHub packages where the Description/Namespace files may not have been fully updated yet to install all the required dependencies.\nWhen encountering an error, start of by first reading through the message to see if you can parse any useful information about what package failed to install, and if it list the missing dependency packages name. The later was the case in the error message example shown below.\n\n\n\nIf you encounter an installation error this week, please take screenshots of the error message and post them to this Discussion. This will help us troubleshoot your installation, as well as provide additional examples of installation errors that will be used to update this section in the future.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Intro to R" ] }, { - "objectID": "course/02_FilePaths/index.html#creating-directories", - "href": "course/02_FilePaths/index.html#creating-directories", - "title": "02 - File Paths", - "section": "Creating directories", - "text": "Creating directories\nAlternatively, we can also create a folder via R using the dir.create() function. Since we want it within data, we would modify the path accordingly\n\nNewFolderLocation <- file.path(\"data\", \"target2\")\n\ndir.create(path=NewFolderLocation)\n\n\n\n\nBefore continuing, let’s copy the first two .fcs files into both target and target2.\n\n\n\nGiven our working directory is set the top-level of the Week2 project folder, we can’t just check inside nested target folders directly. If we attempt to:\n\nlist.files(path=\"target\", full.names=FALSE, recursive=FALSE)\n\ncharacter(0)\n\n\n\n\nNo files are returned (ie, character(0)), since from our computers perspective, “target” doesn’t exist within the active working directory.\n\nfile.exists(\"target\")\n\n[1] FALSE\n\n\n\n\nOn the other hand, within it’s view, it knows that the data folder exist\n\nfile.exists(\"data\")\n\n\nSo here we encounter the first challenge when communicating to our computer where to search for and find files. We need to provide a file.path that incorporates the path of folders between where the computer is currently at (ie. the working directory) and the target file itself.", + "objectID": "course/01_InstallingRPackages/index.html#installing-specific-package-versions", + "href": "course/01_InstallingRPackages/index.html#installing-specific-package-versions", + "title": "01 - Installing R Packages", + "section": "Installing Specific-Package Versions", + "text": "Installing Specific-Package Versions\nWhile we may be tempted to think of R packages as static, they change quite often, as their develipers add new features, fix bugs, etc. To help keep track of these changes (essential for reproducibility and replicability), R packages have version numbers.\nWhen we run sessionInfo(), we can see an example of this, with the version number appearing after the package name.\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27 BiocStyle_2.38.0 \n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] htmlwidgets_1.6.4 IRanges_2.44.0 clue_0.3-66 \n[49] cluster_2.1.8.1 pkgconfig_2.0.3 pillar_1.11.1 \n[52] gtable_0.3.6 data.table_1.18.2.1 glue_1.8.0 \n[55] xfun_0.56 tibble_3.3.1 tidyselect_1.2.1 \n[58] knitr_1.51 farver_2.1.2 rjson_0.2.23 \n[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.2 \n[64] S7_0.2.1 \n\n\n\n\nAlternatively, we can retrieve the same information for the individual packages via the packageVersion() function\n\npackageVersion(\"PeacoQC\")\n\n[1] '1.20.0'\n\n\n\n\nAs well as from the citation() function.\n\ncitation(\"PeacoQC\")\n\nTo cite package 'PeacoQC' in publications use:\n\n Emmaneel A (2025). _PeacoQC: Peak-based selection of high quality\n cytometry data_. doi:10.18129/B9.bioc.PeacoQC\n <https://doi.org/10.18129/B9.bioc.PeacoQC>, R package version 1.20.0,\n <https://bioconductor.org/packages/PeacoQC>.\n\nA BibTeX entry for LaTeX users is\n\n @Manual{,\n title = {PeacoQC: Peak-based selection of high quality cytometry data},\n author = {Annelies Emmaneel},\n year = {2025},\n note = {R package version 1.20.0},\n url = {https://bioconductor.org/packages/PeacoQC},\n doi = {10.18129/B9.bioc.PeacoQC},\n }\n\n\n\n\nHow does a version number work? Lets say we have the following version number: 1.20.0\nThe first number of the version (1. in this case) denotes major changes, primarily those where after the version change the package may not be compatible with the code used in the prior version. As a consequence, this number changes rarely.\nThe second number (.20. in this case) is the minor version. Minor changes typically consist of new features that are added, that don’t affect the overall package function. These will change more frequently, especially for Bioconductor packages with fixed release cycles.\nThe final number (.0 in this case) is often used to denote small changes occuring within a minor release period, often bug-fixes or fixing typos within the documentation.\n\n\nWe may in the future need to install specific package versions (but wont be doing so today). As expected, which repository contains the R package influences how we would go about doing this.\nFor CRAN packages, we can use the remotes packages install_version() function. This allows us to provide the version number, and designate the repository location (the CRAN url in this case).\n\nremotes::install_version(\"ggplot2\", version = \"3.5.2\", repos = \"https://cloud.r-project.org\")\n\nFor GitHub-based R packages, the package versioning schema is not as strict as that of CRAN or Bioconductor. Typically, changes in R packagaes are put out by their developers as releases. When trying to install a particular release, we can add an additional argument to the install_github() function, specifying the release version’s tag number. For example:\n\nremotes::install_github(\"DavidRach/Luciernaga\", ref = \"v0.99.7\")\n\nAlternatively, if the developer doesn’t implement releases, you can provide the hash number of a particular commit.\n\nremotes::install_github(\"DavidRach/Luciernaga\", ref = \"8d1d694\")", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Intro to R" ] }, { - "objectID": "course/02_FilePaths/index.html#file-paths", - "href": "course/02_FilePaths/index.html#file-paths", - "title": "02 - File Paths", - "section": "File Paths", - "text": "File Paths\nOne way we can do this is through a file.path argument. We could potentially provide this by adding either a / or a  into the path argument, depending on your computers operating system.\n\nlist.files(path=\"data/target\", full.names=FALSE, recursive=FALSE)\n\n\n\nWhile this works in your particular context, if you are sharing the code with others who have a different operating system, these hard-coded “/” or “\" will cause the code for them to error out at these particular steps.\n\nFor that reason, it is better to assemble a file.path using the file.path() function. This function takes into account the operating system, removing your need to have to worry about this particular computing nuance, and write code that is reproducible and replicable for everyone.\n\nFolderLocation <- file.path(\"data\", \"target\")\nFolderLocation\n\n[1] \"data/target\"\n\n\n\nlist.files(path=FolderLocation, full.names=FALSE, recursive=FALSE)\n\n\n\n\nWe can also append additional locations to existing file paths, by including the variable name within the file.path() we are creating.\n\nFolderLocation <- \"data\"\nScreenshotFolder <- file.path(FolderLocation, \"target\")\nScreenshotFolder\n\n[1] \"data/target\"\n\n\n\nlist.files(path=ScreenshotFolder, full.names=FALSE, recursive=FALSE)\n\n\n\n\nAdditionally, list.files() has the ability to filter for files that contain a particular character string. This can be useful is we are searching for “.fcs” or “.csv” files, but also for files that contain a particular word. In the case of the ScreenshotFolders\n\nlist.files(path=ScreenshotFolder, pattern=\"ND050\", full.names=FALSE, recursive=FALSE)\n\n\nYou will notice, the index numbers are in the context of what is filtered, not all the folder contents.", + "objectID": "course/01_InstallingRPackages/index.html#documentation-and-websites", + "href": "course/01_InstallingRPackages/index.html#documentation-and-websites", + "title": "01 - Installing R Packages", + "section": "Documentation and Websites", + "text": "Documentation and Websites\nWe have already seen a couple ways to access the help documentation contained within an R package via Positron. Beyond internal documentation, R packages often have external websites that contain additional walk-through articles (ie. vignettes) to better document how to use the package.\nFor CRAN-based packages, we can start off by searching for the package name. So, in the case of dplyr:\n\n\n\nTwo main suggestions pop up. One is the package’s CRAN page. Unfortunately, this one is not particularly user-friendly, although some text-based vignettes are accessible.\n\n\n\nBecause of this, many CRAN-based R packages (especially those part of the tidyverse) use pkgdown-generated websites hosted via a GitHub page (similar to the one used by this course. The second option on the search is dplyr’s pkgdown-style website\n\n\n\nWe can usually find the list of functions under the Reference tab, with the more extensive documentation vignettes being found under the Articles tab.\n\n\n\nGitHub-based packages will vary depending on their individual developers, but often will also use pkgdown-style websites. These often appear as links on the right-hand side, or within the repository’s ReadMe.\n\n\n\nFor Bioconductor-based packages, on the package’s page we can typically find the already rendered vignette articles, usually as either html or pdf files. For example, with PeacoQC:\n\n\n\nAdditionally, package vignettes can also be reached via the packages help index page. These will usually appear under User guides, package vignettes, and other documentation.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Intro to R" ] }, { - "objectID": "course/02_FilePaths/index.html#selecting-for-patterns", - "href": "course/02_FilePaths/index.html#selecting-for-patterns", - "title": "02 - File Paths", - "section": "Selecting for Patterns", - "text": "Selecting for Patterns\nIf we currently listed the files within data, we get a return that looks like this:\n\nlist.files(\"data\", full.names=FALSE, recursive=FALSE)\n\n\n\n\nAs you can see, we are getting back both folders and individual .fcs files. We could consequently change the pattern to provide a character string that will only return the .fcs files. We will go ahead and assign this list to a variable named files, for later retrieval.\n\nfiles <- list.files(\"data\", pattern=\".fcs\", full.names=FALSE, recursive=FALSE)\nfiles\n\n\n\n\nOne of the R packages we will be using througout the course is the stringr package. It contains two functions that can be useful when identifying more complicated character strings. In this case, if we run the str_detect() function to identify which of the .fcs files within the files variable contains the “INF” character string, we get a vector of logical (ie. True or FALSE) outputs corresponding to each file.\n\n# install.packages(\"stringr\") # CRAN\nlibrary(stringr)\n\n\nstr_detect(files, \"INF\")\n\n\n\n\nSimilar to how we indexed the Fluorophore list (ex. Fluorophore[1:2]) which returned a subset, we can similarly use this logical vector to subset files that returned as TRUE for containing the pattern “INF”\n\nfiles[str_detect(files, \"INF\")]\n\n\n\n\nLet’s go ahead and save these subsetted file names to a new variable, called Infants.\n\nInfants <- files[str_detect(files, \"INF\")]", - "crumbs": [ - "About", - "Intro to R", - "02 - File Paths" - ] + "objectID": "course/02_FilePaths/Downsampler.html", + "href": "course/02_FilePaths/Downsampler.html", + "title": "Downsampling", + "section": "", + "text": "Due to trying to keep the overall file size down, I am downsampling to 100 events. For anyone interested in how I did this, this Quarto Markdown Document contains the code needed to repeat the process." + }, + { + "objectID": "course/02_FilePaths/Downsampler.html#specify-file.path-and-identify-files", + "href": "course/02_FilePaths/Downsampler.html#specify-file.path-and-identify-files", + "title": "Downsampling", + "section": "Specify file.path and identify files", + "text": "Specify file.path and identify files\nDue to the counts being conducter on two separate instruments, the number of columns differs, so they will need to be loaded into separate GatingSet objects.\n\nStorageLocation <- file.path(\"course\", \"02_FilePaths\", \"data\")\nExisting <- list.files(StorageLocation, pattern=\".fcs\", full.names=TRUE)\nList1 <- Existing[1:2] # 3L Aurora\nList2 <- Existing[3:8] # 4L Aurora" + }, + { + "objectID": "course/02_FilePaths/Downsampler.html#load-.fcs-files-into-a-gatingset", + "href": "course/02_FilePaths/Downsampler.html#load-.fcs-files-into-a-gatingset", + "title": "Downsampling", + "section": "Load .fcs files into a GatingSet", + "text": "Load .fcs files into a GatingSet\nLoad in files to their respective GatingSet objects\n\ncs1 <- load_cytoset_from_fcs(List1, truncate_max_range = FALSE, transformation = FALSE)\ngs1 <- GatingSet(cs1)\n\ncs2 <- load_cytoset_from_fcs(List2, truncate_max_range = FALSE, transformation = FALSE)\ngs2 <- GatingSet(cs2)" + }, + { + "objectID": "course/03_InsideFCSFile/slides.html#getting-set-up", + "href": "course/03_InsideFCSFile/slides.html#getting-set-up", + "title": "03 - Inside an FCS File", + "section": "Getting Set Up", + "text": "Getting Set Up" + }, + { + "objectID": "course/03_InsideFCSFile/slides.html#flowcore", + "href": "course/03_InsideFCSFile/slides.html#flowcore", + "title": "03 - Inside an FCS File", + "section": "flowCore", + "text": "flowCore\n\n\n\n\n\n\n\n\n.\n\n\nWe will be using the flowCore package, which is the oldest and most-frequently downloaded flow cytometry package on Bioconductor." + }, + { + "objectID": "course/03_InsideFCSFile/slides.html#flowframe", + "href": "course/03_InsideFCSFile/slides.html#flowframe", + "title": "03 - Inside an FCS File", + "section": "flowFrame", + "text": "flowFrame\n\n\n\n\n\n\n\n\n.\n\n\nFor read.FCS(), it accepts several arguments. The argument “filename” is where we provide our file.path to .fcs file that we wish to load into R. Let’s go ahead and do so\n\n\n\n\n\n\n\nread.FCS(filename=firstfile)" + }, + { + "objectID": "course/03_InsideFCSFile/slides.html#early-metadata", + "href": "course/03_InsideFCSFile/slides.html#early-metadata", + "title": "03 - Inside an FCS File", + "section": "Early Metadata", + "text": "Early Metadata\n\n\n\n\n\n\n\n\n.\n\n\nWithin the initial portion, we are getting back metadata keywords related to where and how the particular file was acquired. Keywords of potential interest include:\n\n\n\n\n\n\n\n\n\n\n\n\n\nStart Time\n\n\nWhat time was the .fcs file acquired\n\n\n\n\n\n\n\nDescriptionList$`$BTIM`\n\n[1] \"13:55:29.85\"" + }, + { + "objectID": "course/03_InsideFCSFile/slides.html#detector-values", + "href": "course/03_InsideFCSFile/slides.html#detector-values", + "title": "03 - Inside an FCS File", + "section": "Detector Values", + "text": "Detector Values\n\n\n\n\n\n\n\n\n.\n\n\nThe next major stretch of keywords encode parameter values associated with the individual detectors for at the time of acquisition.\n\n\n\n\n\n\n\nDetectors <- DescriptionList[20:384]\nDetectors\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"" + }, + { + "objectID": "course/03_InsideFCSFile/slides.html#middle-metadata", + "href": "course/03_InsideFCSFile/slides.html#middle-metadata", + "title": "03 - Inside an FCS File", + "section": "Middle Metadata", + "text": "Middle Metadata\n\n\n\n\n\n\n\n\n.\n\n\nOnce we are out of the detector keywords, we find the last of the $Metadata associated keywords.\n\n\n\n\n\n\n\nDetectors <- DescriptionList[385:398]\nDetectors\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"" + }, + { + "objectID": "course/03_InsideFCSFile/slides.html#laser-metadata", + "href": "course/03_InsideFCSFile/slides.html#laser-metadata", + "title": "03 - Inside an FCS File", + "section": "Laser Metadata", + "text": "Laser Metadata\n\n\n\n\n\n\n\n\n.\n\n\nNext up, there is a small stretch of keywords containing the values associated with the individual lasers as far as delays and area scaling factors for a particular day (also useful when plotted).\n\n\n\n\n\n\n\nDetectors <- DescriptionList[399:410]\nDetectors\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"" + }, + { + "objectID": "course/03_InsideFCSFile/slides.html#display", + "href": "course/03_InsideFCSFile/slides.html#display", + "title": "03 - Inside an FCS File", + "section": "Display", + "text": "Display\n\n\n\n\n\n\n\n\n.\n\n\nThen there is a stretch matching whether a particular detector needs to be displayed as linear (in the case of time and scatter) or as log (for individual detectors).\n\n\n\n\n\n\n\nDetectors <- DescriptionList[412:472]\nDetectors\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"" + }, + { + "objectID": "course/03_InsideFCSFile/slides.html#flowcore-parameters", + "href": "course/03_InsideFCSFile/slides.html#flowcore-parameters", + "title": "03 - Inside an FCS File", + "section": "flowCore Parameters", + "text": "flowCore Parameters\n\n\n\n\n\n\n\n\n.\n\n\nDepending on the arguments selected during read.FCS(), we might also encounter additional keywords that are added in by flowCore. For example, we do not see these keywords when “transformation” is set to FALSE.\n\n\n\n\n\n\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = FALSE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot" + }, + { + "objectID": "course/04_IntroToTidyverse/slides.html#read.csv", + "href": "course/04_IntroToTidyverse/slides.html#read.csv", + "title": "04 - Introduction to Tidyverse", + "section": "read.csv", + "text": "read.csv\n\n\n\n\n\n\n\n\n.\n\n\nWe will start by first loading in our copied over dataset (Dataset.csv) from it’s location in the project folder. If you are following the organization scheme we have been using throughout the course, your file path will look something like this:\n\n\n\n\n\n\n\n\n\n\nthefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"" + }, + { + "objectID": "course/04_IntroToTidyverse/slides.html#data.frame", + "href": "course/04_IntroToTidyverse/slides.html#data.frame", + "title": "04 - Introduction to Tidyverse", + "section": "data.frame", + "text": "data.frame\n\n\n\n\n\n\n\n\n.\n\n\nOr alternatively using the new-to-us glimpse() function\n\n\n\n\n\n\n\nglimpse(Data)\n\nError in `glimpse()`:\n! could not find function \"glimpse\"" + }, + { + "objectID": "course/04_IntroToTidyverse/slides.html#column-value-type", + "href": "course/04_IntroToTidyverse/slides.html#column-value-type", + "title": "04 - Introduction to Tidyverse", + "section": "Column value type", + "text": "Column value type\n\n\n\n\n\n\n\n\n.\n\n\nAs we saw last week, functions often need values that match a certain type (the paintbrush needing paint analogy). As we inspect the columns of Data, we can notice some of the columns contain values within that are character (ie. “char”) values. Others appear to contain numeric values (which are subtyped as either double (“ie. dbl”) or integer (ie. “int”)). At first glance, we do not appear to have any logical (ie. TRUE or FALSE) columns in this dataset." + }, + { + "objectID": "course/04_IntroToTidyverse/slides.html#select-columns", + "href": "course/04_IntroToTidyverse/slides.html#select-columns", + "title": "04 - Introduction to Tidyverse", + "section": "select (Columns)", + "text": "select (Columns)\n\n\n\n\n\n\n\n\n.\n\n\nNow that we have read in our data, and have a general picture of the structure and contents, lets start learning the main dplyr functions we will be using throughout the course. To do this, lets go ahead and attach dplyr to our local environment via the library() call.\n\n\n\n\n\n\n\nlibrary(dplyr)" }, { - "objectID": "course/02_FilePaths/index.html#conditionals", - "href": "course/02_FilePaths/index.html#conditionals", - "title": "02 - File Paths", - "section": "Conditionals", - "text": "Conditionals\nOne useful thing is that within R, we can set conditions on whether something is carried out. The most typical conditional you will encounter are the “If” statements. They typically take a form that resembles the following.\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n\n\nIn this case of the above, if the variable within the () is equal to true, the code within the {} will be executed.\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n[1] \"Take a break\"\n\n\n\n\nBy contrast, when the variable within the () is equal to false, the code within the {} will not be executed.\n\nNeedCoffee <- FALSE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n\n\nThese “If” statements will trigger as long as the specified condition within the () is TRUE. For a different example:\n\nRowNumber <- 299\n2 + RowNumber > 300\n\n[1] TRUE\n\n\n\nif (2 + RowNumber > 3){\n print(\"Stop Iterating\")\n}\n\n[1] \"Stop Iterating\"\n\n\n\n\nWhen you add an ! in front a conditional, it flips the expected outcome.\n\nItsRaining <- TRUE\n\nif (ItsRaining){print(\"Bring an Umbrella\")}\n\n[1] \"Bring an Umbrella\"\n\n\n\n!ItsRaining\n\n[1] FALSE\n\n\n\nif (!ItsRaining){print(\"Bring an Umbrella\")}\n\n\nItsRaining <- TRUE\n\nif (!ItsRaining){print(\"Bring Sunglasses\")}\n\n\n\nWe will explore more complicated conditionals throughout the course, but for now, let’s implement a couple simple ones in the context of copying over the .fcs files in Infants over to a new target3 folder.", - "crumbs": [ - "About", - "Intro to R", - "02 - File Paths" - ] + "objectID": "course/04_IntroToTidyverse/slides.html#relocate", + "href": "course/04_IntroToTidyverse/slides.html#relocate", + "title": "04 - Introduction to Tidyverse", + "section": "relocate", + "text": "relocate\n\n\n\n\n\n\n\n\n.\n\n\nAlternatively, we occasionally want to move one column. While we could respecify the location using select(), specifying the names of all the other columns out in a line of code to just to rearrange one does not sound like a good use of time. For this reason, the second dplyr function we will be learning is the relocate() function." }, { - "objectID": "course/02_FilePaths/index.html#conditionals-in-practice", - "href": "course/02_FilePaths/index.html#conditionals-in-practice", - "title": "02 - File Paths", - "section": "Conditionals in practice", - "text": "Conditionals in practice\nFirst off, let’s write a conditional to check if there is a target3 folder within data.\n\nfiles_present <- list.files(\"data\", full.names=FALSE, recursive=FALSE)\nfiles_present\n\n\n\n\n\nFolderTarget3 <- file.path(\"data\", \"target3\")\ndir.exists(FolderTarget3)\n\n\n\n\nWe can write a conditional to create a folder if one does not yet exist.\n\nif (!dir.exists(FolderTarget3)){\n dir.create(FolderTarget3)\n}", - "crumbs": [ - "About", - "Intro to R", - "02 - File Paths" - ] + "objectID": "course/04_IntroToTidyverse/slides.html#rename", + "href": "course/04_IntroToTidyverse/slides.html#rename", + "title": "04 - Introduction to Tidyverse", + "section": "rename", + "text": "rename\n\n\n\n\n\n\n\n\n.\n\n\nAt this point, we are able to both move and select particular columns, allowing us to rearrange and subset a larger data.frame object however we want it to appear. However, as we encountered, some of the names contain special characters and spaces, requiring use of tick marks (``) to avoid issues. How can we change a column name?" }, { - "objectID": "course/02_FilePaths/index.html#copying-files", - "href": "course/02_FilePaths/index.html#copying-files", - "title": "02 - File Paths", - "section": "Copying Files", - "text": "Copying Files\nTo copy files to another folder location, we use the file.copy() function. It has two arguments that we will be working with, from being the .fcs files, and to being the folder location we wish to transfer them to. If we tried using them as we currently have them:\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)\n\n\n\n\nThe reason for this error is we are only working with a partial file path, as viewed from our Working directory. In this case, what is needed is the full file.path, so the file.path should also include the upstream folders from your current working directory.\n\ngetwd()\n\n\n\n\nIn this case, we can update the .fcs files location by switching the full.names argument within list.files() from FALSE, to TRUE.\n\nfiles_present <- list.files(\"data\", full.names=TRUE, recursive=FALSE)\nfiles_present\n\n\nAnd filter for those containing “INF” again\n\nInfants <- files_present[str_detect(files_present, \"INF\")]\n\nAnd then try again:\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)", - "crumbs": [ - "About", - "Intro to R", - "02 - File Paths" - ] + "objectID": "course/04_IntroToTidyverse/slides.html#pull", + "href": "course/04_IntroToTidyverse/slides.html#pull", + "title": "04 - Introduction to Tidyverse", + "section": "pull", + "text": "pull\n\n\n\n\n\n\n\n\n.\n\n\nSometimes, we may want to retrieve individual values present in a column, to use within either a vector or a list. We can do this using the pull() function, which will retrieve the column contents and strip the column formatting\n\n\n\n\n\n\n\nData |> pull(Date) |> head(10)\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"" }, { - "objectID": "course/02_FilePaths/index.html#removing-files.", - "href": "course/02_FilePaths/index.html#removing-files.", - "title": "02 - File Paths", - "section": "Removing files.", - "text": "Removing files.\nJust like we can add files via R, we can also remove them. However, when we remove them via this route, they are removed permanently, not sent to the recycle bin. We will revisit how later on in the course after you have gained additional experience with file.paths.\n\n?unlink()", - "crumbs": [ - "About", - "Intro to R", - "02 - File Paths" - ] + "objectID": "course/04_IntroToTidyverse/slides.html#filter-rows", + "href": "course/04_IntroToTidyverse/slides.html#filter-rows", + "title": "04 - Introduction to Tidyverse", + "section": "filter (Rows)", + "text": "filter (Rows)\n\n\n\n\n\n\n\n\n.\n\n\nSo far, we have been working with dplyr functions primarily used when working with and subsetting columns (including select(), pull(), rename() and relocate()). What if we wanted to work with rows of a data.frame? This is where the filter() function is used." }, { - "objectID": "course/02_FilePaths/index.html#basename", - "href": "course/02_FilePaths/index.html#basename", - "title": "02 - File Paths", - "section": "Basename", - "text": "Basename\nIf we look at Infants with the full.names=TRUE, we see the additional pathing folder has been added, allowing us to successfully copy over the files.\n\nInfants\n\n\n\n\nIf we were trying to retrieve just the local file names from the full.names, we could do so with basename() function. We will use this in combination with additional arguments later in the course\n\nbasename(Infants)", - "crumbs": [ - "About", - "Intro to R", - "02 - File Paths" - ] + "objectID": "course/04_IntroToTidyverse/slides.html#mutate", + "href": "course/04_IntroToTidyverse/slides.html#mutate", + "title": "04 - Introduction to Tidyverse", + "section": "mutate", + "text": "mutate\n\n\n\n\n\n\n\n\n.\n\n\nAs we can see, with just these handful of functions, we have the building blocks to rearrange and subset a larger data.frame into a format that we prefer. But what if we wanted to alter the content of a column, or add new columns to an existing data.frame? This is where the mutate() function can be used." }, { - "objectID": "course/02_FilePaths/index.html#recursive", - "href": "course/02_FilePaths/index.html#recursive", - "title": "02 - File Paths", - "section": "Recursive", - "text": "Recursive\nAnd finally that we have created additional nested folders and populated them with fcs files, let’s see what setting list.files() recursive argument to TRUE\n\nall_files_present <- list.files(full.names=TRUE, recursive=TRUE)\nall_files_present \n\n\n\n\nIn this case, all files in all folders within the working directory are shown. This can be useful when exploring folder contents, but if there are a lot of files present within the folder, it will take a while to return the list.", - "crumbs": [ - "About", - "Intro to R", - "02 - File Paths" - ] + "objectID": "course/04_IntroToTidyverse/slides.html#arrange", + "href": "course/04_IntroToTidyverse/slides.html#arrange", + "title": "04 - Introduction to Tidyverse", + "section": "arrange", + "text": "arrange\n\n\n\n\n\n\n\n\n.\n\n\nAnd while we are here, let’s rearrange the rows so that they are descending based on the Tcell proportion. We can use this by using the desc() and arrange() functions from dplyr:\n\n\n\n\n\n\n\nTidyData <- TidyData |> arrange(desc(TcellsRounded))" }, { - "objectID": "course/02_FilePaths/index.html#saving-changes-to-version-control", - "href": "course/02_FilePaths/index.html#saving-changes-to-version-control", - "title": "02 - File Paths", - "section": "Saving changes to Version Control", - "text": "Saving changes to Version Control\nAnd as is good practice, to maintain version control, let’s stage all the files and folders we created today within the Week2 Project Folder, write a commit message, and send these files back to GitHub until they are needed again next time.", + "objectID": "course/04_IntroToTidyverse/index.html", + "href": "course/04_IntroToTidyverse/index.html", + "title": "04 - Introduction to Tidyverse", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", "crumbs": [ "About", "Intro to R", - "02 - File Paths" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/03_InsideFCSFile/index.html", - "href": "course/03_InsideFCSFile/index.html", - "title": "03 - Inside an FCS File", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "objectID": "course/04_IntroToTidyverse/index.html#read.csv", + "href": "course/04_IntroToTidyverse/index.html#read.csv", + "title": "04 - Introduction to Tidyverse", + "section": "read.csv", + "text": "read.csv\nWe will start by first loading in our copied over dataset (Dataset.csv) from it’s location in the project folder. If you are following the organization scheme we have been using throughout the course, your file path will look something like this:\n\nthefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWe encourage using the file.path function to build our file paths, as this keeps our code reproducible and replicable when a project folder is copied to other people’s computers that differ on whether the operating system uses forward or backward slash separation between folders.\n\n\nAbove, we directly specified the name (Dataset) and filetype (.csv) of the file we wanted in the last argument of the file.path (“Dataset.csv”). This allows us to skip the list.files() step we used last week as we have provided the full file path. While this approach can be faster, if we accidentally mistype the file name, we could end up with an error at the next step due to no files being found with the mistyped name.\nSince our dataset is stored as a .csv file, we will be using the read.csv() function from the utils package (included in our base R software installation) to read it into R. We will also use the colnames() function from last week to get a read-out of the column names.\n\nData <- read.csv(file=thefilepath, check.names=FALSE)\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\nAs we look at the line of code, we now have enough context to decipher that the “file” argument is where we provide a file path to an individual file, but what does the “check.names” argument do?\nLet’s see what happens to the column names when we set “check.names” argument to TRUE:\n\nData_Alternative <- read.csv(thefilepath, check.names=TRUE)\ncolnames(Data_Alternative)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump.\" \"Dump..1\" \"Tcells\" \n[19] \"Vd2.\" \"Vd2..1\" \"Va7.2.\" \n[22] \"Va7.2..1\" \"CD4.\" \"CD4..1\" \n[25] \"CD8.\" \"CD8..1\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\nAs we can see, any column name that contained a special character or a space was automatically converted over to R-approved syntax. However, this resulted in the loss of both +” and “-”, leaving us unable to determine whether we are looking at cells within or outside a particular gate.\n\nBecause of this, it is often better to rename columns individually after import, which we will learn how to do later today.\nFollowing up with what we practiced last week, lets use the head() function to visualize the first few rows of data.\n\nhead(Data, 3)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 Ctrl 2025-07-26 Male HEU-hi 2098368 1894070\n2 INF0100 0 Ctrl 2025-07-26 Male HEU-lo 2020184 1791890\n3 INF0100 4 Ctrl 2025-07-26 Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n\nWhen working in Positron, we could have alternatively clicked on the little grid icon next to our created variable “Data” in the right secondary sidebar, which would have opened the data in our Editor window. From this same window, we can see it is stored as a “data.frame” object type.\n\nWe could also achieve the same window to open using the View() function:\n\nView(Data)\n\nWrapping up our brief recap of last week functions, we can check an objects type using both the class() and str() functions.\n\nclass(Data)\n\n[1] \"data.frame\"\n\n\n\nstr(Data)\n\n'data.frame': 196 obs. of 31 variables:\n $ bid : chr \"INF0052\" \"INF0100\" \"INF0100\" \"INF0100\" ...\n $ timepoint : int 0 0 4 9 0 4 9 4 9 0 ...\n $ Condition : chr \"Ctrl\" \"Ctrl\" \"Ctrl\" \"Ctrl\" ...\n $ Date : chr \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n $ infant_sex : chr \"Male\" \"Male\" \"Male\" \"Male\" ...\n $ ptype : chr \"HEU-hi\" \"HEU-lo\" \"HEU-lo\" \"HEU-lo\" ...\n $ root : int 2098368 2020184 1155040 358624 1362216 1044808 1434840 972056 1521928 2363512 ...\n $ singletsFSC : int 1894070 1791890 1033320 328624 1206309 917398 1265022 875707 1359574 2136616 ...\n $ singletsSSC : int 1666179 1697083 875465 289327 1032946 735579 988445 767323 1175755 1875394 ...\n $ singletsSSCB : int 1537396 1579098 845446 276289 982736 685592 940454 718000 1097478 1732620 ...\n $ CD45 : num 0.595 0.911 0.971 0.982 0.957 ...\n $ NotMonocytes : num 0.882 0.905 0.985 0.986 0.956 ...\n $ nonDebris : num 0.863 0.86 0.958 0.941 0.841 ...\n $ lymphocytes : num 0.642 0.215 0.74 0.651 0.705 ...\n $ live : num 0.902 0.891 0.876 0.915 0.895 ...\n $ Dump+ : num 0.2109 0.0625 0.2002 0.2147 0.3383 ...\n $ Dump- : num 0.691 0.828 0.676 0.701 0.557 ...\n $ Tcells : num 0.28 0.675 0.612 0.631 0.44 ...\n $ Vd2+ : num 0.00812 0.00727 0.00465 0.01135 0.00475 ...\n $ Vd2- : num 0.992 0.993 0.995 0.989 0.995 ...\n $ Va7.2+ : num 0.0145 0.0158 0.0158 0.017 0.0133 ...\n $ Va7.2- : num 0.977 0.977 0.98 0.972 0.982 ...\n $ CD4+ : num 0.634 0.612 0.664 0.438 0.739 ...\n $ CD4- : num 0.343 0.365 0.316 0.534 0.243 ...\n $ CD8+ : num 0.273 0.336 0.286 0.486 0.195 ...\n $ CD8- : num 0.0698 0.0293 0.0294 0.0476 0.0476 ...\n $ Tcells_count : int 164771 208241 371723 111552 291777 271870 487937 220634 415867 184930 ...\n $ lymphocytes_count: int 587573 308583 607477 176662 663667 510730 726238 451047 710964 652155 ...\n $ Monocytes : num 0.118 0.0948 0.0155 0.0145 0.0444 ...\n $ Debris : num 0.1372 0.1397 0.0421 0.0587 0.1592 ...\n $ CD45_count : int 915203 1438047 820570 271304 940733 675857 921660 701657 1066884 1017713 ...", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#getting-set-up", - "href": "course/03_InsideFCSFile/index.html#getting-set-up", - "title": "03 - Inside an FCS File", - "section": "Getting Set Up", - "text": "Getting Set Up\n\n\nSet up File Paths\nHaving copied over the new data to your working project folder (Week 3 or whatever your chosen name), let’s identify the file paths between our working directory and the fcs files. If you retained the same project organization structure we had during Week #2, it may look similar to the following:\n\nPathToDataFolder <- file.path(\"data\")\n\n\nPathToDataFolder\n\n[1] \"data\"\n\n\n\n\n\n\nLocate .fcs files\nWe will now locate our .fcs files. As we saw last week, our computer will need the full file.paths to these individual files, so we will set the list.files() “full.names” argument to TRUE.\n\nfcs_files <- list.files(PathToDataFolder, pattern=\".fcs\", full.names=TRUE)\nfcs_files\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n\nBy contrast, if the “full.names” argument was set to FALSE, we would have retrieved just the file names\n\nlist.files(PathToDataFolder, pattern=\".fcs\", full.names=FALSE)\n\n[1] \"CellCounts4L_AB_05_ND050_05.fcs\"\n\n\nThis would have been the equivalent of running the basename function on the “full.names=TRUE” output.\n\nbasename(fcs_files)\n\n[1] \"CellCounts4L_AB_05_ND050_05.fcs\"", + "objectID": "course/04_IntroToTidyverse/index.html#data.frame", + "href": "course/04_IntroToTidyverse/index.html#data.frame", + "title": "04 - Introduction to Tidyverse", + "section": "data.frame", + "text": "data.frame\nOr alternatively using the new-to-us glimpse() function\n\nglimpse(Data)\n\nError in `glimpse()`:\n! could not find function \"glimpse\"\n\n\n\n\n\n\n\n\nCheckpoint 1\n\n\n\nThis however returns an error. Any idea why this might be occuring?\n\n\n\n\nCode\n# We haven't attached/loaded the package in which the function glimpse is within\n\n\n\n\n\n\n\n\nCheckpoint 2\n\n\n\nHow would we locate a package a not-yet-loaded function is within?\n\n\n\n\nCode\n# We can use double ? to search all installed packages for a function, regardless\n# if the package is attached to the environment or not\n\n??glimpse\n\n\n\nFrom the list of search matches (in the right secondary sidebar), it looks likely that the glimpse() function in the dplyr package was the one we were looking for. This is one the main tidyverse packages we will be using throughout the course. Let’s attach it to our environment via the library() call first and try running glimpse() again.\n\nlibrary(dplyr)\nglimpse(Data)\n\nRows: 196\nColumns: 31\n$ bid <chr> \"INF0052\", \"INF0100\", \"INF0100\", \"INF0100\", \"INF0179…\n$ timepoint <int> 0, 0, 4, 9, 0, 4, 9, 4, 9, 0, 0, 4, 9, 0, 4, 9, 4, 9…\n$ Condition <chr> \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctr…\n$ Date <chr> \"2025-07-26\", \"2025-07-26\", \"2025-07-26\", \"2025-07-2…\n$ infant_sex <chr> \"Male\", \"Male\", \"Male\", \"Male\", \"Male\", \"Male\", \"Mal…\n$ ptype <chr> \"HEU-hi\", \"HEU-lo\", \"HEU-lo\", \"HEU-lo\", \"HU\", \"HU\", …\n$ root <int> 2098368, 2020184, 1155040, 358624, 1362216, 1044808,…\n$ singletsFSC <int> 1894070, 1791890, 1033320, 328624, 1206309, 917398, …\n$ singletsSSC <int> 1666179, 1697083, 875465, 289327, 1032946, 735579, 9…\n$ singletsSSCB <int> 1537396, 1579098, 845446, 276289, 982736, 685592, 94…\n$ CD45 <dbl> 0.5952943, 0.9106762, 0.9705765, 0.9819573, 0.957259…\n$ NotMonocytes <dbl> 0.8820349, 0.9052256, 0.9845400, 0.9855070, 0.955627…\n$ nonDebris <dbl> 0.8627649, 0.8602660, 0.9578793, 0.9412615, 0.840783…\n$ lymphocytes <dbl> 0.6420138, 0.2145848, 0.7403110, 0.6511588, 0.705478…\n$ live <dbl> 0.9020581, 0.8908981, 0.8757665, 0.9153242, 0.895214…\n$ `Dump+` <dbl> 0.21090996, 0.06252775, 0.20023803, 0.21469246, 0.33…\n$ `Dump-` <dbl> 0.6911482, 0.8283703, 0.6755285, 0.7006317, 0.556895…\n$ Tcells <dbl> 0.2804264, 0.6748298, 0.6119129, 0.6314431, 0.439643…\n$ `Vd2+` <dbl> 0.008120361, 0.007265620, 0.004651313, 0.011348967, …\n$ `Vd2-` <dbl> 0.9918796, 0.9927344, 0.9953487, 0.9886510, 0.995246…\n$ `Va7.2+` <dbl> 0.014480704, 0.015774991, 0.015794019, 0.017023451, …\n$ `Va7.2-` <dbl> 0.9773989, 0.9769594, 0.9795547, 0.9716276, 0.981924…\n$ `CD4+` <dbl> 0.6341164, 0.6119112, 0.6639621, 0.4378944, 0.739256…\n$ `CD4-` <dbl> 0.3432825, 0.3650482, 0.3155925, 0.5337331, 0.242668…\n$ `CD8+` <dbl> 0.2734826, 0.3357696, 0.2862104, 0.4861231, 0.195063…\n$ `CD8-` <dbl> 0.06979990, 0.02927858, 0.02938209, 0.04761008, 0.04…\n$ Tcells_count <int> 164771, 208241, 371723, 111552, 291777, 271870, 4879…\n$ lymphocytes_count <int> 587573, 308583, 607477, 176662, 663667, 510730, 7262…\n$ Monocytes <dbl> 0.11796509, 0.09477437, 0.01545999, 0.01449297, 0.04…\n$ Debris <dbl> 0.13723513, 0.13973396, 0.04212072, 0.05873854, 0.15…\n$ CD45_count <int> 915203, 1438047, 820570, 271304, 940733, 675857, 921…\n\n\nWe notice that while similar to the str() output, glimpse() handles spacing a little differently, and includes the dimensions at the top. However, we can also retrieve the dimensions directly using the dim() function (which maintains the row followed by column position convention of base R (ex. [196,31]))\n\ndim(Data)\n\n[1] 196 31", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#flowcore", - "href": "course/03_InsideFCSFile/index.html#flowcore", - "title": "03 - Inside an FCS File", - "section": "flowCore", - "text": "flowCore\nWe will be using the flowCore package, which is the oldest and most-frequently downloaded flow cytometry package on Bioconductor.\n\n\nCode\n# I have attached this code for anyone that is interested in seeing how these plots were made. The content is not part of today's lesson, so if you are just starting off, we will cover the details of data-tidying and creating ggplot objects over the next several weeks. Best, David\n\n# Load required packages via a library call\n\nlibrary(dplyr) # CRAN\nlibrary(stringr) # CRAN\nlibrary(ggplot2) # CRAN\n#library(plotly) # Using the :: to access \n\n# Loading in the dataset contained within the .csv file\nBioconductorFlow_path <- file.path(PathToDataFolder, \"BioconductorFlow.csv\")\nBioconductorFlowPackages <- read.csv(BioconductorFlow_path, check.names=FALSE)\nBioconductorFlowPackages <- BioconductorFlowPackages |>\n arrange(desc(since)) |> mutate(package = factor(package, levels = package))\n\n# Newer Base R Pipe : |> \n# Older mostly equivalent Magrittr Pipe %>% \n\n\n\n\nCode\n# Notice the code-chunk eval arguments above dictate the shape of the final rendered plot. \n\n# Taking the imported dataset and passing it to ggplot2 to create the first plot. \n\nplot <- ggplot(BioconductorFlowPackages,\n aes(x = 0, xend = since, y = package, yend = package)) +\n geom_segment(linewidth = 2, color = \"steelblue\") +\n scale_x_continuous(trans = \"reverse\", \n breaks = seq(0, max(BioconductorFlowPackages$since), by = 5)) +\n labs(\n x = \"Years in Bioconductor\",\n y = NULL,\n title = \"Bioconductor Flow Cytometry R packages\"\n ) +\n theme_bw()\n\n# Taking the static plot and making it interactive using the plotly package\n\nplotly::ggplotly(plot)\n\n\n\n\n\n\n\n\nCode\n# Retrieving the names of Bioconductor flow cytometry R packages in correct release order. \n\nHistoricalOrder <- BioconductorFlowPackages |> pull(package)\n\n# Bringing in 2025 package usage dataset from a .csv file\nBioconductorUsage_path <- file.path(PathToDataFolder, \"BioconductorDownloads.csv\")\nBioconductorUsage <- read.csv(BioconductorUsage_path, check.names=FALSE)\nBioconductorUsage <- BioconductorUsage |> dplyr::filter(Month %in% \"all\")\n\n# Note, dplyr::filter is used due to flowCore also having a filter function, which causes conflicts once it is attached to the local environment. \n\n# Combining both data.frames for use in the plot\n\nDataset <- left_join(BioconductorFlowPackages, BioconductorUsage, by=\"package\")\n\n# Rearranging the order in which packages are displayed\n\nDataset$package <- factor(Dataset$package, levels=HistoricalOrder)\n\n\n\n\nCode\n# Generating the 2nd plot with ggplot2\n\nplot <- ggplot(Dataset, aes(x = since, y = Nb_of_distinct_IPs)) +\n geom_point(aes(color = package), size = 3, alpha = 0.7) + \n labs(\n x = \"Years in Bioconductor\",\n y = \"Number of Yearly Downloads\",\n title = \"\",\n color = \"Package\"\n ) +\n theme_bw()\n\n# Making it interactive with plotly\n\nplotly::ggplotly(plot)\n\n\n\n\n\n\nflowCore is also one of the many Bioconductor packages maintained by Mike Jiang. In many ways (as those who completed the optional take-home problems for Week #1 know) reminiscent of this xkcd comic:\n\nAs with all our R packages, we first need to make sure flowCore is attached to our local environment via the library call.\n\nlibrary(flowCore)\n\nThe function we will be using today is the read.FCS() function. Do you remember how to access the help documentation?\n\n\nCode\n# Or when in Positron, hovering over the highlighted function name within the code-chunk\n\n?flowCore::read.FCS\n\n\nTo start, lets select just the first .fcs file. We will do this by indexing the first item within fcs_files via the square brackets [].\n\nfirstfile <- fcs_files[1]\nfirstfile\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"", + "objectID": "course/04_IntroToTidyverse/index.html#column-value-type", + "href": "course/04_IntroToTidyverse/index.html#column-value-type", + "title": "04 - Introduction to Tidyverse", + "section": "Column value type", + "text": "Column value type\nAs we saw last week, functions often need values that match a certain type (the paintbrush needing paint analogy). As we inspect the columns of Data, we can notice some of the columns contain values within that are character (ie. “char”) values. Others appear to contain numeric values (which are subtyped as either double (“ie. dbl”) or integer (ie. “int”)). At first glance, we do not appear to have any logical (ie. TRUE or FALSE) columns in this dataset.\n\nIf we were trying to verify type of values contained within a data.frame column, we could employ several similarly-named functions (is.character(), is.numeric() or is.logical()) to check\n\n# colnames(Data) # To recheck the column names\n\nis.character(Data$bid)\n\n[1] TRUE\n\n\n\nis.numeric(Data$bid)\n\n[1] FALSE\n\n\n\n# colnames(Data) # To recheck the column names\n\nis.character(Data$Tcells_count)\n\n[1] FALSE\n\n\nFor numeric columns using the is.numeric() function, we can also be subtype specific using either is.integer() or is.double().\n\n# colnames(Data) # To recheck the column names\n\nis.numeric(Data$Tcells_count)\n\n[1] TRUE\n\nis.integer(Data$Tcells_count)\n\n[1] TRUE\n\nis.double(Data$Tcells_count)\n\n[1] FALSE\n\n\n\n\n\n\n\n\nReminder\n\n\n\nAs we observed last week with keywords, column names that contain special characters like $ or spaces will need to be surrounded with tick marks in order for the function to be able to run.\n\n\n\n# colnames(Data) # To recheck the column names\nis.numeric(Data$CD8-)\n\nError in parse(text = input): <text>:2:21: unexpected ')'\n1: # colnames(Data) # To recheck the column names\n2: is.numeric(Data$CD8-)\n ^\n\n\n\n# colnames(Data) # To recheck the column names\nis.numeric(Data$`CD8-`)\n\n[1] TRUE", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#flowframe", - "href": "course/03_InsideFCSFile/index.html#flowframe", - "title": "03 - Inside an FCS File", - "section": "flowFrame", - "text": "flowFrame\nFor read.FCS(), it accepts several arguments. The argument “filename” is where we provide our file.path to .fcs file that we wish to load into R. Let’s go ahead and do so\n\nread.FCS(filename=firstfile)\n\nPlease note, if you are doing this with your own .fcs files, you will need to provide two additional arguments, “transformation” = FALSE, and “truncate_max_range” = FALSE for the files to be read in correctly. We will revisit the reasons why in Week #5.\n\nread.FCS(filename=firstfile, transformation = FALSE, truncate_max_range = FALSE)\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot\n\n\nIn this case, we can see the .fcs file has been read into R as a “flowFrame” object. We can also see the file name, as well as details about the number of cells, and number of columns (whether detectors (for raw spectral flow data) or fluorophores (for unmixed spectral flow data)).\n\nDirectly below we see what resembles a table. At first glance, the only column with an immediately discernable purpose is the one with the name column, which is listing the detectors present on a Cytek Aurora.\n\nAnd finally, at the bottom we reach a line that tells us that for this .fcs files, 599 keyword can be found in a description slot.\n\n\n\nSo let’s get our bearings, we have loaded in an .fcs file to R, but let’s use some of the concepts we covered last week to try to understand a bit about what type or class of object we are working with. From the output, we saw the words flowFrame object, so let’s read it back in again, but assign it to an variable/object called flowFrame so that we can use the type-discerning functions we worked with last week on.\n\nflowFrame <- read.FCS(filename=firstfile, transformation = FALSE, truncate_max_range = FALSE)\n\nAs we create this variable, if we have the session tab selected on our right secondary side bar, we see it appear:\n\nIf we were to use the type-determining functions we learned last week\n\nclass(flowFrame)\n\n[1] \"flowFrame\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nflowFrames are a class of object with a structure defined within the flowCore package. They are used to work with the data contained within individual .fcs files. Looking again at the right secondary side bar, we can see that it shows up as a ““S4 class flowFrame package flowCore”“” with 3 slots, with the words flowFrame adjacent to it.\nA perfectly valid first reaction to first reading this is “well how should I know what any of this means?”. Powering through this initial discomfort, let’s go ahead and click on the dropdown arrow next to the variables name and see if we get any additional clarity on the issue.\n\nWhen we do so, three additional drop-downs appear. Based on the previous line that mentioned 3 slots, we could infer that each line corresponds to one of those slots.\nWhat we are encountering with flowFrame is our first example of an S4 object type. These more-complicated object types are quite common for the various Bioconductor affilitated R packages.\nThese objects will usually appear with either S4 or S3 in their metadata, and are made up of various simpler object types that are cobbled together within the larger object, usually occupying individual slots.\nWhat advantage this bundling provides will be something we revisit throughout the course as you encounter more of these S4/S3 objects.\n\n\n\nexprs\nThe first slot within the flowFrame object shows up with the name “exprs”. For the exprs object, glancing at it’s middle column, we can based on the 100 rows and 61 columns, that it is likely a matrix-style object. We might also recall we saw similar numbers in the printed output when we ran read.FCS()earlier.\n\nWhich likely means that “exprs” slot is where the MFI data for the individual acquired cells within our .fcs file is being stored. Within Positron, for a matrix object, we can click on the little grid symbol on the far right to open up the table within editor.\n\nIf we utilize the scroll bars, we can see that the individual detectors (in the case of uploading a raw spectral fcs file, they would appear as fluorophores for unmixed spectral or conventional fcs files) occupy the individual columns, which are named. The rows are not named, but number 100, matching the number of cells present in the .fcs file. Additionally, on the far left there is a little summary table about the overall data.\n\nLet’s go ahead and assign this matrix to a new variable/object so that we can explore it later. Since flowFrame is an S4 object, it’s slots can be individually accessed by adding the @ symbol and the respective slot name.\n\nMFI_Matrix <- flowFrame@exprs\n\nAlternatively, we can use the Bioconductor helper function exprs() to get data held in that slot\n\nMFI_Matrix_Alternate <- exprs(flowFrame)\n\nIn the case of the above, this displayed text output to the console would be unwiedly to display all at once. If we wanted to only see the first five rows, we could use the head() function, and provide a value of 5.\n\nhead(MFI_Matrix, 5)\n\n Time UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A\n[1,] 38823 37.79983 -184.479996 353.87714 1106.22998 1145.18140 2130.21899\n[2,] 39780 234.23021 -98.456429 26.43876 70.65833 -89.93541 -29.14263\n[3,] 267292 -117.96355 40.732426 473.94574 1177.86975 1516.70935 1985.46130\n[4,] 128101 289.87671 -2.723389 -54.11960 -163.71489 32.62989 -134.90411\n[5,] 255221 -104.50541 -71.163338 567.57562 610.23627 1416.61328 2868.16040\n UV7-A UV8-A UV9-A UV10-A UV11-A UV12-A UV13-A\n[1,] 4376.34277 3246.7952 32050.65039 8123.2637 1992.5785 1070.3323 956.43573\n[2,] -26.34649 -162.6675 17.98848 271.9152 154.8575 163.5411 -32.81524\n[3,] 3658.87671 4140.1724 59792.16406 14013.7969 3427.4324 1668.7588 1071.14636\n[4,] 739.71960 402.9025 427.37534 315.6364 -223.0423 145.7121 127.03777\n[5,] 4034.58789 3234.6626 40126.46484 10325.0371 1974.0907 1033.8450 -21.57245\n UV14-A UV15-A UV16-A SSC-H SSC-A V1-A V2-A\n[1,] 290.8685 385.49921 670.97687 657613 750760.12 1171.1390 154.5628\n[2,] -104.9198 103.41382 71.41528 83481 81552.85 266.2424 705.2527\n[3,] 730.1430 214.93053 252.75406 890845 1183519.00 1196.0931 1183.1105\n[4,] -207.8978 -55.37944 -45.10131 75103 72457.33 227.9926 556.9189\n[5,] 273.6271 960.16290 341.20633 415791 501690.97 717.2498 929.9780\n V3-A V4-A V5-A V6-A V7-A V8-A\n[1,] 1346.4488525 1706.9260 1923.50940 898.2527 3162.55371 83596.5078\n[2,] 244.3218689 341.0508 381.15939 87.1600 151.68785 119.5544\n[3,] 2087.0092773 824.6352 1635.27258 1613.9069 4653.16260 176981.6094\n[4,] -0.8137281 205.4732 18.12125 179.6371 -69.50061 -132.4348\n[5,] 1358.4512939 788.6506 1208.81006 1156.7040 3118.42627 104951.2578\n V9-A V10-A V11-A V12-A V13-A V14-A\n[1,] 32506.7617 27161.5137 6236.072754 2220.303223 2023.39966 753.589355\n[2,] -79.7691 -109.1783 -73.991196 114.375542 -11.53453 124.986206\n[3,] 69236.4297 57626.8984 13175.838867 4534.874023 3434.38989 1995.172363\n[4,] 129.2739 231.8918 -5.473321 8.792875 -24.62049 -8.212234\n[5,] 42090.0781 34104.3164 7620.552734 3103.544189 2426.43359 650.836304\n V15-A V16-A FSC-H FSC-A SSC-B-H SSC-B-A B1-A\n[1,] 510.9540 228.34962 1055905 1217097.50 716733 815959.06 606.6683\n[2,] -207.3494 -28.96272 79696 83439.11 104575 103132.83 195.2795\n[3,] 1321.8030 615.05560 1092481 1453969.38 757351 982038.31 2010.5110\n[4,] -133.7503 -34.32619 64760 60415.23 67955 66806.13 -146.8936\n[5,] 290.2892 473.32599 1038362 1184479.00 425296 522873.12 1015.5981\n B2-A B3-A B4-A B5-A B6-A B7-A\n[1,] 416.98294 4172.4712 192400.0938 93929.9375 54236.3320 19342.6445\n[2,] 333.25662 332.1675 -230.9639 196.7810 292.8945 -187.2845\n[3,] 2150.21826 10106.9551 437801.5625 212176.1562 124294.3594 45068.3008\n[4,] -34.90987 165.7988 675.0156 136.3076 482.8665 133.0948\n[5,] 639.77527 6034.0200 244022.6094 118871.4609 68616.9688 24067.7949\n B8-A B9-A B10-A B11-A B12-A B13-A\n[1,] 10507.24219 9498.1270 4465.50928 1668.048096 2199.9475 1581.7345\n[2,] 70.90886 -334.3563 188.05545 -663.359619 -163.2331 27.9856\n[3,] 24289.59180 22500.1914 10624.99219 4684.497559 3471.7749 2727.3904\n[4,] 432.28091 246.8794 -94.44906 2.905877 106.8489 283.3633\n[5,] 14182.12793 13019.7100 5577.33984 2753.355957 1279.3009 1423.0276\n B14-A R1-A R2-A R3-A R4-A R5-A\n[1,] 1487.56860 147.1335 129.867630 35.90353 267.23999 49.79849\n[2,] 205.82298 -142.9224 66.516052 113.63218 -94.41375 98.13978\n[3,] 2371.95850 -128.3749 -105.482544 726.48547 18.87000 95.47879\n[4,] 33.24665 127.5455 122.607941 37.83584 -82.87500 -343.83768\n[5,] 1565.72742 -266.4482 -3.350622 -178.39566 -117.10875 -100.10384\n R6-A R7-A R8-A\n[1,] -732.7097 42.83144 248.56728\n[2,] 143.4497 -263.28741 -85.83299\n[3,] -194.4526 -84.08820 -301.46066\n[4,] 82.3745 60.27896 -94.38461\n[5,] -182.0066 184.36417 186.17207\n\n\nThis is much more workable, especially on a small laptop screen. We can see that there are names for each column corresponding to detector/fluorophore/metal depending on the .fcs file we are accessing. Lets retrieve these column names using the colnames() function.\n\nColumnNames <- colnames(MFI_Matrix)\nColumnNames\n\n $P1N $P2N $P3N $P4N $P5N $P6N $P7N $P8N \n \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \"UV7-A\" \n $P9N $P10N $P11N $P12N $P13N $P14N $P15N $P16N \n \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \"UV14-A\" \"UV15-A\" \n $P17N $P18N $P19N $P20N $P21N $P22N $P23N $P24N \n \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \"V3-A\" \"V4-A\" \"V5-A\" \n $P25N $P26N $P27N $P28N $P29N $P30N $P31N $P32N \n \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \n $P33N $P34N $P35N $P36N $P37N $P38N $P39N $P40N \n \"V14-A\" \"V15-A\" \"V16-A\" \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \n $P41N $P42N $P43N $P44N $P45N $P46N $P47N $P48N \n \"B2-A\" \"B3-A\" \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \n $P49N $P50N $P51N $P52N $P53N $P54N $P55N $P56N \n \"B10-A\" \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n $P57N $P58N $P59N $P60N $P61N \n \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\nSomething interesting occurred when this occurred, we can see in addition to the detector names directly above each a “$P#N” pattern appear, with # standing for increasing numbers. If we recall, we saw something similar in the first output column when we first ran read.FCS().\n\nLets break out the str() and class() functions from last week and see what we can find out about why this is occuring.\n\nstr(ColumnNames)\n\n Named chr [1:61] \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" ...\n - attr(*, \"names\")= chr [1:61] \"$P1N\" \"$P2N\" \"$P3N\" \"$P4N\" ...\n\n\nIn this case we can see that we don’t just have a vector (list) similar to what we saw with Fluorophores object last week, because instead of a chr [1:61] we get back a Named chr [1:61] designation. What we see is that in this case, each value has a corresponding index name as well. (ex. $P1N, $P2N, etc.) Let’s double check with class() function.\n\nclass(ColumnNames)\n\n[1] \"character\"\n\n\nWe can see that everything is character, but it doesn’t inform us that each index was named. This is one of the reasons it is best when trying to see what type of an object something is, to use multiple functions, to avoid missing some important details.\nIf we were trying to remove the names, being left with just the values (similar to what we saw with the vector-style list last week), we could use the unname() function:\n\nunname(ColumnNames)\n\n [1] \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \n [8] \"UV7-A\" \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \n[15] \"UV14-A\" \"UV15-A\" \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \n[22] \"V3-A\" \"V4-A\" \"V5-A\" \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \n[29] \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \"V14-A\" \"V15-A\" \"V16-A\" \n[36] \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \"B2-A\" \"B3-A\" \n[43] \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \"B10-A\" \n[50] \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n[57] \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\n\n\nLet’s return to the right sidebar to continue our exploration, by clicking on the dropdown arrow for exprs in the side-bar\n\nThe output is less user-friendly than what we saw when clicking on the little grid. If we scroll down far enough, we get down as far as [,61], which corresponds to the total number of columns.\n\nIn base R, column order can be defined by placing the corresponding column index number after a comma “,”. So for this case, the first column would be designated would be [,1] while the last column would be designated [,61].\n\nMFI_Matrix[,1]\n\n [1] 38823 39780 267292 128101 255221 79210 196643 83855 109315 26128\n [11] 114423 120001 71831 70551 197021 239994 252611 223012 152780 171822\n [21] 172611 168464 191503 253015 73885 82221 176641 128533 4117 191632\n [31] 191229 58093 141776 265894 55593 227555 233212 248578 95165 171934\n [41] 1360 251847 195764 147503 118723 1060 90033 253553 268268 74610\n [51] 23531 150119 226391 201568 179264 79944 196686 252667 117309 3903\n [61] 77690 195142 229873 254472 179943 236618 68193 87154 28541 78622\n [71] 155664 50115 40866 70753 260118 12033 96149 20740 37461 73998\n [81] 231939 192329 88649 197664 86006 142486 159539 251298 104864 164090\n [91] 102380 218968 145182 239323 261272 118979 17202 194277 229284 258723\n\n\n\nMFI_Matrix[,61]\n\n [1] 248.567276 -85.832993 -301.460663 -94.384613 186.172073 -461.407745\n [7] 843.507080 277.516113 -106.166855 281.633545 195.927261 818.865723\n [13] 734.996460 209.356476 206.442596 279.859894 518.165222 56.947498\n [19] 285.751007 857.126343 -94.384613 -213.030518 62.585236 138.409653\n [25] 118.012444 328.255768 -61.635056 185.285233 464.384979 5.637739\n [31] -66.385956 31.229273 1198.241211 185.475266 873.279419 457.607025\n [37] -73.353951 37.880539 729.168640 221.772171 -169.512238 348.272888\n [43] -338.391022 845.534119 -4.434176 620.024597 610.269409 -193.900208\n [49] 230.830566 -23.754517 607.102112 14.949510 -34.333195 -169.132172\n [55] -96.158287 220.631958 125.297165 -15.202891 -126.057304 193.393448\n [61] 90.203819 -277.706146 590.505615 911.096619 -92.230873 347.259369\n [67] 135.559113 369.430267 -62.015125 -180.597672 -146.517868 810.440796\n [73] 134.038818 -165.268097 727.711731 -88.746880 62.901962 203.275330\n [79] 436.196289 -242.676147 -40.857769 222.278946 -170.272385 525.513245\n [85] -41.491222 176.670258 201.501648 175.530045 329.839386 474.140167\n [91] -48.142490 -174.833252 46.052090 357.584656 -26.541714 191.493088\n [97] 211.320190 124.790398 -113.324883 343.268616\n\n\nWhat would happen if used a column index number that didn’t exist? Let’s check.\n\nMFI_Matrix[,350]\n\nError in `MFI_Matrix[, 350]`:\n! subscript out of bounds\n\n\nWe get back an error message telling us the subscript is out of bounds.\nSo if columns are specified by a number after the comma (ex. [,1]), how are rows specified? In R, rows would be specified by a number before the comma [1,]\n\nMFI_Matrix[1,]\n\n Time UV1-A UV2-A UV3-A UV4-A \n 38823.00000 37.79983 -184.48000 353.87714 1106.22998 \n UV5-A UV6-A UV7-A UV8-A UV9-A \n 1145.18140 2130.21899 4376.34277 3246.79517 32050.65039 \n UV10-A UV11-A UV12-A UV13-A UV14-A \n 8123.26367 1992.57849 1070.33228 956.43573 290.86853 \n UV15-A UV16-A SSC-H SSC-A V1-A \n 385.49921 670.97687 657613.00000 750760.12500 1171.13904 \n V2-A V3-A V4-A V5-A V6-A \n 154.56281 1346.44885 1706.92603 1923.50940 898.25269 \n V7-A V8-A V9-A V10-A V11-A \n 3162.55371 83596.50781 32506.76172 27161.51367 6236.07275 \n V12-A V13-A V14-A V15-A V16-A \n 2220.30322 2023.39966 753.58936 510.95404 228.34962 \n FSC-H FSC-A SSC-B-H SSC-B-A B1-A \n1055905.00000 1217097.50000 716733.00000 815959.06250 606.66833 \n B2-A B3-A B4-A B5-A B6-A \n 416.98294 4172.47119 192400.09375 93929.93750 54236.33203 \n B7-A B8-A B9-A B10-A B11-A \n 19342.64453 10507.24219 9498.12695 4465.50928 1668.04810 \n B12-A B13-A B14-A R1-A R2-A \n 2199.94751 1581.73450 1487.56860 147.13348 129.86763 \n R3-A R4-A R5-A R6-A R7-A \n 35.90353 267.23999 49.79849 -732.70966 42.83144 \n R8-A \n 248.56728 \n\n\nAnd while not the focus of today, we could retrieve individual values from a matrix by specifying both a row and a column index number. So for example, if we wanted the MFI value for the UV1-A detector for the first acquired cell (knowing that UV1-A is the 2nd column):\n\nMFI_Matrix[1,2]\n\n UV1-A \n37.79983 \n\n\nFrom our exploration, this looks to be all the information contained within the “exprs” slot, so let’s back up and check on the next slot.\n\n\n\n\nparameters\nAs we look at the next slot in the flowFrame object, we can see that parameters looks like it is going to be another more complex object, as it is showing up as an AnnotatedDataFrame object (defined by the Biobase R package, and itself contains 4 slots).\n\n\nHaving carved our way this far into the heart of an .fcs file, we are not about to call it quits now, so CHARGE my fellow cytometrist!!! Click that drop-down arrow!\n\nHaving survived our charge into the unknown, the four parameter slots appear to be “varMetadata”, “data”, “dimLabels” and “._classVersion_”.\n\n\nvarMetadata\nFortunately for us, both “varMetadata” and “data” at least appear to be table-like objects of a type known as a “data.frame”, so lets click on the grid to open in our editor window.\nIn the case of varMetadata, we seem to have retrieved a column of metadata names.\n\nThese look reminiscent of what we saw at the top of the read.FCS() column outputs previously\n\n\n\ndata\nClicking on the grid for parameters’s data slot will end opening the actual content that was displayed.\n\nLet’s try to retrieve the data contained within this slot and save it as it’s own variable/object within our R session. First, we need to open flowFrame object, then use @ to get inside its parameters slot. Since parameters is also a complex object (AnnotatedDataFrame specifically), we will need to use another @ to get inside its data slot:\n\nParameterData <- flowFrame@parameters@data\n\nhead(ParameterData, 10)\n\n name desc range minRange maxRange\n$P1 Time <NA> 272140 0.00000 272139\n$P2 UV1-A <NA> 4194304 -111.00000 4194303\n$P3 UV2-A <NA> 4194304 -111.00000 4194303\n$P4 UV3-A <NA> 4194304 -111.00000 4194303\n$P5 UV4-A <NA> 4194304 -111.00000 4194303\n$P6 UV5-A <NA> 4194304 -111.00000 4194303\n$P7 UV6-A <NA> 4194304 -111.00000 4194303\n$P8 UV7-A <NA> 4194304 -26.34649 4194303\n$P9 UV8-A <NA> 4194304 -111.00000 4194303\n$P10 UV9-A <NA> 4194304 0.00000 4194303\n\n\nAnd similarly, we could access with the Bioconductor helper function parameters(), but we would need to specify the accessor for data outside the parenthesis.\n\nParameterData_Alternate <- parameters(flowFrame)@data\n\nIf we ran the str() function, we get the following insight into ParameterData’s object type\n\nstr(ParameterData)\n\n'data.frame': 61 obs. of 5 variables:\n $ name : 'AsIs' Named chr \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" ...\n ..- attr(*, \"names\")= chr [1:61] \"$P1N\" \"$P2N\" \"$P3N\" \"$P4N\" ...\n $ desc : 'AsIs' Named chr NA NA NA NA ...\n ..- attr(*, \"names\")= chr [1:61] NA NA NA NA ...\n $ range : num 272140 4194304 4194304 4194304 4194304 ...\n $ minRange: num 0 -111 -111 -111 -111 ...\n $ maxRange: num 272139 4194303 4194303 4194303 4194303 ...\n\n\nWe can see this class of object is a “data.frame”. This is one of the more common object types in R, and we will be seeing these extensively throughout the course. We see that each of the columns appears to be designated by a $ followed by the column name, and then type of column (numeric, character, etc).\n\nIf we are trying to see these columns in R, we notice that data.frame is not like the previous S4 class objets we interacted with, as the @ symbol after doesn’t bring up any suggestions\n\nParameterData@\n\nBy contrast, adding the $ we saw when using the str() function does retrieve the underlying information\n\nParameterData$\n\n\nAs you become more familiar with R, remembering to check what kind of object you are working with, and how to access the contents will with practice become more familiar to you.\nSimilar to what we saw with a matrix, we can subset a data.frame based on the column or row index using square brackets [].\n\nParameterData[,1]\n\n $P1N $P2N $P3N $P4N $P5N $P6N $P7N $P8N \n \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \"UV7-A\" \n $P9N $P10N $P11N $P12N $P13N $P14N $P15N $P16N \n \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \"UV14-A\" \"UV15-A\" \n $P17N $P18N $P19N $P20N $P21N $P22N $P23N $P24N \n \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \"V3-A\" \"V4-A\" \"V5-A\" \n $P25N $P26N $P27N $P28N $P29N $P30N $P31N $P32N \n \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \n $P33N $P34N $P35N $P36N $P37N $P38N $P39N $P40N \n \"V14-A\" \"V15-A\" \"V16-A\" \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \n $P41N $P42N $P43N $P44N $P45N $P46N $P47N $P48N \n \"B2-A\" \"B3-A\" \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \n $P49N $P50N $P51N $P52N $P53N $P54N $P55N $P56N \n \"B10-A\" \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n $P57N $P58N $P59N $P60N $P61N \n \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\nThe individual detectors or fluorophore appear under “name”. For now, based on what we know, the $P# appears to be some sort of name being used as an internal consistent reference to the respective.\n“desc” is appearing empty for this raw spectral fcs file, but if you were to checked an unmixed file, this would be occupied the marker/ligand name assigned to it during the experiment setup.\n“range”, “minRange” and “maxRange” are beyond the scope of today, but are used by both instrument manufacturers and software vendors when setting appropiate scaling for a plot. For the actual details, see the Flow Cytometry Standard documentation.\nHaving exhausted our options under parameters “varMetadata” and “data” slots, let’s continue to the next slot.\n\n\ndimLabels\n\nIn this case, not much is returned. Yey!\n\nflowFrame@parameters@dimLabels\n\n[1] \"rowNames\" \"columnNames\"\n\n\n\n\nclassVersion\nContinuing on to the last slot “.__classVersion__”\n\nflowFrame@parameters@.__classVersion__\n\nAnnotatedDataFrame \n \"1.1.0\" \n\n\nAlso mercifully short, both of these seem to be more involved in defining the S4 class object, and don’t contain anything we need to retrieve today.\n\n\n\n\nDescription\nAt this point, we have explored both “exprs” and “parameter” slots for the flowFrame object we created. Let’s tackle the final slot, named description.\n\nWhen doing so, a very large list is opened within the Positron variables window. While we could scroll through it, it might be easier to retrieve certain number of rows via the console to make interpreting this more structured.\n\nTo retrieve the list itself, we would need to access the description slot of the flowFrame object. Since it is a slot, we will need to use the @ accessor.\n\n\nDescriptionList <- flowFrame@description\n\n\nDescriptionList \n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n$`$CYT`\n[1] \"Aurora\"\n\n$`$CYTOLIB_VERSION`\n[1] \"2.22.0\"\n\n$`$CYTSN`\n[1] \"V0333\"\n\n$`$DATATYPE`\n[1] \"F\"\n\n$`$DATE`\n[1] \"04-Aug-2025\"\n\n$`$ENDANALYSIS`\n[1] \"0\"\n\n$`$ENDDATA`\n[1] \"57711\"\n\n$`$ENDSTEXT`\n[1] \"0\"\n\n$`$ETIM`\n[1] \"13:55:57.02\"\n\n$`$FIL`\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$`$INST`\n[1] \"UMBC\"\n\n$`$MODE`\n[1] \"L\"\n\n$`$NEXTDATA`\n[1] \"0\"\n\n$`$OP`\n[1] \"David Rach\"\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"\n\n$ORIGINALGUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"\n\n$THRESHOLD\n[1] \"(FSC,50000)\"\n\n$TUBENAME\n[1] \"05\"\n\n$USERSETTINGNAME\n[1] \"DTR_CellCounts\"\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n\nThe returned list is a little too large to reasonably explore. We can attempt to subset using the head() function as shown below\n\nhead(DescriptionList, 5)\n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n\nAlternatively, it might be better to subset based on position index\n\nDescriptionList[1:10]\n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n$`$CYT`\n[1] \"Aurora\"\n\n$`$CYTOLIB_VERSION`\n[1] \"2.22.0\"\n\n$`$CYTSN`\n[1] \"V0333\"\n\n$`$DATATYPE`\n[1] \"F\"\n\n$`$DATE`\n[1] \"04-Aug-2025\"\n\n\nAnd just as we saw for exprs and parameters, there is also a Bioconductor helper keyword() function to access this same information directly from the flowFrame.\n\nDescriptionList_Alternate <- keyword(flowFrame)\n\nIf we run the class() function, we can see that DescriptionList is an actual “list”.\n\nclass(DescriptionList)\n\n[1] \"list\"\n\n\nThis is in contrast to the vectors we have previously generated. While these are also list like, they are what are known as as atomic list, which contain values that are all either characters, numerics or logicals.\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nclass(Fluorophores)\n\n[1] \"character\"\n\n\n\nPanelAntibodyCounts <- c(5, 12, 19, 26, 34, 46, 51)\nclass(PanelAntibodyCounts)\n\n[1] \"numeric\"\n\n\n\nSpecimenIndexToKeep <- c(TRUE, TRUE, FALSE, TRUE)\nclass(SpecimenIndexToKeep)\n\n[1] \"logical\"\n\n\nA list on the other hand is not restricted to contain objects composed entirely of a certain atomic type. For example, I could include the three previous vectors into a list using the list() function.\n\nMyListofVectors <- list(Fluorophores, PanelAntibodyCounts, SpecimenIndexToKeep)\nstr(MyListofVectors)\n\nList of 3\n $ : chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n $ : num [1:7] 5 12 19 26 34 46 51\n $ : logi [1:4] TRUE TRUE FALSE TRUE\n\n\nWe can see that with the Description/Keyword list we retrieved from our flowFrame shares a somewhat similar format.\n\nstr(DescriptionList[1:10])\n\nList of 10\n $ $BEGINANALYSIS : chr \"0\"\n $ $BEGINDATA : chr \"33312\"\n $ $BEGINSTEXT : chr \"0\"\n $ $BTIM : chr \"13:55:29.85\"\n $ $BYTEORD : chr \"4,3,2,1\"\n $ $CYT : chr \"Aurora\"\n $ $CYTOLIB_VERSION: chr \"2.22.0\"\n $ $CYTSN : chr \"V0333\"\n $ $DATATYPE : chr \"F\"\n $ $DATE : chr \"04-Aug-2025\"\n\n\nBut in this case, there are also names present ($BEGINANALYSIS, $BEGINDATA, etc). What if we had tried to provide names to our List of Vectors? Would the format match?\nWhen we assigned a name to each of the vectors (by providing an equal to = ), we get the same kind of structure format to what we see in Description.\n\nMyNamedListofVectors <- list(FluorophoresNamed=Fluorophores,\n PanelAntibodyCountsNamed=PanelAntibodyCounts,\n SpecimenIndexToKeepNamed=SpecimenIndexToKeep)\n\nstr(MyNamedListofVectors)\n\nList of 3\n $ FluorophoresNamed : chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n $ PanelAntibodyCountsNamed: num [1:7] 5 12 19 26 34 46 51\n $ SpecimenIndexToKeepNamed: logi [1:4] TRUE TRUE FALSE TRUE\n\n\nWe could then subsequently be able to isolate items from that list using the $ operator.\n\nMyNamedListofVectors$\n\n\nAlternatively, we could also access by list index position\n\nMyNamedListofVectors[1]\n\n$FluorophoresNamed\n[1] \"BV421\" \"FITC\" \"PE\" \"APC\" \n\n\nRemembering back to the original output from read.FCS() we remember that it mentioned 599 keywords being in the description slot, so now we know that this is what was being referenced.", + "objectID": "course/04_IntroToTidyverse/index.html#select-columns", + "href": "course/04_IntroToTidyverse/index.html#select-columns", + "title": "04 - Introduction to Tidyverse", + "section": "select (Columns)", + "text": "select (Columns)\nNow that we have read in our data, and have a general picture of the structure and contents, lets start learning the main dplyr functions we will be using throughout the course. To do this, lets go ahead and attach dplyr to our local environment via the library() call.\n\nlibrary(dplyr)\n\nWe will start with the select() function. It is used to “select” a column from a data.frame type object. In the simplest usage, we provide the name of our data.frame variable/object as the first argument after the opening parenthesis. This is then followed by the name of the column we want to select as the second argument (let’s place around the “” around the column name for now)\n\nDateColumn <- select(Data, \"Date\")\nDateColumn[1:10,]\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nThis results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object.\n\nPipe Operators\nWhile the above line of code works to select a column, when you encounter select() out in the wild, it will more often be in a line of code that looks like this:\n\nDateColumn <- Data |> select(\"Date\")\nDateColumn[1:10,]\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\n… “What in the world is that thing |> ?” …\nGlad you asked! An useful feature of the tidyverse packages is their use of pipes (either the original magrittr package’s “%>%” or base R version >4.1.0's “|>”“), usually appearing like this:\n\n# magrittr %>% pipe\n\nDateColumn <- Data %>% select(\"Date\")\n\n# base R |> pipe\nDateColumn <- Data |> select(\"Date\")\n\n… “How do we interpret/read that line of code?” …\nLet’s break it down, starting off just to the right of the assignment arrow (<-) with our data.frame “Data”.\n\nData\n\nWe then proceed to read to the right, adding in our pipe operator. The pipe essentially serves as an intermediate passing the contents of data onward to the subsequent function.\n\nData |> \n\nIn our case, this subsequent function is the select() function, which will select a particular column from the available data. When using the pipe, the first argument slot we saw for “select(Data,”Date”)” is occupied by the contents Data that are being passed by the pipe.\n\nData |> select()\n\nTo complete the transfer, we provide the desired column name to select() to act on (“Date” in this case)\n\nData |> select(\"Date\")\n\nIn summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column\n\nData |> select(\"Date\")\n\nOne of the main advantages for using pipes, is they can be linked together, passing resulting objects of one operation on to the next pipe and subsequent function. We can see this in operation in the example below where we hand off the isolated “Date” column to the nrow() function to determine number of rows. We will use pipes throughout the course, so you will gradually gain familiarity as you encounter them.\n\nData |> select(\"Date\") |> nrow()\n\n[1] 196\n\n\nFor those with prior R experience, you will be more familiar with the older magrittr %>% pipe. The base R |> pipe operator was introduced starting with R version 4.1.0. While mostly interchangeable, they have a few nuances that come into play for more advance use cases. You are welcome to use whichever you prefer (my current preference is |> as it’s one less key to press).\n\n\nR Quirks\n\n\n\n\n\n\nOdd R Behavior # 1\n\n\n\nWhile we used “” around the column name in our previous example, unlike what we encountered with install.packages() when we forget to include quotation marks, select() still retrieves the correct column despite Date not being an environment variable:\n\n\n\nData |> select(Date) |> head(3)\n\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n\n\n\n\n\n\n\n\n.\n\n\n\nThe reasons for this Odd R behaviour are nuanced and for another day. For now, think of it as dplyr R package is picking up the slack, and using context to infer it’s a column name and not an environmental variable/object.\n\n\n\n\nSelecting multiple columns\nSince we are able to select one column, can we select multiple (similar to a [Data[,2:5]] approach in base R)? We can, and they can be positioned anywhere within the data.frame:\n\nSubset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`)\n\nhead(Subset, 3)\n\n bid timepoint Condition Tcells CD8+ CD4+\n1 INF0052 0 Ctrl 0.2804264 0.2734826 0.6341164\n2 INF0100 0 Ctrl 0.6748298 0.3357696 0.6119112\n3 INF0100 4 Ctrl 0.6119129 0.2862104 0.6639621\n\n\nYou will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object:\n\nSubset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, )\n\nhead(Subset, 3)\n\n bid Tcells CD8+ CD4+ timepoint Condition\n1 INF0052 0.2804264 0.2734826 0.6341164 0 Ctrl\n2 INF0100 0.6748298 0.3357696 0.6119112 0 Ctrl\n3 INF0100 0.6119129 0.2862104 0.6639621 4 Ctrl", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#early-metadata", - "href": "course/03_InsideFCSFile/index.html#early-metadata", - "title": "03 - Inside an FCS File", - "section": "Early Metadata", - "text": "Early Metadata\nWithin the initial portion, we are getting back metadata keywords related to where and how the particular file was acquired. Keywords of potential interest include:\n\n\n\n\n\n\nStart Time\n\n\n\nWhat time was the .fcs file acquired\n\n\n\n\nDescriptionList$`$BTIM`\n\n[1] \"13:55:29.85\"\n\n\n\n\n\n\n\n\n\nCytometer\n\n\n\nWhat type of cytometer was the .fcs file acquired on\n\n\n\n\nDescriptionList$`$CYT`\n\n[1] \"Aurora\"\n\n\n\n\n\n\n\n\n\n\n\nCytometer Serial Number\n\n\n\nManufacturer Serial Number of the Cytometer\n\n\n\n\nDescriptionList$`$CYTSN`\n\n[1] \"V0333\"\n\n\n\n\n\n\n\n\n\nFCS File Acquisition Date\n\n\n\nWhat was the date of acquisition\n\n\n\n\nDescriptionList$`$DATE`\n\n[1] \"04-Aug-2025\"\n\n\n\n\n\n\n\n\n\n\n\nAcquisition End Time\n\n\n\nWhat time was acquisition stopped\n\n\n\n\nDescriptionList$`$ETIM`\n\n[1] \"13:55:57.02\"\n\n\n\n\n\n\n\n\n\nFile Name\n\n\n\nName of the .fcs file\n\n\n\n\nDescriptionList$`$FIL`\n\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\n\n\n\n\n\n\n\n\n\nOperator\n\n\n\nWho acquired the .fcs file\n\n\n\n\nDescriptionList$`$OP`\n\n[1] \"David Rach\"", + "objectID": "course/04_IntroToTidyverse/index.html#relocate", + "href": "course/04_IntroToTidyverse/index.html#relocate", + "title": "04 - Introduction to Tidyverse", + "section": "relocate", + "text": "relocate\nAlternatively, we occasionally want to move one column. While we could respecify the location using select(), specifying the names of all the other columns out in a line of code to just to rearrange one does not sound like a good use of time. For this reason, the second dplyr function we will be learning is the relocate() function.\nLooking at our Data object, let’s say we wanted to move the Tcells column from its current location to the second column position (right after the bid column). The line of code to do so would look like:\n\nData |> relocate(Tcells, .after=bid) |> head(3)\n\n bid Tcells timepoint Condition Date infant_sex ptype root\n1 INF0052 0.2804264 0 Ctrl 2025-07-26 Male HEU-hi 2098368\n2 INF0100 0.6748298 0 Ctrl 2025-07-26 Male HEU-lo 2020184\n3 INF0100 0.6119129 4 Ctrl 2025-07-26 Male HEU-lo 1155040\n singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nSimilar to what we saw with select(), this approach can also be used for more than 1 column:\n\nData |> relocate(Tcells, Monocytes, .after=bid) |> head(3)\n\n bid Tcells Monocytes timepoint Condition Date infant_sex ptype\n1 INF0052 0.2804264 0.11796509 0 Ctrl 2025-07-26 Male HEU-hi\n2 INF0100 0.6748298 0.09477437 0 Ctrl 2025-07-26 Male HEU-lo\n3 INF0100 0.6119129 0.01545999 4 Ctrl 2025-07-26 Male HEU-lo\n root singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 2098368 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 2020184 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1155040 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Debris CD45_count\n1 587573 0.13723513 915203\n2 308583 0.13973396 1438047\n3 607477 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nWe can also modify the argument so that columns are placed before a certain column\n\nData |> relocate(Tcells, .before=Date) |> head(3)\n\n bid timepoint Condition Tcells Date infant_sex ptype root\n1 INF0052 0 Ctrl 0.2804264 2025-07-26 Male HEU-hi 2098368\n2 INF0100 0 Ctrl 0.6748298 2025-07-26 Male HEU-lo 2020184\n3 INF0100 4 Ctrl 0.6119129 2025-07-26 Male HEU-lo 1155040\n singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nAnd as we might suspect, we could specify a column index location rather than using a column name.\n\nData |> relocate(Date, .before=1) |> head(3)\n\n Date bid timepoint Condition infant_sex ptype root singletsFSC\n1 2025-07-26 INF0052 0 Ctrl Male HEU-hi 2098368 1894070\n2 2025-07-26 INF0100 0 Ctrl Male HEU-lo 2020184 1791890\n3 2025-07-26 INF0100 4 Ctrl Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#detector-values", - "href": "course/03_InsideFCSFile/index.html#detector-values", - "title": "03 - Inside an FCS File", - "section": "Detector Values", - "text": "Detector Values\nThe next major stretch of keywords encode parameter values associated with the individual detectors for at the time of acquisition.\n\nDetectors <- DescriptionList[20:384]\nDetectors\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"\n\n\nFortunately for all involved, there is a consistently repeating pattern for the keywords corresponding to each detector. We can see that here for $P7B, $P7E, $P7N, $P7R, $P7TYPE, $P7V\n\nWhen referencing to the Flow Cytometry Standard documentation, here are what the particular keyword letters mean:\n\n\n\n\n\n\nB\n\n\n\nNumber of bits reserved for parameter number n\n\n\n\n\nDescriptionList$`$P7B`\n\n[1] \"32\"\n\n\n\n\n\n\n\n\n\nE\n\n\n\nAmplification type for parameter n. \n\n\n\n\nDescriptionList$`$P7E`\n\n[1] \"0,0\"\n\n\n\n\n\n\n\n\n\n\n\nN\n\n\n\nShort Name for parameter n. \n\n\n\n\nDescriptionList$`$P7N`\n\n[1] \"UV6-A\"\n\n\n\n\n\n\n\n\n\nR\n\n\n\nRange for parameter number n. \n\n\n\n\nDescriptionList$`$P7R`\n\n[1] \"4194304\"\n\n\n\n\n\n\n\n\n\n\n\nTYPE\n\n\n\nDetector type for parameter n. \n\n\n\n\nDescriptionList$`$P7TYPE`\n\n[1] \"Raw_Fluorescence\"\n\n\n\n\n\n\n\n\n\nV\n\n\n\nDetector voltage for parameter n. \n\n\n\n\nDescriptionList$`$P7V`\n\n[1] \"506\"\n\n\n\n\n\nWhile not immediately obvious, understanding what these keywords encoded has proven useful for our core. In our case, we have built an automated InstrumentQC dashboard for all the instruments at our core.\n\n\n\nBy extracting out from our daily QC bead .fcs files the stored N (Detector Name) and V (Gain/Voltage) values for all the individual detectors, it allows us to plot Levey-Jennings Plots for our individual instruments, giving us usually around a months warning before an individual laser begins to fail. This helps with scheduling the Field-Service Engineer visit before it starts impacting the actual data.\n\n\n\nWhile most of the detectors keywords are similar (only changing there individual name and voltage) there are a couple exceptions.\nFor the FSC/SSC parameters, instead of Raw_Fluorescence value for Type, we see the corresponding Scatter value get return. This in term is what is used by various commercial softwares to show those axis as linear instead of biexponential when selected.\n\n\n\nThis is similarly the case for the Time parameter, where in addition to Type being set to Time, the range also appears different to Raw/Scatters value.", + "objectID": "course/04_IntroToTidyverse/index.html#rename", + "href": "course/04_IntroToTidyverse/index.html#rename", + "title": "04 - Introduction to Tidyverse", + "section": "rename", + "text": "rename\nAt this point, we are able to both move and select particular columns, allowing us to rearrange and subset a larger data.frame object however we want it to appear. However, as we encountered, some of the names contain special characters and spaces, requiring use of tick marks (``) to avoid issues. How can we change a column name?\nIn base R, we could change individual column names by assigning a new value with the assignment arrow to the corresponding column name index. For example, looking at our Subset object, wen could rename CD8+ as follows:\n\ncolnames(Subset)\n\n[1] \"bid\" \"Tcells\" \"CD8+\" \"CD4+\" \"timepoint\" \"Condition\"\n\ncolnames(Subset)[3]\n\n[1] \"CD8+\"\n\n\n\ncolnames(Subset)[3] <- \"CD8Positive\"\ncolnames(Subset)\n\n[1] \"bid\" \"Tcells\" \"CD8Positive\" \"CD4+\" \"timepoint\" \n[6] \"Condition\" \n\n\nWith the tidyverse, we can use the rename() function which removes the need to look up the column index number. The way we write the argument is placing within the parenthesis the old name to the right of the equals sign, with the new name to the left\n\nRenamed <- Subset |> rename(CD4_Positive = `CD4+`)\ncolnames(Renamed)\n\n[1] \"bid\" \"Tcells\" \"CD8Positive\" \"CD4_Positive\" \"timepoint\" \n[6] \"Condition\" \n\n\nIf we wanted to rename multiple column names at once, we would just need to include a comma between the individual rename arguments within the parenthesis.\n\nRenamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`)\ncolnames(Renamed_Multiple)\n\n[1] \"specimen\" \"Tcells\" \"CD8Positive\" \"CD4Positive\" \n[5] \"timepoint_months\" \"stimulation\"", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#middle-metadata", - "href": "course/03_InsideFCSFile/index.html#middle-metadata", - "title": "03 - Inside an FCS File", - "section": "Middle Metadata", - "text": "Middle Metadata\nOnce we are out of the detector keywords, we find the last of the $Metadata associated keywords.\n\nDetectors <- DescriptionList[385:398]\nDetectors\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\nAmong those of potential interest\n\n\n\n\n\n\nProj\n\n\n\nOften corresponding to the experiment file name\n\n\n\n\nDescriptionList$`$PROJ`\n\n[1] \"CellCounts4L_AB_05\"\n\n\n\n\n\n\n\n\n\nSpillover\n\n\n\nWhere the internal spillover matrix is stored (we will revisit during compensation)\n\n\n\n\nDescriptionList$`$SPILLOVER`\n\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n\n\n\n\n\n\n\n\nTOT\n\n\n\nTotal events (in this case my downsampled 100 cells)\n\n\n\n\nDescriptionList$`$TOT`\n\n[1] \"100\"\n\n\n\n\n\n\n\n\n\nVolume\n\n\n\nVolume amount acquired during acquisition.\n\n\n\n\nDescriptionList$`$VOL`\n\n[1] \"30.31\"\n\n\n\n\n\n\n\n\n\nSoftware\n\n\n\nSoftware used and version\n\n\n\n\nDescriptionList$CREATOR\n\n[1] \"SpectroFlo 3.3.0\"\n\n\n\nYou will notice at this point, the keyword names including a “$” symbol have stopped, so tick marks are no longer required (except when there is a space in the name). The only $ remaining is being used as a selector for a particular item in the list.\n\nDetectors <- DescriptionList[390:398]\nDetectors\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\n\n\n\n\n\n\nFILENAME\n\n\n\nBasically the full file.path to the .fcs file of interest.\n\n\n\n\nDescriptionList$FILENAME\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n\n\n\n\n\n\n\n\nGROUPNAME\n\n\n\nThe Name assigned to the acquisition Group.\n\n\n\n\nDescriptionList$GROUPNAME\n\n[1] \"ND050\"", + "objectID": "course/04_IntroToTidyverse/index.html#pull", + "href": "course/04_IntroToTidyverse/index.html#pull", + "title": "04 - Introduction to Tidyverse", + "section": "pull", + "text": "pull\nSometimes, we may want to retrieve individual values present in a column, to use within either a vector or a list. We can do this using the pull() function, which will retrieve the column contents and strip the column formatting\n\nData |> pull(Date) |> head(5)\n\n[1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nThis can be useful when we are doing data exploration, and trying to determine how many unique variants might be present. For example, if we wanted to see what days individual samples were acquired, we could pull() the data and pass it to the unique() function:\n\nData |> pull(Date) |> unique()\n\n[1] \"2025-07-26\" \"2025-07-29\" \"2025-07-31\" \"2025-08-05\" \"2025-08-07\"\n[6] \"2025-08-22\" \"2025-08-28\" \"2025-08-30\"", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#laser-metadata", - "href": "course/03_InsideFCSFile/index.html#laser-metadata", - "title": "03 - Inside an FCS File", - "section": "Laser Metadata", - "text": "Laser Metadata\nNext up, there is a small stretch of keywords containing the values associated with the individual lasers as far as delays and area scaling factors for a particular day (also useful when plotted).\n\nDetectors <- DescriptionList[399:410]\nDetectors\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"", + "objectID": "course/04_IntroToTidyverse/index.html#filter-rows", + "href": "course/04_IntroToTidyverse/index.html#filter-rows", + "title": "04 - Introduction to Tidyverse", + "section": "filter (Rows)", + "text": "filter (Rows)\nSo far, we have been working with dplyr functions primarily used when working with and subsetting columns (including select(), pull(), rename() and relocate()). What if we wanted to work with rows of a data.frame? This is where the filter() function is used.\nThe Condition column in this Dataset appears to be indicating whether the samples were stimulated. Let’s see how many unique values are contained within that column\n\nData |> pull(Condition) |> unique() \n\n[1] \"Ctrl\" \"PPD\" \"SEB\" \n\n\nIn the case of this dataset, looks like the .fcs files where treated with either left alone, treated with PPD (Purified Protein Derrivative) or SEB. What if we wanted to subset only those treated with PPD?\nWithin filter(), we would specify the column name as the first argument, and ask that only values equal to (==) “PPD” be returned. Notice in this case, “” are needed, as we are asking for a matching character value.\n\nPPDOnly <- Data |> filter(Condition == \"PPD\")\nhead(PPDOnly, 5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nWhile this works, using “==” to match can glitch, especially with character values. Using the %in% operator is a better way of identifying and extracting only the rows whose Condition column contains “PPD”\n\nData |> filter(Condition %in% \"PPD\") |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nSimilar to what we saw for select(), we can grab rows that contain various values at once. We would just need to modify the second part of the argument. If we wanted to grab rows whose Condition column contained either PPD or SEB, we would need to provide that argument as a vector, placing both within c()/\n\nData |> filter(Condition %in% c(\"PPD\", \"SEB\")) |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nAlternatively, we could have set up the vector externally, and then provided it to filter()\n\nTheseConditions <- c(\"PPD\", \"SEB\")\nData |> filter(Condition %in% TheseConditions) |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nWhile this works when we have a limited number of variant condition values, what if had many more but only wanted to exclude one value? As we saw when learning about Conditionals, when we add a ! in front of a logical value, we get the opposite logical value returned\n\nIsThisASpectralInstrument <- TRUE\n\n!IsThisASpectralInstrument\n\n[1] FALSE\n\n\nIn the context of the dplyr package, we can use ! within the filter() to remove rows that contain a certain value\n\nSubset <- Data |> filter(!Condition %in% \"SEB\")\nSubset |> pull(Condition) |> unique()\n\n[1] \"Ctrl\" \"PPD\" \n\n\nLikewise, we can also use it with the select() to exclude columns we don’t want to include\n\nSubset <- Data |> select(!timepoint)\nSubset[1:3,]\n\n bid Condition Date infant_sex ptype root singletsFSC\n1 INF0052 Ctrl 2025-07-26 Male HEU-hi 2098368 1894070\n2 INF0100 Ctrl 2025-07-26 Male HEU-lo 2020184 1791890\n3 INF0100 Ctrl 2025-07-26 Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#display", - "href": "course/03_InsideFCSFile/index.html#display", - "title": "03 - Inside an FCS File", - "section": "Display", - "text": "Display\nThen there is a stretch matching whether a particular detector needs to be displayed as linear (in the case of time and scatter) or as log (for individual detectors).\n\nDetectors <- DescriptionList[412:472]\nDetectors\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"\n\n\nAnd a few final keywords with threshold, window scaling and other user selected settings.\n\nDetectors <- DescriptionList[473:476]\nDetectors\n\n$THRESHOLD\n[1] \"(FSC,50000)\"\n\n$TUBENAME\n[1] \"05\"\n\n$USERSETTINGNAME\n[1] \"DTR_CellCounts\"\n\n$`WINDOW EXTENSION`\n[1] \"3\"", + "objectID": "course/04_IntroToTidyverse/index.html#mutate", + "href": "course/04_IntroToTidyverse/index.html#mutate", + "title": "04 - Introduction to Tidyverse", + "section": "mutate", + "text": "mutate\nAs we can see, with just these handful of functions, we have the building blocks to rearrange and subset a larger data.frame into a format that we prefer. But what if we wanted to alter the content of a column, or add new columns to an existing data.frame? This is where the mutate() function can be used.\nLet’s start by slimming down our current Data to a smaller workable example, highlighting the functions and pipes we learned about today\n\nTidyData <- Data |> filter(Condition %in% \"Ctrl\") |> filter(timepoint %in% \"0\") |>\n select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |>\n rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen)\n\n\nTidyData\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n\n\nThe mutate() function can be used to modify existing columns, as well as to create new ones. For example, let’s derrive the proportion of T cells from the overall CD45 gate. To do so, within the parenthesis, we would specify a new column name, and then divide the original columns:\n\nTidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count)\nTidyData\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n Tcells_ProportionCD45\n1 0.18003765\n2 0.14480820\n3 0.31015921\n4 0.18540010\n5 0.23110302\n6 0.07796568\n7 0.10221747\n8 0.12578030\n9 0.08839285\n10 0.23815220\n11 0.47942008\n12 0.27147570\n13 0.26442564\n14 0.22484948\n15 0.38022498\n16 0.21845195\n17 0.22564783\n18 0.11678076\n19 0.30514067\n20 0.15261613\n21 0.04313730\n22 0.14301785\n23 0.17238666\n\n\nWe can see that we have many significant digits being returned. Let’s round this new column to 2 significant digits by applying the round() function\n\nTidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2))\nTidyData \n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n Tcells_ProportionCD45 TcellsRounded\n1 0.18003765 0.18\n2 0.14480820 0.14\n3 0.31015921 0.31\n4 0.18540010 0.19\n5 0.23110302 0.23\n6 0.07796568 0.08\n7 0.10221747 0.10\n8 0.12578030 0.13\n9 0.08839285 0.09\n10 0.23815220 0.24\n11 0.47942008 0.48\n12 0.27147570 0.27\n13 0.26442564 0.26\n14 0.22484948 0.22\n15 0.38022498 0.38\n16 0.21845195 0.22\n17 0.22564783 0.23\n18 0.11678076 0.12\n19 0.30514067 0.31\n20 0.15261613 0.15\n21 0.04313730 0.04\n22 0.14301785 0.14\n23 0.17238666 0.17", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#flowcore-parameters", - "href": "course/03_InsideFCSFile/index.html#flowcore-parameters", - "title": "03 - Inside an FCS File", - "section": "flowCore Parameters", - "text": "flowCore Parameters\nDepending on the arguments selected during read.FCS(), we might also encounter additional keywords that are added in by flowCore. For example, we do not see these keywords when “transformation” is set to FALSE.\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = FALSE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot\n\n\n\nNoChange <- keyword(flowCoreCheck)\nDetectors <- NoChange [476:500]\nDetectors\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n\nBy contrast, if we had set “transformation” to TRUE:\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = TRUE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n599 keywords are stored in the 'description' slot\n\n\n\nYesChange <- keyword(flowCoreCheck)\nDetectors <- YesChange [476:500]\nDetectors\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n$transformation\n[1] \"applied\"\n\n$`flowCore_$P1Rmax`\n[1] \"272140\"\n\n$`flowCore_$P1Rmin`\n[1] \"0\"\n\n$`flowCore_$P2Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P2Rmin`\n[1] \"-111\"\n\n$`flowCore_$P3Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P3Rmin`\n[1] \"-111\"\n\n$`flowCore_$P4Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P4Rmin`\n[1] \"-111\"\n\n$`flowCore_$P5Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P5Rmin`\n[1] \"-111\"\n\n$`flowCore_$P6Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P6Rmin`\n[1] \"-111\"\n\n$`flowCore_$P7Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P7Rmin`\n[1] \"-111\"\n\n$`flowCore_$P8Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P8Rmin`\n[1] \"-26.3464946746826\"\n\n$`flowCore_$P9Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P9Rmin`\n[1] \"-111\"\n\n$`flowCore_$P10Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P10Rmin`\n[1] \"0\"\n\n$`flowCore_$P11Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P11Rmin`\n[1] \"-111\"\n\n$`flowCore_$P12Rmax`\n[1] \"4194304\"\n\n\n\n\nFor some flow cytometry R packages, you will notice when opening their exported .fcs outputs in commercial software that these flowCore keywords have ended up integrated. It is likely somewhere in the package code the author forgot to add set transformation to FALSE, which is why we are seeing these flowCore keywords after the fact.", + "objectID": "course/04_IntroToTidyverse/index.html#arrange", + "href": "course/04_IntroToTidyverse/index.html#arrange", + "title": "04 - Introduction to Tidyverse", + "section": "arrange", + "text": "arrange\nAnd while we are here, let’s rearrange the rows so that they are descending based on the Tcell proportion. We can use this by using the desc() and arrange() functions from dplyr:\n\nTidyData <- TidyData |> arrange(desc(TcellsRounded))\n\nAnd let’s go ahead and filter() and identify the specimens that had more than 30% T cells as part of the overall CD45 gate (context, these samples were Cord Blood):\n\nTidyData |> filter(TcellsRounded > 0.3)\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0032 2025-08-05 0 Ctrl 361034 753064\n2 INF0159 2025-08-07 0 Ctrl 452551 1190219\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0166 2025-08-28 0 Ctrl 225650 739495\n Tcells_ProportionCD45 TcellsRounded\n1 0.4794201 0.48\n2 0.3802250 0.38\n3 0.3101592 0.31\n4 0.3051407 0.31\n\n\nWhich is we had wanted to just retrieve the specimen IDs, we could add pull() after a new pipe argument.\n\nTidyData |> filter(TcellsRounded > 0.3) |> pull(specimen)\n\n[1] \"INF0032\" \"INF0159\" \"INF0179\" \"INF0166\"\n\n\nAnd finally, since I may want to send the data to a supervisor, let’s go ahead and export this “tidyed” version of our data.frame out to it’s own .csv file. Working within our project folder, this would look like this:\n\nNewName <- paste0(\"MyNewDataset\", \".csv\")\nStorageLocation <- file.path(\"data\", NewName)\nStorageLocation\n\n[1] \"data/MyNewDataset.csv\"\n\n\n\nwrite.csv(TidyData, StorageLocation, row.names=FALSE)", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "04 - Intro to Tidyverse" ] }, - { - "objectID": "course/04_IntroToTidyverse/BonusContent.html", - "href": "course/04_IntroToTidyverse/BonusContent.html", - "title": "Bonus Content", - "section": "", - "text": "thefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"\nData <- read.csv(file=thefilepath, check.names=FALSE)\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\"" - }, - { - "objectID": "course/04_IntroToTidyverse/BonusContent.html#pull", - "href": "course/04_IntroToTidyverse/BonusContent.html#pull", - "title": "Bonus Content", - "section": "Pull", - "text": "Pull" - }, - { - "objectID": "course/04_IntroToTidyverse/BonusContent.html#case-when", - "href": "course/04_IntroToTidyverse/BonusContent.html#case-when", - "title": "Bonus Content", - "section": "Case-When", - "text": "Case-When\nCase-when is an useful function, but may be a bit much to try to teach in the main segment. Basically, when the condition on the left side of the ~ is fulfilled, it will execute what is being specified on the right hand side.\nIn turn, we can combine these together by adding a “,”. I tend to use this mutate str_detect case_when combination when encountering messy data out in the while where I need to selectively change particular cell values in a consistent reproducible manner" - }, - { - "objectID": "course/04_IntroToTidyverse/BonusContent.html#selecting-columns-base-r", - "href": "course/04_IntroToTidyverse/BonusContent.html#selecting-columns-base-r", - "title": "Bonus Content", - "section": "Selecting Columns (Base R)", - "text": "Selecting Columns (Base R)\nAs we saw last week, there are multiple ways to select values from particular columns in base R. If we had wanted to retrieve the “Date” column, why not first identify its index position, and use [,] to extract the underlying data?\n\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\n\ncolnames(Data)[4]\n\n[1] \"Date\"\n\n\n\nDataColumn <- Data[,4] # Column specified after the ,\nDataColumn\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [11] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [16] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [21] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [26] \"2025-07-26\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [31] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [36] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [41] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [46] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-31\" \"2025-07-31\"\n [51] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [56] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [61] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [66] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [71] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [76] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [81] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [86] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [91] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [96] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-07\" \"2025-08-07\"\n[101] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[106] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[111] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[116] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[121] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-22\"\n[126] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[131] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[136] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[141] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[146] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[151] \"2025-08-22\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[156] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[161] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[166] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[171] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[176] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-30\" \"2025-08-30\"\n[181] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[186] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[191] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[196] \"2025-08-30\"\n\n\nHowever, looking at the output, we see this looks like the values, not a column. Our suspicions are confirmed when running DataColumn\n\nstr(DataColumn)\n\n chr [1:196] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n\n\nThis is similarly the case when we use the $ accessor.\n\nDataColumn <- Data$Date\nstr(DataColumn)\n\n chr [1:196] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n\n\n\nhead(DataColumn, 3)\n\n[1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nBy contrast, when selecting two columns, the structure is maintained.\n\nTwoColumns <- Data[,4:5]\n\nWhy is the data.frame column structure lost in base R when isolating a single data.frame column? And who thought to make it that convoluted? If we were an R course in early 2010s, we might go into an explanation, but fortunately, we don’t need to understand why, we have the dplyr R package to rescue us." - }, { "objectID": "course/05_GatingSets/Downsampling.html", "href": "course/05_GatingSets/Downsampling.html", From 922896f35e340090ce34363279be26afa507ea71 Mon Sep 17 00:00:00 2001 From: David Rach Date: Tue, 3 Mar 2026 12:57:08 -0500 Subject: [PATCH 2/8] Windows use of ps package to locate total/free RAM --- course/05_GatingSets/index.qmd | 11 +++++++---- course/05_GatingSets/slides.qmd | 7 +++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/course/05_GatingSets/index.qmd b/course/05_GatingSets/index.qmd index 9381538..1a798fd 100644 --- a/course/05_GatingSets/index.qmd +++ b/course/05_GatingSets/index.qmd @@ -51,9 +51,9 @@ Let's start off by recalling the approach we first saw during [Week 03](/course/ To do this, we first identified the .fcs files we were interested using `file.path()` to specify the folder, and `list.files()` to find contents containing ".fcs". ```{r} -# Folder <- file.path("course", "05_GatingSets", "data") # For Testing + Folder <- file.path("course", "05_GatingSets", "data") # For Testing - Folder <- file.path("data") # For Quarto Rendering +# Folder <- file.path("data") # For Quarto Rendering fcs_files <- list.files(Folder, pattern=".fcs", full.names=TRUE) @@ -179,7 +179,7 @@ If we were curious how much memory total we are using within R at the current mo mem_used() ``` -Ultimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. You can check programmatically how much RAM you have available, although the specific function you will need to use will depend on your computer's operating system. +Ultimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. There are various ways you can check programmatically how much RAM your computer has available, although the specific functions will vary depending on your computers operating system, since they often involve system-level code outside R. Using the `ps` R package's `ps_system_memory()` function is one of the easier ways for Windows users. To simplify the process, here is an additional example of where a [conditional](/course/02_FilePaths/index.qmd#conditionals) can prove useful, allowing us to check in an operating system specific manner. It takes the output of the `Sys.info()` function, namely the "sysname" argument and then retrieves the relavent function. @@ -188,7 +188,10 @@ To simplify the process, here is an additional example of where a [conditional]( OperatingSystem <- Sys.info()[["sysname"]] if (OperatingSystem == "Windows") { # Windows - memory.limit() + # install.packages("ps") # CRAN + Memory <- ps::ps_system_memory() + message("Total GB ", round(Memory$total / 1024^3, 2)) + message("Free GB ", round(Memory$free / 1024^3, 2)) } else if (OperatingSystem == "Darwin") { # MacOS system("top -l 1 | grep PhysMem") diff --git a/course/05_GatingSets/slides.qmd b/course/05_GatingSets/slides.qmd index ba70aa3..6ee6e95 100644 --- a/course/05_GatingSets/slides.qmd +++ b/course/05_GatingSets/slides.qmd @@ -334,7 +334,7 @@ mem_used() ::: {.fragment} ::: {.callout-tip title="."} -Ultimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. You can check programmatically how much RAM you have available, although the specific function you will need to use will depend on your computer's operating system. +Ultimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. There are various ways you can check programmatically how much RAM your computer has available, although the specific functions will vary depending on your computers operating system, since they often involve system-level code outside R. Using the `ps` R package's `ps_system_memory()` function is one of the easier ways for Windows users. ::: ::: @@ -352,7 +352,10 @@ To simplify the process, here is an additional example of where a [conditional]( OperatingSystem <- Sys.info()[["sysname"]] if (OperatingSystem == "Windows") { # Windows - memory.limit() + # install.packages("ps") # CRAN + Memory <- ps::ps_system_memory() + message("Total GB ", round(Memory$total / 1024^3, 2)) + message("Free GB ", round(Memory$free / 1024^3, 2)) } else if (OperatingSystem == "Darwin") { # MacOS system("top -l 1 | grep PhysMem") From 9de3f9166d2a9fd071d6498a5bcc1c9abd808453 Mon Sep 17 00:00:00 2001 From: David Rach Date: Tue, 3 Mar 2026 13:25:32 -0500 Subject: [PATCH 3/8] ps package for Total/Free RAM --- course/05_GatingSets/index.qmd | 21 +- course/05_GatingSets/slides.qmd | 11 +- docs/course/03_InsideFCSFile/index.html | 8 +- docs/course/03_InsideFCSFile/slides.html | 8 +- docs/course/05_GatingSets/index.html | 230 ++++++++++-------- ...-chunk-52-1.png => unnamed-chunk-53-1.png} | Bin .../figure-html/unnamed-chunk-65-1.png | Bin 66869 -> 0 bytes .../figure-html/unnamed-chunk-66-1.png | Bin 60336 -> 66869 bytes .../figure-html/unnamed-chunk-67-1.png | Bin 53732 -> 60336 bytes .../figure-html/unnamed-chunk-68-1.png | Bin 63805 -> 53732 bytes .../figure-html/unnamed-chunk-69-1.png | Bin 0 -> 63805 bytes docs/course/05_GatingSets/slides.html | 229 +++++++++-------- ...-chunk-52-1.png => unnamed-chunk-53-1.png} | Bin .../figure-revealjs/unnamed-chunk-65-1.png | Bin 73679 -> 0 bytes .../figure-revealjs/unnamed-chunk-66-1.png | Bin 65982 -> 73679 bytes .../figure-revealjs/unnamed-chunk-67-1.png | Bin 59275 -> 65982 bytes .../figure-revealjs/unnamed-chunk-68-1.png | Bin 71697 -> 59275 bytes .../figure-revealjs/unnamed-chunk-69-1.png | Bin 0 -> 71697 bytes docs/search.json | 10 +- 19 files changed, 267 insertions(+), 250 deletions(-) rename docs/course/05_GatingSets/index_files/figure-html/{unnamed-chunk-52-1.png => unnamed-chunk-53-1.png} (100%) delete mode 100644 docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-65-1.png create mode 100644 docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-69-1.png rename docs/course/05_GatingSets/slides_files/figure-revealjs/{unnamed-chunk-52-1.png => unnamed-chunk-53-1.png} (100%) delete mode 100644 docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-65-1.png create mode 100644 docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-69-1.png diff --git a/course/05_GatingSets/index.qmd b/course/05_GatingSets/index.qmd index 1a798fd..56a2ab5 100644 --- a/course/05_GatingSets/index.qmd +++ b/course/05_GatingSets/index.qmd @@ -51,9 +51,9 @@ Let's start off by recalling the approach we first saw during [Week 03](/course/ To do this, we first identified the .fcs files we were interested using `file.path()` to specify the folder, and `list.files()` to find contents containing ".fcs". ```{r} - Folder <- file.path("course", "05_GatingSets", "data") # For Testing +# Folder <- file.path("course", "05_GatingSets", "data") # For Testing -# Folder <- file.path("data") # For Quarto Rendering + Folder <- file.path("data") # For Quarto Rendering fcs_files <- list.files(Folder, pattern=".fcs", full.names=TRUE) @@ -184,14 +184,12 @@ Ultimately, how many .fcs files you are able to read in and interact with before To simplify the process, here is an additional example of where a [conditional](/course/02_FilePaths/index.qmd#conditionals) can prove useful, allowing us to check in an operating system specific manner. It takes the output of the `Sys.info()` function, namely the "sysname" argument and then retrieves the relavent function. ```{r} - OperatingSystem <- Sys.info()[["sysname"]] if (OperatingSystem == "Windows") { # Windows - # install.packages("ps") # CRAN - Memory <- ps::ps_system_memory() - message("Total GB ", round(Memory$total / 1024^3, 2)) - message("Free GB ", round(Memory$free / 1024^3, 2)) + Memory <- ps::ps_system_memory() + message("Total GB ", round(Memory$total / 1024^3, 2)) + message("Free GB ", round(Memory$free / 1024^3, 2)) } else if (OperatingSystem == "Darwin") { # MacOS system("top -l 1 | grep PhysMem") @@ -202,8 +200,13 @@ if (OperatingSystem == "Windows") { # Windows } else {message("A wild FreeBSD-User appears")} ``` -When evaluating the returned outputs, primarily consider the total, used and free outputs. - +```{r} +# install.packages("ps") # CRAN +library(ps) +Memory <- ps::ps_system_memory() +message("Total GB ", round(Memory$total / 1024^3, 2)) +message("Free GB ", round(Memory$free / 1024^3, 2)) +``` ## cytoframe diff --git a/course/05_GatingSets/slides.qmd b/course/05_GatingSets/slides.qmd index 6ee6e95..e51edc0 100644 --- a/course/05_GatingSets/slides.qmd +++ b/course/05_GatingSets/slides.qmd @@ -371,9 +371,14 @@ if (OperatingSystem == "Windows") { # Windows --- ::: {.fragment} -::: {.callout-tip title="."} -When evaluating the returned outputs, primarily consider the total, used and free outputs. -::: +```{r} +# install.packages("ps") # CRAN +library(ps) +Memory <- ps::ps_system_memory() +message("Total GB ", round(Memory$total / 1024^3, 2)) +message("Free GB ", round(Memory$free / 1024^3, 2)) +``` + ::: --- diff --git a/docs/course/03_InsideFCSFile/index.html b/docs/course/03_InsideFCSFile/index.html index 3f937ea..28825e6 100644 --- a/docs/course/03_InsideFCSFile/index.html +++ b/docs/course/03_InsideFCSFile/index.html @@ -546,8 +546,8 @@

flowCore

plotly::ggplotly(plot)
-
- +
+
@@ -593,8 +593,8 @@

flowCore

plotly::ggplotly(plot)
-
- +
+

flowCore is also one of the many Bioconductor packages maintained by Mike Jiang. In many ways (as those who completed the optional take-home problems for Week #1 know) reminiscent of this xkcd comic:

diff --git a/docs/course/03_InsideFCSFile/slides.html b/docs/course/03_InsideFCSFile/slides.html index 174333a..f04bfa0 100644 --- a/docs/course/03_InsideFCSFile/slides.html +++ b/docs/course/03_InsideFCSFile/slides.html @@ -485,8 +485,8 @@

flowCore


-
- +
+
@@ -497,8 +497,8 @@

flowCore


-
- +
+
diff --git a/docs/course/05_GatingSets/index.html b/docs/course/05_GatingSets/index.html index e860126..d4940eb 100644 --- a/docs/course/05_GatingSets/index.html +++ b/docs/course/05_GatingSets/index.html @@ -535,7 +535,7 @@

flowSet

str(flowSet)
Formal class 'flowSet' [package "flowCore"] with 2 slots
-  ..@ frames   :<environment: 0x562242979388> 
+  ..@ frames   :<environment: 0x563aececb920> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 1 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr "Name"
@@ -596,33 +596,47 @@ 

Memory Usage

mem_used()
-
146.98 MB
+
146.99 MB
-

Ultimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. You can check programmatically how much RAM you have available, although the specific function you will need to use will depend on your computer’s operating system.

+

Ultimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. There are various ways you can check programmatically how much RAM your computer has available, although the specific functions will vary depending on your computers operating system, since they often involve system-level code outside R. Using the ps R package’s ps_system_memory() function is one of the easier ways for Windows users.

To simplify the process, here is an additional example of where a conditional can prove useful, allowing us to check in an operating system specific manner. It takes the output of the Sys.info() function, namely the “sysname” argument and then retrieves the relavent function.

OperatingSystem <- Sys.info()[["sysname"]]
 
 if (OperatingSystem == "Windows") { # Windows
-    memory.limit()
-
-  } else if (OperatingSystem == "Darwin") { # MacOS
-    system("top -l 1 | grep PhysMem")
-
-  } else if (OperatingSystem == "Linux") { # Linux
-    system("free -h")
-
-  } else {message("A wild FreeBSD-User appears")}
-
-

When evaluating the returned outputs, primarily consider the total, used and free outputs.

+ Memory <- ps::ps_system_memory() + message("Total GB ", round(Memory$total / 1024^3, 2)) + message("Free GB ", round(Memory$free / 1024^3, 2)) + + } else if (OperatingSystem == "Darwin") { # MacOS + system("top -l 1 | grep PhysMem") + + } else if (OperatingSystem == "Linux") { # Linux + system("free -h") + + } else {message("A wild FreeBSD-User appears")}
+ +
+
# install.packages("ps") # CRAN
+library(ps)
+Memory <- ps::ps_system_memory()
+message("Total GB ", round(Memory$total / 1024^3, 2))
+
+
Total GB 62.5
+
+
message("Free GB ", round(Memory$free / 1024^3, 2))
+
+
Free GB 54.36
+
+

cytoframe

In addition to the flowCore R package, additional flow cytometry infrastructure support is provided by the flowWorkspace package. Instead of the reading all the .fcs files contents into active RAM, flowWorkspace reduces the memory overhead by using “pointers” to interact with the object in it’s current storage location (either on your harddrive, SSD, etc.), only reading in components to RAM as needed.

-
# BiocManager::install("flowWorkspace") #Bioconductor
-library(flowWorkspace)
+
# BiocManager::install("flowWorkspace") #Bioconductor
+library(flowWorkspace)
As part of improvements to flowWorkspace, some behavior of
 GatingSet objects has changed. For details, please read the section
@@ -633,9 +647,9 @@ 

cytoframe

Because of these differences in how data is interracted with, we end up with parallel equivalents to the traditional flowFrame and flowSet type objects. These include “cytoframe” for single .fcs files

-
cytoframe <- load_cytoframe_from_fcs(fcs_files[1], truncate_max_range = FALSE, transformation = FALSE)
-
-cytoframe
+
cytoframe <- load_cytoframe_from_fcs(fcs_files[1], truncate_max_range = FALSE, transformation = FALSE)
+
+cytoframe
cytoframe object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'
 with 10000 cells and 43 observables:
@@ -656,7 +670,7 @@ 

cytoframe

-
class(cytoframe)
+
class(cytoframe)
[1] "cytoframe"
 attr(,"package")
@@ -665,7 +679,7 @@ 

cytoframe

Which also still errors out when not given a scalar object

-
load_cytoframe_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)
+
load_cytoframe_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)
Error:
 ! Expected string vector of length 1
@@ -676,9 +690,9 @@

cytoframe

cytoset

As well as “cytoset” to handle multiple .fcs files.

-
cytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)
-
-cytoset
+
cytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)
+
+cytoset
A cytoset with 6 samples.
 
@@ -687,7 +701,7 @@ 

cytoset

-
class(cytoset)
+
class(cytoset)
[1] "cytoset"
 attr(,"package")
@@ -696,7 +710,7 @@ 

cytoset

Unlike “flowFrame” and “flowSet”, when we run str(), for “cytoframe” and “cytoset” objects we don’t get back quite as much information.

-
str(cytoframe)
+
str(cytoframe)
Formal class 'cytoframe' [package "flowWorkspace"] with 5 slots
   ..@ pointer    :<externalptr> 
@@ -721,11 +735,11 @@ 

cytoset

-
str(cytoset)
+
str(cytoset)
Formal class 'cytoset' [package "flowWorkspace"] with 3 slots
   ..@ pointer  :<externalptr> 
-  ..@ frames   :<environment: 0x56224cc6eed0> 
+  ..@ frames   :<environment: 0x563af7c4ddd8> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 0 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr(0) 
@@ -741,26 +755,26 @@ 

cytoset

Due to flowWorkspace use of pointers, the missing data remains stored on the drive, only being retrieved right before it is required. This reduces the overall RAM utilization. Let’s double check the differences in memory utilization for flowFrame/cytoframe:

-
obj_size(flowFrame)
+
obj_size(flowFrame)
3.53 MB
-
obj_size(cytoframe)
+
obj_size(cytoframe)
5.40 kB

And similarly the case for flowSet and cytoset:

-
obj_size(flowSet)
+
obj_size(flowSet)
20.99 MB
-
obj_size(cytoset)
+
obj_size(cytoset)
3.88 kB
@@ -772,10 +786,10 @@

Interconverting

Despite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed.

To go from a flowFrame to a cytoframe, we can use the flowFrame_to_cytoframe() function

-
ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
-ConvertedToCytoframe
+
ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
+ConvertedToCytoframe
-
cytoframe object 'file5caf7fc9092c'
+
cytoframe object 'file20997f38fefd'
 with 10000 cells and 43 observables:
                name      desc       range  minRange    maxRange
 $P1            Time        NA     878.809         0     878.809
@@ -794,15 +808,15 @@ 

Interconverting

-
obj_size(ConvertedToCytoframe)
+
obj_size(ConvertedToCytoframe)
5.40 kB

To go from a cytoframe to a flowFrame, we can use the cytoframe_to_flowFrame() function

-
ConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)
-ConvertedToFlowframe
+
ConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)
+ConvertedToFlowframe
flowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'
 with 10000 cells and 43 observables:
@@ -822,15 +836,15 @@ 

Interconverting

-
obj_size(ConvertedToFlowframe)
+
obj_size(ConvertedToFlowframe)
3.53 MB

To go from a flowSet to a cytoSet, we can use the flowSet_to_cytoset() funciton

-
ConvertedToCytoset <- flowSet_to_cytoset(flowSet)
-ConvertedToCytoset
+
ConvertedToCytoset <- flowSet_to_cytoset(flowSet)
+ConvertedToCytoset
A cytoset with 6 samples.
 
@@ -839,15 +853,15 @@ 

Interconverting

-
obj_size(ConvertedToCytoset)
+
obj_size(ConvertedToCytoset)
3.88 kB

To go from a cytoSet to a flowSet, we can use the cytoset_to_flowSet() function.

-
ConvertedToFlowset <- cytoset_to_flowSet(flowSet)
-ConvertedToFlowset
+
ConvertedToFlowset <- cytoset_to_flowSet(flowSet)
+ConvertedToFlowset
A flowSet with 6 experiments.
 
@@ -855,7 +869,7 @@ 

Interconverting

-
obj_size(ConvertedToFlowset)
+
obj_size(ConvertedToFlowset)
20.99 MB
@@ -865,14 +879,14 @@

Interconverting

Gating Sets

Fortunately, regardless of whether we are using flowFrame/flowSet (RAM) and cytoframe/cytoset (memory pointers), both routes end up converging at the next step, where the underlying .fcs files are passed off to the GatingSet() function.

-
GatingSet1 <- GatingSet(flowSet)
-GatingSet1 
+
GatingSet1 <- GatingSet(flowSet)
+GatingSet1 
A GatingSet with 6 samples
-
class(GatingSet1)
+
class(GatingSet1)
[1] "GatingSet"
 attr(,"package")
@@ -880,14 +894,14 @@ 

Gating Sets

-
GatingSet2 <- GatingSet(cytoset)
-GatingSet2
+
GatingSet2 <- GatingSet(cytoset)
+GatingSet2
A GatingSet with 6 samples
-
class(GatingSet1)
+
class(GatingSet1)
[1] "GatingSet"
 attr(,"package")
@@ -905,34 +919,34 @@ 

CytoML

Since our goal is to examine a fully assembled GatingSet object, we will be using it today to bring in a FlowJo workspace to R. However, since this is a free Cytometry in R course, and not about to have everyone pay for a license for a one-off topic, in the pre-course Floreada walkthrough I documented how to convert a free Floreada.io workspae into a FlowJo.wsp that can also be used (please note that as of early 2026, some scaling bugs may be present and require troubleshooting).

To get started, let’s first attach CytoML to our local environment via the library() call.

-
# BiocManager::install("CytoML") #Bioconductor
-library(CytoML)
+
# BiocManager::install("CytoML") #Bioconductor
+library(CytoML)

The .wsp files within this week’s data where created via Floreada.io. The main difference between the two files is one is a copy of the original that was opened within FlowJo, and subsequently swtiched from logicle to bi-exponential transformation.

We will need to provide the appropiate file path for our desired .wsp file. We can start by identifying which are present using list.files()

-
Folder # Defined Above
+
Folder # Defined Above
[1] "data"
-
FlowJoWsp <- list.files(path = Folder, pattern = ".wsp", full = TRUE)
-FlowJoWsp
+
FlowJoWsp <- list.files(path = Folder, pattern = ".wsp", full = TRUE)
+FlowJoWsp
[1] "data/FlowJoWSP_OpenedCopy.wsp" "data/FlowJoWSP_Unopened.wsp"  

In our case, we will proceed by using str_detect() to select the .wsp that contains the pattern “Opened”

-
ThisWorkspace <- FlowJoWsp[stringr::str_detect(FlowJoWsp, "Opened")]
-ThisWorkspace
+
ThisWorkspace <- FlowJoWsp[stringr::str_detect(FlowJoWsp, "Opened")]
+ThisWorkspace
[1] "data/FlowJoWSP_OpenedCopy.wsp"

With our single .wsp filepath now identified, we can now proceed to set up the intermediate object using open_flowjo_xml()

-
ws <- open_flowjo_xml(ThisWorkspace)
-ws
+
ws <- open_flowjo_xml(ThisWorkspace)
+ws
File location:  data/FlowJoWSP_OpenedCopy.wsp 
 
@@ -942,7 +956,7 @@ 

CytoML

-
class(ws)
+
class(ws)
[1] "flowjo_workspace"
 attr(,"package")
@@ -952,7 +966,7 @@ 

CytoML

Having set up the intermediate flowjo_workspace object, we can attempt to read in the actual data from the .wsp into a GatingSet using the flowjo_to_gatingset() function.

However, due to how I named the original .fcs files (“GROUPNAME” being individual specimens, “TUBENAME” being either Ctrl or SEB), and downsampled to the same number of cells, we will encounter the following error

-
gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder)
+
gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder)
Error:
 ! Multiple FCS files match sample 00_Ctrl.fcs by filename, event count, and keywords.
@@ -962,7 +976,7 @@ 

CytoML

/home/david/Documents/CytometryInR/course/05_GatingSets/data/2025_07_26_AB_02_INF179_00_Ctrl.fcs Please move incorrect files out of this directory or its subdirectories.
-
gs
+
gs
Error:
 ! object 'gs' not found
@@ -970,20 +984,20 @@

CytoML

As with any error, my first move is to check the help documentation. In this case, my initial response is to see if I can identify an argument that will help differentiate between the names for each specimen.

-
?flowjo_to_gatingset
+
?flowjo_to_gatingset

In this case, I find that the “additional.keys” argument would likely work for this troubleshooting

-
gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME")
-gs
+
gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME")
+gs
A GatingSet with 6 samples
-
class(gs)
+
class(gs)
[1] "GatingSet"
 attr(,"package")
@@ -996,31 +1010,31 @@ 

System Time

Especially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so.

One, using the system.time() function from base R, in which we surround whatever line of code we wish to evaluate in {}

-
system.time({
-
-flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME")
-
-})
+
system.time({
+
+flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME")
+
+})
   user  system elapsed 
-  0.491   0.016   0.507 
+ 0.466 0.004 0.471

Alternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.

-
# install.packages("bench") # CRAN
-library(bench)
+
# install.packages("bench") # CRAN
+library(bench)
-
mark(
-  Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME"),
-  iterations= 5
-  )
+
mark(
+  Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME"),
+  iterations= 5
+  )
# A tibble: 1 × 6
   expression                             min median `itr/sec` mem_alloc `gc/sec`
   <bch:expr>                           <bch> <bch:>     <dbl> <bch:byt>    <dbl>
-1 Test <- flowjo_to_gatingset(ws = ws… 497ms  511ms      1.97    13.3KB        0
+1 Test <- flowjo_to_gatingset(ws = ws… 461ms 466ms 2.13 13.3KB 0
@@ -1029,18 +1043,18 @@

Gates

Now that we have loaded the contents of the FlowJo/Floreada workspace, we can start exploring the various infrastructural capabilities of a GatingSet object.

Let’s start by evaluating whether the manually-drawn gates I drew survived the journey. To do this, I can generate a visual gating treee using the plot() function.

-
plot(gs)
+
plot(gs)
-

+

We can also retrieve the individual gates and their gaing paths using the gs_get_pop_paths() function.

-
gs_get_pop_paths(gs)
+
gs_get_pop_paths(gs)
 [1] "root"                                             
  [2] "/Scatter"                                         
@@ -1069,8 +1083,8 @@ 

Gates

Counts

If we wanted to retrieve counts of cells found within the individual gates, we could do so with gs_pop_get_count_fast()

-
Data <- gs_pop_get_count_fast(gs)
-head(Data, 5)
+
Data <- gs_pop_get_count_fast(gs)
+head(Data, 5)
                 name                         Population
                <char>                             <char>
@@ -1093,7 +1107,7 @@ 

Counts

Metadata

Since GatingSets contain multiple .fcs files, we may want to be able to subset them based on metadata for a particular variable. We can check to see current metadata using the pData() function.

-
pData(gs)
+
pData(gs)
                          name
 00_Ctrl.fcs_INF052 00_Ctrl.fcs
@@ -1106,10 +1120,10 @@ 

Metadata

It currently doesn’t have much, but we will explore how to change this more over the next few weeks. For now, just know that we could add additional metadata via either a .csv file, or by retrieving additional description keywords from within the .fcs files themselves (as shown below)

-
AlternateGS <- flowjo_to_gatingset(ws=ws, name=1, path = Folder,
- additional.keys="GROUPNAME",
- keywords=c("$DATE", "$CYT", "GROUPNAME"))
-pData(AlternateGS)
+
AlternateGS <- flowjo_to_gatingset(ws=ws, name=1, path = Folder,
+ additional.keys="GROUPNAME",
+ keywords=c("$DATE", "$CYT", "GROUPNAME"))
+pData(AlternateGS)
                   GROUPNAME   $CYT       $DATE        name
 00_Ctrl.fcs_INF052    INF052 Aurora 26-Jul-2025 00_Ctrl.fcs
@@ -1168,13 +1182,13 @@ 

ggcyto

packageVersion

Let’s start off by checking what version of both the ggplot2 and ggcyto packages you currently have installed on your computer.

-
packageVersion("ggplot2")
+
packageVersion("ggplot2")
[1] '4.0.2'
-
packageVersion("ggcyto")
+
packageVersion("ggcyto")
[1] '1.39.1'
@@ -1187,8 +1201,8 @@

packageVersion

remove.packages

Since ggcyto has a hard-coded dependency on ggplot2, if you have the older versions, I would recommend uninstaling both first, using the remove.packages() function.

-
remove.packages("ggplot2")
-remove.packages("ggcyto")
+
remove.packages("ggplot2")
+remove.packages("ggcyto")

Once this is done, I recommend exiting and then reopening Positron. This will ensure all currently-loaded R packages are unattached from the environment. However, you will loose all your environmental variables, so will need to reload them to get back to this point. If you are working with code chunks inside a Quarto Markdown File (.qmd), you can quickly accomplish this by scrolling down to the point of the document where you left off, and selecting the “Run Above” option showin on the code chunk.

@@ -1197,11 +1211,11 @@

remove.packages

Installing correct versions

To reinstall ggplot2, you just need to install again from CRAN (as with it’s rolling-release model any changes the developers make become immediately available to everyone)

-
install.packages("ggplot2")
+
install.packages("ggplot2")

If you need to reinstall ggcyto, because of Bioconductor’s twice yearly release cycle, you will need to install the “developmental” version to take advantage of the fixes. Since this is for a one-off package, the easiest installation approach if to go via the GitHub using the remotes package’s install_github()

-
remotes::install_github("RGLab/ggcyto")
+
remotes::install_github("RGLab/ggcyto")
@@ -1209,8 +1223,8 @@

Installing cor

Plotting

Once you have the current versions of both ggplot2 and ggcyto, we can proceed to attach them to your local environment via the library() function.

-
library(ggplot2)
-library(ggcyto)
+
library(ggplot2)
+library(ggcyto)
Loading required package: ncdfFlow
@@ -1220,54 +1234,54 @@

Plotting

As was mentioned, ggcyto follows the ggplot2 grammar of graphics syntax, which we will learn more extensively next week. For now, lets look at a simple example

-
ggcyto(gs[1], subset="root", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
+
ggcyto(gs[1], subset="root", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 

The function responsible for plotting is the ggcyto() function. The first argument (“gs[1]”) is designating which .fcs file in our GatingSet we are trying to visualize.

The second argument (“subset”) corresponds to which gating node we want to visualize. In this case, when set to “root”, we are seeing all cells present in the .fcs file. If we however wanted to visualize the cells within the CD4+ gate, we would swap the value provided to this argument.

-
ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
+
ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 

The next argument “aes” stands for aesthetics (more on this next week). You will notice it has its own set of parenthesis, in which we designate the markers/fluorophores we want to visualize on the x and y axis.

The final argument (“+ geom_hex(bins=100)”) specifies we want to generate a flow cytometry style plot, with it’s bin arguments value setting the resolution.

Now that we have walked through the arguments, let’s visualize the data

-
ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
+
ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
-

+

Alternatively, if we switched things around

-
ggcyto(gs[1], subset="CD8+", aes(x="IFNg", y="TNFa")) + geom_hex(bins=100) 
+
ggcyto(gs[1], subset="CD8+", aes(x="IFNg", y="TNFa")) + geom_hex(bins=100) 
-

+

Briefly, if we didn’t remember the marker, we could specify the fluorophore

-
ggcyto(gs[1], subset="CD8+", aes(x="BV750-A", y="PE-Dazzle594-A")) + geom_hex(bins=100) 
+
ggcyto(gs[1], subset="CD8+", aes(x="BV750-A", y="PE-Dazzle594-A")) + geom_hex(bins=100) 
-

+

-
ggcyto(gs[6], subset="Tcells", aes(x="CD4", y="CD8")) + geom_hex(bins=100)
+
ggcyto(gs[6], subset="Tcells", aes(x="CD4", y="CD8")) + geom_hex(bins=100)
-

+

diff --git a/docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-52-1.png b/docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-53-1.png similarity index 100% rename from docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-52-1.png rename to docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-53-1.png diff --git a/docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-65-1.png b/docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-65-1.png deleted file mode 100644 index 3453133e435cfc5193a3b570026b56c87f30bd6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66869 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

^8JN+1cmwh%;#dj?S6o{Bfq-d+WadaVCLi literal 60336 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 tNv~+j|Ib+EH)_ptjhT4ie{|`K7FJJ%w diff --git a/docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-68-1.png b/docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-68-1.png index d4d20f89e4221c989974c06206cd6029e10f150e..6ed1bdd1b17e0ed20218100c44c4540dc640987d 100644 GIT binary patch literal 53732 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 tNv~+j|Ib+EH)_ptjhT4ie{|`K7FJJ%w literal 63805 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

x%l#CosTD~>K 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

x%l#CosTD~>K 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

str(flowSet)
Formal class 'flowSet' [package "flowCore"] with 2 slots
-  ..@ frames   :<environment: 0x56470dcf2cc0> 
+  ..@ frames   :<environment: 0x559e41e52918> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 1 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr "Name"
@@ -857,7 +857,7 @@ 

Memory Usage

.

-

Ultimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. You can check programmatically how much RAM you have available, although the specific function you will need to use will depend on your computer’s operating system.

+

Ultimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. There are various ways you can check programmatically how much RAM your computer has available, although the specific functions will vary depending on your computers operating system, since they often involve system-level code outside R. Using the ps R package’s ps_system_memory() function is one of the easier ways for Windows users.

^8JN+1cmwh%;#dj?S6o{Bfq-d+WadaVCLi diff --git a/docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-66-1.png b/docs/course/05_GatingSets/index_files/figure-html/unnamed-chunk-66-1.png index 1bce85fe638cef7887a1e985c8cb6c358ddc6058..3453133e435cfc5193a3b570026b56c87f30bd6b 100644 GIT binary patch literal 66869 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

@@ -888,35 +888,30 @@

Memory Usage

OperatingSystem <- Sys.info()[["sysname"]]
 
 if (OperatingSystem == "Windows") { # Windows
-    memory.limit()
-
-  } else if (OperatingSystem == "Darwin") { # MacOS
-    system("top -l 1 | grep PhysMem")
+  # install.packages("ps") # CRAN
+   Memory <- ps::ps_system_memory()
+   message("Total GB ", round(Memory$total / 1024^3, 2))
+   message("Free GB ", round(Memory$free / 1024^3, 2))
 
-  } else if (OperatingSystem == "Linux") { # Linux
-    system("free -h")
+  } else if (OperatingSystem == "Darwin") { # MacOS
+    system("top -l 1 | grep PhysMem")
 
-  } else {message("A wild FreeBSD-User appears")}
+ } else if (OperatingSystem == "Linux") { # Linux + system("free -h") + + } else {message("A wild FreeBSD-User appears")}
-
-
-
-
-
- -
-

.

-
-
-

When evaluating the returned outputs, primarily consider the total, used and free outputs.

-
-
-
+
+
# install.packages("ps") # CRAN
+library(ps)
+Memory <- ps::ps_system_memory()
+message("Total GB ", round(Memory$total / 1024^3, 2))
+message("Free GB ", round(Memory$free / 1024^3, 2))
@@ -941,8 +936,8 @@

cytoframe

-
# BiocManager::install("flowWorkspace") #Bioconductor
-library(flowWorkspace)
+
# BiocManager::install("flowWorkspace") #Bioconductor
+library(flowWorkspace)
@@ -967,9 +962,9 @@

cytoframe

-
cytoframe <- load_cytoframe_from_fcs(fcs_files[1], truncate_max_range = FALSE, transformation = FALSE)
-
-cytoframe
+
cytoframe <- load_cytoframe_from_fcs(fcs_files[1], truncate_max_range = FALSE, transformation = FALSE)
+
+cytoframe
cytoframe object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'
 with 10000 cells and 43 observables:
@@ -995,7 +990,7 @@ 

cytoframe

-
class(cytoframe)
+
class(cytoframe)
[1] "cytoframe"
 attr(,"package")
@@ -1025,7 +1020,7 @@ 

cytoframe

-
load_cytoframe_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)
+
load_cytoframe_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)
Error:
 ! Expected string vector of length 1
@@ -1054,9 +1049,9 @@

cytoset

-
cytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)
-
-cytoset
+
cytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)
+
+cytoset
A cytoset with 6 samples.
 
@@ -1067,7 +1062,7 @@ 

cytoset

-
class(cytoset)
+
class(cytoset)
[1] "cytoset"
 attr(,"package")
@@ -1097,7 +1092,7 @@ 

cytoset

-
str(cytoframe)
+
str(cytoframe)
Formal class 'cytoframe' [package "flowWorkspace"] with 5 slots
   ..@ pointer    :<externalptr> 
@@ -1127,11 +1122,11 @@ 

cytoset

-
str(cytoset)
+
str(cytoset)
Formal class 'cytoset' [package "flowWorkspace"] with 3 slots
   ..@ pointer  :<externalptr> 
-  ..@ frames   :<environment: 0x5647187d67c8> 
+  ..@ frames   :<environment: 0x559e4d1e2f48> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 0 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr(0) 
@@ -1189,7 +1184,7 @@ 

cytoset

-
obj_size(flowFrame)
+
obj_size(flowFrame)
3.53 MB
@@ -1197,7 +1192,7 @@

cytoset

-
obj_size(cytoframe)
+
obj_size(cytoframe)
5.40 kB
@@ -1225,7 +1220,7 @@

cytoset

-
obj_size(flowSet)
+
obj_size(flowSet)
20.99 MB
@@ -1233,7 +1228,7 @@

cytoset

-
obj_size(cytoset)
+
obj_size(cytoset)
3.88 kB
@@ -1301,10 +1296,10 @@

Interconverting

-
ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
-ConvertedToCytoframe
+
ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
+ConvertedToCytoframe
-
cytoframe object 'file5bfe2ae750aa'
+
cytoframe object 'file1fe95b5196ca'
 with 10000 cells and 43 observables:
                name      desc       range  minRange    maxRange
 $P1            Time        NA     878.809         0     878.809
@@ -1325,7 +1320,7 @@ 

Interconverting

-
obj_size(ConvertedToCytoframe)
+
obj_size(ConvertedToCytoframe)
5.40 kB
@@ -1353,8 +1348,8 @@

Interconverting

-
ConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)
-ConvertedToFlowframe
+
ConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)
+ConvertedToFlowframe
flowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'
 with 10000 cells and 43 observables:
@@ -1376,7 +1371,7 @@ 

Interconverting

-
obj_size(ConvertedToFlowframe)
+
obj_size(ConvertedToFlowframe)
3.53 MB
@@ -1404,8 +1399,8 @@

Interconverting

-
ConvertedToCytoset <- flowSet_to_cytoset(flowSet)
-ConvertedToCytoset
+
ConvertedToCytoset <- flowSet_to_cytoset(flowSet)
+ConvertedToCytoset
A cytoset with 6 samples.
 
@@ -1416,7 +1411,7 @@ 

Interconverting

-
obj_size(ConvertedToCytoset)
+
obj_size(ConvertedToCytoset)
3.88 kB
@@ -1444,8 +1439,8 @@

Interconverting

-
ConvertedToFlowset <- cytoset_to_flowSet(flowSet)
-ConvertedToFlowset
+
ConvertedToFlowset <- cytoset_to_flowSet(flowSet)
+ConvertedToFlowset
A flowSet with 6 experiments.
 
@@ -1455,7 +1450,7 @@ 

Interconverting

-
obj_size(ConvertedToFlowset)
+
obj_size(ConvertedToFlowset)
20.99 MB
@@ -1483,8 +1478,8 @@

Gating Sets

-
GatingSet1 <- GatingSet(flowSet)
-GatingSet1 
+
GatingSet1 <- GatingSet(flowSet)
+GatingSet1 
A GatingSet with 6 samples
@@ -1492,7 +1487,7 @@

Gating Sets

-
class(GatingSet1)
+
class(GatingSet1)
[1] "GatingSet"
 attr(,"package")
@@ -1505,8 +1500,8 @@ 

Gating Sets

-
GatingSet2 <- GatingSet(cytoset)
-GatingSet2
+
GatingSet2 <- GatingSet(cytoset)
+GatingSet2
A GatingSet with 6 samples
@@ -1514,7 +1509,7 @@

Gating Sets

-
class(GatingSet1)
+
class(GatingSet1)
[1] "GatingSet"
 attr(,"package")
@@ -1641,8 +1636,8 @@ 

CytoML

-
# BiocManager::install("CytoML") #Bioconductor
-library(CytoML)
+
# BiocManager::install("CytoML") #Bioconductor
+library(CytoML)
@@ -1684,12 +1679,12 @@

CytoML

-
Folder # Defined Above
+
Folder # Defined Above
[1] "data"
-
FlowJoWsp <- list.files(path = Folder, pattern = ".wsp", full = TRUE)
-FlowJoWsp
+
FlowJoWsp <- list.files(path = Folder, pattern = ".wsp", full = TRUE)
+FlowJoWsp
[1] "data/FlowJoWSP_OpenedCopy.wsp" "data/FlowJoWSP_Unopened.wsp"  
@@ -1717,8 +1712,8 @@

CytoML

-
ThisWorkspace <- FlowJoWsp[stringr::str_detect(FlowJoWsp, "Opened")]
-ThisWorkspace
+
ThisWorkspace <- FlowJoWsp[stringr::str_detect(FlowJoWsp, "Opened")]
+ThisWorkspace
[1] "data/FlowJoWSP_OpenedCopy.wsp"
@@ -1746,8 +1741,8 @@

CytoML

-
ws <- open_flowjo_xml(ThisWorkspace)
-ws
+
ws <- open_flowjo_xml(ThisWorkspace)
+ws
File location:  data/FlowJoWSP_OpenedCopy.wsp 
 
@@ -1759,7 +1754,7 @@ 

CytoML

-
class(ws)
+
class(ws)
[1] "flowjo_workspace"
 attr(,"package")
@@ -1809,7 +1804,7 @@ 

CytoML

-
gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder)
+
gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder)
Error:
 ! Multiple FCS files match sample 00_Ctrl.fcs by filename, event count, and keywords.
@@ -1819,7 +1814,7 @@ 

CytoML

/home/david/Documents/CytometryInR/course/05_GatingSets/data/2025_07_26_AB_02_INF179_00_Ctrl.fcs Please move incorrect files out of this directory or its subdirectories.
-
gs
+
gs
Error:
 ! object 'gs' not found
@@ -1848,7 +1843,7 @@

CytoML

-
?flowjo_to_gatingset
+
?flowjo_to_gatingset
@@ -1884,8 +1879,8 @@

CytoML

-
gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME")
-gs
+
gs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME")
+gs
A GatingSet with 6 samples
@@ -1893,7 +1888,7 @@

CytoML

-
class(gs)
+
class(gs)
[1] "GatingSet"
 attr(,"package")
@@ -1943,14 +1938,14 @@ 

System Time

-
system.time({
-
-flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME")
-
-})
+
system.time({
+
+flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME")
+
+})
   user  system elapsed 
-  0.499   0.008   0.506 
+ 0.462 0.005 0.467
@@ -1976,21 +1971,21 @@

System Time

-
# install.packages("bench") # CRAN
-library(bench)
+
# install.packages("bench") # CRAN
+library(bench)
-
mark(
-  Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME"),
-  iterations= 5
-  )
+
mark(
+  Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys="GROUPNAME"),
+  iterations= 5
+  )
# A tibble: 1 × 6
   expression                             min median `itr/sec` mem_alloc `gc/sec`
   <bch:expr>                           <bch> <bch:>     <dbl> <bch:byt>    <dbl>
-1 Test <- flowjo_to_gatingset(ws = ws… 490ms  498ms      2.01    13.3KB        0
+1 Test <- flowjo_to_gatingset(ws = ws… 455ms 460ms 2.17 13.3KB 0
@@ -2036,11 +2031,11 @@

Gates

-
plot(gs)
+
plot(gs)
-

+

@@ -2068,7 +2063,7 @@

Gates

-
gs_get_pop_paths(gs)
+
gs_get_pop_paths(gs)
 [1] "root"                                             
  [2] "/Scatter"                                         
@@ -2115,8 +2110,8 @@ 

Counts

-
Data <- gs_pop_get_count_fast(gs)
-head(Data, 5)
+
Data <- gs_pop_get_count_fast(gs)
+head(Data, 5)
                 name                         Population
                <char>                             <char>
@@ -2157,7 +2152,7 @@ 

Metadata

-
pData(gs)
+
pData(gs)
                          name
 00_Ctrl.fcs_INF052 00_Ctrl.fcs
@@ -2191,10 +2186,10 @@ 

Metadata

-
AlternateGS <- flowjo_to_gatingset(ws=ws, name=1, path = Folder,
- additional.keys="GROUPNAME",
- keywords=c("$DATE", "$CYT", "GROUPNAME"))
-pData(AlternateGS)
+
AlternateGS <- flowjo_to_gatingset(ws=ws, name=1, path = Folder,
+ additional.keys="GROUPNAME",
+ keywords=c("$DATE", "$CYT", "GROUPNAME"))
+pData(AlternateGS)
                   GROUPNAME   $CYT       $DATE        name
 00_Ctrl.fcs_INF052    INF052 Aurora 26-Jul-2025 00_Ctrl.fcs
@@ -2314,7 +2309,7 @@ 

packageVersion

-
packageVersion("ggplot2")
+
packageVersion("ggplot2")
[1] '4.0.2'
@@ -2322,7 +2317,7 @@

packageVersion

-
packageVersion("ggcyto")
+
packageVersion("ggcyto")
[1] '1.39.1'
@@ -2395,8 +2390,8 @@

remove.packages

-
remove.packages("ggplot2")
-remove.packages("ggcyto")
+
remove.packages("ggplot2")
+remove.packages("ggcyto")
@@ -2446,7 +2441,7 @@

Installing correct versions

-
install.packages("ggplot2")
+
install.packages("ggplot2")
@@ -2471,7 +2466,7 @@

Installing correct versions

-
remotes::install_github("RGLab/ggcyto")
+
remotes::install_github("RGLab/ggcyto")
@@ -2496,8 +2491,8 @@

Plotting

-
library(ggplot2)
-library(ggcyto)
+
library(ggplot2)
+library(ggcyto)
@@ -2522,7 +2517,7 @@

Plotting

-
ggcyto(gs[1], subset="root", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
+
ggcyto(gs[1], subset="root", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
@@ -2564,7 +2559,7 @@

Plotting

-
ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
+
ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
@@ -2626,11 +2621,11 @@

Plotting

-
ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
+
ggcyto(gs[1], subset="CD4+", aes(x="FSC-A", y="SSC-A")) + geom_hex(bins=100) 
-

+

@@ -2658,11 +2653,11 @@

Plotting

-
ggcyto(gs[1], subset="CD8+", aes(x="IFNg", y="TNFa")) + geom_hex(bins=100) 
+
ggcyto(gs[1], subset="CD8+", aes(x="IFNg", y="TNFa")) + geom_hex(bins=100) 
-

+

@@ -2690,11 +2685,11 @@

Plotting

-
ggcyto(gs[1], subset="CD8+", aes(x="BV750-A", y="PE-Dazzle594-A")) + geom_hex(bins=100) 
+
ggcyto(gs[1], subset="CD8+", aes(x="BV750-A", y="PE-Dazzle594-A")) + geom_hex(bins=100) 
-

+

@@ -2705,11 +2700,11 @@

Plotting

-
ggcyto(gs[6], subset="Tcells", aes(x="CD4", y="CD8")) + geom_hex(bins=100)
+
ggcyto(gs[6], subset="Tcells", aes(x="CD4", y="CD8")) + geom_hex(bins=100)
-

+

diff --git a/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-52-1.png b/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-53-1.png similarity index 100% rename from docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-52-1.png rename to docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-53-1.png diff --git a/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-65-1.png b/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-65-1.png deleted file mode 100644 index fde63f2b07b171ed277cb4f5968171aa616d5a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73679 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 Tsm2iuayg;aG9a@YGVhjavl zcpCgS7L;LJkKA#7NW9VUWvc6RgF&;r&ZaTQoIJNg#jT%~x-s*C; z{2k{Hp@9giwiuAEH4ulUt<%_IeDa+PaAS3@OUW6I_w*dlQ<-&!xuYWT6_}GxauGTL zQ^{YR+V#U_5sUBRL=5r*vPl{P+j?GU*5;cwbvI;MBJ$-_1h`eVQ$~}QOO%a1sl+2P zB&^Ax{0D5a86}>OJuj168Hbr)TPBAfbje7COg$rp; z$G%0ac&&DQOlaK$DA!Fb@DVgur#JRB1go*%4a`F zi9;bOC|(taxxLzNub7$Le!kZD6*BM)VX%YZ|0)}cp&7wHYd{Pq*Mg;WJ?Rfq@v$ZM zl1VI)P`06_A|dipLu>)RJbp)1d3xVyzo5Nnqyw2EB!Wqx?N2zU39!#GnuE&H+>U1s zjk(!xH3tyKH?3nJqHzP6@W=})htQ&Q)KF!0dBss!HpOLf!3(M6Cd_6rttI!{aR5XZ z!2j}%>6ZefROQEd4@&`K&7fE=utF6?z=<9yG#}yKuSdthjxKD5mjW1WFkZtB3^T)> z%US~JkN%09x_j$S7_54za^dq?NtfQ0^y2ado;@w@TyOwh#xG1Xca77Yn~tQQ8vhqW ztnijj4mbnny!}6A3IFopurmOleBamXYo;w(7gQng89u4Ia5h5w?LQqXtD26$R;(M` zr&V`UZ@2uCe87kyS^MnzCS1jP5faR$tAQF`C!zPrqXA z3*a%bZ~fJ`q1+?B>gEQIxF*Qd{U5Tef6@+Y_bK(W#`X8YWs#MthB7vdvCJNm65N$3 zL7T~B0dDDOEtBL)$0pIOQM%qL@+K!h*GTh+WHY4_OgJkhGrVpYskZC=YOlu|4n!=C z#xVISpxP&B^M41?bOljl%(Jj|D_TX##_zV}vg3!y&mu7dlW}WHDVL4Kn%Ea)eqr`2 zwWdDIU9erw7uR=x?(lzu_A0v_6vFch5SNvEfZDeqI0mNsDKNziX<9gO^ry6Q2FII` zpmP%iO+&tHn8uo{(xFR^K>!vHn+*>Cs63pJLbs(V-n2DcIG0+D7`~qxAmr@ght066 zGz5+}T#9%qyP_dH?n{9pc$z)|JaTKDCp7kHzm2My7y@+_dqrhMXPr&m~F(yE2MO7pqh(QqTf{o8J# z;x|Pc2T7AG!r5;Q_`~r+pVrwdcEwD$JM!NNKj#{X@O%S2mO&IZ$V_B&a&sB%0L=U< zw&m9G+AsDtEiG=!(0054)66igWQh+fnXN$Cf3f=zYHXqt?iDSI28hTg-vEon-JVVWN+C1{0x^%AYNcI ze6@@V&lx;V61BC%oKuuv9G0+na~s%s^D6J#lLsu3!u$L)Mu93jS+4IK222_TkPDA< zrJr@|sou%vy0dk8Ah7?4`^~0`gBQ;GGfN!LI>aBISRtPaR1Z4aq=AvZmnl7HKbA+} zBoVKJhmyzgU_`81(8IKfByxD|&FeTN#xYj47(w{(v!{}p|7Y0oqNkN(65L}g1A3;q zn$61NnJKmsHw+Cwgp-&mpDtPz1a}~r3u|_fyR8QG3!Bva1Pl$Dfvk}Ux(AilGEI&8 zR!k5tV2m5Kh@V{VomhJM|f5uUqJI-X4T&%9I9J#NCv(z3CsDb=Kb8j6=JN7@=p+wO4lYo{H= z0~8W=1!Q>?%anUA#i2NPPaZvOekns`?(mB^mi%db(Kig~_P>7W?^HPs%sc^Pts+m6 z8vaKb1B^*_&?@w}Fpu`)VYsEqD;^zJN-VKT%Vx-*1(Gv>K}~70H+n!19ED@~(=lhj z13Shi7#Fh~CoXocRKEn@v_6LX>q$g@U55g8R=N{|X>&q(=j2YoY=RNhcF=Zp@ZEJq z`S?*!2A@5yQGSl5*|V?<6RHtXq?S4cm%T(~Q<2}991U)pRW1J{c)N5~mNABT8tdWo z;zA^QiD|9dO7{*DTto^k)|^-B`IO|T-q7Gn+UL(V1XzZ0c*qVP8C*_CDqmD4J46kA ze^tHlV&My;KuFLe`Sa68I73!5ytA?*M!Yal9on$G*xb|crWt7bu_~>uy ziK_?fwOMuvy$?@LhOeor>}>yNMTw-V1a7vs7ko8cnqnPx0$6)H?w4_|`{-OnL=J$D<`+&;WPp1BoBPwWn*uET z$#baXo{kV;$2Y^dR^tCaW_O;8l#c6&ca124P5r%S=U)sB{b@)tE|Flv$0PnlGzLNb^jWD7L8+{}d_lvU;(a}_j z0Pyt+-{Aa7Lk+dNy>$L`P^h+=^q$+|uFB<%2QjZLK)s}cd}>DX(K*XTeGuk_xm$_$ zvrd6*t9O*d<-G^z4kmI5AwI1znH+}DZ@Nw!bDLP2a=kqApl$NOQ?f%V1HLRVNqE5I zAi-ECP` zHbTY*i^nEA^kVPNG%e>izbTIJ=}Ez_N}?*nmy?%>`?it;KmEPb`ttb8@-Q}}+Z@1CYC+^m1<`|912%6@|_zWT3+ z$%L5GcLH#2eh1i86KnZ9V%)7;jZt|tA0%%UHcg7SF4#16PcIoE-!vQ5=!?|xi<~c2 zZXhWPNO1?)k3P=+#N776X?hcVr|oIw&)uB+M`Akwji(e)+%bT1Ozpp40WT|oyq$}H zgO|lZtW4vGRrTGq8OT0aY$r+jz!`d#y%;(hacTUTS0l`th~2eP1kL37fyg%}z{JGI zN6z;-$%~{3@!6dp*|D%6uY@YrvS)4l3Z35)j0(ihSgSYq$lnm0)*7E1AhA!pywylP zM?7!syBD$fOiAc?=p(bjLZelodpyM2>#tV1!VjjS<26=?99GXYPg-pbmDUC=n69t~ zsKckfuHG&7IEc~g>G!mLgtn*&NgYk9a3FWqmSlN3_VL!X)>Vv&?$Jg!D`bnphU?# z%;k&A!1glb(@S&MpBOwE^W_ur&I-^JOPhZ>Zs0G{H%?e}E2-&q*p#T>iJIiYO7E5& zjDI~SS&qIEei0DT0X9%xg$HLII+Eh~uXON8E3LYDZ5kEiBKP9ecb{gH0=vT$>l;*+ z3hExv4TTR1HG7p6R#ZqKhJctLg&F#*4X0XRb8{%D$zHeCbXp#(T3K0vlu%Y8W?RGS z&5pE7??`NFQdu(q(lJ*Tms6{?Y9X-CwtTyirsY<=yONJx-$^~QMvK6i%xg`5aQU3g zXlqE#n7rSB%`Ib!w>jx-@a(v9#480?EL$F7(n!S^71DLN2qHGnz5po!+;0i&0A<1B z9DSc=NtnXkOxk_pbbOkjbfhvH_Z5m5>i0_dSP#k4)Gt4UPPUhKIk9peE2JM}_d*4K zCxVF80K{pe4{1{5eZPRG9kZ9nm6}+dGejvstMbN$XO%s|1VT|kZ*OLd81I8eFJ1>} z_G3`wIONji8=$u1{xX~;E4h0Ha@b2_G#$OG1ea857k*}=XX~7hqR!WvF~5n z{;^olPj1ct5}fXHN?&-h-5+t*J=k0!vz|7N1rim?rl$ zQ+uUtXC)iooGg}*mW-D!w+roGV8)9S;^NhV_Kd$U>+D*bX?Ad-8ZeD%`6G!jG?@W> z?s*J$Ld1;??=v@4v7rsvy+5FD$?A;Kl077nLCU%FJDfujTU$=}x%){Fpd6s{YT@wCBd>`liVqZAQcmeA5qU>z;n%EvU#)NAp)4V?FS3 z@rZ{lACu^;_^_=c)8=9G(PL(c9sCn0i*T2o%khNqY~HD->vS5nLpI*zp%mqN5HTIy z&^e1bM_XuQAJgPVxEyk~qfvcjxps(DIBsh()jD`jT4Ek`S=L6MFLyoK16wWKsNsPZ zxxd+7N}Y?u&O%g~3IZgKB~HI%jP8pM&mijZa&x~9EO$LqibVQ?lL$7BzCWm>KXcg= zOw3_B#1IsXB{0Q*Z0q~oZ6KZA6@CF&BLxgfN=i;oPeV$8MpLAx>+xNyY+^$$TCau} ze4jQ6_d0Z=w@`9ENd;c?Et`FGO63f^J)owoiYaZwywbp+LZ&11sYR%wg^Ed8#44)KD z5Pgl8SdpELFpcc+zb=$ynwU9y8BzlQVK5dIL`>`BAqicB59;&JoGBlWDDMzgK2++| zXj$WE@O?(&H4JgyV7M(2VPWBkYge_*k_r-PiP>#6+(aI+tJ zS2@3hk`Qz`{Fz}Z8fo<`XvmUa# z(G}L@E7EtQ0<-7b5Ps{zebIOcJ#Jwz2_^XC;^wi8p%uujGzoN?u<{|#aoRbXFtKCA zg194mxxN4$jB`%s`l4iC1;g%7Uf`gI^O61cxdS|X3pNVMeZV^pVDO*6#TM2ZQHrqHWD9@e zTkf!LT={)ed+R5%1Lk<`uUP<2j(~6O%XXA&9HT`D)Cxl7!Y~c0Z5lB};|Z-aYdBrq zIR1D{21jRTAwhVsnW1X2p`(1s!aE4F?F{}b8d|hl-5mqY^F5Z`EfHd}-YnTOiUx{BV+-e)cU|ufLn7K*R@U^aIV!iiNCQMvTJ7 zlAQq)+P8oA9mLxHs_p(G@%dZdfyP-)?bhJVjN_3~)0Q``uNSb=%AtA>GX)OV0SO3PewrVt+VcrZ0eR4PYf_bqnEDZPt-6oJsoI_~+2Rh?Z zJ*tUzi)ay_VHp2zE5!J#YM;GP-fbJ1Y@ul_kT?CSx(wP3LJGfu2-W}8W}u4OzE#fD z@Y*IJEtX@3QWQpDEF(?mVEm1RzBt$S@i1>~%tjgq>5l(E0>V#qnp9iO+k7e}3d*U+ zBgx@xFHA}XDFzt6aH_4Ls;QY+>t6fxED*w^CXSHG+N;YWP!LL7+Nz05t-V93@)4Iu z3m-{HX@#H{IHQ7s3<pE`W)XHeH3Cg4ACR~gQFu}J6@rm3#B-5_7tbkF%{li zBmt+O?&Og3Wo!o2%9Uq_NUOlW()+oahS{C3I)l`qgAgBgX<>~{-RTJSJS9_-Yw_Am ztCm(YtTDMyabj7H@#qGx<%i>(Op$%@+1f2g!22Xk!A~Ch`m{!|Fs~^@{2|nqg$At} zfGX}>zypGYw&vzX@IF02S|#85po#p`gZD~{cQPNcPoa$$8|Sq`51$Se>$EAVjstHiV)gFpWq-q3HwsDLh z8pU_H_-@gjKAaYoDk&r;<-L=e4TW`-K@Q%m(~_1DUIJ&2aTml~2Ocb;S56Hl5{@WH zXoFm?r9oOYc7bA#R~3nV{Ha*zY4X3iwPOO-ElH}cngDDBrr4ybC|qTgz_?_GFgjGW$b1sx6Pe~%vgOZfPI8a)6YrZN5P8*6r5 zCeauv^qq*BcU4ff=jH3X1qh$%=2OT5*|NB4`W_)kS)TNKy37|)PWCYymuvULbn?{& zT{dPIlThI@sQ12!BTyIz_^WBNTYf5!K-Zn3Pu6T?z|i#OcIpSX(CT_UE3n3^&qCR8 zXSgkgU9anVX9KeRv+8W`Avp}WEZoR*>fzbmk?%VmAU~ijxU)ELFYko}=;(U5f13-O zb@Sx^1j450^RI=#6gphvN%wizbZ>be^(Q`ew~cj6Ku1-;O}~Dcuj$jvTwrQeC%)6e zM~`yBggvg}?z)#R=-xu;eS08#4*Ir|!0R13gs~L^X(C@kI0bk}D{dk$UiCXyfMI&E z!u@Sb3)7d`VJpkq@V2TbPf!yUFYmLAG2z~2uTNA|zlWWl@LqJ-zh@EFT?T`}R##Wu z#dA$O8-bY<7bm~EQkmQ5e>CBcHSzL{1;c~iwAj=&!G;(5NjmEZ(CMbGxrK}x$klKX z3g@!ey;lX@IYyuV$N3)*>Y&Mp0;6_4{uWr0O1@=;jP}%kyfvj?WZFMV;G|c&i4A>wB!SABhEi(Y2rj93jZZkeg=@B{`OM;)mp4+8Kq)48r2cE=z91d zOL-NRdvXJTF4vq~O2!#4flx(ny{<@<3e5=*MbC>rbeW)$g=@hiSV!J)B$={#QaJ=% zI|3fPvFeidRj2uUY3AuhDkwF^;`}tC<8+3QRO@4P+t`ADlNh5A7it{i>n{d?p;~Pi z4ayJB>gEY1L9HocwNo7sn*^PJaVhffoKP&R@PJLAdPY3F@E>C)XDFBh zBoiMVc0>naw)>AO>hC>21s(=$2!O(?INVFux55fiptj(spcvord?7k`6a8@ScyyhA zWM9X)2~gMOqjO==oAeQ`<9FI)!%Fx8E4BvaXBMD*&ay@3C|^Z%WW3t|NF(#=F31T$ zq2{t-?-l>Vw6+qgiaIBMa;xeIT9TiD#Ww-~U1x#CIBOcvGk_W`Rii{MzYQ!b{6R?6 z5r!r0+a{q^ctwa|o$s;{N$fcPP_wP(|yAKc<_fp}IV^w~Wf^2{>1v zjaeih7_Z_b;Or)tbGI7x5u+yf^#hDZ8dKuJPt0O3h=D<-iasHN_$aNe1k2&~&iLAa zb*#d%992KE5u)^7Pp1dup*b;s+LMs>a8kr|DKK3%P*_ap5 zr7#V>tl)NObHqy>0}o`ViUqQg^xD7Nh8?|Nt$-b_;}4F#bmP1 z-l|xe4m;q@OXDElK$D9sZ-7Z^RLQE>c%+vv!OOi~3hG~4J*(sU#>6uF z$_aDqwgyWDGS2q$#yRW~Q<(iha&1wsd`rul>9<|_(sKOVF4${$VWke9e!}6%K8%Lf z9{#-?k4MvxKTQRQS(_uE(sFU{8z^tOV_7^VGeZZCD^_NSxiPu8={jflO(rDD2GsI# zPuAWFYBPp02sgh0z6$H^9ogqtOOFb@IsoBD@X;m9W^4d`=^%L<%}r~s=1XnRnJF0f6#y>Z%~nbcfbHcJaRM{;R9KEZwE z+Zz*w>T`lFkHz8ynaqDBRY$Uulr5$}s}%H^JMZ)Sco2YF9PD9)dlWc5!WPlz!*2Gr z$}8xGKS+umFu`1~+%0%OTY8v6amX@I#%I0H6BJQ;4 z{j(+gFRAK(jJo}8t`nGy_8Awt>n80{HJd;n57ZrimMyb5-Sf&vK}`8KlIZ`=-lj#+l- zG`!dn<~(_Sz=r~LxW6e7JUq@-nh!~Fd$}DIT`6(SP)BW438kWLY!}BFaoO5}Ac?wt zsU?bnYu>~oZwC=MQ5n)_V)-wxF;3FyOa!7)ypy>vC?yP}H^-IxwM2(c{yN4Z@Q9V< zY5#KZH!27jB2Py}kR#t?J76hKM#8xO0RC^zBdGqC0&(CCO@Czcj24E~H2qyP zb3R`~YaFp^uo^VLT(~?yC%B+VH(gVF#~2npKxeA=fvZqy%wChn>aDZG9w|o?(|HSF zS3^8<*-F9FLEo^)vZZ?QryPKN&8&KQ(swY(cbm!2{~+!V(F{36YzN2V(GsxW-PE)P zbU4UOAD7f6S~+shcZ1|C5O@)jLum998fS{=T6kRPC((5`a>Dp31agDl{q+9XATlD65oy@Cn$) zaB*2+&&XW&$Xhqi6vZx~R;tU3^4+qlSY8T3QO!~1<3o2BEy4F;&Zzmx#?RxH?c>#_ zCx0>#@5@yCk$ofkP!`rBmC~r&)xdf1U9zgwovc9i=B3VF46w1heAg!I(TFc<{A{xv z#Hbh@cf@1Kq3O*SbCpLhlg#NFu~LCtk4=bD+QeAlGY_*dsXM5H#&`|)xBl$(B_3YZ zIZ>5Q$^~+32zMVTCD$0(lJY%t!4y9W?yQFDO+0;6TtQo;P!6MU;|vHLb{GTL0o2$O=Zt>?4{_~jY-_Cvxs7T7#vAw4`X71jb z@6MOl?TY8n7v!AWRhke#WtDg(-BTIeI%H;*pG9c$O^A((24V4 z9QU8@jECEYOph!tfjQTX(bVR;ukkJTj!_TEY4?mX%5J7%{>g+5#B91<$h5yd<#Qk1 zP-*JjZuD@~bE-`Ws6$qjCwZ71^{gdR-91x2Dr*rSZI$NM)#BAAOl zpigQ4<6Z(x_`1~9HsH~&UcTO3(t@)ZR&Vf^NCB7Lf1c6*`|$;l**Qr#vKF$O<+Q9h zhx>M-k&sh9n^u0!-eUSQ-=u71=Z~Ao`6X%IY22JiZ`i-q^3_rf3<>R?aVIA{9VBNP z@HqCnd zKb;GWek*p#l@j0hUqe+30WDQbB?q)%O0uSD%^*+ zpyQY;eKHSu{dT48H#El3%HA1@Z|5lxCF9+P6ypIVM;kZj+ z!1~ve8dKyzo`vO^=brDkjcU@m8Ef@V?g=D^Wwu3AaT7q*;`abS$``c|^%#g?gbZh? zWy%#AUEew(Ce&fedp#c$%b@|30D9)^GTB?yTG0yI){dp5vgb4tRSD4Kg+lfFv8>YI5=LDCb-M zgMa@EQ1F#K*ol*$2?QhrF*bU?y-IP}OBx(y-<(JUeYYIywOSwoQd-gYy1^%?#&?5Y|@$aX>eItSq|}6w5{HcRXOk=U;lo(8wLY1 z0{g?2VH-wdq7k5kSzcQU2fxKxbEwk`Z~y>4t#xc?0(mr?G)jE92q?bDE3*eHp#Nu9 zW=??By%l;$c+4b)TUuILS@G~n8x9_pdC2zOvfVuWO<7V1idi3}*n2$8_>v~F z*F-1#BGye#1ua{OCY)GvY#Gj=I=GEkBG1h@P{zflbo!L2YWCDhxl$uCW+dHct5Z2W2zI3ggU zsMQLxtE%el*i}m72)4a#Q))MPetgCZGa;stJJrNZf>TqoKXm(`TfW2C}MqpzhdTKvyL;c ziK4auIA@Bog1#@RY&A@bw*H8czDoGOmc2hG(yxF$iWmY6&45{KY; znkc5WgW}d0P}jS)cgtK4rMGjKjeWhfsw8Sw5rfv%SMk*48gF&wszq%R*_|?ds z1Vwz5I#HXB`Oz(0!ezV_t9Fd`KM>S4=1b2HcCyJ2!NybC9Unb2vo!B_H;t4xUiF78 z#Hj9nz1)A*cg!wkWvmMO=*a2%uSS04r)YVm@-V58B^Jr=UkiqxUiqDL*KWGF)8{I#zK-$mF9j) z3Q-dV%8I*JX+UO|q9VR0_*pKmrt!*gx&_A2TrTREyIf>(AX*wRrgeih2=J5xy6meY z;-J&#mxND(3HOdH1DzwD+3gNMb>6SCw+ytwMclI#j7%DPX^iB!G?YB*hF14cE9eFOkO%0F0C>cQIpR29wZ@U^RZ z%g6-f&9Pm%zt#`(%r>Zkz;A=|x)raoivxTPXt@QTBC)!(q_i<~Gfl!G=`ChtWD}6- z?E@8`hP9TxkqT>yglp^!6!3OHN@{j}T>)POq(nJ*ri|v*AvAbfpkL@0I;S7bfkUnUXu6R4Vc$!ND&GF=US0y~)R_w2dCo${&)Qj7_J_<{-2;DYTw|kG zj!l06GxbO=MX5L+zMbKB+ba7oePb6KUfr3^R>e=JBBc{OGGgj4n|B$A`M_Wtg;IHg z7);W>hLe+%Ni6LTGdxw0vvYA#(IQ~WOSASL2R_TAok9kdvWwGEeci0$)R#$-%K$`! zi7jh@V?D)$k1wd|@!TPO@#%Ba#BBmrb^TR8;8V{pFZTfNG+@fRlS0olXdurA^q4yN zisT^^bzZi+RDR`vxv3U~f{e0llume7PVAo1&UG?o>%+YE@EIOC(wpOotZ-c#q`D^m zaH#lf?NfVI#*jPlT+6PS&q`tg*}?g40@AT~e^%4E-m=_eAhz&|e@WHJ+I+Pl zkOADs?<^fP)9Unb=LL-nN!}j$KE}?J3sT+2vlfc_2$A}@70GTzCeK%7GgP>vQnwsv z84*}dzC_54Xgt8F#z{{as^O*lGGEfAKYj+Y&C$3IBTC%(S@P|rpLRUk3c#w>(hw&& z)?K!xmbmP{%s*L?ICEueM!m7rBQ{B@=$){cfrY#mW459D4R%QE-Zk7pE6k(!*C*aaRm91zCfV_B4mXuvjUsPHwCmwrti;gqNlS{b)N<*|gdS&htK2^&lU+0;q8IS;#+FC?^BRw_KG+RaRD3 zAIZD;SWZeB9jFWy+&Hp38r#v2Pgfdi7zy8>Uuuf8NOE}V9NL%J5@0xbhfJX0pqh0n z;8z`# zW_^vVPf1zZ801~hJudKQE8t`t5D>kfuVJeX;1L3}7v|G|*VpZ*5n7X|+fT8``*q2S zP}GaQ#w_-tSd})!%~ec{ysmr$wWf}N75P^g*i%P(&(+fhA@c=GtKD@OEahqdiAvs8 zKk9pmN=o2U+XG@{%v;Z>E&+B-eMVY^RbKS1>fUwU*H(`mfHML@2tcB_2gJ6T@C`sW zBf<`&e0JD)CC~Sf3|@eI2p%vqKC&>83G@h-fy8`eC_p+k55Z?VNLB)3mggc=mfy6e zn2h)TF}G0Iq$KiM>3ea0lBy~ccf<1R5$4>cX9*Erba_Mz1`Wi$x1xWvIQe#F-aOQ^ zX5rl^Bf@BqBFxDpeXJaS(t+291oWR8g{NtyTj_--Cwl$_jov;2>G+M3Cz32cO4}btuz#GjH;sZnx zfW&BbB78}-?IK{Bvn72uqmUXUUsa@hPU47}oxXtch|T43UovScfm`-_K0m1#c1fh) z!U(RIN<8%^WK+9b>Pe;S&;cfm?mJ5h3n|P1?>{mUaR4k63zVnItm;;g*(CRsFO!~4 zE0pjFJW>+X#H^kOyaxDl;7|aHllBO!2c$|sV+N>I+y~c$l*Gr!&&8y+7oNdbW272uaOaRtiM zUC9Fw1^L;czh(hS9zA+w1!w_*5^KfJaZEyhAjW*3}R3(HizjTPNlI-TAJO&7eQ_L-`b>A^OoP1n| zm+*)sRiw%y8r+t$QD@nqA0$Kney=|($MFlri08(>S!p;rvA_6e?Nv!p6))pxM5Z~ zL#Y6cs{kd-^f9{kI1@^uDq$VgE#ZK3N9KD4;b0lyDIaKVb`bI`%?Rvl`cm?>G5}RFaB}w=>kic=}%(SK2;Q z$|kaURFb{9=eIX55l26s;188Op_RkLcqq2PcP6|FKYX%x%44B)DBpx+d z!w@mNMDu)EyB1cfRZm6@CpJojvEU=hA7xjGFdg1wFoo=9Ji@*T&1aku(2Z)z|1tEL z8mh%i%_#WqYim*yb-_OI?~_n`=0CT+im9y`3`}SnVfhm7V(fSI%Lbk9+}?sfW~ax# zeI8)!H)kF;ULP{A7#jFcmh!VCp1Y(2r3)qp`1E^Fn&J_IW!RWKxdY?9J_j{zQaNQu7v@Ge=r^mCzdgUeytX( zI$h(v28vYk?Jvrq9qVsQ8HTn#|GlIZ#6e&yt@acHLW!|zv*_d81>p#A ztN@u|#<@MVUPin`Qr0Js8m09q;w{*A-_NTmgfii?x9`}10H~y>m}0V6*`zO18Uyo( zfdETMmWof^t-4?-6AP|yMwDWIt3hAh1}CT=LgyJ2F9;NWu@s2?cVPl_Q_r#~MxOuS z{^AoF)0cxsCKbixMXEDsRM8Z~)KeCcwrOI_8)MbiOpG7r&n*e|PRqITh(NNLif@6) zv?K`0PBrmuT!1)5LEjQZW3s^11BS^O$CQ?&TliS`4hB-c(G{` zW9gv-#=^tq)FZ~x!(;DDKX^u#jF9td-^`_H>3&>nziavytP=J zOtB&kgZXUIu^~-(kGP((EM=2fu5>47xeR;xW1t$JQ>pjTuMvosS{-5n(^{V6e4@(t zF!N1OEgBc3UQa>Vj;$)cWE_aRaQmA8RrP>UBvC_J*t?`i`Lh>4vJ0g z$rO&t@%uLYqQ*8?Yib5T;(L-FurebJPTbsGY|vA~@@ESj(GN<|im6xQl4N`V3<4~} z4G8GIcP7)qmqY&aI*mA1O6FaB%K8xjJYV5OyBetJll%DU*s!Y-;K?3=+jb{7c}Ey> zi|Jl?o^LA{HyjXfwr;Q@di#TlnC8vAcTy%v&F3g@OGJHE;K@jld8Xo>T;K8>u%S#7 zL-pWqegUl651ym05e+r{>dPX>bPECx4;WiJn)lAS zi^Us9)d;#!tfU3wyF05#Dq=pCi3Mw7HEd(mV{QnkAidavOk?`W3u4Ydb1LWX9?rQ= zF6?>c2FdO|?KI9g(0|rk5C3}|{y$sVza5f-4=qI1sUh~7{t}H-+Cs&Z;GJF1l~f<5 z*W64xigFf~TjRhxO&3+TBC?a2let}vnd%^{vAYVJNbj^pC#_9Uqwh1zT-nNp=KYmq zU@)m0QBxg(rVyvvCLTMK@ZJy8v&`1J;|gE-m|hsZq(Lh7G_zGJ-B6tARd^IG=$XxII{(O$#=>XyJQ#t1=CdY8&} zDW2ka9|%4lK~cnP1VDWX(mrPgJxRHr7c6U3DD(moh_139s@-~AE8+Cdq6YH9qUpfH zEyUo%lquTpG!ri`1c3n5`CcFF)PM&ZFqA+;)Mbp$Z0kGqDaP8 z2*$a3s`Cf3fVze#FCdgXY?9jj@zxjOmE*hW$Ad=nQnx?17(9B)2X>{LWPp+zWd`wY zZ7$b;5%c{|Z7yzfDmqg(CoW2uZ}=Pn4ANV94_iM~fa0AT8gA>nGIRJi=9BTWy{FG?StMEuZ3#OClr#yugB>C)a&1+` z?RnfGzKlEFW&WkD7w(pI0A$jtIbRw`OMF&tXoR= zM{R@bjQiMZ6-!g`qVk2u3gd{=Jgo;mG>Cre3jNjj~nW~ z**j$wmn*k>tnbQ9e(Y0jF*mERT;;Csm{&UZ08V)5P_@#9ra@OneUT=&xA!|^Dhifu zvO#akx$;g`v2{&|P&NXC&|`U(K`iTv59r5$awWHF*gkF`e-IK+*S*Z4aGdwMG-OHY zuyt)?d&i1jfM5zNtnd8R`=s*Yww}tXjNq%+mKW!Jq%{R2h?d-d^Y6Iy?^FI4C(9t1 zF)E+Scv&1{UUjldRYA9-$syiSuRik_d>XsN0{2LQi&-9koZOfL26h40K6mvI*GAJK zTMw{2Y}!u1A-uPP)}yR38m4<@2X5a~RbC+`$_8n0_HKF2T3Cw1V2C>lyvKVS#e3Lu za*#U;KEB6^0s#8@W79{eUoUM!_fL2F*ZeQw!^*zToRfO>DAFp}8o`54OCus5N{VnLdRFiE$W(>A`lV)E^L>RF;ia`W|u($Ab@ zjmsae5X+d9XQp@Ln*8Q%>KPOJTp_AvH)L5({fC>S0my_G_*P%$o8m6W>piR%s5UsE zy_Znw&b88N|IuDH;KVKQE+{uY#U;xV5sgh=*Wa}eY<|Fg20k3wcf6!e;CGDuYcBEEB5j%w zG@56($$t0}j;5gLlj6q36xzMh&dKPHl9d zG=04y7^TUf8wiZ{ioOWQ&kVY}z{%fT-k1g)2l zxMDu>vlFn$^Qbv>a+(W~`G#L!P@Ix7`171VjduIL+ZPp(r5Kw-!vE~<1Mn@r)0)*( z{G;qJ1Z>Jvg4ACu5`dz`tgz(5%zke0gbqZ;(eZ>{=|JOcZa*4bma zDe6w>IF^sR)X^e;nx$NZ>@!!D?Hx}iIsUm+eNoHlPU4=wTI7!3k zYelm~7B#dW=BOagKOGE+OfghJ1wUC*Phfa88~14_xsl9_YN%mkUk(D?fY(78tU;j# z$Xn@IoHyV&BkS&ZCxgV6J=vP+wB8&fhw^|J#-DV}+?$-c4qAy6yzm zj6|y+w}NA*s^3m*PpL#=F#Q&*+$9^FE4|k0xbOYzK?mWg+rzD$Q|HZn= zo!(IVifOsXy+<3~*)PZ0Y=i6eU=0Md9MK9V^(JIn9v_*x9ACN_Uc zdGz(f<$*X=CSK|q*G~e>d>Wl$cE-b#k-DW&i@_*+_qlh z7?CBp^2K@S2++6#^CpKURBQD|PH1Py=%vJOr9=;~cVVkX9Zc*m5E9pne)u^nm<1CDK!}V^2X5oEZBR``5?alwM_!&r!)=fPwxBNJa z5tnvjl9-ZwljZm0YcX|sxrXNvIhW&Bfg_%KtwzX zHPjg}YQ8?(pvJ8x{i@Y+w+>_Q<9hbZURL#7!*(t;+Kplnz)7JxPObURL-+ak9j8G9GDIlqP-Zrw zfyyQcO@_=;nKLJ|W|2yhW8M@QGmjZ6Dl)T?IVEIB8AI{=Jk^Rmr{kfcQ|p`?&ifiXEbS)ZM8Tdc_Ym*GoS zZt{6@8T15er?yi?h*E=H%EhAxvobTC&h@T$$zD;of~AELm!4+&Iy*c2b4!L9(Wi_2 zH|m6@_l_=Iy7bbeOMAQgt+u_n-!4lw9-xcil=mt)N_673%Wje*lJ2|R$eT&g4P~K* zikpA-HiHP@;WA|!Jw5$Zcb0nzqCRVW-Ul~9ZBblvU3gPdQx6a3Tp5`$zt9icB%tlk zXZP;elDYl5iu}{{?)|l!MQ-@2TUlA@>2V%otJ?tTWhMp3J|A@aQdRxVT#Z}C1^$!l z>ImDM#R#uOz9zv8;Rj0ld9T?7ezg1iad|Jx&Qo^ALD60Td6TT~roWbE5+pb4(Cwi` zr?#9kB|njHIAZXDK|tn;ZlvE)7s%z<++@^vxy~8ktY)>*N*)PXg3Z1%5y}sa zbHmAxSD0vZTS*-z{cIcg3%>VYH{g5g6xOm?FmMUv3m?+saluh&Ja?p#DVXkBu4U+9 zE)|kzcT0}S{B47kYL`+9KhoDK@clH_e_{8lr)&CtwYUiYzVkDq`Csjxi=*{8la@HU z4{o#3&*h7JNIxF4);8`(F(9#9bqm`y6Ec?D`U0?3VXYAGuJ-AH{59eaC{Jwm#U-Sv zCjK$GzukCq$T|*}oquyD{~qCAgVV5`TW(fJ(xre^!3qYkTTJfooTf%8D{q+ydcq}& zg7yok#IPzfTlR<~hXgwLUJD$5!ONlXmm2*q^|5~y<7yd)>4|0;y{SH$tl zKl}Gq#_c@I*%`J2*wP6yCCThQ-HO6JEG?ZT7N=!zgk;k@@xHBWbC5>wf+hnc-gy6f`H9)Qzug z45~gFE3ohzA9;P~4;Qu8woJ;Y@LUbDe;`3wcmV;d7G`opo3$N~*h7x!6Z)98*r79^ z{C}J&i&q!8o2mQ6yULs@G?$TS_VUyE#hE}}B`PxXx+F@$;=%QYUt3k&5O;)W2yHB46|l?m)@u*j=`T_cA_3U9s7RK0e@n zR>b8kXvZclJ|?`BiNgEEC9P!;_!nKei+@S_U)z#?e*BLumA^_n|Fp&b`#kI4GWwaT zr&jiGva^4iuJJB%9qVm2bRYKRyZI+dpUQhi1FNg6=?f+R@ALlgo~`(8mQ{16MMLNO z+*G99ixsUt*SOvKQFxV{8wL%GG|KZ|1{dX)L}JmLAkCnFUpzCA2>L0*+4rdIyOwVa z3UjJg>F#s^_Q`1Oqfxz`EBI^Vzdc`DE!!9N(w{9SGxJdikZ$p)K63`8+IAJ$CH|sg zYb2mQ2*0!qoEs}di+7<;4o1zQslt&CSZxEBjtP(qPL7Xzpq9J`umHNk2^YZXfCaJz zt!L!7QhoxDNjs*|0m9b#xsmxj;En_O>BFbgAVW8mZ4)xyV=|yUYkE-I(ZOZj@pJVz zt-Qa6Dr5cj3s~lO0Nnwv(1gh~uGo8WqX2iw&wWer_$UbWAp*v*XSSv0>iI7GoCRQD z0Pz@of6s;zr%nt_{Pjjh;C{TOD~yUj83f?o4UAsc$_GkVN(^nNC4>LapX*Ml{ko|k zZVDKneGJXwarlErHSv?+yGL0bBwp9XA5@3sasL zKC+feZX8P^suIcUJ<9JrI+;`a1N-3(%qh@w#}~)6xPH8kX9(Q$bB=<7R?O0V(7Fl4 z#HxoU6nd31DhtG%``jK}G)jPu07xP*2@To{aDtmVKYtqyD)y)pf6dM|2WYB#*p9ky zwvlcF+hS+{AY?WJhc*3utY#i`SSob=fN`8QHy6IWWB z^B@W(}C$6SDA0;3D)#E-$^Ijg$a&#hUi+oZg{pC6vM&deV>ul2)-1meN@ znLuUkc&>AJFM<-2Kg@35xpHqjfL4lOxaW^!ku%4Ym9Lp^y+HI{_VDQH>18mp$K`@) z7{CwU%K9_23SDIyJ3IHlIqf#sK=r}0oIE|~WAZwD=}8*=$@=;i7!zY@>z3!}a~yk` zMBqu9jl4aLjJmKjd%kzChbQ zfAGoBP6AG`iyXidfT!MY<$$;|qiDUEq9q0bc?2jvf-j%zsPO2|d|x(~H3FMLNHYXo zZznd~-{||kZBp)&L&dXCi&a1Lf(vw83_9iOj)xJ?iX4X zxMe>%&|kozIG}QeZ{*@? z+z>r;K`z%~?r`ZJbW4{~9#N?Z!XBYK z4$jU}YC+Q4y1H+2dAuV&jh!KLOe;oJ*gH8LUw`G6NdCr#vPWrYfosL`S)F@~#n``r z`s`$n&y%v}&oAJA^ERY&GPv0@C*_lp1>U%i6b3~^aBtjLU|z>7FJH`Rx@XTGfHKF& z#;m?ZUHM}btB{y*mk=*-TdP*D2AB8M_?HzGsvTb@Cs_j{z31{&(saUULxY2YyaYJb zV>(?carN@$=A-+vva$v!A;%+s>XUcb^-cG>)m;FnrO}Q92LtNTY%NdLz}vUiG0K8G z`0iv+PY=X3$*9<{V;F#8V@a?Of)+`__Q+s0FB3Pn2rs`z1i3h*&K%3yY)%IDo{f=m zDzK%l?3OZKOPJ9%mu`0P3Vh3Z=wB304Sk{9q644hfI!)OJ- zNj+m(Sy9ne2M4$1*fv{c)z#H`k30W-$7c_8MwmAGMdL+$%h3KX`MINQ*Sqd+Mm9EnUN0{% zP~vsrw%~QWbnzmj_pp}MB*^|YFkA(Q3Uim`XX>HJ#`$o-e0!cF?>u2DdsEDKa@u zRbI0HrP{aROX`Bhb#*zInH!XzH8;C}n>e-uT@YKgY+293691H&o0}j)vxbI77l6_xCQ550>d$LP?W{~pO!yi!#($&>fULHT(j1Cy$@@cy~!AcDe3!`7l{av}n;oLcHF=GYyJD2EJTWVA`6IaeK zL2-x!+~x=}pM@*eQ)goTf0*42*nV5|`SEjy{q(zM7s5NZNV&rL`A+eLBX6N(ovUD~~S_s*v~`%en|r*JKF@vjLctb3RI$}|`=uBZMKZqk2!JQ?1xu)Qlz>KF5i2Ft#2%eGefoY- zko)=b%a$!uq)@UYzNiw#8xj=e~V1C}a z_d>J)@S8ZxxBUDZ92_K0vyZ=6X%Qr9)Y;-mvOWg(NDwy<4Gr-^QS(&2d83IwWU4W9QD&FeAV~t34b@esNm;3tqnmhF4SeKWV3rDc9v+saD zYdGuRFnW#0>-@(zEbi{J`T6+;1qJu+t>@v1gqQ_Ko~{xnrDl#4&(EP1s;r_SF*$i+ zd|XIS@Tt?MdiW|(&S1Phlm>T7*dTu#9S2fUQsB8QtEs60t$KAeB9EtN=(O2}6^d;h zL_>oE_?heLk0xsk4h?w#EQ+_eckdq3Y!m%;`vb)LuSgvw={$qteIR0x(C`V0B!nk9 zAt3}>UHx$zC^6O40_w~w%gPY{B&a_oz|7Y8b*^n7B?Uw1Q}xIGw{F>bktHRMJ#I+W zNsE56q0rFQ@AT=@pPcfcx*t7yM3$D8CX?aKD?e@kve6Xl`KE8gdyu7@$wASMWVZ(yA=Hvu%`oh$GNlR9@p9D{6IiS|P z)#0ImfpxmQ2pXWxK?fcI^es5ol^$-8wtkDA0e)W4ucyYalbn1)LPB7T-9NYI+1uOW zIc$Wr^!0@Z<*i=jG}u(NzAex3u`hU^Jz>ZoX3w8*mXL5jctwB71c+t>UTnrBeD_Zi zGpVVmZ{O;;xVSLZS!NM2(5X|8q6KEBMzl?3Wo5x_E+Qi0&nAk1Z9O9_FPwdgtX2p} z16Lb8A-rydb6>hkc+)|O8px-dkVu-IofSQi{s=%`{4s3w@w*IeCRcEVbKW9d3yNd| zef>kl-WH#Mspge1d9iFPX1mfY?%{Xu4(scCbiep5^!gHo-)jdaT3T9QopGYbM)OZr zI17Cq9`1M*V`*ur9=S)D7noi#TWuGx*RoL3Mu|mfZ`Wr$GDz1u49u_u*ZnT#8+^() zo#2O@E+{N4dGTUBMMX_5E0~?6qkH7Y5k!4(l$CF=n{;Au3P8=<&rBH-o3fsIK~D(o zg*b72MNnfQ4)=sMGlbWyYUA3t5n5D;x34BLCjfV4kdetL?b?ktqU4vfwA@>_G&qCu z?Yb{MH~s>4?uiL0TOPCt-o1Mad#a*x{r+nbbt$CJ&CP9Qc2>qhyRRuY!XxJ93Ml%} zQW|T6Z{5PG;@jx<6W()0qi~8NK*>31uV~V3Pcs)%?l8^@I|F@y(ueNux}MvuM|E_} zIU%~+2XqS3(?^qYI^R@PH4aW7uwAuwEzu~WCi#ul78Deueb+Hdmw0J^fB#i0S7K3; zWzXI9mLq*pE|{Ac6wZ#^VZTpt-@bh`gNau$PxMXHZNNdBN-S6_^b<1^Q%FuTjTR>B zs6=SzMpk0ADt+kXba5bkL1+G_sA1Gm?-p%6J*%Hjv$QMhq}Se~ezvS_VyND`EK5ciHRA+4nC-?tON!0K1FUs)L9fRatQH*wx?qmAFeJXQIGXc z%z*V6{KR`$9pN6^+2J^U{PBXZ#e|xh*VO0ACrM{ZSQSN~#qHbF(25ANBS1K0ZFvV|~}IUX`u^bG4pszJ0v^ z?GSD=8?16a`}OPB3ALD!;eYdHgtScvj@oR^=~{pF(*4UXsMn%FjIq43l5C5J3JT@q z?-HN;JCK$t@|<;WbPVOmKQ|mgtcb5K-1G2o16bi!a|bBb{CqhX85w5(DR7h)7InS4BXxK)XPl%!~4(v93#QwkAIy1K(tfx^U*MKW!{ zm#U@itsk0;oqOg1O+FyHk?=aW-jxONVF#h=5XZBD=DSJv5SKWzFSmNv-bhGFs(kat z!OkuheS_A2Kjjmq$&Zd)y8>-cfuI3@920}6#>i%yh=?KL zJl{hRyILMV&u@Jdz}Yu2;D%Mf0Sb9A`W<-ytt6eO=D~;2(TC(8-t_Zh3M?%xB^uj= zEi5dc|FbeO+|d)H#+KPj=#cJ`Ym}a}*W8lX`vO*T@A{VF{ln_Si56uZ&r@RTijShA zOd1n35uUNbg}%kTd*N} zOV-UwfNPrA2(7H8sTp5WchlGR{Pf45Dzh&(odtv$RD^5H$-&|0?@#FoHjAkH9+s!ZZCeItgNh88Rf~H9^byeIYF?lU+h(g zge#Ja{@1Tt9L>*Kcq?L-Gnz97aK02374PncPl$sE*CQz@Nk~|D7{W;1dkMWdQl_sM zlC`WN7}l3txq*LpW>mutG~5;;M^LHN+$kmL$2-MDchvhq=c6NgisY=DDmjkO(Y zP7xIqwRJEryS*7(?SV9K+bq3q4!kaiMq(R!_Xt6VEG8yiSu-reUR1vGuCDOOr0IIc zLWl%7lDV7#N{n^pWLRIw!SwVr+zGcrudX6b<(nH@;6aaVXyA1ipvB|tWu~Sc?r1b8 zBZZL=7k79)MKL`+-AS$k>4&>_?vOdEB3+e{M3Au|qW!H~x55leOR_CP7&vUQQ2n9u zg~1PxQ$yq6vAa0cR1x^z4TBSid4Ol}4G2KeONt9SQp_)dC z!Rnlyu_QKJb8*83kLv2qz-aoFArIhFT4>UCXVN5yn z+sE6tZ%dzyZFPc?%CCF-mYs)3loxpvbSztbXve8k2wzr+U@Ua-l%?eW0z%3uKpv39 zkdxC@yrJ|#&1fBdDf`zC!U=2)ur2^)L$IuTKVr^<~{DC6Orh}*O32_dG~Gu&u~Fd|8 zJ3EWA-tr?XL-8T_oc#RvF|$a|?1Y3jyFT>xN&~inDuFtN5=^hGgWM23?073kEo|>O z!LE||5f}(!2#8|O_vx|c&!1bGA}%vFrbY|!Dcv~C6HN%~@`a=OEc(!I{n^mX{1OuN z1u?O)XOLZh-%0qVf`WooYc0qjxS7a_^iu%K#J<|R|0=xiS8Z*2;StuGVJeZ|6cH5k z_x0W3^*whw3Te_QMBu!4LPOgonb#vFVmE8uE&b2KdbU-0TQ^ zjO)Hi4^>oEIb|Il`6?S1xL)U_LTe34&O3)2B@ z$H<6u@sR~;Q4DMrOb_8(p${DM21ZSUsbknW3<3ZW0>Af}B> z`g<)XEkK3n*KB;d%MMoi-8Bk}* z;Xe0$TGp{Qt}Uf-Qg?P|He5+$gc&hFL67nq~1I`F)$6ef{#~ z^#gFBQR+kSDGLJK=#+^#2C*y3iCTTi%1TPrkawp{1d1>lS9IZ~Of@P}6R;^k^*#edMxFM_9GhR9;{<#&NyAc z%9w{d7N!-{Rc8=2DZ)WM2OS4*Nz=f<0O7DDw3xA_C5)QYUB_cbk48UyhWv#WvP)2vH#>7C))%gXLr+=Yum^Gf zw_DCEWJa~j;MT#iU-$K`H7E1d*VZ0Bdh}$%p4pih5rcfPuyC^L#0kYe4*hvMICz@a z30c{AVK|C1nvp=u;a`fq=jSH1BPpk#e&{dlRg8s^l`lzpLF81K7w^G(FDxuceZ$Rw z0Gl+!_H6ivNNcmOu^}3q`qaQLws39PQd<4lTVrc{V&YEJQ_r6LJTcgejLELuyGKxK zOidNbiu-X58s-C1Z@dx+tx;jgE(sDbn1KeOlp=kPQ|UdPh5H(-{@Gc29Y2tq98dHISEJ*B)6z2 zl1g$$a*-uxc)h2DAZ|`{52_cm$=yh*EpKh zc!@pb7Ggf1LuXGXCu3ad!YB*b=$k%#d`);G^mW~GQjjJ8sT9@zk9_n+rvzd;Xl2@Q zRNB;O z>BO%5+mezaa7ic>$J=ZL=Y!vT668^2$ZwLY_}GJYu1Wt-ypf#V%7`J&&CM+`ZSk7P zEsZ#@U1-u2lOz*pQ?=T;JzLa*O_C9D?TWRn7P9UwR-#{781inoP|9${s(WK`l#ra^ z&b0nv2ehs4eY2?p<-#f$_u3r9!C zzIE}9?~ekRyP z5r-bT<%uTug{t*9A^So)ru)C+DT}SDOX=bx$8)9xDXqpR<|yDBurhkR91_Ykgov)Q@2&2@8vVWulz zVmdP=!FzABIhL&9vI7p=+uK`W4NK`bl@{q#opA1EghS84E}tgCjGAn%ObHHo*f-bm zdM!S!*&bLpe*VrI__W}l%P1^Hb5>b_%|JO{i)c}p1($$;z=ElE;l26*vQra{(aTi} zp1c`;D;-(}yRZ%ptsj<~MQl5=HCX(1NN*f$MpYO}_(n`@Y>Uuj-0Zn5_389j8@H8j zvNdaO^Q|l9N`ixfMHVWTFMVcM?zeA=_gw4gxnSB9v)VVbcV*u??RM6HQ{PD}f&PAv-PJDVmAs5ZuPwovO~tLn(wg159YI25DORKp;Z8)0dv5J)E*C}a;AAC) zcURi_tUXpcw7e(y66^IZ8`V8KbH#1!rL5O_#ZZ&}WiX``+c=3CgS%(A&pHrK~GIht^eoo^rZt%&|SE2p+$80)>>#$v#=$Y z@a))y&kXjBb-}0jl<4pX&KxqY7uw;cue+Q=_c3!PdP4mWz^PtyKl5E zIF`>;=~&-Z|D^bOr><=p^N>TEqAa7M`UB5{tsPNDG17ryDku#<<@wMP5D=iIEcTXF zcgTBxx9BjA&cNeR#(OYy&DVF1Nq1Z1%Ka8^O6GrM$VPf8$g1ca-(WkFk z2-VayJ4^&h>=>3ae13fFEKk{3sBfo`_ukH}aojUlk*mua;0az}ctr+`LUv>F?D6VY zP2_++-BgmFKf!nGA{rAVykRxYw{#A9EH}+&$OMv;v7FZ_#!bZ9D)IKXPR8e#O~lMz zVfNZETx%mBJ+9}}W6a`5OwBg?wo9MI&vkhM?KYJbZ?yvFs)jgJ6v^O#l{#dGoCkLa zAN!!7OW$39pZ_(w;!4q2J$vG;sE_`e-`=arGKN=;MVls=o0)Okok47Jt*yZ5a{whQ zSX*mrsQ%KV#QtWB_n!S^y!_{;v$D@`5gtTxN#2Yj4tnjKozIyi#NF$`i>u%&lm?f6 ze4yADXxLt;G0@xE`6kOOw%o|qbJNc4V2@PrYkZ!+q*l6W2oWGU1A^LildYHiQayWV zp9}medh3Ka7$~<*g%;XT!`|M0!dyn?!$U%*JN?;(WK5zPaP$`K4cHY=_|8v{yV7SB zwrkO&@Eo~Wl<{deff2+zUs9esh4T7lyYGx~!n-h0uP3?6`N=g!(2VHq9e@L&@ zjy@O3dmP*xb!oKMGQUZ?<+!dDShQWkh5gOM{jwB69^H~z=bCNw#MB$Z4{W!hD5X#E zncQ-#XL6ri{QWS+Sfynb+PUeL=vDL9R9lbHQ`c8cBG({?kLU2Ly`y7yB|}1N{FU0} zo0|Fhp5Gr5Cb&*SXT;fkh3~7P(N*{ALn95mHd}Aw#g;;hY;5c7 z>>O{1EUn09-uX_LxYeFfUP_G|7R5q@F~XJf+2~d{%{`(Jk1DDxD=QoL@-91jx@K>t zMjULzxw_Y%l+LMa3hYK7>~hnY7WpQIS|fZORYp%wk0deVxNqOSMPC{8+MZ)}pDlnb zD%tMag{!-2Khe0gwKboA;ATi($x2V3$j-@&;WKUK%!s?}^5eTx-)z}rLKwTU7ewQV zojLo-?Ck6{2uO&zzm#Q~8mjSj)+9jA`{F`JZ?DdjI5v7>VuDWJWq81OX!rXgiq3ok z2{SBa_(LEP&3hnh3I7!k%yij8H0^hr$^9I{EOGz)?`MS9z`m9UQYb!yF zn=Si0Er?U^x{Q1bf^)kci#-ULR8qfS&8zRoMW9Yo{d7Lm85W;|Py8SJh5+mni{G33 z!?h6+5en-Ej*1~g?s+em09yd29{@}F>kqH~|G7g|wJ88gl7&sNg0^e3J&^X0tZ`e;ZdoDK#YUSz(zy^DOJI!|6Hw$GfJ0dCEdv7^WHiT)w73B#@ zO>6}#!{T?zsE!DOhr-37=uxOA4x8hV5{nsnNHy)cyflO|hd3o~yIvB;=9OOHRQIZsF$PM4E+*xW+7G1n%WHc(!rN;+pnX(ov z-E-KVPJF%JzGkZvSXfvzi!L`py17@g0!KuHmwQ9bUxVMzhKLq! zZ+CYV8aGH20VeB%_(T6`3vSo&mNXFx^(pF-(G8;E$7i3*eg4YgH$6QKaFEaMN4uIb z62b`t8rrfoascQsNWc5;OKR6TNm*+uz8u}AByz#;{{HTIMr1$aKMIMR`$UHCeF;j3 zytW&o`P%xbcGvo}5CnoC-S#XsBy)O{cp=~Ds)WeeXIryN;k_X9=Ze?Ph77sTSQb5jltgD7<2pI@d))C zz9A8Rb3q)13OakR>8UwfAt(9ROgCXWj`QeUh2t%be$Lk`yPRmUX}i*6nn=dN;MlI3 zrJg--MAxQl+}3M3wy{kYoF?CUcV;}&KpgCRxkW-kWDdf)JF~}+_h+A9y_*s5^tC8v z83FNYeYS~EIUsJD7OAg;Ml&AVIRIj$2zW4B=ebstsF-#e7CjEOYzj~~lxpPk{2YEi zmJ|1P3O+NP68G4EXfAZ`%ZpD>>68=2ci~fe9r<42dzY@FP-5W+9;B|NrDb4{Sacu2 z8jD}r&B%cLoTz@|BGI?S#i^FYR*=$MtBtW3DYy?~qNM8T>Z~lz?KDCrm+z2OdciK1 z7JdgH*Xrt~sHkXST{`GCQ|>tPTxcQ+Ks9&O7=R3k{heh4fK=cB`(t6sgO#q!kg+t; zXiq?L8Ou1zTJTM``LaoIfHx58eG(Lr3~*f`@Qcva`U11`ol+Y#k>OnL+fDw4w&{+X z*w|PZq7MON+}SnzAf&mbL873oK9S-0 z*Ki1b^KBW*GBPshP5SP0j&pCjoa|>%sE>)rS}5?M&!nWMKi!^t&ShTA9WNe8nVqe0 zF>(VC#<$(@)Uy+?Srr8Zm)tksJs5=rc(^k9{t+R?sVi21)J+pT*I?Bvz@@-!^UKTK zpu(K@f^z7w5FS4YMPuF+BVbLJr(Y%PcM-BMrF8kowaBKW;!nqQQ*UQM7=&H2ecPe= zX;sMR%L|qPJsBdy#gR{&uct$A@{~cG8G=}KledaLTp^f2$PRpS9}@mMa17@f3b+St zVlQDl6sk&vD_jS{D-<#I5tH~>STZ%JlfJw>D?_wA*|Lz@1CIP5-(#HHx&MLeq@|^9 zL^%=M0uc+~Pp3gEaGo-VJYGAa%-&Ns4SFHB4|=W-RLqypKxnNQ4medl1UEHu3)!Mi zC$8TAjc7RDd9Yr44{SD&vb9DfFE6h-LwgS{fKK`ym^Tt3tdYdmQ)HU2Tbjp8d!?Ko zf&gVLRQm@Y$aTKIY|8UiPHyfl)KSjw3Fvm#N^9b;SoeZ|gYkO;p08YKy=jbNN1?*c z95~@munwz!#eEo#gA@j9fIDCpI5V{q0AH%8sV&2s07z2?j(~?Vcjck`GL#bm!c<`d z=u9Celd&`=h`H}>t@bnk2DIOr$}n&qaGcUYhy?ffGWO+ZDCscu-X`sA2&Gs`ZY#`7Ws1D@NNC=*YGCD%eumP?nzVqV) zBylKeZzVM?IgbRf^XOM1QK4*eBG$Aqs-O>&^qUXlGo88HGY0!xz#aHe);(w3hA<(} zR-K*A<@ciwlIM?FQt)oL2cv{jZjdp(emr9Kqs*(`nudJr&^`;6Au;p1C|xlYfN~`S zLx?IZK(7E&fbYS9yJU!<;O_yvI@yxwJ)M=o1o81hAcaA}-A|B#_V?CnD44}PAUku9 zoCe%UgCIVR*6Va=hflOxqL50p3_Km(>c78##9O^F0>G2*+j(VRF%0%s4L(0R$>%uT ze*G!%OvN0_x54_A06##A1;=Wv{gxt2apK}{J%z?$Y>M;}UOVAh`q7gCIyyRVd0}2y z`69@{;{m5^-T^R30OI3T+DrHj5`TBM*C`Oc(6_5UC$U+ti~w$fy`{)#L5Nlflkv{_ zMn*=1733(%rBu7UE+*PVa01zt#4~uP$G!cKC>x`T!0-_`)&CCY3daHSh#E+tfbpB5 zOa=D_J$-M<4$un;Zqr%8rv&GV+myEFN{4_iSZx+rKx$A(!=6q>z--)w z7>d|kdEqj`Qvo6mpxj$z-Y2n7rl z)Iq`(QkIr8Lwjqbuynb13X-$3%*VdGgp_D67y`JPRuvl@hY~*ilWvqeLqj7O>qm(o zav!-&JaGSTz+4niW65q7H`08Dw^J!452GZ{AxRA~d}GEq1j^)j;0Ins&|?cQM<5Qu z<`P-Jr{JaH`rp9y2&Sc!COUlNsF}HWmIE(xK$LGJ=UUUeHT47~l0m|0ri}B~L)|0F>!iTYH#84WbFt0y0 zp;nmw2lnKW-Ml$pvzYabGLXyDKNZLM6wTgb0Bz&G+BxZr*NRGT!j4O(a>Zi!0Ij~E~+rL&>#pFM%PS7jU zDc#dDcxITLgB&Aycg(N3NBNxPic-(nngQ?d2j-~obI8`6?p)eQE4oPk%;R(bKDOW@ z&;sgQ8dLgMdx)D?1Ozn7=~Rx&M2^v4{7o{g0`&<8?85%uF82T_hnOJk$LK|QyE5>g zL%2Ig!r~eraPw8?>geu1A#G-3qYuCj@!G8X{QSH;{R$^*#PhOpkQXV-Yl9ju;JL!* z$!Sh|PX2~#Rm;^bN^eE`I00YO(b-9YC&wUIHHHJ1|3~o+I7?yO_hSP-7K&cLY55M$ zn2W&UK+p)_2~tC&&Xr^>QUCqT(;X<_k9nJNRa zBco)6{pnl`s+_Cb3t91XTAfbKlX|Gf6g3BHGhfIz?sQ8 z71jw*IN$$Z@Bh>Np8rl0>6cGGM4Y0cAs?Lj@;W|>OYXpK)4r+V`c+REf>S5_hnu81 zn;6rDTCw}-(yd<-)Ze7szcNKlF)7~mVvlksZuJffZMZ>W$!D%Sj$K=MbK$`M;4dPc) z*+4wDdY(RyE^iOQZ2$KYZ1@9M3I$qW=dqYr3U1s5*R_m4GH(Cjd4?xfQ;)6sEt&lz z@e*wR)~@OYT@-jx`ic;?wt7EZPQ{0UMABA0KqU(sM~cF^{<_CA@&XuuV0@liD@cdu z`|l6Odq$w{-jA%=F@~l?%8lS&Xaqt>aos8Q0<_bRR@y`p1ed-CpBX7cX5XyrD;#VG zt|^p8a(^+z+XKku1~oGi_?X~;LmMzQp7Zp{&_!DZww3mZj;=1!fu*b^pwoM^zqg$+8 z!Xm=26v8-6;VRJgm^i!8HlERJ>ArPo@?*v(U+~6{t)twKeueOfcuQ+*Pr%U=&G8~Y zp#WiQ2W*1~EF83rpLXM*rWok$Er;t&Ynv!SQ{@vq zmgFm%pz*edFebpvSen!)?yY1Xln|8MJ-{dRc{V^5bA%(n1-eW>wE#y?VCQqD40KID ze>FGy{5&46$1=Yvf*gYo@szdDUWsb6f=-Ccq>4X0M>uyrH4ij z*u+8};?8?_7YbjbvIc7_ZMxD|35$tzeoa~u5C%~xK~xBR>Fnook$MO*3f=Ixp60-` zvG^T3dt>Z8)JrZC9h9}c1f;E`kmL5ZX7XF&MM{Bs_{`|M)1D#Tp{jM@_--NZ2(g7Jn--{jEF_GfdduyRVlmrP@sDbe4 zi5IQ{em|fL4y1%sc)wX_^4{$!%35-f*&jgMdPB`%-L(UBn_|51+qosa=Bpo``8ybJ zg)2w^ZE7Rp!!luEX_=FqeH2ZVkv`$QkPf|WH7F5#nkA1Rzv}e}XI^zCXH|t_kt_VN zgM8dIE-0!tOJiZ_w4M^g~ia=o()9tTp;R8woJKo(6t^8(f z4Y&H=A0BQ~o|%~eCd3`8HdDlJ6cwAgpsxTAR~VQ)^o*qPv?1oZ{;0DvKXzF4FgNV-luQiPiQ;*UoYeJiVHw^k{m&|_8b={SpDM8t8}VWn~tt@ILh*6Ywg+oFpG-l6ZH?2;Kz+dn?ZxrpZg zCgAD03meN*v$Hfy#b6DKXT7(x*>e+^#oU?v8u4WZuz_gQ7F3y*+v}%2?ZcvJ9zblj z?8+N}J-3Sive${l4{Gf6M+>u&z##5VDSMY&4@K~xr@6TYB2U@^_Paq7q-J0+)Z1%; z3%wfs^%QV}SA5(nnVg=qIg>XvHPQCxGdam|@*!pks4(d!mGM`bcT;IZK@^w+@)5o; z_+$7(Y)p)>`5L0XP^%X5yASDMp|F7m98k}sUQ^dP-0LDJKPYP<#Kuq`uUYH0WbuQ3 zr0}i-@cX*OW~zO0Za{3Z_(60SPi;ZM1*%HHRN|!46V;R({*+9hkck_I3@`+&jcc2t zU|QmHCNZ~=^8i?NtqQKMg*wbLNOwaDlOY0TU$uNaVdh?~TBfTEu67b~ws% zZ)s!);4q|xDOhoke{5+%TVtgbA%s__JD@>s%a*|;;xr5W)cqyMtiu%ESAlnGBSnHS zL^tkm1x8?d28IMssAPL6lhT-x!jPx$1w~*ndX6dh9%EopqSs~9dPhQ!>N8?^D5?x_ zd|-$6>jbMWfiMK=HbXN0paj_yV6%3S3DRhayZQjgN=^rVfbXX9j-AHvFUS!4bGF_{ z`ZjQ%dn;r=(caaS2#GS<1jr)Yp{-73uca_fwRBOqLP-BxK%MA&u7ZnqA`CpD8<^5R zgrW?e<@nLxX2QyS@)>(zaTrmx^&=Oi#F8X?*?f`|JRhZ0$bsAgfgX&oJ-{6x?PZ`_ zdaJi~mRp9vPJ!w6+L{9LVSg%dZwgqFxlGFCk3rO*pEHU;fBX5B^`!=0WzbRp1vHfb z7a|PQH}tyV+pK_;f=t*@>rdLI9C-AkU8_91=e&I)w^NMG@E9&LEVv3Pd z_PP%mFe1u{eO&fO;uH2V%F24;4+ph%ci%BEsIlrPRB*;8X~QBfO6mKPk~))Wi{o;w zycp>8*FqDKf}THfKsO@M|S zFfM`~jfsWKPhv$nGur`BAG~nUp(~`o7W!;7L_fNeXmaW0l=bTV1#|JTg0Qu8WKxl`*5#{=H%Q}?8iH;Vo%;AAn~;O=0DgaE2@q0` z6w)b~?h}70E+eHyhWgc$zV-`S{-bOo9yp4~18?3uJ9maOcy5gcu zd}?g(^ZKZ`5kGwa6zwZes^vN`6M-Pd@eHn7ol5}e1k^%_shOvzJvA?B2ytCYSGNKw z4v{_R?(T+u24yX@^{&|T-+@oywK|hSJRf{xD3i7=ZP*rbozW^ygt~O&yk_9z$79|R zqfSqjYb@wboq|9gc|rHMX9ngK2nXOLO*GFS2gU2xnt}sX@0A}a<{GtRn93nDL?*;d zke0*ZHKp55A|{@+&X~-EiPR%FWJaZcQhe@v$V}jX*Z4~v@(()WC$)Dj=?H&N`VoHO zv?KiW9VPu1^`zMmhSXxplg9TMf9Gky7r7=T*-}l??!%S@KY{W@VX`Pic_NHFKOR5v zIUhFdrNq%3+~bU+u{g0-!nTJN+`DP(kWwCvwzaKR=18IxrHL{1EIvw1c>L#BeAvF> zV_9FJV({xF=#{w7EOLHeJH0a$IXE$40x|nJD#njWGAspy(jf!mfY-l@2Y$B2QR6Q- z-}M`(O-SG5lSOZp&271REaLRvHJ~Jwjj3wyKoxn;kV=}WiPewwl{}Gr9&iHk)amJo zbrKFd9Wh2Zbn|xKZb{48Mf<(*yG+a?bYKu;;{jRJ2+1{;-g4c6Ex~P==P;`3pO~M& zEM~iUIT*GdHa#;(zOL8qF&EEtYm4->!&vs-onZhb)Q!y{{oSBj{X=B0y9xF>xT&;N^k_wuh zKUmm*!%@nC5=^t40_g$@A4BjPJ%AJ}USKh#%NS`Q$gg0EaS*0JtYX{{ zp@9UgKdL%uacATtU+1i;4-QlngTiGtAz`bGTyY5P2DnKkr^Y&Mav<)0A<# zg}WGcv7C;nHJKPA&-2rg0#U+H1OCIj)5tJwAF;1wAK*DGjAcJNg~wkH=9Ywy9pm8e z(LDS&GVWitWJjX4!>Ho5P|lb0*5gM{JxW!-EL%82m#%h8_XYv#lIcHLh&oLeWl1H*i7ck)K61qARxg0!JYprvm6wI2!$~yp|`x@C8c!+Ky6E4fHu67*v#9 z+OdgKo#3rMgk$2INXb*j$5ts&oa#7)o1Zb1IV1JIa1+F!zLg>~Q;;TuBa)d3M=EE1 zO;whTDhkQA*3^qk;hCD`2v>-=pO)#l8Cor?%CS=WY}211u(0Nw(6w`~@ferYB0>-_ zu|0)=2~6qwMoalS)x$A$$MmF3Gn z#`~_s%dmZVYGzkkavft#aB(`fzTv}jheP*96g+Z9y@lC z*l>vm!wEf^AU3$(5o$@(r^|xNqNY?&bxTQUC)Hkj+eHcMnnW5^)TD(!R%2j3*D~K` z;HDgN@$KVvD*wwKCF@b%c#uUPLD~^v{+h06TTsFYOV8LZQ@uRPs$+iG%uMSVo!8b) zTYLK=k-)2uw??Z1cQ+w&Azy{QSq{=J1CojrVN9iol7Ip~=uu%NGqbXK?moT11$_7| zXb}D^e?i%^@~BZciIbL@XdD0$76=~DjO}Sj(RpcTgi}0WeX{lXlZX1dsdGu$*?a4P zujd&!d?Bd=EDisT*}lC0>>I$r*4EolV#6o0Z)d$qx;b)h{u4CgkA82p6K(ileYoH@ z&WztJjAOd!__FG7dZZuKRV1ov?^8KNoTnhc_Jrv%pk{e`0I}0W35+1aYDLBomrR*tYH5q(IkeN+ z@or*p@^|gN{%K1Z-&PNBq0iufE&*BTe*m?Aa;Mve%gwo#1=JjHC+Lc*)tg5nLSA(qiCkj;|OUaDuRSmQfsjq_nol~S2 ze_d15M-4E(-0MSa>VY22U0QjI{^Tcr+gDCmX96>K@El4qoqIB8dj44IzuipMSeT^o z%!IQ$9{(lviJa5q0CLvt!pSg6B7g48f0?iT$;*4Eo6p}mrYIeyZ9P#{pN)scv0V6Y z?T$4CXIdz>@XMvjA1TL6b50-Q`<{h2plB+wdvEJK65C@lN~s!RzBN0 zx1K1V6`S|mJ;TyBdz(ekXf5If8H#>#_|zTpel|fc#EdkT`r8z1*u|8i(i+N4{s^!C4Jx zoJnGezBj|z(a~GD{+CQ|8Vb(*yF|dHjmLj1NH>$Nbnlf^dqv!2zAPU}a8kqRsgz{w zUZB|?UW&*}NbF!q%_6|~|A@mf@fb-V^iWv<4ul^S3&}|BbTjj79db|gy%Rdr8?>*z zr918tj5~i%v(LlMNPI4Z2Q?6O!#pW@&>tMkuKE3`F!Xbs*XaV9{|*R1J}N(2-Y8oh z&GyP;SBU$yOZPFqZ^!Pv6*6?_k)C|M;-jkbB0W7FD!L~9+e>JUWtOj#XD-+?Qweg} zeH?yKa`WF;Cc?u0Ch07N%znqK_TEidZ|nMvRMT+%v0FQB zc4=^H37C^Z-W)lbX9yRMO`!U}zvUQ}FUoVRcd6LZ78ssv(??^`^G%^%UrFY?9}n?J z{(ta^>v6j)VN--%j6XI*~r%Plq`h><#XA zFTV?#Gc~t`8V4yu{|V90+#zpu3WE(-5sg>)V893l;+TDD7ujKJ252i||3m+nKAkEQUK z`Ui;^4`?ltmTen4d~)x$AzY%sG~6c<9=dik&{L4N@kz*Z>QDOMpV85E)WE2HH$#=R z_vl$_$wbH6D*x&(ZJge*0^3jagAA7zl#xVU!B8qg{}xIMq*DK9p!ARQeb8ZreBSQ! zoIn8J9GEe`049t>jl58h&h?oYRqf7A>*HF*{5Bcq%XcqGw+C{F&$LAQT`c!4S!8fD zelf{%VdM*qo7|{o?z`>XdV8u`oRXB(4DVg)f+~w-@zg4*9$0xNnwJn+!alJ2)t~iA z2lT)igA(Q}-d&E2G_J1lOHlJWp{j@7fUJeyU^B=~uUd7#L3D*DFQTDu6yRsoQ( zgBZ39IwL}4$Y>}s`((aeg^aa==w-PdpxObn)>(Ls7oTU=L;6(dhM20m5W6q0D;X|R z_IlEca#wI}^<0=}Uq%-LnruY>4yqihrio)IH=Op9<`z0GsIa`yU9-QwMOm9_WWP`) za@$OKuX1Uavi7~MM;6AJcI*9ZY!F8aM^nvFhkg>t3|coiBNvk7Hp>N$P&ufp70Ar& zRx;&@x?XGB!^nrkTDMWOm!_7M_c*tK&{S#|6dz{>R*-?)4`hP(s^zcn^T$Cq0H}2X zr&vVJ4nuL4>vJ$bG-wiQz0@D^M+sQP?lZr$eV=z{`o!wBIo13cR`7Ai_^Zwdx8IVb zh%6Ycf57RV5_V4A4&=lQ^I*Yya(8PlwJmt6v2 z>sMaX{h)D36nXM1N~~m}wtzkNhE@w9$XsF0*EJ`%1SsflpaTV&tb4a%VElu+li#e@ zk@>Bu^jPRVA}wiXsDKjJ66U(@afQe5o43M50$&p}zMdeXO_)dI^q^*Lrmu#f4IAiL zx!NfGIw&yp*=;lJ?^o{lV3p->cXyTT_N+^NZS?qlWPk@`!H_S zz*>onD_6s?bPG(=fg+R%x~}`52dh5Is>bghmWX{?h8ILkWY=~`BkN4=m+O)$l^7M; zi#`}4F0R}q0^;LRoR9A)(!Sr;O67`tg1>v0gYKp8mB%_NnfR)dnM48j)Ti~NiC8yx zFYVPCnlwi*H#YY)&Uy`cZ(NQo;xpwD5!tR^66NZ2hY=u{L%dXXBZLW=z`0Zh&02ft z??ab)9b^UzpjGzpsJv2`n(BAy3Mjf88*kC_9dw+L42L4(F%V?wFEAoBdJRLEbqjQ* zRy|8FN{IEgRM*$9Hg8LZ5oix+M1K18DX(iA<|Z`M)%EVbC(zk?eG=qiCMG84=2Ia2 zO_R8zrxzC$WwyHo&Cy@4jjdDI45j$ieM^U}74zMi7^rwbLyt5Vpd-|KHc15sdS;ld zAk2+F%(x4)mxj+AXS=^`{Ki2u-CZyWoH}%i_mT0>X9aM9@uIGUaJxw=kIN6H=MK)} zlQ}tKE9pGjeTjy|y8qqcHhz=SZ@;tv3pHKLJJUJ&(42o66}15aEt=jxKnY>+<~Jz| zi)rZiBSJFJPpqu0`1<-HQ!16cUwe9bVD7J^W(&j?Cybznb4e^utk8Kue@=GpW~X8d zztDq`k05L>0d<4pOy^u*Y0K)`A(SM|S&iSG`Pu~woz=R5`JOL)EXo`IiOcO4;oFL) zbh}?OV=-=(7Cg;ordiZH4U-}WGM<}$jA^D0U=4FJZ~hYAU~e(@nYSftvCsdhaAH9s z&Ewd|HxeEMSRR({4gz>dBKQ$aEI_xpTqH64h!M zO1)8xB2GyA?BvOlpdD$qyu>VIcMs&v;EXU6LFl$#GIcIAK7Ig37(s%4$J-Gi2eX(P zG8fZf;fWK6NpKifDc8u+EHY`j`wYuGMR2#@-t)#4@>> zd({X>2L--9WjwY|<{-GAnwknKpr@CdMm`dcO0?J&kZgvR%ZSbFy)k(^^-?RpOlivF zqgwLweCok!lFY!yPyT5z;-9Y8<<{@GXxpQgOpsLclzPIYRwP}P?dY*x`x`Syo=`{) zot#)0dQ3enEc6~f_BRpc_bf*GHCCR|Z|Wa*>)TRjs}HJPD}{4^{P+>{A|0#OP-e}- zGp|!qS?lf?8>hY1#QTVWu1^ESnmY=ut-T3z?>60U-fw&-6YNK3wr1i{ARvLhL8X=w?REOP@D>ktawK|F@x6L9a!yPuxGY~XJT zgH>Q;9eZoZ8jV+Ba0tc%tUTO6xqre)#Cbk7PmqO0>IWHH)rh^GUO)1Hh7#*O7zda! zcLCYIot@p<{J=IyQDD9~s@&pNs6hE-4$q+6VD`~{eSQu^2cYv|7h9_WK?u82+y=xl zBx-a7{nW&)Q)T5$T@pqG!*hynENZ z#d{Z8@?TH1<#-%r678nHBnTQA95x9Cz?Z=Pb8C>e0ZM_~u-AEc;&6Zu^Qik&B>u&D zu@I+V1o`#M6bj4A##ZY>t_ChE!&;N-VCL5ogFoMb9sw^)4aF}B8JT|%0TI)SFc`u z+4=hV=K;^mGfn6?pEzVzA(EA5p#i{vRZu zqpqo@Mor>>%RlO*QSVvkqJz*T_~}zih)E#zM+OO57<5SbGnAP}A1y8}!jQ;C@z!cj zck4}UZS7|T(5oLT)}MO`nv*A{d7dPSH*fN#AxeykM$N&FVg!60YRNnXs~&bY@)}Q; z-JasgRBs6^_vjeSQa-sY|Grz9Bs1r9!5k0A#T<8vw1$lN)|2)&&weMBom$EY?EbVC zswpKllSy}+j_%B~_BBRkyi_{!RgDSXp+VA2j}0gAF41ZmX%~=;fNW!d`PSeM)i4nTlA(Q&i+M%H$6KS{VTgynhI1Q$ngOIv z8!$O_S=C88Nc@KwkkF-sR-pr-3mJ?u?Gp@ z+QccWW8u?}%-?3lP{iqD^&XiG>-Q^3J2f5`NhpVMzGv%pDy4qi?o{Ht(GrH{5?5CL zd^;g7%{RrWVjZ8`agm*51}`nav7PkkQ_^Fr=iyh!hVl+bzI!s?6;zR z0LIeFk6Hv#rDB3;8BFCMbGwj%iVa~%9T_uSpX(EZ%nM4W+VcBSC{NJIygVzLAnLjV zUV^Afa>Oz}eTAW)L0I2Ru_XXz$B!S^w{H>viP^VAU48w8urPZNA|c~wfIMFH!<^W6 zVtg#6859_pOgslx*I1lC@1bSlt}^@jy@!mC z%wIyx{iN_G>P!yGKWtWa2Qo(bt>`6~KAr6;ngqaM0g_Kds>5%7mpf|$e4HpB?jA>k( z>vNv#1rb&U3~P7h>H=DM*LUa7d}B5;(f9sk7yJ<(OJoNti>`2bo8D3mLB?si-5lP4 zv0a+LhGzvJ{5o0F+^G8<5$*zP%F*Jr+F%0U;;V=JMNe9>=h(Sjn{Vt&5J{c^3?>i+#;DAQCJU zk)qEpZ*<<#{VZ=f@OoY>vqEmwg)32uP?M$eicn_>9qKft$AI5OCk!!*%OOP~7VMcJ zzl*rw@17i2oU;;RDd~Hd;>*Q&68OWHE;{HZs2O>xyy)(&a~eTU%j=(iOlsZ5L*$RP zlHO>@usbG9>SgKviXi95nE%N<|8V}ZEgH&Ugcf- z*VgAbFk6<{>g~3|YLhKE1E=(WZ-W!fnpLgtVRdS%lOJ$uw>^(<&gsnEb>A%^M$v;4 zst{q``_V`erXXtZUoU*}KSt0F-cW&a{`w1yA3j9pbbOxbh+jUGX7#8!kX9%w%_?g& zOFi*=`}pKDy{Qq-)W!BgP3rBwU)pb1wolg`d#93_5ITJb+pc!TbWEXd-WN~$f{2nB zzI`M=dvHdzg&xM{(CXZWKwCjL&m~etB2PR;qW9Er=MRq;u=(9c;J-~rC|IzDca@`R zir{^qwcwTa8(r>0C%mYo-)oQ652gU_(pE(KW3I=t%O{@}uP7TJo_XYp?ODT-Qfbgt zs0;K}Ne%c3AC0#TdF~R~%hO~VOh}N#w<>+FqLd(M`N!V&Yl6Sk zs5?o-Eci4rl)l7S#4Lx*3?xxx3Gnk!lO50DYUTqfaoR4Sjv+m-w63@9D4kX9vC{l8 zwVKZ9GePNI)@@;p+)v6j=wDCsim0`abad%c$e8Aze>ZN`x*@V;zEIh&MYh_@UFI<- zV+;LFpLqrpKN1cpB_9!U`rIHsc#7B0MgMop|7$y5!3DwZj=YD`9JA8QvmBLVhoY6~ z^WDPEzPXvz;h5FoZcnEfTBkNSDz7H+kVxGt#8KdgrD%4 zrCckXm*)`VyqU{mBT}$3;*^TGCvuKL!ZAl*+`MYO)8Ff!IAJ6T_0e znc=WQb7%5-@f)`V zAG#fnSJIWHH&A({KyMp6MxtWxL`TDD+;xWXMxYFvkEUmtrl<8Y-+Nb%2x=cWWJbh+ zkNr)W1oOuv+Rv@|V`Ki9DlfP|E zy8z2G$x%oBPU_+3w~omSr12E84kiUjo;R+rkcu_x!ONL}KHm(? zvYlUAw9DMLub@s{RQ(~K+p*&`e0MtI8d`icwmB5IZ=WMSDE^FRe+y?nL)NeL|94yS z1C7?AJENjSQ|T`=@mL2dM8cJuW73Dl%BbGIkhY|I$?XS2UI!duScY2KK$2Se2R_^t z#&ysSE9VHS&3v)rLDYA(g6R`qawx|1o5BQ{2ba)|LsyQ(bX3WL_E=&|6-BA6xk5*tFxZhbFc!9T&%$v0pHq-Y|ITw%qyp5 z>JGUd2g(7jc)GL*Q-k)^`V*Z6|1myxu=bd1AdEuP*gG4G@D#=8jnluj1O!^m=Qz+? z@ccEJ?)9PtCe*!7gzRD6A&bE5fWV$`ey063<;4BOgr5%(d2{N{B zEvn9(?M_3^Aj}&}2@@rJyu7yGlCSHQSY6u9h6XPXPQc%qHbh*g z(n0e}{o2!dL2w{jx01`9_Xpe8K&&6-Ari=ae(iqPN2o2p%wHNB+yPw! zYP{K&FYJJO5s$nEKpcCqi)!H4ZU!C3ama~gO<#0adoo1+Fd3~thWQXp6|QwMLd)aC z4N~cD;bD!X2AKhUx(vT*+r3VWP+hGC=K>P_jfRvh4GiuzIlGVME_qJO^g4Nswe1Qh zd-42H^ta^jinr;p*RNlPXRgd6GeAIy=zeGeY?rTJg=pTxXU6~BAxX^3!??qQ!2VFEeSKJY37f)D#|TfB_cO zV&Z2<(Q=lZpnbaZ;AmxpF`G8`&@T z!Db_EMzyjgCE7kW;+URna^H7#$%%1+Guv4pUpqo8c2a_-sv&F8&bX=$vOzukoySXa88h7tNTfNHjA&L3!rLA4Z~x z$~EsP9De~aa(J)?JVH|^5Yz*(dk0wM1_>tEckg9u4mO&dq?(dT?u2#L;22SyotFr= zi{T~Z{FTAf#q82ZSNd$XT6W%hbIrq0KT(jo8+=;YJ@0II&fMc5Ndj6ivN~}0KyS+x zzd&LW^kN^QFA!Px3QBH1@=}|YK5AokUIs>y)?>+=J}<_7}zp9Y`~1^^616qJ>~T)`7Ga$v4w48{h!n1kherS9+Zf6i%4wb|_!G=>K#7mc8_@CSMMXwx>FG6|KpvV2)C`~XEg;U} zXz<*jAr~R-zZepEtso}1++k`7zPJx&1~W=0fpq|GHg|s-9?(;>G4izUt>yYhYGtdT zYOz_@znuJcIJq#eQ95reI>14~5)-|5HcrOt!;>W?K*tUxwSetle@@4BYJL`cWx!Ay zeig^N^I|E5^ST~%>`4tcR?d5bSYY*zWm*VJW9`W>Ab!y1emY18{z&vDe?D*!EA%%Ya^!jz~_dHue{yjg5 zglA(OXHMht$?yC9%o;djRBldY=EncS+FM3dp+(WcprC{ZND3l?QX*YShah!G0VSoR zMI@yqMClR*q`O3_`{H|JyfHq0D4dSH_MU65x#nt;I4S|Q z6zIs0ZW<~{!p<$RY{|u(1ORSSFZn(dCO^8>vU1Y0$Maz+?e%=xJa%30KPR89Tm3F- z`qm{G2K>E(`w)+Yf$e@;kw}T*>QH{~hDft+H!20D=ONq)!c5kW6vc4-R{HxOLF#tP zPaIBqOO%9rd%4@!(4(BV7N|4V@jXGSUDEHBHdZ)iOU4BUXMt}?=k8}w_#a=OEG z-AzMN6LR1Kuort78(Ra6CNv)!Kv^c30&?PkhSLly67^Xf>X!)W_KDRa62wpL&_Afc z!ulAM$Q-Z+{O&Tw;ShQdp*bvsit7O?H>$h$-)!2~CzmMIdG@tq`$=L^l6dF;Ttn|h zFG&x5KU2*yd3kxdVmJR?X3r2~LJXL#5t<79z5TDi$()SA68NqhZ^f*nEvv1GmB{3z zT$fXSG8PLnukO8A)h$>}@WKx!)XcH2CXgx+8p~F9Ek^@nJ~SWJ$`!})n=a-sGT*;m ztVdV8U=Wc_ajtY9x0oR<1nFPF^6K7=io{E-hPECRcvZM-?tIJ_mhJbiZ<4evzwg*u z{qo{&MZ~t^vfciB9V!yJ@hrpgms3dt$u-tEt+T5ucDL=NEo&S}Y+o*3&7J(B%D@q% zxG7-tmUZRA{|BObbJDW=)-@{nH)wQ5c936PNDYBv4KIfN(+u`mc#kfX-{f>Al_P9W z9G)&1!!dmJlfs%>%=?Acqn67%F;9!oq*j>-$f9M0mEfHHNSO4PAXr0T@-%Z#oKYNq zEdSUSwp*iF`NamD?F8LBc&^yxM5$rGKVC`7Lany>*!ytqtYkA$!dmo&J`~uAgjGgG z;p0DGK9MqgzzlF*ptmarP0|u1KhM{Aw+Kt%;j)PT76W5LS0;V#Sl0JvG)2gJn7Mh7>=hiy8{1HHnGJsY_DxUM^?m0}WjJW}39OFzH zcSu>BWQyOKBn#i3Ei$p&y$b1YDW|J()~3`amqE^!M(LFrn-j}^k_H0Hu^EQLxb{Ld zHc6&r4S0?vR*El|e;`QR&I03+3W!8m9)VX&ocie>=>Fq$ryS{=x$0r;MOVHCaqWuJj036M z@Y8nDFE2!D36dVW?TQmSi$f{SR>tDf8t!iSixABrdn(F&;BT%Vn(gh2#iu5+@nYdy z{R2w)6~S9ZlDy$GM+dH$SGX_L?5H#iy?@&C?u~e!KG&y1BExu@&9@bMEU0pQVl1Oa z&w{iw{b%Tw|2dgh*nb?ZIb2`pb>*fswBqGRRp)^~wDY;JDOK5Ybj?HFnb zxIMt6#+>y3-tI)pv`{MaIv(Um9OgmM4$#iKBNr&8K*>}LU=m=LDrgy7xeqPpe}A6b zd?0;CPj4R_Jyha(v$C_F@@zp57ZJVq2!A#(VS1GhdVSj3+mpeWO)+>me`fbI&<`w~ z0o)I5L(oXuByrUQ68CpX2IL|$FSMq6m&lc$SK%jzQoS{Zy~j`?>xL_!ng>j~b+PV_R$}s_c7I>cmeLnL7-+Uke?DdnPK?28msK9D?pD^Q+7am^>^ZCJ287 z2%_(_Y7WPbuu8E{I8>ayUJo88%5gZosk&KyPh#MWaIk&48`nc(q4>QmoHzfaRBrfQ zy#DYzFq#F2K0qi^UAyxTDBMIO7zn#S?#ISa50)Cj_3rb`#?g6>{%c89r(? z^wr1*yo|iP_Gg!ivfOVbu%z*Iz$r7_8E*k8u*S^03Qr2>;wm?a$n2Y5#t>(#uu|iz zGe6kPwPkF0c5Ybe8q*4|7s8GU|GiexW85itss-%f!d0i4Rby&|t}OY;O*XInKDF`W z+}6{2|1vt+FTUTYa>|Pn7qT02g2tfzt;N#pj?faYR6@WTgd_x-i7gAEdJ`_qh zf&V#ATtdPgralkAJbc`;4$SNb2nf*q#U0eG-@Xx9r2k#NPz=8ofaMO|@^DiDQ(LGc z0cMNz#Bju5N&l4^AX2~3cz;+u-Cr$$=cGySf9`%0e@zAm;;h3CPyxs)q~LI{q^zQ&jFXZ`7F!IH|j|b zsaCu<`=Uh{Z;(;gR;tt(3=Pt@=dllDRpjo+yMO(>?yyRJPBo5eK(->}Tx=5EfHkXC zZ^hGTF46;+BMw0d1F?~;3O$zG+ctV{ZmZ4ox*Sa)D$dO4Fbys}&nPDgwy!*47606=>qTIkR=7hml9A-%*@$HBF!n|8^#n3?FRLKYG^#F zEaMK0eSSMa{<7VPay`_yMHRJ4X(|f=HsesAh3i%nHmy2Q6WmnBWe}Tu@EGuSbA%CK z2O=MjtZnfmxt#(TNL^4=%vR!s;jl0GrQbH3Ym2F@e&)`RUY8WrPS9(-f#Ljf0(4*> z0DO!N^b=rlhZQ1ebyLXJ#gpR`$%qv7!NBmfL4Q z)AksmnfM^yvFz9GZo|SdxkWxAuvgSy(@lJz zGj4f_txi|mnMz%T{i^le&l3Xq8BZ^vR#6D;Bu5^1l)RV{R4nMYcC3py&;=i5hm;gk z;`eNd(Nw%Iz7zfwg_8|Q&E^%3g*M99zhHtka?hnAK)YQ!_$t)E-c4 zoleox(-Sd8o^=8LNF493O5)dN`P=i*Vs}IbO?}FprOX}2~$`fd1tN! zwMfxdk1%&zxp_vAp{!4&VA!OkVzWOzwT|ya>e-}w_5*?p8)h%75>*YJOA1(bE84v@ zVu?ZBWq(sO=Q3x^GoF}mR$f8DI26qBGxPIX9Cjg0ZT%M0aRfB%T1(xB!#XQeR(G`S z)~r@c-^49=*!3Wae=Md7>8IIHL0;|_T@kh!%Y|Aa9%vLGxEn&a$P>;7-;p>yLZC^Uhgu zVy_>Cs2Iih6ic~5`;off%^Sh78*0V1eg#rEOC-75CHeNjxuSQS-!6TwNhne#Ymje0 zEqU%&Euxp6!}oru-B`^Bi;iTd>YIlGkN{ttd{9?{13@t;{y=r*2AVV|rTqlA#oe`O zVB7lIzrx~$-f~P|egkxwalx zxeIy6X@Za8RLyz+DCfGp0ARhCy?q3Av~o*GUQR$Y_YjRR;fCTeLU>_fTv)|A+!e#> zwst}E%ZJGU^8c;?=dE4gL2Ow8zjKU2qM8`vx9jwaGR17Zg6W1HFK1CZ=sNYpP;??= zw_9()$}C+%@ZG2rb9im=A)T<~R;QKZLsr<2i-Tu(Lxc3Bzk`EA7>&SH4vr%DpvAp` zV}ydg2c57}>KmqPO#1p+8f&rOb-3&lQq08?dt6$m*ZcTOD-p_NdFztS) zar-!rZ+3f1SC59q*9ntd6u;Vv)?K|!{fMp}i|p&Z_csuCfcOi(pPqKA6D9NW#Aact zN?t1K3;yH{p_5edR_{bEdcWw68-I|lyzX!&HGZ#>_-Z}fJG_x6H$Nf52_Sv)t@_Qm z@h?sW&omHn9e@Ff7?2SFfY8KnT!R>dx@WentqtRE3FaBnd%vbk{E9CU|8pZ^9865+ zaF$_=E-}8RV7iT2DP?6FU_${VXiFH~0lX;`$en>Jvo`uQ=;wEI`chBv`X22zphS?1|4nL8VsGZbhdBdv1vN@Sv{gtj zaH9}!?T}2l#)?Vxc7gg1VYe5qetr>NB{*Fvz0dVSYym*?YEwCgE$;kFH~=rC*?Vj8O}Q|&WWr~ zH*F`8-fC$W3GDh2)Gn$^Z3kfU=A}^hRJyN@d^0+_tNUIVO@G~0!4ZR8fjxo$W>8+0k+!&K zH~ZBnq)eu8BU^qGp@Z`P?Rgf8%-}W4t$tC`9>_)TxYw_IKxbMAXFVI6!f`K{hdDla zq}*CF9j7xBZ#V`okx& z%+->k5}_rSvT3MywHhlTCH{CRRX^2G>C3S<-U0ES7t4U#neLNgWdjE0AjL#=Tf_hw zh0!5~gc^Ljyf9;^z-#q}ghV|g78DdCK1u(ncXtI*O4^TBZ31TreoO>`($LZG0lrXV zWMrG;Dk6saK5$AsoxD`HKEHTi_0Hy?i76()t zzy+I(S@~JW{$qSNSTR<%)TT)yuHNABH8DAP-V|ViJ}3=A=g>h7V{^hORsX}MU%Q0z z6?a>?2f7Vl+yuZR1#Ho}H-=vtx?6z`IkcpvMs!iHqY5-E8;ip)dA7hEq})ozQt6zC z+DRJGCp4W$Q~W$Jt;hZ*cz@=u z>oYeN%dpWw10`HF#3&~T38tQ z&p6l}&CkyV5z`AE=7S0hnCGCgbX7oNg5kByf+LK10(YQa1F66PJT685=O0Of_)WW? zDhSV4$Gmf?8K*kiGK#SXBc(4eA84d;P@U(;clJ1M>aQ!H#Y09XFdMBJGwKi}wNJDu z9qYVi*X?F~iX-KLjUq38SN>CXRPOn*kYcQuuQ?qF#jOB(TZFy<{bTWenKRaSZ2T5>HdA@$A15YA&GJT78DHnLQ4Q+0v+47Q2_oOyhvbn zxvGEiE|7s3%uq|~3pL0gOZNZgT7tFY@_2nc6fZ(c;vpVENa=F`GurIImJ2NSp!_&< zaNxN>hDnM>Mn>Mhe?KuXAs0sTn0J}gp9Z9DDBn{Oj%q>L6${!B-8uBZ1VZ@;-Fmb^ZlC zG5SC9im=fl>@syw;iFVFGasldiF>xFHXGb2bl=6CTT2jm7FHs+yc^5!agsosQOdR2 z`&Be!PDQv56M)k<1Tybh#Y7nex_GzLKP)2*@w5=+2(5V9KC$~%XuGFj?p+#^JPq!XmvUIN{`DCdR78hNGdsxbHeKwELvq^Gph&Dc2Ar$nW-LsXrVO*0Id5> z8t0mj`~GW*7vfj??bor-{gD{lG{!Qxb7uf_XwY5(GJBghAF^S&0V-PstVV4LSc~=Q zRYfI{$#75Tj{=E1$JMJQp+yGOTcA9QGtyE1TcTq=n`&?gw=*iQB1kECcUdsc% zhUF6KjPP9UJfG%;7VbUuY|fMfDRxAPfLMZdB$A3e3p72%@l_*ge3-Lxr~91?lAi9Q zB|0#cXUo>U%eAUV9$P45Sp&_G5&SW*>kHwNfCQ-m@9H$eXZmVT<`rJw9QO1j`1k0< z&y=mS>0bh~yYn!A%G`V!yuici-9fJyI=}9VeG(XFH@0`DBMQ4h#&`-FqDyy8%Xpwcwulql4m~dt#jk*dnq-z|sM` ztUKD;n2j5B;lo=LwynthJ!((;I{tczTU~98069f zO*Vv6U)Bekd#tK8%|E!l$%g4TeABeKp}u;hNb_7oWgHm=)tM~L6toZ3{hZ89Ze;j{ z8=x8gawVZ%J)~Q=gU8q&4nudVwYh~4NYfGPuv|UM$SG_i9@68TZ&csjMSOXC$dtC3P`v5ax;OTc{3ip| zo#!pkG>!GmX%|ndJjd$w-I~(AkbVjSN*kC1z!} zx(3?}{l;aU#O!u!Ynt82*6p|58dqRRg|@1KfE%|{PM3K)ohaep!xU#|HmA`M37k|I zhQ17wm0^yp%k;wQmd0fQPBR}?Unj!cA}fHOma8RjL07}vij2j@#mMFq3SDZB@t@&) z`CW!P0Bb{DUh|>+K$wwdFN7kDa@ZXTGBm}qqfB?3JUPvW|jaq)Pr3(&0I@3|Fe);hf)U5o5JM6xq*_5IPpXb@eTDOh?uCT zt_nN7#gLBO-CYBqjdL&gl>A$9#_|jK{}Zkf%>i%%4S_l2_>Uhy2J26rBWnmt%vj0u z7^Hdx<@1g74zM_e)|*DCNqt;^^`6a5}k&f^W&h);YpQAlH-JQ!(q*eK`Li?5T zPogY$dR?Krb@+*L`beRJa~{c5^L!kg4jx)Bz5A-%&Og`Ny}NKWgz#0>^#$cJgR9{9 zFq#F);}W9-VxZDcP)CtNiRLQxa=Lr@bHIw_OmyWDDW*J@MTexEDEyq zZu0V54PpOgLsf5Gcv^nMQQ&|u#FWX>dfsB;MbKUYxzS=#qO#Y%qw8tLTx`39=*en| z&0O{Is7Cr_j$R>WQj!hCiX)Mw!Dw>UcU9PjnDY}zE{eLng&rPgzQc4;!k7`Oy~W>j zGayEg!EY5=j0RJ%gI8!PHD-`2w788^o`j`zQ3`8OD0=ta=Lg?^e|m8p6&oE-qK@T} zlbnD<`@d{PGo|F(+fPCCalDGLcgbP;z}YUW;5bg7joXPbP#neCHOS1m4KVW-VMZe{ zgfj<4P=wr@M$0BVt(?HFKAfHcHmj*gX^zL_$7x^WhcSp0ZaS@Z9qrLgE=*|o7!&bb z?WcF?3Ie;z$IZ~g^qXg=!nU7UW0y_E zZn*NG)idfY7tk(;qZ6y}p7|j?_%Hx+W6>vALlXK<>f0TsiCuHo zbDrwwJF3c!%c9NLCzR230Kdby@r0N}hl+29uQiEdm4zRx6Zo9ea ze72^Jz!mA^)a7>&pkq9JMyKDU&~ZT-~0Lq(Vfl4Qs`1N^ArU0H-?<>ct~ z%z~F2w2-{w>8tf{)!Zu-liknB11c`c2&y7~e{g6Rd^!K1-u2#B;2vpnypabac|}K& zQN6e+G{SxUcHv(F=8`WScG=b!3!9kJ$N}g;D?9$7HE`W?huicTA76~9)ZfR2_EKhP zqB&@*gb_YZrPE-VCaOTEW2azgv>MDX#l^&G3k$D_i;r!5h7L+2u-*qxkUN8;HaAW!ZWc-z`ZxeA9+Bk)6$^cK@>tx#Nhe@sdWsJf$=Brr^D2skqpBbQ{^G7*{;bhqD>em+x_`MJ`WeLjZT)IEc60FvzrgiI%e7 z`2~jcARfn`b{Rv;=uT}1sV6W-zrz|6x)~id5~i;HjnhO+^ghw zkdcCf3!3Vo2IveK#M(kI8>XULLLylZu6_9-VS(_|E!Dlks1zS)Wj#kmwp_PqhrXIS zf2Y%9ur;TH#+vmKz0h1PPuZ-Iq~Pj-&5rS-5~aLc^+M0HxvP4oIOvHMuJl+K4373g z!vo)(R8c}Sav3cW!(Z3C&>xLdlIxJ0DDKs3KK>>n^DT9{$IKOzuhw^{7t5|asg~Ph zNUa-Hiyy1|g6(96+Ldtf#|TOON)8s^fXjR`UZ6CTziQC=1>VQ|<1q0q8!G;~dm~WL zd~))10ur3B-vg8dol;FOzvJ^soFvUCd;&U#k1;GQ$P8LvatR%wp*>Ye zX@7c{2ew33_+j7QO~eDqEk*~|nDQUYfP=e83++zOZ9_p$t`B;}z01&>1np>;v529K z1cZd;8#mb4=E1z&1FX^;QrQ397;x~4PL-+Oy*mhVYCFSZ$qJ_ zA<=9@hRAXyAV?q;!L;akrzCvn#IU_Vy;w>_`NPcjwr@fVZpx10zyldJM+wt6(UeOq zn*-8qyG9{TR}iA1M3LCyCA?(3z?r2@Ntx2ym!(czHOa|~_~>wyt??z?+z(MpnTLCa zj$KO6gD)5=*(c4!0x#G!B)D|#Xq`28$?Hu)?AIKhUJhxB(Dy1`y;YQxB^fg%n0*V- zHa?R0z}SC2s#ELma{;%*wNs<-?4wtk0=#viWXB zUcY_+dergPe6KssB_Z++BPrQf!moGd=)L^MTE!3Gw3T?=a3<;Th8S1964XuBIv&x< zDOE_KEEwY>(QL^A)g{xyp)P0YorXRUKx*2hda>CcGw5%0gGgrM7efCH%^m3E5`nn| zq(8;k+i0md*ER_e4Y(k%wXgH8Xflr@1a(kXbeQC3e@41tp*uAlFil9eFUf8Xk?AGG?sy5xKIBBna@@Pwt)>e&lu3ms?mLgoWa zX%flmR}mp>yCBO)q%dVz^tW2XcHX)i|7uS3xcl{Uw9b>sO7kM-GYZUMImk{FRFjSU zzOCy1)dHj)VaxDl5(b&w&X4Kn;&*)cRW3eZD1xre(N6kXs%q^T0S2QR>d&tvITbj9 zjD$a#My8-ntxffq%F0vWrIP$4UHy!`Y;ByzT8s8b_{m;spvaR zk-}sA^i5U4ebQkQh=={&YTmn{_05p*8LKoqi08kw=g3zQW53Y)Ga-0DSfyEZ)8cZI zVrO=o1B$nav)y`CGq?D}{Xtn+_pq>O=|v}B30DyI(1uuDXk9xC<@y~{tGgnrJ8L4# zf?~YWb)cUU-P!N`%J%I^1(Tt1a!_3T_dCI3Pjz zf&f{QN#}E)gN)Utp>*l)HM$OA&EhXUVPk9;eY%i*`353}tcAUmMIwV=-Q$EQjRXzY z$7t3A-45QaB~J(>yfWMgFCxv$ibGiBO$N5=Y8rYzc2y4^aw>5ykHZ;4 zZHufbdCtvj9?#_Qs$1SSi=5k~*4ZF=I85d`$ww*9+&`uY}aHS*DGVT24vOvByXt z8={OjgGo;u?P2&ji01HuoZjysVT04}cf^Q=3I?`|?gdKMO=ncBPj_e>PDRyd|2idS zx-1xX8~PjPxZ#vMY+xGydb_$N2(sb1W%uBr#wzb79n`1m(Z)^>g&16N2~)#Nc6%`P zk~C2GIZX`tct9n#lWn@UVw#|f>!&Xk5=LoD>8bWynm*dB!7L3@L?n4UW!5Nzo1=!! zI9D&Ad>`qI$7iluEsx%$DHisR3r!9iJ8)pII*6vtOxH-7tUtpYKkh(pCAvuh%#bB! z_X^>!$!ulHTm>QzNFW_y&)K2R>priIrNurgPteP}%B`zWI?B?_5uVc6ZZb_upX=LP z(<0nE@Mq`6=J%cb(_Hq)`T17>{NJ0){zL|jwIpre;FrW9>4c$yB;jOX`i`ccdV(fI zvZG82P@F~hX;ZNW%GtWPc?qSHnzC^Y$(}U%PLYP_MjdgVxNg z{)(FGD48j=ilKvTAAKMkH{DD7(u#6Kn*Gwk9eiLV2s9@c`i_*lJ>JB*ZiNP3Eo!ne=7fh+(G^ z(ee{Sd|cHsz54CvKu{#Goep8z*&40k7D@9hlLKnE?a{dog*CSB9-B2ywxDA}(wmQk zBlikfNW!y>>`q}7Q*5Lv z)CjQ_%wHXTOtUj^bST#f>=nqpqfZ6ohgr3JQ9qY+QkM}J^N1FS$ZwIIIlRso#q^;OaPR(6P0k7*=Me(F zMJc;O-9O<+72XA{V!tX+>o+Xt#THtQcgU>{@>d%bpr+O2b9l1XAscUwJ67% zO#b`F&vG{ntAcMhaXly@u|=@y{pegJp3s$@V#W5)(1pp_wyS)db=w>Pxc>- zp9GRN;#r=%^Bz0dmq~b*T*(m=yn=U1+nON4(-I4rpWZ%H4~oD zzI^ezDLtC#B-0ITKNt1A5393!o5x)9kDgDuX`WWMPV`@5qGP(Fd9$JTQy{fAE$HEkJupFUKp4sODmeDM4s zK#y7Op)XDH=bB45FoXd8{91^wSZ3CTS~4kYH;45ngkluhwb__f_S3=AqxcsLe)WtmdH-W2WFBfjyJ zOmevWRu{tbx-tKQ%?#MQe>HKQv%}ti{(a1tZ%CkF_RTNN699Y6xMh0!VkaQImXct! z5+u{-O~EsR3IxI+9HbGjHoL$FBVM5Z*S|H7F$w}OeWf3?93xU8i^8*vI2(Fr5TiKg z11(RffdHCI`Qn&f&fxUfhw^f@b+TfCxw&0@G2suKf!uh?NzOsKgcB(TfZ7&QxN21%Ci}0LlO+7M58^iLQg*dBd2Ai7B)M zrf#vYB-($1%6Tt>_%Fu7`gnYBQ4;J47QnFtGs+2ONAqxWkHRR}Oof;u7$CL*UMS8s zc|JPw&Y)ZZSB|vw^a&W0(QUE>1s33ifg;*~5#dKLk2gPJq~1ru^k;|9kt5W_Z@1z6 z^E{W{GwLW020})LVNp0Z?7-b%k1BY$%*qjlYBx1C!SveMzMR|I+RzYKT2{vYI+)T3 zTt6TS0&AP)53?5+qtsY2^INkrGd)4t0adH+TXC_mpTB&GM?d=Kd9bk7!I%za>2T`5 zUx699JCpRsbJyK~1qP|rSgA!sg)F8y1e!-M&N?Qwpm3dlceq(Bv5*WCP~got!7yu> z;0~fR32#sM9dmOSs-<7}1y3NAK{?rVRW8KtYSX)#Z0RuX;VfSBz_7&cCP(2G^ES(8 zl$DiH>^FqNbF`hZF8XmB;qp3P+ay+VE&G*fW{rfsJqjWQv@q z&j+`i*9&npJ~ah{B&%*c3?k9nVU3zA*4JG83o9k<@Lb{T!5HtCke?achJ29-E7>1M}oC~uDB+eF}r zS;dijrs<@K|K{2i5V`HtdGnpbhs*!$QpwB#n1NTu#y<;CAt-OP0z?{hfk}N;?GTUo(@P9jH{oNU_l( zy-G0T;zok#d=tKS18AZHQyB^H?14QI=G}sLMBkPTqita&2M-^bG5fl$jNqEKFD9mu zM?A{B5$nU80^Xsqg8{HdO*$_07Fe7~wQKstzVxVVT;=BMBgYxw{Y}((pUp6LQNIow z+u6x3e;qWZ0Mjecs52R1u%Gcj`ZqBcZ|npxxZ|Ha4wL7Jg~o}RA-RR4;a01$c)vE% zSj^VgXxXfD7apz6G0eD($7zP=_p<=LeMk4^i1N}6dM_GYDh-#JGA*ai0uQoh>D>Kk zC27?))dRY&pb8~S{v7!+bNH#ZLa80V4FzHinq!MVm<~O9U>1iNYxGTMd<4i$uRFjV z9Bz*rK@S7SSPa1;Zpa^+7GNZ~E>sLLW9Gp>XrZCBv=kbka%G#DG1KU|xH_QsZ@8jp zbrmY4Vqm%hUR#er{X%UD{!4IOEi~7~L`Q=XH8ZUF>sQPSFp$LC`mcc!d$P$+yeV1O zSM%IVBi-tktx^asW0GYMTeS0Hu8?5V8TiQJz@jPLv`;xUSZ z1}9}n$9zs}KK zfBhSy`nuHA)LX=PK6?Kuy+~fbld~{0Yinu2Xml&E(cANfvuzl5ZD`#rb(+`Uz?3CT zLJz?|lSiu-2KC(!{jd|n0j_>oSy_F$=Z7x4znBI74Rlss`1tt9O^o6lb{tH%bFF*1 zfG<3;caDl6#T;0qsRy1EO*@RwgaImg%t#0y z#+}#+BQ|>Bofr+Rmo7cDxCbuJyjUBmSsy|RLjovFc6Qv5cbuKex4s~rIShG}TrukR z?X%{IpcPumFL(pRQy4J`Cz!dJSzDseGMv;fWRu-53cHLFGfdW9&HOwRz>Fv#Z~xe z4rh56co$`wvR$&hE&X-7T1Z-7%OcI=;>sN_q=4?|@HoiMcIo=q`!L?c(c5qyy|^#F z*}^`t>V8@}%#2=o3~hV9fDdG6Z4Qu>)O(Ig&%|;+FqN)nr)vsINOqvPo-CU!GcyqM z_ERdKZcePzkFogSbU}*S>JpN zdS@6Awgts(as&B0YFHZovbB*O;J*BEIaa6AO$O`k6wRo^kRy6L=%Ic zpcgrBYF{ICd!KrK9fWA_o00G@^|P;@YdK4llyVl*zf((IDN&JiWi?V9%|J3wB^L)& z3?e=@E)WU=qW#ozw1C!4sX1c0X@vM1Fz6eV00JC1^5Wxs0e4diuTv8jn7(aqKa+vU zTD>V1F7p0PJbwgq!4tB)=GL8QFgcT9{-*a@sOtf+EWhsUy7KUdd~q*ZULC7wjybX_ z7#@;-%wq3Ju?y*6TrP&a0pmQuB5|o^U1c$(xeD-<2`p>KM?OJocPlk!ZX+QfA;v<$ zWwHHz^BC-97@=gkETPR~sJ^{Lt zT3(HRy>UjwCF-f>$y>5rrBRbY+lX8q{_0c#tDOl&-Q~O^`s=fA<$&9}Y~=}ko!xG7 z64ubP|Esf${)wxn^hbV zSwlw_xccQS*ntZw#@%ggsu{l3NAOjG#TbZ-0H+lf6)pDUL})uE@wk9jV1RU*5ae$d zcS9(Ep1pAWEqsSil(!qLDu>7dG2r$iqkmp377jw%K=tD%&@U+}DuQN>*7Qcmdb87!Np*Bf)d^2MIhFaf25zBti19atuySchGC3b#??QR=F-iw}GUW za^-{3i{RY~!x*78&Jz4a_9p*iiRaE8)Y<=A(T!bm2Kken-6FiBHOOq>!`c~f?68AY zNO;dhs}G!=Hv#HmP$?Kz+&4Ebx9XWmuz5q8`B5`l`2%=NK0WiJA_F!6HdaV`^Gxj1&&@FwcKnnrzyD6>hwB8kb$35Gn?*pl=8Q6dy%7eZOL2} zq@iWgceeU(54jy&oo#95D&8|XJZ4J#c_pOy!$fPLuJy6tVHIN@PBiP5-1C}NgH6Sj-6A{GGQ1)IR)*}Zfq`2qSwq>S9*u;edt<2R|st(zT~ z%5y#L#zLrZnQ|nZ3bh?DAr1H$Ok`T7EmpsO|Bdtop=b+$z6HR&>EB!B`P_`PB`&Bh zP?U>AF1!FZpH_F7_9eXvP$T?<{J5Rb)u^2 z{h6Ei>jFv8&~D*k#0XG$BY$!6>;WEq>O229{WHcSp<_4i%*h}uwO37#jz9p z45c03;ugM{x27-KOg6v$!+@EW$FYWPQIp6Z>!GXB2J2C(x%AYy7-^k2hNGPmAnTRI#5ku>XlTW=l#2W zZ?N(1<@4l5sZrVd4#xPoLDmyI`~ppx$oITP&it50a(=^^f^a$1ZtGM#GjH0fC}m;$ zn?&=sZ+6I?^cj$(;W{ryt7V&2%h3Xt~dX6vTDHVBQa$@*ffomx$gbvNAwUL$}O` zLyg1B3d5twNw>?*yx%Tg+}SmYvl2s_P#~!?+Ctjh4rAjr#+HmActemNnE@U~pBB3H zOT6Cr8jkpYRZ*MUWr`Q6dG@N}g-3mylnf(&!r16khCIIH&ifC6<-(7-a5ZZSQZaqI)DnIL1c^X^CLpHImEN&a5o zul?KBU`e)d67hxh0bJy6v_u>EnvJ!GYVu;1b;xt&hqg6>H1GsHymTTha@Rw%>%?|% zIL$~=6KUtylbI6!QK?8_(fumgxMPXcjC-OT54YH)e~|)V-}Ba2jWb+&gYJPx2ITd# z*61K>xrpezT#F>@Xrs5iL}0sCML>m3_FP%oER)e)kfuU?af=r@lXD!xZ|DrPZq{9U zPkEZ-#z#XIFSLt|lxRAr*_)Nq!~<`x*`P=@t8SqQE1;;c*hq-$tQdZy7=Lq-4P&h& zx~bL7xE8LEzPG3)yJ72hg$7OeA3MR{6F7fwkpCyoy5HAeVKJ$l9HPRAFn^@OAWfW> zAG_ePP`+0hm9E(7UL@C?9{ht}N!<(Y3cJ+8Vta0uDAR&2+Tdp>5n$YrwyeN0s@F;5 zt1m~TIb^QEl&rF!v))G07I}tKWeSgI<5!WKF1)H~m}ShSXM3$mnEOL$nJ4VDo25?Q ziD}J{3t>lQLkm2}@bNw3!{d5Shqse%lko?(_CuV}c{sI4y+&s>L*iC>Lwei45)1s* z0u)drR{gjUeeL9-T~msOgkf1piW_VT@f3QkbWNIx1lfksD!SgF^(sC-Uh+7ezn*;F z+Pc;0!1QUhPqclKd%1c1gWR8Om00mDT}VRQ@@wyunJlTq9&NfRga2S?3AkF69Y_7F z$gk%%7^(eQV@hK$nk%I4yiT3;IHNbGg?#qyIo2eaF!gtl$cDCL6i!e!|F zhGP3zLUZ{-+Yfn-ET|V_iu%dq`k%H7IzR2QnzPM7l#aCP>b}#b72ZEk5KAjX*ikR` z%oltzc3QgD+c3xP!$!s;afo}!0@?TbzPi*&!;Ho4+`>djb|3_2(JLkj`F)!z zaGJjBZ3hn=*!3aoLiz8TM4(3Q=~N%>>!WQNEmH_(#f-~3ZuxIaY7l1hbPmc@^G+qd zg4ZKn@1kU%e)XbU)5XlE-tHe~IZVcbv}CZtjCN<^V@Ctbng^K-<8SJ$gtPX4p}S2Savj3X?9Z&vADls`X(usQmFb^yh(>R z#qxcWbW>+?gm9nkO3drmx7YVQ%*V0o4uq6sC$o5*9<&$Sa9*EIU+t#WW!vo3AAElB zNwxWY-fYY~TZ(11_V5AmbEFc*j)SaliHvBee#e@OkG`VB5+R;fkXm^Y)%%EV6#EPh zK;iHVvOoTGEExazC-QtR{fk+o{sl9BFpvvkk|yhG5q46fpbI#gCtj#xOtvuiTIOV* znjX~sMzK6AQmmCVM=#&GvGly~bsLadw|K<#yirWflJ6l%OAbk?1sJ+WGGCE*OigT7!r>mR;ll^c%kC?P-~4inQ5{|ah1J3riYU&>P>}(IeKtm zyrz!m&3=5xj;{EN)Cl*@$zs@VOcZzY{ zWSSc~ThMKjF}u@=o0{c{w>g5+DpKa&E|J5nsIEk9Li!W}>qhj{9GF&&w&*H}2fL56f`BNRKeXb))vYXDGddH*`2EU>PXs&GI`{ zbeS}ba7&ArZ3eUpZU%JW3j0rQh4h?=ZAdE(;}7kNn_r(TpY(FEUo2d~clonUoxh4j zEu8taCJBEpdc?}^jZDGNH@_D8@8vFBDV9emH+z2?p8j_nm8X?<=%L_u-S@Abel-v4 zZt_oDenh$!3JgS2u#l^nwIMRQ6s}zKb z&Ce){MMQ+{?G|# z!rM!TDo-oN7s81p&)l>-m8z#6Q`!|;Q0>Z7u^afju$r@o*<#ozM7`ENC>%ArMKtI1 z%~6EJx^+92Q@g4*8P`)r$LG!TUHrXZ*+mcoP_`kOJhY7vLW7Q8-JCATxE6%u28jO5 z{p|hUQIPoa@q|)=M2@p<#L!Ma$4;E)xc>2&MdkCj;)52(e!=?(10^>Qq-67-dUY!Y zH+&`LGIxk3g!- zIEzs9>W7vO%g~*TkMJW4Db$&=JEOPt-J8D&}Zt}oa_=QldJN2_1 zVTNOq4eaR5HVZMBWqR+n>aQI-P{x9G@iW&2;bBW-CmPJZWvcmi61)4DGX-@YB_!@y z{kiz}l}?z4{u3D7RUbJKa4ZNn&W#vdE3=C6NbBUR`0za6Wp#Tus!%X=t9dD_pK`wZ z_TK81QCVjKuhSD5v5935v7P4jr>=HZIN;c->*J-8!a4$D|6gzXe{l9C;83@1`<9fY zP_kr6k}X?{EwW@cLR8ielASP??DbeGS+b16*vFDBhOvdD2w{wUuf{Tyt;yJp`QOvi z^S;mXeeZW1-}mq6=m=weGxNLd>pHLPJm(Ih=~~ov*K{;O^hb z&aUh2SZ+xviE>Mm0=bv(h;vITGZk>c4&Tui|Hb2fsR5UiT0^=DiXWXvh~ z*X$rY81MRh7FfX+((nJCp?6g?qmj)qX6zS^%(c3!pT_U}_H}-QU(Tg&%+D7ti-@T( zou}_7mu%n3OO}^z99s{s^g$T>xT^mGqR(E02nNoVcI=91t7g*2KGQkTZ zdR9A~a&~!P%HBc+wVWP9irF_JfO{Y0aLsZ|NBDW Tsm2iuayg;aG9a@YGVhjavl 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

66XX8kb8qVmM9K`ZE-9!T>E z3drtYeZ91^x4yskq2&PO)&u$N_kuPASL5`xu~;?l?IHHh#%T`k4XkodieqdzeC?U&o_c{Fw{7lO#-9K5aSIy@ zr_-~X2IgAL&vcrLj)LDzojGYbZs&>RjiSrhoLP>G8@_F(9itGS+V*#DPQX8zCA;r$vmLW=`{mdZJ;KbuDw~`UaVX{cSpY%ofr9Y-Mnkq zm=Sh^L?Mov{}RxnLzRp+0FuI%>&?}u4t%enjS{GL7jh8hpiE|Q>78?%X6o8(l&ZEm zJyYu>H%+LWoMr=`xzPb9|BToE>ySqjzSQFS)U2E_k(L*0-5{dbX85wj=BvTmHn)nq z{gU%$O)@|GxhGZAE}G813Cd7QiXPW#U@{O{Q86E)?Dyk(znZ@$llg_f44%Y=H8%%V z2<>&!8cpC#;hq&8wcPY0@o7$j)+|li&yUogfI^2;$oFrT=gXbr^#a6mIX##H?=SEf zf2PZ!F0e(qahz-_vmPoqpr0ku53h}<5j$ap!CkpygD=u9uzK#j^&G5dK<)DL=dqfq zjz$8sQnUB&7Pl_1o_=rhWmkx=NA;=FxAYw%``Fe+POwx*-SK7!K|H`{rR=NlX zjknTUf7E1?Y1s6-N?U~7TYv&o6D`{|S7maz3sr}o5BYC=re?ELRmlEcu z7=j;;PFgX9zZ>ia<3jIaA*i(N#IhV3SCB49eDBG3pHyEu znKg1*zL=1%aD4rV+RNal@wp?y-BAmV=A#Da**a?;HO4Fm&zria_kO9=+ahMZ&d^4X z(_CuSGVPh8;K@Ag_kPufnYwJXR77WYM`>4yda#c@VO+ahZ&}OJ&TAH0O7;G1>iqFE zuG6RM@9v`c=>FriY4fldv#Zwsb|^e)z_JBxOVD#Fum@)KKx8fNhj!FHTUijdy@LUQ zf{_8645*gD>_c=>Oq(2m+$Jz5I)-ttLt{y={VbW8_>Pg`XTBI{4XZthdsJt7D@gGy z6>E0GS-6SoJmPNYa4?bEWEEtOoaG71e~&@mGUM9kdy})tWkFtNQ+Ke$hB%}fC(G|& zbVU`qiaiHtR{s7$t;)wX2)?Qp-iI!lUe;7>{b@=wm&A&Sy(!aK=nmn=9 za#JySe|_IfU5&8fiQ$V$+T<7D zWI=mbT6VS;`GlUHgu__ZZyJ~w*l^%&MICRwiCImkrV{GN$XCOyH$!CQEePByMF+W} zS1hf_Vc828E+B^uSRZ~^UPD|`g^r1~BHZ&>f@O+@=1-D#Y}d;RXr)icB1Z%^lhcpifm@yZOA7BFRJt4{1 zutS@eXzy9}XW}SQC3~d+WEDGiTS6JS@nv~=q}}D9ORoIpi8EWuCy3zX`RWLl^;hri zenWq$`#9=7tIC7Qa%i~@kLiB;7`-w*TIgZ}|NFB}Qg7jxg3Z${<`O2KiL1FO?>xC$ zJ7Xrzq`X{hL`i?JQfK6Y=r2@G_i#(w#Z!Iq%3yKjQ6hUjIaVE~Az9ur(7}HvV{5ue zx%q%jU#iSO>aZsgSAqskQFV-q4>CMYx^`UBRm?emaLXIE=%|(HV)YziRmYdL`1|Ou zq6Fa+5wL~!U63XNrc(L7F1*{)alC&puuD58Idwosj7wS--e9=8`E3W?<6^&_;=pZp z&hz}Jc33D`8_vm?8gev=)AsTmW?2R18)q#B_AmZFbgdpgI2t>;n#m-XZUV zc;Pq+1+>E44n*q&fY0XMK)3)y2B|@N37#2g`F-l10lKj_3dgNGPTq>&KF%b0bM(t? zn~(WlGX=w91oDh?`@9FdCR5baPjXY6Cpyt)uA|?PX-iXeAH4ltp$RL@ zUEj5|>Z>WzFE6jQ-t?W6voGxGjqtysR!6BXT?*m19BN@e=5*#*Z7VzW)gG~ue`qXTxO&la z|FPiY@Wsv4v;ri{n#-$KelC+2pkt#C4KaQapFw8x3Q`PHy6~a*9K%sF&rlc$y4NM>+d7~kJ26R_@zfw z{r3>TzdX3}QclpvLgCGpt1EZX(C@qyqqNzFr$)5Q+Lq5xxxL(!bpN@+BR!vnw`BD) zwQCKh8=F+uYd&j99ymG>aq*HPlQEM{*<0=SB+ux3X%#i`uU1EN2b^NMGa$koc&s`o zqrp1*#+MZhF_iRos*E@^mLl}EzmHi5SQ}dwn;vWhjutyde5NnvaaX33b{;XM?eMNt zt}s*NAEgrUTQ7oz&*xLGW5Jo(C`o+aqRo`c2rFtnGIKjX%(hNNAmoHYR&H!hjccKq z63gBk-W15~O3wJxrSlYC4_!Fb#N*)~;gfJq_BZ(W2ZLN*y>tc3kEFbENm$lbdP8|) zNRG^xKFpzek|$KzuEaspW8lQ!|p-*dk84#5(B`1SdyJ9q182f)a z=|4{z8PldhxycE#*OsaJ2zjul#Yqddn7n77-Ti?}>vFTo)pPZ6?GGVB z^zwX#B)@mONx5J4-dT%Y{iK)V;CCXvEvw>0N5A~(1z;Bp7c6@;P_^>+BVprMI4>o) zP9<|oU3+-DTvvBQtT360HEv516^B{e0@2vI!=@oeN=v6rZ$Ji!)UCBRHi0fh zHV#S3zNxn9VyIe&ZZahODuSR8CZ~L53<05n?XnrNeVA0VSRI-oJA z+=?UtB0xmJ0!-ExW@fR^pJ(?!djyqt?gC+eY@D(-;X-gsw-+2>j9y77^Iv7+jn&1cs#UCW(oVs~FJ)8@8j=_LA~kL+jTTpvs| zft<;-3rnW~&jJdPpOs~gCNYe?=6?SQ8A@xkU`tL^AC7r^`C*_KvxM^$V1A;!GJK`r zp!HW7Hkm#5AEFEjjzb#+X7gX^3QD{G^jS%@m3i;*AZ8=>+!qD1@?k=Y%xBS*0#ZI^ zG5c!!P1@w|!3A?BgAIwG#Lq+aTFHwX;8??Zx!%G0R``mqMiU|}O z78_!M8lfiWLDR#sKS}e2^kNS{WaPr>L2&bgA`IOhlDrwo^&E*_Q1R zQC@*GhG2L@RuMrHi6UR|USc$a<}0{@({g{|zfJ(Z(J`~N#ht>%FZEQqVX0-@g$%XX z7_GBOhzG-t#47VPdsO#b71HP0aLL@Ze}zhUMT38}c2fVRMv3zAXqG%>F*UbSpO3c* zS^UcF0KxJ`-cVi<>*9AS1YKry1UAQ<`nGA$T%zEal1x_8u5G&GSM7U z6+AMX9_P_7Z_ty{6s)PO{cwJ(py3;PSywQVWi!h+C1n{K%=llC;OE!i@bw%RI3Kmz z0HJbH$rvx!EML^bW2f%acUmz8Mtvf#UJ?D8s;4~$CdwZ!m?$trq`jJGem_JGQ$w%o ziw*;jhZwV^`AkH$^w#X%?VPet^Qdl+*GhnQimOrfyHMq!<-Q+S9ljRk*CZ6N| znuNXrm_W4SS58WeDLrvnvxk>=1bUG)k=fZH%Ezs+kukM#8M=|H4$M}^q^GARBq)+! zplKh|IX#ZT6s2kAuC|a*($LTtK@%S`ibkVD=^q;!-m8RCL#q|~RXFZSZr$JyD43{K z_`o7}i@^>H0s-($W>!5ucm){`_@Q@(IbQ-94Mu{-z&AJzo_DYsG9S1YDiT7&9-^q-c2VqM(cwR( zO_~Jf-=v0;^WXjT=f{G?paHPGZrwVxVWj1LwvT@H ztXQHKboXqBy_)n@qE$hXKxHo&9&$qCY61P#S0KNYVQ2H$6>F0leoE-Q?TC-raG%-j zW4`5k9t7V*4ZQb5d#JBO@b$X1?6ex|xoS(S(%!^fgoPrqX@4HxiYjN8huU z15U69?%KV(BWl&<;*EKC3|XXNRG$+agVH`M^P}GV@8oi>jJQHnx)r3o1VTwGMM&bI zTBt{vm7U!@r9WFi>{Rp?HS42*Z+i0NNq6(BG-?_eYuF$yeRuFGYb|K|Z;cqNu)9t7 z@x5%wFca+uCZ-Q3c3W!^JGN6L8LvC}CG)aFN>s-0@X&Pco731>knEr_L{pscO{*FL zafyq={1xRw-_=*Csi}}%XOjV=HoU?m@oh4Ms(_Nx2c)CVw~=n<n7qo! z5Db*x25t4A1%AC|026!eAKSj6cz>nNOA8T9dDZPiJ?oJbIsEF}nU^b{O()-+SouCM zt}pImyVhJljx(iSE};^4h*BvtTqcnWM0Zp6z3!s7p*%wafGGxeX-Nv#F94V;{2 zAMhEi-zGc?`c|FDpTrCrkR%sW+}tMP^;fgG{uE}jD$#$-#^oeD`hn?X7_o7Gm1eA6@9?;gge2Q83e4()z zMIOpUy41@9&q`2y{`j$IV|9m5e{``uWy`pniee)}T*c0CFgiO>GVu7}Ek@ctY^+W> z?no*61Ldc$kXP44$`4kBU*$ZnxPDDSLXqoq&O}05We!jfPa5bB&)4|7-c#H`0ITo~ z40Q=mUj^%W!t>`2m<_vC@G6+-+*q+e$~(ZSdzEC>5m^~>JnOVY)X}l*Mq7zx4X=B7 zlOrQ>5QT(<9PKS_8w#K1B&$C^8_0ggJ8TtN+vc)*2HP5GbxjT~;+yMFE|*N`c32;7 zl-F>a=nh(5O=KWM5@ohS@xgIb)iKcFLwxQEh64{?9wP35JF_(v`c;U`UKlNWkC{Nt zK^RS2nanE4c&6KFo{1gnsHJ7O4Q<1!X$t=ep^N@mSX?? z>${tDkCGuS^=+)2SEZ_Rr^*x5Twf9rx~FIg>2c-QI#s!<%sw{?^>wqb%oZSTefFlW(?-8s zUS*jH<+IVZebu+E!YI-Qwi`;iyg`+p1rpABMN4`X%Tr91)TU6-g5pv^I z+qi=84UX#z0vfd;YJ_a1GI6W;jSkRk(M4r=?O7@`QkoITTI`u+W>sTfjv7#Bx4m7% zBcy$&m=9FkePZ7pRrb;{pCK`Q44@1v@IK- zpGaOQR#ul9Ep;6nqp%Ikw_bWwBr5vI8?+KnA z!!a3ow;8I(4j+qozQMMLI=k;iux_cuBcAQC6+hExLnq03A@b{!{7u zv&c)x0tcnp0{fHer76ZNKQc-kNZfZTW!yUDh@@w-DW!Uo)T^~ey{aAvQXMS39`I?y zL*KMD3R{2m`J6bmTS_r`S1#W4w zVibo5spa0P5?Qje@Z72NSZ+i4=_PF6BS4X&sd2^4zW~Son_LE2zuxa2oOSfs7o>M- z%?oz^R2+tLAJ?7F{?I=HO z#pZE-omoUG&l8o%U7?2}_;fgAd;Ln$uMhyNXt7vYl(W*-z%{;XGn!=nUcb`P3)rR` zq&?};#Lgl+ixPgSvOH*8v6LheGwO3hr-T z_I};({-fgU?b7Q`LiPKlWp?}iO7`$~6JFjPxN zzkE0xci#H>X-126W|FsZIS1Q%AipJfaNnRdt!RO#i9qefUAyOgffn5!XK~`vxEgSNkY?)1~7wU&^BwNZN87 zmI@O=t0K|@g_4&eL^eM8+3b3>iVTTnvW`+n`&G~X+2=S zB>)Qi@<^}QZdz)XOH$Z6H@0kQd0ROa8Nw~Q(_OX*e}62Or*!GhfuYj!{~n(CAJK}N zcXUzJIi7`vZhvJBbDQmBYxuQ8%QRSoo~bDANt^g!L;HrZx^VFJUFVx3dC}KHZ<=j! z=aFJoX1BZ<5avccth)IP+vZexm$fLfcI|yg<9G(g8xE-gzSBW=fT$2ix=aqEBa^%upziqgdzs**HOY zvK<7JE0xG>zB@duB0qY7KyJaW@Qs)p zGWDhTy*#hv-#tc$$6}ww-|ZF;8LI!7D(=78M73%DMi#@T5{l2HzT7AfQXk6ME=)=g{#WaNJ-zIqO-UUqfJPAs{L-}H-$xAV z6!2VDyXGh#*hB7=857ykD#{UC7S}QVibw1ZWL7;n_~}S*u8^nOxf@29z-;pQl7AaA zmPB*P|NEl7-Kl>>K=s|>TMX5~dZX#b=^tdL25JYB`GwS!AF7Cc7kYr&=h1}`lQLfp zO;SsE&i#AGmdX9lB~RCGDq*N*e@Qnwg~Gt%L8FRWDWG5Y3+6tw+T-|=`Ne&;rkc{z z&fV@~&T3i}Dj4qjMYP9bz-yfWX`W6SIxC7hJZWU9&R8mJZ3d9&ooMW!u#I|(hDV8S zU3lHQuawMJmJW;qi_|!$*e+NSX;R|SDMp1WbeH(YekB9f)u%qEd~Z1xL=tU$d&su? z5a|}p?->K*E_1Axf>Un3o|pe(Dd~TPrwGu{edyl#x0uyS(pE@1V_xJOMr z@;t7(jdaiI9AyB@)Q0sk8zB$_`jKrIapFfHarDP4+n>D2^dke)`Q|Y>1{{@U(!#@Y zJ6m_&oD^lJ!C~=x{fH)KXQl4LuQzvi1Oz54k-v=%4Vp~hk9QtZBCih5W5upsj1at@ zA~rVWZ*FROfQ%)_tZ=;pR)bcJl;~*pwRRJPRRT^3QwTU?698v()A{KHO#}df4QI7BJp$YM|4g-r0LP+T3_(H z6z9zF`|JQKHRwr7K~M5$>}vzS*2NBB#3bB@ zCs&u`=K6EGSKha0a_y(EeG*Oj-a=agk#+iqlxAHlzwdl$2xIq~Kb;}}4#|c0aA!E5 z&F(Ec$9|28c(s)3(Ij9xK4B9>Wo?G2PANB`+-49JSy!jRhn{ zK?Db;NlKD!N)b=Lq%3#Y{a}ePzwA51>fP+p)`+ldheNKy&=BTe=+)^r-u~KkuvO ze|4IOKPHjPh=n12`HbBm@{5jpFO2yu6l{mQ~-*(3lj{X-hbMNy^G|bslUNP*aLUDWJ(G{;EDlFH4R^=(l>J8@#{t5-E_H!MT z!eUwHJP-2h4lv%fXWPzEUsB7>o}RN8IgDa*a?n+PE@mS6KBc2$F1Dr`1nYw@SZfzu z*!B|Nr`J9o2QpdAaRhD69U-(?sH3CG#@n=i#T_6j3JMCIGysq7DoCd zH)520OrH4TBGdx#jo$|33eVX5h~sqT(0^sqh`%P0(qXRgjb8ybTN@D2ws^Cli_sSA zLDjRwOPIl+VT$dxOPdaKy3=3b5A39a6&e<3x^)v&x z^UIf1x3|cDVLfyT9q^J?U)*UT6BBPmtr*VwdFT`n8!_jp6rxG`F^*~0)7J$khP>&AMqLXYALpU_jVvsxD z`Pf!9$$J@V8#CHDfmLge`7n4J$RP*Nn>4nK^N-FN>7QZt|J4Hgb%AK4%5z(AWh;Ul z@+I*tq!&LSttTWXxSCB_xWmJkKV0iugv|uE=L^Nmp^{|XkVEBNpRZ$l7fUB+OH?SVTb{9JBr&k1nq|K z_as=lT+n(78?lxU%I*@XdVU*;9x0+97Rqtp11qIi zwi1eSnA~m{Hztien&mV>d4)H3wD88}y_biY&~Vj;+GZLWsUUdw!p*MZ4y6=1@L04f zq;sja?mGhjOlv2h?i$3U#g9oNyr1U$%~x!sL!iSuu8EqH?b~$+5_B?^$u;O@#T1~R zIjU%BJ>N3h^E3>KttA?CiK-d&&cgt_Wiv{+$7<%Ca6XaRbT5zvC?(MpvepHNqy1jDc!c#I)nKh<32+5jqx`ZCfc%3y`}Q1wE^Xy)0o z9c(fHvq5)qE18FQdlZMTl()*Vo|5(@LXWKOnG&j^<)Ymv>>21D7|LR#q+tcY`z|hm zC>i4;KnwZM)w=VE{a1+FKNNSmjQ7JDL4$9zO)7#)36uh#s|}!2)v+hU^a-SwfXfcS zF%a!qxDFd(SCU9$TiZN}D`E?C2H^5~M?2oe z-K8kC)Z*QZ-$UxNna2GL_TVlq=*(=Co&#|Kh?D%kzsCR%Hn918a0l?=jndc!XCYqj z?%lgG<1q*#&u8XOCgO3?>DjZFz2zO4i3{w2R?tq1VZP#yDAdRQ)x4v zYv>q~t&UQppp4a=W~%Z~pdY+-pI;csHS}XR4;#f5#o@8BOS21?4lHLy3kHcw9vo8; zoAac>+!6S=KnS%#8hlS>Q`RVN#A_sPkq$+xdjDN|NeH=#-9P5J{|qUxwz@h6#c#De zQ1(5odMEpKGlq9TsD^7^xsJg&-@b@eE))+=+6T`}?i@eKL9yq~7_ee0Hf7QN?Fzel zq33E|W_$@%kYYMUEI0uc&(Drzrl+Gm6C4zD_VGLxbM{mF{AF;9p+fm?Ouuy<1sT2R z?v#*a)YZ_~=`n@EM4kQt*P({QN8dX!M%jQb)V9%!9;5OD10{rg&CYf}fMKwXUdn?Q zC{mfP+Z_{n$NC|v`jTBV&3}3UWXRTEeRpc>N%lXzTO^sbeY%X)#TTM*%-q}@Ax55$ z4T|3NFATTk`7ZY5cW^kP zmSBt9MEK+IEu--Xu?PxP8iJ1gep*x9N;>VlanRC`fw!W48%o7 zu8p9%a+pLJJgt&PV%3M2NJvkgKpDInZNL?DsA@yzj1MtYX9;A@*knvhqJMpZ&BFv0 zIy={yrjra!@%W{Ep!QZiSiJYSS{!OsA&SS8w-ozO6e%4({I)gQ#*>E7+4SoT&wfe@ z_z4Y8kY7y~%nue+NRl$XTqH|E7lj-kuoGt3~C00lGb*Wvbp z_6NoG$3O>LF@HHqt^`H1!fpHAw_4}8+xAtzu`eyna+gi|J0jz$K0f5|o2xLpE5Ld55z4jzih#B$@mcIg~5GM z)Mmlt4RiAoQ*5o!eq)odu}O1Tj|P*?V7eu_pT2M*vDB7=FNqn9BE{n}#5E96!8aU< zN0M%?7_CD`IO;&7*yDmOl(-DzRuF|@k4+PH8wWnPj4-^!K3vfSD~D4Ia>}za7MQ_c z0m~%xdWk|E%sAr}YxISr=8E4x26{@J(fe!M_s6V}H!_Nnf8|IlJW9ME6mP%`2DS}P z-b5`VstyLqYd#|!STTk{JZQjvpZ2SOxHmFe{`_Pz(OKS0Jb%RBn*xY(sK@ur*e%#v zJV&pvGGoGZXz$0`#N`l(}FB z@euZ(WJ4Z8GDex}UDn`Hf~_A#Wq1>j5JiSEeqzf5LI`)C7;ID_e~*#;bq*Sq{dr%| z#n9%q;9_$P#W6hEq~Bgs0?y+@SrE_ZJswjHnfWGeV`S1=bfq|-JJ%000(!hUbjh^X z^W8s&VM0Z+HT=(RrIq2Y6ZH#R;cvi-4T0`Qe)@M!i#S)f`(b9kSs$AK$QC0ySaRUO zwB7?5Qr~L4Hb(yS4gE0TY~Eeq6sOS#H8$=hq&TjD8D`4XCRHncZ^3{w8l(A zwh^MDJ-p*8qWw>az7S~f)(ST2)*+xo1HHu}9ftMSB2+?qE-{g0+6oqC3zE@X1IL8B zIXKf7m1)sj+uGWSBOjlXv*(vDTN$n?6|>X2dGW`ms1ZTwMtZeQe0#~(xe2K*#X3)I%{ zoV;|Df`)6@i?nDmA2g?-m5q6z~KC0@(Wak5lQHfzZ0tL?epK-b=y)gT7cjftydT- zz{YUgDug?zF%=&B2f zB4TivdYm4+33Q8CWCljY4|K#t1XR|wF0C&Q<~{JER0Y!q3-cojTcp8b>Vh#e**%YI z4pWN@7!)pND?%KE3mYHlEy3>CXFT{i#By+&%g#1il|gGmzzUoS*JJy@MId9Gryc!z}pxg1NK| z^Ho(<`SGyO?QkzRxO^>Z6xQ$|=K2ih=cd~z&90!!1wPF-tjCArc1kXevoov^T7y_e zzvHG@QE~wi!1`+U$!A;pZ4d^6vK@90l%+r6pAos@?bg%t%aChYTgA?Qj78%>w_^%} zIO1)cS__QwBWgBZaC5rCu%+AX2gTeI1I8eV6H=QzQ^-Nlc5kF#FF&$+S5hhars(sA z@1m^_oIiZHUX7a}fiY1bak1g{vGYZO%?yZ)W}U7x(Q$D8r?9_-~yAD^~iIg#WjwDf3HLG8r`fl|VZ#f1yshKG4*$f5@i{v2xFZ}NWAbG4RFAFRL# zDJ$bF;f7&$nR_82yMxR1?FE(4NY^elR2F+8>LZJo%S`(1bv;-!(&*cW-|&IByow4k z+y!MB$SmiACj+fv-@bkG^(pCWZf^GU^3uz`)QwPYd*sZ_%+%DBM($^p;3rR>czc(C z?|j*^Wxjn#;plkvj58ynqI_fH<8SWei+7rzb1*PqqrC-*H5>&CD_s5u?F&sQSAD$J zGv%1ouwUGL%6%R|v!J-3VG;Ras^SjZaBO0tppcNVii)L~8I7+D5Qhi*P1n=H>GJH} z-Ty8>003WiR~JnUMzQg~N;1?e5^5JyT{ASxT+w_6=bh}xOWdC1nq9=6Ah`>vKDUJn zmoYwn{^6rX@w-`t`S@zu+rxbFk>VikW3juLOd%0g)oqco&2%Q8q$C45+3JZi%F62p z1$)L0_>@9hLOLxcCkH!_hG?*=`0$~b1EDb2WMN(1$-3)~j*hK+;jf&34xeV9fv?0e zG_zgBG!TZP4cPV&4g=3q|4Y2E%Z$LR3?Cm~0$-@lZ5GLSN`*;JNf39+sGU4{_rZgy zxJ41V(KPq9i%?T_4-N=SB@->TUamdTrH9YH+vnnxAcl>Iis}TTUqaw1Eu;l#>jJa3 z3_HEBRd_)`L417tj41NJ_}JLd@$ofOR2zI{LPA2gxw!#ju3x_%V@bL_$!I&|;^N}v z?fq^KRVWGy3ed&1vKzjzN4PDMe)*fWkx}QhYuC^kClO|eHpihMF}PZm4OR)hH*ch%83((&>*Gt%3%md$1l3<1Ev*$RSBi>=(AMBcJdt!` zW@aAl=%_jHig2k@tDPnnmJ{8F?v3<=r?K76x>Re+$jVYJr)2*cxm_4Hg0@K4A44Hy zSjz_&h&)1EqN=`#(-({o(mR8qmYHEUc_0R6! zHqfzM_4&PMb)@daH8m%KGlyC-1`+YzzI_|`lLqsMIz>)&bobo!xXdO7hB&=Vc%DN1 z{CAE;XJ=>UaZBBN_Z8h;FE1e~_c6njxgl{aGDKGQ9q3D4eErNdG>acQcEjIa#niMH z`suGAMwBu4>iq{%yi|x<0pVnbh|p?96)gYJA$6J;$n}5S^x4oN7l7 z9eRV9--JITKHl8SY}d_DR~QRhTiZ*QF3HQwBg1|5YWC^TyRdVVyDSD0bHAkak~R8dg@hX6-0f+jOKk3EAvGVGqxhh&B( zE&wj1jmcn{hG1czke}u1-JkkjhY4?;db`tYB`4Q zsPL<~Ip;w6dw1{JAlJvS+HeBaCka476c{_Ylb@yq&kay*` zU%h&DAh9T6p{20U5J3cNNnl_gi}UE4JDdu0zkcQA=AsWhQYhK65}S}DpLuxwLQQPFU_jLBzMXwyb`I5aTs z%d4TkQ$)n!t=GDt6p5=+G@Cc8YiqyHxubQ!I=QI0c)dD5G9K)`0|ySAY9s(wF33Z{8w_qpK)*|CM5XC@427ax!ex0RLM;9+rmP>Teq6SaYW2lyNz`nb#=`j zj-P~~a)~|r=FJ=JCxQnKv}c&peX55`&nS?OIG(a`jf=B0+JZI3AOF%+RgH8`=fJ{| zVh>X=5Z?tH$GTR(I`b_uPaUw9mex@j^j>#YQg_YG|12=|tV9X$zK(RnJ{Wd~qKXPX zJA+Tn&Ce&+P}B2!Bu3rg`*4w4J6+zys;e{*_Dts9qeo8If_g5I@GPR7*xX&JaVGp) zpyJfzg6ta?m*4$LbyeZYFv+SNgAWQ`fWF#On$Km%mW737@|Et&2^0|UAb7XjghvB` z)l19vi^j&=gUcHewBBy+g9t_?PZs|Rs*AcfDyau{aBy7bbh4UeRAh;^LNTM^T!WFm zjlKO8tclMqZtldCl;h5W2qi-Amkj_D*Weap6RaQjeC*_~ zeG^ypG@|&tp&`ar?jbs|suLa_9v+Z;`{JXKii*l)G)za<*$XDLw6t75wca7k0j>2( z_PE$st4o&#ra>(rBy_6#o}{NV2DL{a1&36JbLUP|6O+wbw(O~Tk&^O2%;D0hQw`JO zy)0t(ukVj(&9C$?spE8udir!bFRy=9FPw+guZvDj2hFF}k;%t-vH%|dGAJ%9+bt%h zyXQUugyMzYv`VVtoyo@ji!mS?dpGV-JkA`3TpDfwaZgpKNL^c7rE=U{hb%&}3oQal zSG0t)E+gHT933??H`hT*1h$OqEl!(txBR%b`{c(F<;SAx(V0xd(%k!Fu3l6c&PW($ zWoqgqNwHSjy0e*|zi46MJU^E`_S_NX_hEza>PpdCHC<*Qi>Z+h50V;z8rdm?azq12=*!SinV0`OE;#?{sJu-DrD@7D>I z(e07p;o%ntM<}nlZ+3eH1c>W$QzsU!`;tgl73Q`~G6fz#DY;hAKWnKIJQ965WRBcXK==aO60%-dBG)}yEol<_>h4eqaTv?qv7wjU6l&gb8jFL9Dwr(IY5hG zhi_6+q$}p{@9mb3NP&|t^4*v~I(_O?v0kFWyev?5bF2BxNR zG6;enGIv~av|FucPx0{1;UYu6n-OQ~52OA+IoznfFw>al@)>832>J*I`hJBOLQ0e* zo<4h~hY&VDzpb+JcDLo|v@;Kj)|yju87V3D9a#nq=agko9l_CrFBy_MwOm6(M@K;h zKMx&PmE$Z4rzK--W;Ru>KcD(Z@Cf?}fRL9jzm#F`&`!}8S+?vtbkzw|U@`baND^Q5 z;>8QL=w%}6W(T`&I2%>QBhG=W)S!Wg}E(^1}91h1bW@N z&q6m+_mhBY6BLQT1(PF<8YR)nXvOXPL=$H z`C0Tl$Oxd`#;kH>sIO1habg!OB9e2W`w>fdBUgdDLGboj`AlNpgbVj1UBT3fu&Utl zZk!3QW1I|Wt*-})wNCZMr{V9j+3?ZGgM7?@L+ml-zT`?2B*0LMFzEwU@y3nX)E0k> zp{5t(y;YKct5Hi+J$bTzXNqHluQZfbTL|sz{@E-?`NXd-&z9W<2zFbo#qgocfiYh&6xXb4+-u(B8O3A4O%V%Mr{w zH*DHeM46!yDoiwVRA$sguSck(^+Hoo1}pxs$D%E_8QZ(LS?eU=@NiZk=B-=% zhK3Yn5JX#^J9ol?$S1hiJ5hW47WJXAp@CW0O3GvuSTM3SHg-3+1w5mIge!PU=mB^ZP0b896QF&{z7vOg_9%Q!ycq6P*PIbiWDTJqy+dlJ3FskyH?;sh`_m8 zph!n$P#4jAX+huk_ESv_rrsn@^<1{KRpU`9K)??lz!nMA0R`WOv#f|l4LL`^c`^9l z=B55x&LB>4!j-YH$ru|O3)l^)u_Fyay}HJvo8_dgE&%t=*jI|C5y$aAvg|qb-wln8 zyAbI$Pa%0+MoF1f@Xc9b-jZkyt6n$9L7WYeW6;Bg?;X!_Za8Xah$J>%iZ$is%Pr*P zh^SVqSRu206BV{Q-`R?--K!AmHP<*`Q258#7;HZipW*VsxKq0}Ar}y{A7yO}nym$X z^1gcv9!pbG6PXZ3f4n_CUr>HUXjpuk>C>kb=&bdgPsR+}gNF}qZ{-6Mr;pFj(2yp# z-eV;4d3oZrFFvk0J$3*H{fDoQGA!?xbeb3&=OSs8NjI%xM#a?Ntrreb$b$!5TB%Q? zqu&)5?+_HMFDmkIl3}I6x@=`&5E2lucXILvLXB!&Wo2c;r_X>uPWN3aZ~qdhA>i=% zq_B?}Hp9@Uq8;k2XA2~Sv6%P=#O?%y`0d+ief=ssMf2VHi|I?~AM9u&d3k?-KkPA5 zYzs77prhi2b{xENZbVG(8ygYPfnAb7fumk_;9_g_9j@1v#!Rcw8D9&cb7kjEoSz zT4cwL;!mF**-^!7qJ~MtXjMNsB5@j!a5y+xA`rI?bXjYX-4H(I{bj zs0s#X&lM~&sWNc|Ei9H!{ymW(tPwc1GMb7^(&sm%nS9bI+7{&+yb=Sdz zkC>`gjTR#4)ylsS7Df~y)P^xzjkI|ZmJUdmg7N`8mDg2U*q0iN1o#C6{Cs^^Q&SVM z+019u@iv|~bA~mpigS|J#i+J+ji4eK>8 z@+az9mM-EXuqit@IZc4sV%NYzP_18o*~$uwbqH~RlF~X_r6*z{?Cf9FM+mLjFM^)G z4L2am8C&uoi9|s|Xary#v2{@};M%>rtg^DF7}QY+S#ppeYh)4k;oi7yJ=>x;BrcZZ zE^+lYc)0izsc+-&ocQ-oQejd{_p?T^f5%gcul)b*Bj;E?oL-kJree3)I(hVnvP_cnnQQ+GNh$Y> diff --git a/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-67-1.png b/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-67-1.png index d85179edf4b11e7b0e6c71ed30ca730f8d7de843..590dcef003026dc863f7a6adee86db4e2dbec3dd 100644 GIT binary patch literal 65982 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

66XX8kb8qVmM9K`ZE-9!T>E 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 literal 59275 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 z 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±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 AR{#J2 diff --git a/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-68-1.png b/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-68-1.png index 429ba5e5fef07f755112870595c2fbea5209ecdb..d85179edf4b11e7b0e6c71ed30ca730f8d7de843 100644 GIT binary patch literal 59275 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 z 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±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 AR{#J2 literal 71697 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 Dru2lw diff --git a/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-69-1.png b/docs/course/05_GatingSets/slides_files/figure-revealjs/unnamed-chunk-69-1.png new file mode 100644 index 0000000000000000000000000000000000000000..429ba5e5fef07f755112870595c2fbea5209ecdb GIT binary patch literal 71697 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 Dru2lw literal 0 HcmV?d00001 diff --git a/docs/search.json b/docs/search.json index af43198..60eaddb 100644 --- a/docs/search.json +++ b/docs/search.json @@ -28,7 +28,7 @@ "href": "course/05_GatingSets/index.html#flowset", "title": "05 - Gating Sets", "section": "flowSet", - "text": "flowSet\nConsequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.\n\nflowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,\n transformation = FALSE)\nflowSet\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nAlternatively, we can designate specific files within “fcs_files” we want to read in using the [] and c() notation style we have encountered previously.\n\nread.flowSet(files=fcs_files[c(1, 3:4)],\n truncate_max_range = FALSE, transformation = FALSE)\n\nA flowSet with 3 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nOn follow-up, we can see that read.flowSet() has created a “flowSet” class object.\n\nclass(flowSet)\n\n[1] \"flowSet\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nWhich we can also confirm by glancing at the right secondary sidebar to see the created Variables within our environment. Applying our investigatory skills from Week 3, we surmise that “flowSet” is another Bioconductor style S4-type object that within its frame slot contains individual “flowFrames”.\n\nIf instead of class() we had used str(), we would have seen a similar output ton what we see in the Variables panel.\n\nstr(flowSet)\n\nFormal class 'flowSet' [package \"flowCore\"] with 2 slots\n ..@ frames :<environment: 0x562242979388> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 1 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr \"Name\"\n .. .. ..@ data :'data.frame': 6 obs. of 1 variable:\n .. .. .. ..$ name: 'AsIs' chr [1:6] \"2025_07_26_AB_02_INF052_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF052_00_SEB.fcs\" \"2025_07_26_AB_02_INF100_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF100_00_SEB.fcs\" ...\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWhile not today’s focus, remember we could access individual components inside the flowSet using the @ accessors covered during Week 3", + "text": "flowSet\nConsequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.\n\nflowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,\n transformation = FALSE)\nflowSet\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nAlternatively, we can designate specific files within “fcs_files” we want to read in using the [] and c() notation style we have encountered previously.\n\nread.flowSet(files=fcs_files[c(1, 3:4)],\n truncate_max_range = FALSE, transformation = FALSE)\n\nA flowSet with 3 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nOn follow-up, we can see that read.flowSet() has created a “flowSet” class object.\n\nclass(flowSet)\n\n[1] \"flowSet\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nWhich we can also confirm by glancing at the right secondary sidebar to see the created Variables within our environment. Applying our investigatory skills from Week 3, we surmise that “flowSet” is another Bioconductor style S4-type object that within its frame slot contains individual “flowFrames”.\n\nIf instead of class() we had used str(), we would have seen a similar output ton what we see in the Variables panel.\n\nstr(flowSet)\n\nFormal class 'flowSet' [package \"flowCore\"] with 2 slots\n ..@ frames :<environment: 0x563aececb920> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 1 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr \"Name\"\n .. .. ..@ data :'data.frame': 6 obs. of 1 variable:\n .. .. .. ..$ name: 'AsIs' chr [1:6] \"2025_07_26_AB_02_INF052_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF052_00_SEB.fcs\" \"2025_07_26_AB_02_INF100_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF100_00_SEB.fcs\" ...\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWhile not today’s focus, remember we could access individual components inside the flowSet using the @ accessors covered during Week 3", "crumbs": [ "About", "Intro to R", @@ -40,7 +40,7 @@ "href": "course/05_GatingSets/index.html#memory-usage", "title": "05 - Gating Sets", "section": "Memory Usage", - "text": "Memory Usage\nBoth “flowFrame” and “flowSet” objects were implemented in the flowCore package, which is the oldest extant flow cytometry R package on Bioconductor. Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as “flowFrame” and “flowSet” objects.\nOne consideration of this method is the contents of your .fcs files are read into your computer’s random access memory (RAM). While for individual .fcs files or small experiments this present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM.\nTo build some contextual understanding of the problem, let’s learn how to check how much memory is being used by our individual variables/objects within our R session. We will primarily use the lobstr R packages obj_size() function, as it better handles evaluating complicated objects than base R’s object.size() function.\nWe can check and see the memory usage by our flowFrame object\n\n# Base R\nobject.size(flowFrame)\n\n3570896 bytes\n\n# install.packages(\"lobstr\") # CRAN\nlibrary(lobstr)\nobj_size(flowFrame)\n\n3.53 MB\n\n\nAnd contrast to the greater ammount of space occupied by our flowSet object (which contains multiple flowFrames)\n\nobj_size(flowSet)\n\n20.99 MB\n\n\nIf we were curious how much memory total we are using within R at the current moment, we can check using the mem_used() function:\n\nmem_used()\n\n146.98 MB\n\n\nUltimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. You can check programmatically how much RAM you have available, although the specific function you will need to use will depend on your computer’s operating system.\nTo simplify the process, here is an additional example of where a conditional can prove useful, allowing us to check in an operating system specific manner. It takes the output of the Sys.info() function, namely the “sysname” argument and then retrieves the relavent function.\n\nOperatingSystem <- Sys.info()[[\"sysname\"]]\n\nif (OperatingSystem == \"Windows\") { # Windows\n memory.limit()\n\n } else if (OperatingSystem == \"Darwin\") { # MacOS\n system(\"top -l 1 | grep PhysMem\")\n\n } else if (OperatingSystem == \"Linux\") { # Linux\n system(\"free -h\")\n\n } else {message(\"A wild FreeBSD-User appears\")}\n\nWhen evaluating the returned outputs, primarily consider the total, used and free outputs.", + "text": "Memory Usage\nBoth “flowFrame” and “flowSet” objects were implemented in the flowCore package, which is the oldest extant flow cytometry R package on Bioconductor. Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as “flowFrame” and “flowSet” objects.\nOne consideration of this method is the contents of your .fcs files are read into your computer’s random access memory (RAM). While for individual .fcs files or small experiments this present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM.\nTo build some contextual understanding of the problem, let’s learn how to check how much memory is being used by our individual variables/objects within our R session. We will primarily use the lobstr R packages obj_size() function, as it better handles evaluating complicated objects than base R’s object.size() function.\nWe can check and see the memory usage by our flowFrame object\n\n# Base R\nobject.size(flowFrame)\n\n3570896 bytes\n\n# install.packages(\"lobstr\") # CRAN\nlibrary(lobstr)\nobj_size(flowFrame)\n\n3.53 MB\n\n\nAnd contrast to the greater ammount of space occupied by our flowSet object (which contains multiple flowFrames)\n\nobj_size(flowSet)\n\n20.99 MB\n\n\nIf we were curious how much memory total we are using within R at the current moment, we can check using the mem_used() function:\n\nmem_used()\n\n146.99 MB\n\n\nUltimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. There are various ways you can check programmatically how much RAM your computer has available, although the specific functions will vary depending on your computers operating system, since they often involve system-level code outside R. Using the ps R package’s ps_system_memory() function is one of the easier ways for Windows users.\nTo simplify the process, here is an additional example of where a conditional can prove useful, allowing us to check in an operating system specific manner. It takes the output of the Sys.info() function, namely the “sysname” argument and then retrieves the relavent function.\n\nOperatingSystem <- Sys.info()[[\"sysname\"]]\n\nif (OperatingSystem == \"Windows\") { # Windows\n Memory <- ps::ps_system_memory()\n message(\"Total GB \", round(Memory$total / 1024^3, 2))\n message(\"Free GB \", round(Memory$free / 1024^3, 2))\n\n } else if (OperatingSystem == \"Darwin\") { # MacOS\n system(\"top -l 1 | grep PhysMem\")\n\n } else if (OperatingSystem == \"Linux\") { # Linux\n system(\"free -h\")\n\n } else {message(\"A wild FreeBSD-User appears\")}\n\n\n# install.packages(\"ps\") # CRAN\nlibrary(ps)\nMemory <- ps::ps_system_memory()\nmessage(\"Total GB \", round(Memory$total / 1024^3, 2))\n\nTotal GB 62.5\n\nmessage(\"Free GB \", round(Memory$free / 1024^3, 2))\n\nFree GB 54.36", "crumbs": [ "About", "Intro to R", @@ -64,7 +64,7 @@ "href": "course/05_GatingSets/index.html#cytoset", "title": "05 - Gating Sets", "section": "cytoset", - "text": "cytoset\nAs well as “cytoset” to handle multiple .fcs files.\n\ncytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\ncytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nclass(cytoset)\n\n[1] \"cytoset\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nUnlike “flowFrame” and “flowSet”, when we run str(), for “cytoframe” and “cytoset” objects we don’t get back quite as much information.\n\nstr(cytoframe)\n\nFormal class 'cytoframe' [package \"flowWorkspace\"] with 5 slots\n ..@ pointer :<externalptr> \n ..@ use.exprs : logi TRUE\n ..@ exprs : num[0 , 0 ] \n ..@ parameters :Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 5 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr [1:5] \"Name of Parameter\" \"Description of Parameter\" \"Range of Parameter\" \"Minimum Parameter Value after Transformation\" ...\n .. .. ..@ data :'data.frame': 0 obs. of 5 variables:\n .. .. .. ..$ name : chr(0) \n .. .. .. ..$ description: chr(0) \n .. .. .. ..$ range : num(0) \n .. .. .. ..$ minRange : num(0) \n .. .. .. ..$ maxRange : num(0) \n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n ..@ description:List of 1\n .. ..$ note: chr \"empty\"\n\n\n\nstr(cytoset)\n\nFormal class 'cytoset' [package \"flowWorkspace\"] with 3 slots\n ..@ pointer :<externalptr> \n ..@ frames :<environment: 0x56224cc6eed0> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 0 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr(0) \n .. .. ..@ data :'data.frame': 0 obs. of 0 variables\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\nThis is similarly the case when glancing at the right secondary side bar, as the respective objects under variables appear to have empty matrices where normally we would have seen the MFI values.\n\nDue to flowWorkspace use of pointers, the missing data remains stored on the drive, only being retrieved right before it is required. This reduces the overall RAM utilization. Let’s double check the differences in memory utilization for flowFrame/cytoframe:\n\nobj_size(flowFrame)\n\n3.53 MB\n\n\n\nobj_size(cytoframe)\n\n5.40 kB\n\n\nAnd similarly the case for flowSet and cytoset:\n\nobj_size(flowSet)\n\n20.99 MB\n\n\n\nobj_size(cytoset)\n\n3.88 kB\n\n\nAdditionally, with computer hardware increasingly switching from spinning disk hard-drives to faster solid state drives, the performance penalty previously experienced when not running from RAM is not as large of a concern as in previous years.", + "text": "cytoset\nAs well as “cytoset” to handle multiple .fcs files.\n\ncytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\ncytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nclass(cytoset)\n\n[1] \"cytoset\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nUnlike “flowFrame” and “flowSet”, when we run str(), for “cytoframe” and “cytoset” objects we don’t get back quite as much information.\n\nstr(cytoframe)\n\nFormal class 'cytoframe' [package \"flowWorkspace\"] with 5 slots\n ..@ pointer :<externalptr> \n ..@ use.exprs : logi TRUE\n ..@ exprs : num[0 , 0 ] \n ..@ parameters :Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 5 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr [1:5] \"Name of Parameter\" \"Description of Parameter\" \"Range of Parameter\" \"Minimum Parameter Value after Transformation\" ...\n .. .. ..@ data :'data.frame': 0 obs. of 5 variables:\n .. .. .. ..$ name : chr(0) \n .. .. .. ..$ description: chr(0) \n .. .. .. ..$ range : num(0) \n .. .. .. ..$ minRange : num(0) \n .. .. .. ..$ maxRange : num(0) \n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n ..@ description:List of 1\n .. ..$ note: chr \"empty\"\n\n\n\nstr(cytoset)\n\nFormal class 'cytoset' [package \"flowWorkspace\"] with 3 slots\n ..@ pointer :<externalptr> \n ..@ frames :<environment: 0x563af7c4ddd8> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 0 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr(0) \n .. .. ..@ data :'data.frame': 0 obs. of 0 variables\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\nThis is similarly the case when glancing at the right secondary side bar, as the respective objects under variables appear to have empty matrices where normally we would have seen the MFI values.\n\nDue to flowWorkspace use of pointers, the missing data remains stored on the drive, only being retrieved right before it is required. This reduces the overall RAM utilization. Let’s double check the differences in memory utilization for flowFrame/cytoframe:\n\nobj_size(flowFrame)\n\n3.53 MB\n\n\n\nobj_size(cytoframe)\n\n5.40 kB\n\n\nAnd similarly the case for flowSet and cytoset:\n\nobj_size(flowSet)\n\n20.99 MB\n\n\n\nobj_size(cytoset)\n\n3.88 kB\n\n\nAdditionally, with computer hardware increasingly switching from spinning disk hard-drives to faster solid state drives, the performance penalty previously experienced when not running from RAM is not as large of a concern as in previous years.", "crumbs": [ "About", "Intro to R", @@ -76,7 +76,7 @@ "href": "course/05_GatingSets/index.html#interconverting", "title": "05 - Gating Sets", "section": "Interconverting", - "text": "Interconverting\nDespite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed.\nTo go from a flowFrame to a cytoframe, we can use the flowFrame_to_cytoframe() function\n\nConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)\nConvertedToCytoframe\n\ncytoframe object 'file5caf7fc9092c'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\nrow names(0):\n\n\n\nobj_size(ConvertedToCytoframe)\n\n5.40 kB\n\n\nTo go from a cytoframe to a flowFrame, we can use the cytoframe_to_flowFrame() function\n\nConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)\nConvertedToFlowframe\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\n\nobj_size(ConvertedToFlowframe)\n\n3.53 MB\n\n\nTo go from a flowSet to a cytoSet, we can use the flowSet_to_cytoset() funciton\n\nConvertedToCytoset <- flowSet_to_cytoset(flowSet)\nConvertedToCytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nobj_size(ConvertedToCytoset)\n\n3.88 kB\n\n\nTo go from a cytoSet to a flowSet, we can use the cytoset_to_flowSet() function.\n\nConvertedToFlowset <- cytoset_to_flowSet(flowSet)\nConvertedToFlowset\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\n\nobj_size(ConvertedToFlowset)\n\n20.99 MB", + "text": "Interconverting\nDespite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed.\nTo go from a flowFrame to a cytoframe, we can use the flowFrame_to_cytoframe() function\n\nConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)\nConvertedToCytoframe\n\ncytoframe object 'file20997f38fefd'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\nrow names(0):\n\n\n\nobj_size(ConvertedToCytoframe)\n\n5.40 kB\n\n\nTo go from a cytoframe to a flowFrame, we can use the cytoframe_to_flowFrame() function\n\nConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)\nConvertedToFlowframe\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\n\nobj_size(ConvertedToFlowframe)\n\n3.53 MB\n\n\nTo go from a flowSet to a cytoSet, we can use the flowSet_to_cytoset() funciton\n\nConvertedToCytoset <- flowSet_to_cytoset(flowSet)\nConvertedToCytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nobj_size(ConvertedToCytoset)\n\n3.88 kB\n\n\nTo go from a cytoSet to a flowSet, we can use the cytoset_to_flowSet() function.\n\nConvertedToFlowset <- cytoset_to_flowSet(flowSet)\nConvertedToFlowset\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\n\nobj_size(ConvertedToFlowset)\n\n20.99 MB", "crumbs": [ "About", "Intro to R", @@ -112,7 +112,7 @@ "href": "course/05_GatingSets/index.html#system-time", "title": "05 - Gating Sets", "section": "System Time", - "text": "System Time\nEspecially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so.\nOne, using the system.time() function from base R, in which we surround whatever line of code we wish to evaluate in {}\n\nsystem.time({\n\nflowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\")\n\n})\n\n user system elapsed \n 0.491 0.016 0.507 \n\n\nAlternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.\n\n# install.packages(\"bench\") # CRAN\nlibrary(bench)\n\n\nmark(\n Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\"),\n iterations= 5\n )\n\n# A tibble: 1 × 6\n expression min median `itr/sec` mem_alloc `gc/sec`\n <bch:expr> <bch> <bch:> <dbl> <bch:byt> <dbl>\n1 Test <- flowjo_to_gatingset(ws = ws… 497ms 511ms 1.97 13.3KB 0", + "text": "System Time\nEspecially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so.\nOne, using the system.time() function from base R, in which we surround whatever line of code we wish to evaluate in {}\n\nsystem.time({\n\nflowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\")\n\n})\n\n user system elapsed \n 0.466 0.004 0.471 \n\n\nAlternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.\n\n# install.packages(\"bench\") # CRAN\nlibrary(bench)\n\n\nmark(\n Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\"),\n iterations= 5\n )\n\n# A tibble: 1 × 6\n expression min median `itr/sec` mem_alloc `gc/sec`\n <bch:expr> <bch> <bch:> <dbl> <bch:byt> <dbl>\n1 Test <- flowjo_to_gatingset(ws = ws… 461ms 466ms 2.13 13.3KB 0", "crumbs": [ "About", "Intro to R", From 983125f3c74bede661679e603284fde17de2b6e2 Mon Sep 17 00:00:00 2001 From: David Rach Date: Tue, 3 Mar 2026 23:15:24 -0500 Subject: [PATCH 4/8] Initial recording link --- course/05_GatingSets/index.qmd | 4 +++- docs/course/03_InsideFCSFile/index.html | 8 ++++---- docs/course/03_InsideFCSFile/slides.html | 8 ++++---- docs/course/05_GatingSets/index.html | 16 +++++++++------- docs/course/05_GatingSets/slides.html | 10 +++++----- docs/search.json | 12 ++++++------ 6 files changed, 31 insertions(+), 27 deletions(-) diff --git a/course/05_GatingSets/index.qmd b/course/05_GatingSets/index.qmd index 56a2ab5..419da8e 100644 --- a/course/05_GatingSets/index.qmd +++ b/course/05_GatingSets/index.qmd @@ -13,7 +13,9 @@ toc-depth: 5 [![AGPL-3.0](https://img.shields.io/badge/license-AGPLv3-blue)](https://www.gnu.org/licenses/agpl-3.0.en.html) [![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](http://creativecommons.org/licenses/by-sa/4.0/) ::: -For the YouTube livestream schedule, see [here](https://www.youtube.com/@cytometryinr) +For the YouTube livestream recording, see [here](https://youtu.be/PzgCxfevDX4?t=231) + + For screen-shot slides, click [here](/course/05_GatingSets/slides.qmd) diff --git a/docs/course/03_InsideFCSFile/index.html b/docs/course/03_InsideFCSFile/index.html index 28825e6..814109e 100644 --- a/docs/course/03_InsideFCSFile/index.html +++ b/docs/course/03_InsideFCSFile/index.html @@ -546,8 +546,8 @@

flowCore

plotly::ggplotly(plot)
-
- +
+
@@ -593,8 +593,8 @@

flowCore

plotly::ggplotly(plot)
-
- +
+

flowCore is also one of the many Bioconductor packages maintained by Mike Jiang. In many ways (as those who completed the optional take-home problems for Week #1 know) reminiscent of this xkcd comic:

diff --git a/docs/course/03_InsideFCSFile/slides.html b/docs/course/03_InsideFCSFile/slides.html index f04bfa0..1b5ba26 100644 --- a/docs/course/03_InsideFCSFile/slides.html +++ b/docs/course/03_InsideFCSFile/slides.html @@ -485,8 +485,8 @@

flowCore


-
- +
+
@@ -497,8 +497,8 @@

flowCore


-
- +
+
diff --git a/docs/course/05_GatingSets/index.html b/docs/course/05_GatingSets/index.html index d4940eb..59ea684 100644 --- a/docs/course/05_GatingSets/index.html +++ b/docs/course/05_GatingSets/index.html @@ -377,7 +377,9 @@

05 - Gating Sets

AGPL-3.0 CC BY-SA 4.0

-

For the YouTube livestream schedule, see here

+

For the YouTube livestream recording, see here

+

For screen-shot slides, click here



@@ -535,7 +537,7 @@

flowSet

str(flowSet)
Formal class 'flowSet' [package "flowCore"] with 2 slots
-  ..@ frames   :<environment: 0x563aececb920> 
+  ..@ frames   :<environment: 0x5617460232d0> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 1 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr "Name"
@@ -627,7 +629,7 @@ 

Memory Usage

message("Free GB ", round(Memory$free / 1024^3, 2))
-
Free GB 54.36
+
Free GB 51.84
@@ -739,7 +741,7 @@

cytoset

Formal class 'cytoset' [package "flowWorkspace"] with 3 slots
   ..@ pointer  :<externalptr> 
-  ..@ frames   :<environment: 0x563af7c4ddd8> 
+  ..@ frames   :<environment: 0x561750db1b50> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 0 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr(0) 
@@ -789,7 +791,7 @@ 

Interconverting

ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
 ConvertedToCytoframe
-
cytoframe object 'file20997f38fefd'
+
cytoframe object 'file6791640d7f7'
 with 10000 cells and 43 observables:
                name      desc       range  minRange    maxRange
 $P1            Time        NA     878.809         0     878.809
@@ -1017,7 +1019,7 @@ 

System Time

})
   user  system elapsed 
-  0.466   0.004   0.471 
+ 0.971 0.016 1.004

Alternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.

@@ -1034,7 +1036,7 @@

System Time

# A tibble: 1 × 6
   expression                             min median `itr/sec` mem_alloc `gc/sec`
   <bch:expr>                           <bch> <bch:>     <dbl> <bch:byt>    <dbl>
-1 Test <- flowjo_to_gatingset(ws = ws… 461ms  466ms      2.13    13.3KB        0
+1 Test <- flowjo_to_gatingset(ws = ws… 765ms 786ms 1.25 13.3KB 0
diff --git a/docs/course/05_GatingSets/slides.html b/docs/course/05_GatingSets/slides.html index 1460624..dcc68ca 100644 --- a/docs/course/05_GatingSets/slides.html +++ b/docs/course/05_GatingSets/slides.html @@ -663,7 +663,7 @@

flowSet

str(flowSet)
Formal class 'flowSet' [package "flowCore"] with 2 slots
-  ..@ frames   :<environment: 0x559e41e52918> 
+  ..@ frames   :<environment: 0x563ea305c918> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 1 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr "Name"
@@ -1126,7 +1126,7 @@ 

cytoset

Formal class 'cytoset' [package "flowWorkspace"] with 3 slots
   ..@ pointer  :<externalptr> 
-  ..@ frames   :<environment: 0x559e4d1e2f48> 
+  ..@ frames   :<environment: 0x563eae3ecae8> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 0 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr(0) 
@@ -1299,7 +1299,7 @@ 

Interconverting

ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
 ConvertedToCytoframe
-
cytoframe object 'file1fe95b5196ca'
+
cytoframe object 'file66975368aac3'
 with 10000 cells and 43 observables:
                name      desc       range  minRange    maxRange
 $P1            Time        NA     878.809         0     878.809
@@ -1945,7 +1945,7 @@ 

System Time

})
   user  system elapsed 
-  0.462   0.005   0.467 
+ 0.915 0.016 0.936
@@ -1985,7 +1985,7 @@

System Time

# A tibble: 1 × 6
   expression                             min median `itr/sec` mem_alloc `gc/sec`
   <bch:expr>                           <bch> <bch:>     <dbl> <bch:byt>    <dbl>
-1 Test <- flowjo_to_gatingset(ws = ws… 455ms  460ms      2.17    13.3KB        0
+1 Test <- flowjo_to_gatingset(ws = ws… 745ms 756ms 1.29 13.3KB 0
diff --git a/docs/search.json b/docs/search.json index 60eaddb..1a69095 100644 --- a/docs/search.json +++ b/docs/search.json @@ -4,7 +4,7 @@ "href": "course/05_GatingSets/index.html", "title": "05 - Gating Sets", "section": "", - "text": "For the YouTube livestream schedule, see here\nFor screen-shot slides, click here", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", "crumbs": [ "About", "Intro to R", @@ -28,7 +28,7 @@ "href": "course/05_GatingSets/index.html#flowset", "title": "05 - Gating Sets", "section": "flowSet", - "text": "flowSet\nConsequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.\n\nflowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,\n transformation = FALSE)\nflowSet\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nAlternatively, we can designate specific files within “fcs_files” we want to read in using the [] and c() notation style we have encountered previously.\n\nread.flowSet(files=fcs_files[c(1, 3:4)],\n truncate_max_range = FALSE, transformation = FALSE)\n\nA flowSet with 3 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nOn follow-up, we can see that read.flowSet() has created a “flowSet” class object.\n\nclass(flowSet)\n\n[1] \"flowSet\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nWhich we can also confirm by glancing at the right secondary sidebar to see the created Variables within our environment. Applying our investigatory skills from Week 3, we surmise that “flowSet” is another Bioconductor style S4-type object that within its frame slot contains individual “flowFrames”.\n\nIf instead of class() we had used str(), we would have seen a similar output ton what we see in the Variables panel.\n\nstr(flowSet)\n\nFormal class 'flowSet' [package \"flowCore\"] with 2 slots\n ..@ frames :<environment: 0x563aececb920> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 1 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr \"Name\"\n .. .. ..@ data :'data.frame': 6 obs. of 1 variable:\n .. .. .. ..$ name: 'AsIs' chr [1:6] \"2025_07_26_AB_02_INF052_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF052_00_SEB.fcs\" \"2025_07_26_AB_02_INF100_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF100_00_SEB.fcs\" ...\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWhile not today’s focus, remember we could access individual components inside the flowSet using the @ accessors covered during Week 3", + "text": "flowSet\nConsequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.\n\nflowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,\n transformation = FALSE)\nflowSet\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nAlternatively, we can designate specific files within “fcs_files” we want to read in using the [] and c() notation style we have encountered previously.\n\nread.flowSet(files=fcs_files[c(1, 3:4)],\n truncate_max_range = FALSE, transformation = FALSE)\n\nA flowSet with 3 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nOn follow-up, we can see that read.flowSet() has created a “flowSet” class object.\n\nclass(flowSet)\n\n[1] \"flowSet\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nWhich we can also confirm by glancing at the right secondary sidebar to see the created Variables within our environment. Applying our investigatory skills from Week 3, we surmise that “flowSet” is another Bioconductor style S4-type object that within its frame slot contains individual “flowFrames”.\n\nIf instead of class() we had used str(), we would have seen a similar output ton what we see in the Variables panel.\n\nstr(flowSet)\n\nFormal class 'flowSet' [package \"flowCore\"] with 2 slots\n ..@ frames :<environment: 0x5617460232d0> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 1 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr \"Name\"\n .. .. ..@ data :'data.frame': 6 obs. of 1 variable:\n .. .. .. ..$ name: 'AsIs' chr [1:6] \"2025_07_26_AB_02_INF052_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF052_00_SEB.fcs\" \"2025_07_26_AB_02_INF100_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF100_00_SEB.fcs\" ...\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWhile not today’s focus, remember we could access individual components inside the flowSet using the @ accessors covered during Week 3", "crumbs": [ "About", "Intro to R", @@ -40,7 +40,7 @@ "href": "course/05_GatingSets/index.html#memory-usage", "title": "05 - Gating Sets", "section": "Memory Usage", - "text": "Memory Usage\nBoth “flowFrame” and “flowSet” objects were implemented in the flowCore package, which is the oldest extant flow cytometry R package on Bioconductor. Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as “flowFrame” and “flowSet” objects.\nOne consideration of this method is the contents of your .fcs files are read into your computer’s random access memory (RAM). While for individual .fcs files or small experiments this present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM.\nTo build some contextual understanding of the problem, let’s learn how to check how much memory is being used by our individual variables/objects within our R session. We will primarily use the lobstr R packages obj_size() function, as it better handles evaluating complicated objects than base R’s object.size() function.\nWe can check and see the memory usage by our flowFrame object\n\n# Base R\nobject.size(flowFrame)\n\n3570896 bytes\n\n# install.packages(\"lobstr\") # CRAN\nlibrary(lobstr)\nobj_size(flowFrame)\n\n3.53 MB\n\n\nAnd contrast to the greater ammount of space occupied by our flowSet object (which contains multiple flowFrames)\n\nobj_size(flowSet)\n\n20.99 MB\n\n\nIf we were curious how much memory total we are using within R at the current moment, we can check using the mem_used() function:\n\nmem_used()\n\n146.99 MB\n\n\nUltimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. There are various ways you can check programmatically how much RAM your computer has available, although the specific functions will vary depending on your computers operating system, since they often involve system-level code outside R. Using the ps R package’s ps_system_memory() function is one of the easier ways for Windows users.\nTo simplify the process, here is an additional example of where a conditional can prove useful, allowing us to check in an operating system specific manner. It takes the output of the Sys.info() function, namely the “sysname” argument and then retrieves the relavent function.\n\nOperatingSystem <- Sys.info()[[\"sysname\"]]\n\nif (OperatingSystem == \"Windows\") { # Windows\n Memory <- ps::ps_system_memory()\n message(\"Total GB \", round(Memory$total / 1024^3, 2))\n message(\"Free GB \", round(Memory$free / 1024^3, 2))\n\n } else if (OperatingSystem == \"Darwin\") { # MacOS\n system(\"top -l 1 | grep PhysMem\")\n\n } else if (OperatingSystem == \"Linux\") { # Linux\n system(\"free -h\")\n\n } else {message(\"A wild FreeBSD-User appears\")}\n\n\n# install.packages(\"ps\") # CRAN\nlibrary(ps)\nMemory <- ps::ps_system_memory()\nmessage(\"Total GB \", round(Memory$total / 1024^3, 2))\n\nTotal GB 62.5\n\nmessage(\"Free GB \", round(Memory$free / 1024^3, 2))\n\nFree GB 54.36", + "text": "Memory Usage\nBoth “flowFrame” and “flowSet” objects were implemented in the flowCore package, which is the oldest extant flow cytometry R package on Bioconductor. Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as “flowFrame” and “flowSet” objects.\nOne consideration of this method is the contents of your .fcs files are read into your computer’s random access memory (RAM). While for individual .fcs files or small experiments this present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM.\nTo build some contextual understanding of the problem, let’s learn how to check how much memory is being used by our individual variables/objects within our R session. We will primarily use the lobstr R packages obj_size() function, as it better handles evaluating complicated objects than base R’s object.size() function.\nWe can check and see the memory usage by our flowFrame object\n\n# Base R\nobject.size(flowFrame)\n\n3570896 bytes\n\n# install.packages(\"lobstr\") # CRAN\nlibrary(lobstr)\nobj_size(flowFrame)\n\n3.53 MB\n\n\nAnd contrast to the greater ammount of space occupied by our flowSet object (which contains multiple flowFrames)\n\nobj_size(flowSet)\n\n20.99 MB\n\n\nIf we were curious how much memory total we are using within R at the current moment, we can check using the mem_used() function:\n\nmem_used()\n\n146.99 MB\n\n\nUltimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. There are various ways you can check programmatically how much RAM your computer has available, although the specific functions will vary depending on your computers operating system, since they often involve system-level code outside R. Using the ps R package’s ps_system_memory() function is one of the easier ways for Windows users.\nTo simplify the process, here is an additional example of where a conditional can prove useful, allowing us to check in an operating system specific manner. It takes the output of the Sys.info() function, namely the “sysname” argument and then retrieves the relavent function.\n\nOperatingSystem <- Sys.info()[[\"sysname\"]]\n\nif (OperatingSystem == \"Windows\") { # Windows\n Memory <- ps::ps_system_memory()\n message(\"Total GB \", round(Memory$total / 1024^3, 2))\n message(\"Free GB \", round(Memory$free / 1024^3, 2))\n\n } else if (OperatingSystem == \"Darwin\") { # MacOS\n system(\"top -l 1 | grep PhysMem\")\n\n } else if (OperatingSystem == \"Linux\") { # Linux\n system(\"free -h\")\n\n } else {message(\"A wild FreeBSD-User appears\")}\n\n\n# install.packages(\"ps\") # CRAN\nlibrary(ps)\nMemory <- ps::ps_system_memory()\nmessage(\"Total GB \", round(Memory$total / 1024^3, 2))\n\nTotal GB 62.5\n\nmessage(\"Free GB \", round(Memory$free / 1024^3, 2))\n\nFree GB 51.84", "crumbs": [ "About", "Intro to R", @@ -64,7 +64,7 @@ "href": "course/05_GatingSets/index.html#cytoset", "title": "05 - Gating Sets", "section": "cytoset", - "text": "cytoset\nAs well as “cytoset” to handle multiple .fcs files.\n\ncytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\ncytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nclass(cytoset)\n\n[1] \"cytoset\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nUnlike “flowFrame” and “flowSet”, when we run str(), for “cytoframe” and “cytoset” objects we don’t get back quite as much information.\n\nstr(cytoframe)\n\nFormal class 'cytoframe' [package \"flowWorkspace\"] with 5 slots\n ..@ pointer :<externalptr> \n ..@ use.exprs : logi TRUE\n ..@ exprs : num[0 , 0 ] \n ..@ parameters :Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 5 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr [1:5] \"Name of Parameter\" \"Description of Parameter\" \"Range of Parameter\" \"Minimum Parameter Value after Transformation\" ...\n .. .. ..@ data :'data.frame': 0 obs. of 5 variables:\n .. .. .. ..$ name : chr(0) \n .. .. .. ..$ description: chr(0) \n .. .. .. ..$ range : num(0) \n .. .. .. ..$ minRange : num(0) \n .. .. .. ..$ maxRange : num(0) \n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n ..@ description:List of 1\n .. ..$ note: chr \"empty\"\n\n\n\nstr(cytoset)\n\nFormal class 'cytoset' [package \"flowWorkspace\"] with 3 slots\n ..@ pointer :<externalptr> \n ..@ frames :<environment: 0x563af7c4ddd8> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 0 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr(0) \n .. .. ..@ data :'data.frame': 0 obs. of 0 variables\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\nThis is similarly the case when glancing at the right secondary side bar, as the respective objects under variables appear to have empty matrices where normally we would have seen the MFI values.\n\nDue to flowWorkspace use of pointers, the missing data remains stored on the drive, only being retrieved right before it is required. This reduces the overall RAM utilization. Let’s double check the differences in memory utilization for flowFrame/cytoframe:\n\nobj_size(flowFrame)\n\n3.53 MB\n\n\n\nobj_size(cytoframe)\n\n5.40 kB\n\n\nAnd similarly the case for flowSet and cytoset:\n\nobj_size(flowSet)\n\n20.99 MB\n\n\n\nobj_size(cytoset)\n\n3.88 kB\n\n\nAdditionally, with computer hardware increasingly switching from spinning disk hard-drives to faster solid state drives, the performance penalty previously experienced when not running from RAM is not as large of a concern as in previous years.", + "text": "cytoset\nAs well as “cytoset” to handle multiple .fcs files.\n\ncytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\ncytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nclass(cytoset)\n\n[1] \"cytoset\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nUnlike “flowFrame” and “flowSet”, when we run str(), for “cytoframe” and “cytoset” objects we don’t get back quite as much information.\n\nstr(cytoframe)\n\nFormal class 'cytoframe' [package \"flowWorkspace\"] with 5 slots\n ..@ pointer :<externalptr> \n ..@ use.exprs : logi TRUE\n ..@ exprs : num[0 , 0 ] \n ..@ parameters :Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 5 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr [1:5] \"Name of Parameter\" \"Description of Parameter\" \"Range of Parameter\" \"Minimum Parameter Value after Transformation\" ...\n .. .. ..@ data :'data.frame': 0 obs. of 5 variables:\n .. .. .. ..$ name : chr(0) \n .. .. .. ..$ description: chr(0) \n .. .. .. ..$ range : num(0) \n .. .. .. ..$ minRange : num(0) \n .. .. .. ..$ maxRange : num(0) \n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n ..@ description:List of 1\n .. ..$ note: chr \"empty\"\n\n\n\nstr(cytoset)\n\nFormal class 'cytoset' [package \"flowWorkspace\"] with 3 slots\n ..@ pointer :<externalptr> \n ..@ frames :<environment: 0x561750db1b50> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 0 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr(0) \n .. .. ..@ data :'data.frame': 0 obs. of 0 variables\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\nThis is similarly the case when glancing at the right secondary side bar, as the respective objects under variables appear to have empty matrices where normally we would have seen the MFI values.\n\nDue to flowWorkspace use of pointers, the missing data remains stored on the drive, only being retrieved right before it is required. This reduces the overall RAM utilization. Let’s double check the differences in memory utilization for flowFrame/cytoframe:\n\nobj_size(flowFrame)\n\n3.53 MB\n\n\n\nobj_size(cytoframe)\n\n5.40 kB\n\n\nAnd similarly the case for flowSet and cytoset:\n\nobj_size(flowSet)\n\n20.99 MB\n\n\n\nobj_size(cytoset)\n\n3.88 kB\n\n\nAdditionally, with computer hardware increasingly switching from spinning disk hard-drives to faster solid state drives, the performance penalty previously experienced when not running from RAM is not as large of a concern as in previous years.", "crumbs": [ "About", "Intro to R", @@ -76,7 +76,7 @@ "href": "course/05_GatingSets/index.html#interconverting", "title": "05 - Gating Sets", "section": "Interconverting", - "text": "Interconverting\nDespite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed.\nTo go from a flowFrame to a cytoframe, we can use the flowFrame_to_cytoframe() function\n\nConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)\nConvertedToCytoframe\n\ncytoframe object 'file20997f38fefd'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\nrow names(0):\n\n\n\nobj_size(ConvertedToCytoframe)\n\n5.40 kB\n\n\nTo go from a cytoframe to a flowFrame, we can use the cytoframe_to_flowFrame() function\n\nConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)\nConvertedToFlowframe\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\n\nobj_size(ConvertedToFlowframe)\n\n3.53 MB\n\n\nTo go from a flowSet to a cytoSet, we can use the flowSet_to_cytoset() funciton\n\nConvertedToCytoset <- flowSet_to_cytoset(flowSet)\nConvertedToCytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nobj_size(ConvertedToCytoset)\n\n3.88 kB\n\n\nTo go from a cytoSet to a flowSet, we can use the cytoset_to_flowSet() function.\n\nConvertedToFlowset <- cytoset_to_flowSet(flowSet)\nConvertedToFlowset\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\n\nobj_size(ConvertedToFlowset)\n\n20.99 MB", + "text": "Interconverting\nDespite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed.\nTo go from a flowFrame to a cytoframe, we can use the flowFrame_to_cytoframe() function\n\nConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)\nConvertedToCytoframe\n\ncytoframe object 'file6791640d7f7'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\nrow names(0):\n\n\n\nobj_size(ConvertedToCytoframe)\n\n5.40 kB\n\n\nTo go from a cytoframe to a flowFrame, we can use the cytoframe_to_flowFrame() function\n\nConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)\nConvertedToFlowframe\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\n\nobj_size(ConvertedToFlowframe)\n\n3.53 MB\n\n\nTo go from a flowSet to a cytoSet, we can use the flowSet_to_cytoset() funciton\n\nConvertedToCytoset <- flowSet_to_cytoset(flowSet)\nConvertedToCytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nobj_size(ConvertedToCytoset)\n\n3.88 kB\n\n\nTo go from a cytoSet to a flowSet, we can use the cytoset_to_flowSet() function.\n\nConvertedToFlowset <- cytoset_to_flowSet(flowSet)\nConvertedToFlowset\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\n\nobj_size(ConvertedToFlowset)\n\n20.99 MB", "crumbs": [ "About", "Intro to R", @@ -112,7 +112,7 @@ "href": "course/05_GatingSets/index.html#system-time", "title": "05 - Gating Sets", "section": "System Time", - "text": "System Time\nEspecially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so.\nOne, using the system.time() function from base R, in which we surround whatever line of code we wish to evaluate in {}\n\nsystem.time({\n\nflowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\")\n\n})\n\n user system elapsed \n 0.466 0.004 0.471 \n\n\nAlternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.\n\n# install.packages(\"bench\") # CRAN\nlibrary(bench)\n\n\nmark(\n Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\"),\n iterations= 5\n )\n\n# A tibble: 1 × 6\n expression min median `itr/sec` mem_alloc `gc/sec`\n <bch:expr> <bch> <bch:> <dbl> <bch:byt> <dbl>\n1 Test <- flowjo_to_gatingset(ws = ws… 461ms 466ms 2.13 13.3KB 0", + "text": "System Time\nEspecially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so.\nOne, using the system.time() function from base R, in which we surround whatever line of code we wish to evaluate in {}\n\nsystem.time({\n\nflowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\")\n\n})\n\n user system elapsed \n 0.971 0.016 1.004 \n\n\nAlternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.\n\n# install.packages(\"bench\") # CRAN\nlibrary(bench)\n\n\nmark(\n Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\"),\n iterations= 5\n )\n\n# A tibble: 1 × 6\n expression min median `itr/sec` mem_alloc `gc/sec`\n <bch:expr> <bch> <bch:> <dbl> <bch:byt> <dbl>\n1 Test <- flowjo_to_gatingset(ws = ws… 765ms 786ms 1.25 13.3KB 0", "crumbs": [ "About", "Intro to R", From b214343b7adcfd1bc101075bfd3af748482432f0 Mon Sep 17 00:00:00 2001 From: David Rach Date: Wed, 4 Mar 2026 15:40:47 -0500 Subject: [PATCH 5/8] Two typos for 05, got rid of the Intro to R dropdown redirect, couple additional slide separators for slide05 due to small margins --- _quarto.yml | 1 - course/05_GatingSets/index.qmd | 2 +- course/05_GatingSets/slides.qmd | 6 ++- .../00_BonusContent/Immport/images/index.html | 2 +- .../PullConflicts/UpdatedPullRequest.html | 2 +- .../00_BonusContent/PullConflicts/index.html | 2 +- docs/course/00_BonusContent/index.html | 2 +- docs/course/00_Floreada/index.html | 6 +-- docs/course/00_Git/index.html | 2 +- docs/course/00_GitHub/index.html | 2 +- docs/course/00_Homeworks/index.html | 2 +- docs/course/00_Positron/index.html | 2 +- docs/course/00_Quarto/index.html | 2 +- docs/course/00_WorkstationSetup/Linux.html | 2 +- docs/course/00_WorkstationSetup/MacOS.html | 2 +- docs/course/00_WorkstationSetup/Windows.html | 2 +- docs/course/00_WorkstationSetup/index.html | 2 +- docs/course/01_InstallingRPackages/index.html | 6 +-- docs/course/02_FilePaths/Downsampler.html | 2 +- docs/course/02_FilePaths/index.html | 6 +-- docs/course/03_InsideFCSFile/index.html | 10 ++--- docs/course/03_InsideFCSFile/slides.html | 8 ++-- .../04_IntroToTidyverse/BonusContent.html | 2 +- docs/course/04_IntroToTidyverse/index.html | 2 +- docs/course/05_GatingSets/Downsampling.html | 2 +- docs/course/05_GatingSets/index.html | 16 ++++---- docs/course/05_GatingSets/slides.html | 18 ++++++--- docs/course/index.html | 2 +- docs/search.json | 39 ++++++++++++------- 29 files changed, 86 insertions(+), 68 deletions(-) diff --git a/_quarto.yml b/_quarto.yml index 0d4b92d..9bb39c0 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -63,7 +63,6 @@ website: - text: "00 - Floreada" href: course/00_Floreada/index.qmd - section: "Intro to R" - href: course/01_InstallingRPackages/index.qmd contents: - text: "01 - Installing R Packages" href: course/01_InstallingRPackages/index.qmd diff --git a/course/05_GatingSets/index.qmd b/course/05_GatingSets/index.qmd index 419da8e..817b696 100644 --- a/course/05_GatingSets/index.qmd +++ b/course/05_GatingSets/index.qmd @@ -154,7 +154,7 @@ While not today's focus, remember we could access individual components inside t Both "flowFrame" and "flowSet" objects were implemented in the `flowCore` package, which is the [oldest](/course/03_InsideFCSFile/#flowcore) extant flow cytometry R package on [Bioconductor](https://www.bioconductor.org/packages/release/bioc/html/flowCore.html). Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as "flowFrame" and "flowSet" objects. -One consideration of this method is the contents of your .fcs files are read into your computer's random access memory [(RAM)](https://en.wikipedia.org/wiki/Random-access_memory). While for individual .fcs files or small experiments this present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM. +One consideration of this method is the contents of your .fcs files are read into your computer's random access memory [(RAM)](https://en.wikipedia.org/wiki/Random-access_memory). While for individual .fcs files or small experiments this will not present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM. To build some contextual understanding of the problem, let's learn how to check how much memory is being used by our individual variables/objects within our R session. We will primarily use the `lobstr` R packages `obj_size()` function, as it better handles evaluating complicated objects than base R's `object.size()` function. diff --git a/course/05_GatingSets/slides.qmd b/course/05_GatingSets/slides.qmd index e51edc0..51f3032 100644 --- a/course/05_GatingSets/slides.qmd +++ b/course/05_GatingSets/slides.qmd @@ -268,7 +268,7 @@ Both "flowFrame" and "flowSet" objects were implemented in the `flowCore` packag ::: {.fragment} ::: {.callout-tip title="."} -One consideration of this method is the contents of your .fcs files are read into your computer's random access memory [(RAM)](https://en.wikipedia.org/wiki/Random-access_memory). While for individual .fcs files or small experiments this present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM. +One consideration of this method is the contents of your .fcs files are read into your computer's random access memory [(RAM)](https://en.wikipedia.org/wiki/Random-access_memory). While for individual .fcs files or small experiments this will not present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM. ::: ::: @@ -582,6 +582,8 @@ ConvertedToCytoframe ::: +--- + ::: {.fragment} ```{r} obj_size(ConvertedToCytoframe) @@ -605,6 +607,8 @@ ConvertedToFlowframe ::: +--- + ::: {.fragment} ```{r} obj_size(ConvertedToFlowframe) diff --git a/docs/course/00_BonusContent/Immport/images/index.html b/docs/course/00_BonusContent/Immport/images/index.html index 748afa5..0801bc5 100644 --- a/docs/course/00_BonusContent/Immport/images/index.html +++ b/docs/course/00_BonusContent/Immport/images/index.html @@ -212,7 +212,7 @@ + diff --git a/docs/course/00_BonusContent/PullConflicts/UpdatedPullRequest.html b/docs/course/00_BonusContent/PullConflicts/UpdatedPullRequest.html index 32d8125..f701eaf 100644 --- a/docs/course/00_BonusContent/PullConflicts/UpdatedPullRequest.html +++ b/docs/course/00_BonusContent/PullConflicts/UpdatedPullRequest.html @@ -283,6 +283,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_BonusContent/PullConflicts/index.html b/docs/course/00_BonusContent/PullConflicts/index.html index c76480e..f756ca1 100644 --- a/docs/course/00_BonusContent/PullConflicts/index.html +++ b/docs/course/00_BonusContent/PullConflicts/index.html @@ -283,6 +283,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_BonusContent/index.html b/docs/course/00_BonusContent/index.html index dc30952..14a51a5 100644 --- a/docs/course/00_BonusContent/index.html +++ b/docs/course/00_BonusContent/index.html @@ -248,6 +248,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_Floreada/index.html b/docs/course/00_Floreada/index.html index 32e908d..84067c3 100644 --- a/docs/course/00_Floreada/index.html +++ b/docs/course/00_Floreada/index.html @@ -250,6 +250,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_Git/index.html b/docs/course/00_Git/index.html index 0f0b1fb..6def236 100644 --- a/docs/course/00_Git/index.html +++ b/docs/course/00_Git/index.html @@ -285,6 +285,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_GitHub/index.html b/docs/course/00_GitHub/index.html index 026d39b..9212aba 100644 --- a/docs/course/00_GitHub/index.html +++ b/docs/course/00_GitHub/index.html @@ -249,6 +249,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_Homeworks/index.html b/docs/course/00_Homeworks/index.html index aebce44..bb70f84 100644 --- a/docs/course/00_Homeworks/index.html +++ b/docs/course/00_Homeworks/index.html @@ -250,6 +250,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_Positron/index.html b/docs/course/00_Positron/index.html index f386992..ffb0e77 100644 --- a/docs/course/00_Positron/index.html +++ b/docs/course/00_Positron/index.html @@ -250,6 +250,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_Quarto/index.html b/docs/course/00_Quarto/index.html index 37c94cc..74761bb 100644 --- a/docs/course/00_Quarto/index.html +++ b/docs/course/00_Quarto/index.html @@ -250,6 +250,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_WorkstationSetup/Linux.html b/docs/course/00_WorkstationSetup/Linux.html index 443bdc0..af249ea 100644 --- a/docs/course/00_WorkstationSetup/Linux.html +++ b/docs/course/00_WorkstationSetup/Linux.html @@ -283,6 +283,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_WorkstationSetup/MacOS.html b/docs/course/00_WorkstationSetup/MacOS.html index 154d92f..d659143 100644 --- a/docs/course/00_WorkstationSetup/MacOS.html +++ b/docs/course/00_WorkstationSetup/MacOS.html @@ -283,6 +283,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_WorkstationSetup/Windows.html b/docs/course/00_WorkstationSetup/Windows.html index 639e16d..938d63a 100644 --- a/docs/course/00_WorkstationSetup/Windows.html +++ b/docs/course/00_WorkstationSetup/Windows.html @@ -248,6 +248,12 @@ 05 - Gating Sets + + diff --git a/docs/course/00_WorkstationSetup/index.html b/docs/course/00_WorkstationSetup/index.html index 2f2566e..62c7dea 100644 --- a/docs/course/00_WorkstationSetup/index.html +++ b/docs/course/00_WorkstationSetup/index.html @@ -250,6 +250,12 @@ 05 - Gating Sets + + diff --git a/docs/course/01_InstallingRPackages/index.html b/docs/course/01_InstallingRPackages/index.html index 0d1d48f..fd8a475 100644 --- a/docs/course/01_InstallingRPackages/index.html +++ b/docs/course/01_InstallingRPackages/index.html @@ -285,6 +285,12 @@ 05 - Gating Sets + + @@ -524,7 +530,7 @@

sessionInfo()

sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -550,8 +556,8 @@ 

sessionInfo()

[1] BiocStyle_2.38.0 loaded via a namespace (and not attached): - [1] htmlwidgets_1.6.4 BiocManager_1.30.27 compiler_4.5.2 - [4] fastmap_1.2.0 cli_3.6.5 tools_4.5.2 + [1] htmlwidgets_1.6.4 BiocManager_1.30.27 compiler_4.5.3 + [4] fastmap_1.2.0 cli_3.6.5 tools_4.5.3 [7] htmltools_0.5.9 otel_0.2.0 yaml_2.3.12 [10] rmarkdown_2.30 knitr_1.51 jsonlite_2.0.0 [13] xfun_0.56 digest_0.6.39 rlang_1.1.7 @@ -666,7 +672,7 @@

Attaching p
sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -697,7 +703,7 @@ 

Attaching p [7] glue_1.8.0 tibble_3.3.1 knitr_1.51 [10] pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 [13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 -[16] vctrs_0.7.1 compiler_4.5.2 tools_4.5.2 +[16] vctrs_0.7.1 compiler_4.5.3 tools_4.5.3 [19] evaluate_1.0.5 pillar_1.11.1 yaml_2.3.12 [22] otel_0.2.0 BiocManager_1.30.27 rlang_1.1.7 [25] jsonlite_2.0.0 htmlwidgets_1.6.4

@@ -739,7 +745,7 @@

Unattaching

sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -770,7 +776,7 @@ 

Unattaching

[7] glue_1.8.0 tibble_3.3.1 knitr_1.51 [10] pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 [13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 -[16] vctrs_0.7.1 compiler_4.5.2 tools_4.5.2 +[16] vctrs_0.7.1 compiler_4.5.3 tools_4.5.3 [19] evaluate_1.0.5 pillar_1.11.1 yaml_2.3.12 [22] otel_0.2.0 BiocManager_1.30.27 rlang_1.1.7 [25] jsonlite_2.0.0 htmlwidgets_1.6.4
@@ -940,7 +946,7 @@

Installing fr
sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -967,7 +973,7 @@ 

Installing fr loaded via a namespace (and not attached): [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 - [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 + [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.3 [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 [10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 [13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 @@ -976,17 +982,17 @@

Installing fr [22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 [25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 [28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 -[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 +[31] tools_4.5.3 parallel_4.5.3 dplyr_1.2.0 [34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 [37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 -[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 +[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.3 [43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 [46] htmlwidgets_1.6.4 IRanges_2.44.0 clue_0.3-66 -[49] cluster_2.1.8.1 pkgconfig_2.0.3 pillar_1.11.1 +[49] cluster_2.1.8.2 pkgconfig_2.0.3 pillar_1.11.1 [52] gtable_0.3.6 data.table_1.18.2.1 glue_1.8.0 [55] xfun_0.56 tibble_3.3.1 tidyselect_1.2.1 [58] knitr_1.51 farver_2.1.2 rjson_0.2.23 -[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.2 +[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.3 [64] S7_0.2.1

@@ -1113,7 +1119,7 @@

Insta
sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -1140,7 +1146,7 @@ 

Insta loaded via a namespace (and not attached): [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 - [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 + [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.3 [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 [10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 [13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 @@ -1149,17 +1155,17 @@

Insta [22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 [25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 [28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 -[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 +[31] tools_4.5.3 parallel_4.5.3 dplyr_1.2.0 [34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 [37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 -[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 +[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.3 [43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 [46] htmlwidgets_1.6.4 IRanges_2.44.0 clue_0.3-66 -[49] cluster_2.1.8.1 pkgconfig_2.0.3 pillar_1.11.1 +[49] cluster_2.1.8.2 pkgconfig_2.0.3 pillar_1.11.1 [52] gtable_0.3.6 data.table_1.18.2.1 glue_1.8.0 [55] xfun_0.56 tibble_3.3.1 tidyselect_1.2.1 [58] knitr_1.51 farver_2.1.2 rjson_0.2.23 -[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.2 +[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.3 [64] S7_0.2.1

diff --git a/docs/course/01_InstallingRPackages/slides.html b/docs/course/01_InstallingRPackages/slides.html index 56585c6..53af795 100644 --- a/docs/course/01_InstallingRPackages/slides.html +++ b/docs/course/01_InstallingRPackages/slides.html @@ -758,7 +758,7 @@

sessionInfo()

sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -781,7 +781,7 @@ 

sessionInfo()

[1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): - [1] compiler_4.5.2 fastmap_1.2.0 cli_3.6.5 tools_4.5.2 + [1] compiler_4.5.3 fastmap_1.2.0 cli_3.6.5 tools_4.5.3 [5] htmltools_0.5.9 otel_0.2.0 yaml_2.3.12 rmarkdown_2.30 [9] knitr_1.51 jsonlite_2.0.0 xfun_0.56 digest_0.6.39 [13] rlang_1.1.7 evaluate_1.0.5
@@ -1105,7 +1105,7 @@

Attaching packages via library()

sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -1135,7 +1135,7 @@ 

Attaching packages via library()

[5] xfun_0.56 magrittr_2.0.4 glue_1.8.0 tibble_3.3.1 [9] knitr_1.51 pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 [13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 vctrs_0.7.1 -[17] compiler_4.5.2 tools_4.5.2 evaluate_1.0.5 pillar_1.11.1 +[17] compiler_4.5.3 tools_4.5.3 evaluate_1.0.5 pillar_1.11.1 [21] yaml_2.3.12 otel_0.2.0 rlang_1.1.7 jsonlite_2.0.0
@@ -1258,7 +1258,7 @@

Unattaching

sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -1285,7 +1285,7 @@ 

Unattaching

[5] xfun_0.56 magrittr_2.0.4 glue_1.8.0 tibble_3.3.1 [9] knitr_1.51 pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 [13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 vctrs_0.7.1 -[17] compiler_4.5.2 tools_4.5.2 evaluate_1.0.5 pillar_1.11.1 +[17] compiler_4.5.3 tools_4.5.3 evaluate_1.0.5 pillar_1.11.1 [21] yaml_2.3.12 otel_0.2.0 rlang_1.1.7 jsonlite_2.0.0
@@ -1817,7 +1817,7 @@

Installing from Bioconductor

sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -1844,7 +1844,7 @@ 

Installing from Bioconductor

loaded via a namespace (and not attached): [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 - [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 + [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.3 [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 [10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 [13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 @@ -1853,17 +1853,17 @@

Installing from Bioconductor

[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 [25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 [28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 -[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 +[31] tools_4.5.3 parallel_4.5.3 dplyr_1.2.0 [34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 [37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 -[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 +[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.3 [43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 -[46] IRanges_2.44.0 clue_0.3-66 cluster_2.1.8.1 +[46] IRanges_2.44.0 clue_0.3-66 cluster_2.1.8.2 [49] pkgconfig_2.0.3 pillar_1.11.1 gtable_0.3.6 [52] data.table_1.18.2.1 glue_1.8.0 xfun_0.56 [55] tibble_3.3.1 tidyselect_1.2.1 knitr_1.51 [58] farver_2.1.2 rjson_0.2.23 htmltools_0.5.9 -[61] rmarkdown_2.30 compiler_4.5.2 S7_0.2.1
+[61] rmarkdown_2.30 compiler_4.5.3 S7_0.2.1
@@ -2237,7 +2237,7 @@

Installing Specific-Package Versions

sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -2264,7 +2264,7 @@ 

Installing Specific-Package Versions

loaded via a namespace (and not attached): [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 - [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 + [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.3 [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 [10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 [13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 @@ -2273,17 +2273,17 @@

Installing Specific-Package Versions

[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 [25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 [28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 -[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 +[31] tools_4.5.3 parallel_4.5.3 dplyr_1.2.0 [34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 [37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 -[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 +[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.3 [43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 -[46] IRanges_2.44.0 clue_0.3-66 cluster_2.1.8.1 +[46] IRanges_2.44.0 clue_0.3-66 cluster_2.1.8.2 [49] pkgconfig_2.0.3 pillar_1.11.1 gtable_0.3.6 [52] data.table_1.18.2.1 glue_1.8.0 xfun_0.56 [55] tibble_3.3.1 tidyselect_1.2.1 knitr_1.51 [58] farver_2.1.2 rjson_0.2.23 htmltools_0.5.9 -[61] rmarkdown_2.30 compiler_4.5.2 S7_0.2.1
+[61] rmarkdown_2.30 compiler_4.5.3 S7_0.2.1
diff --git a/docs/course/01_InstallingRPackages/slides_inperson.html b/docs/course/01_InstallingRPackages/slides_inperson.html index adee48e..756a446 100644 --- a/docs/course/01_InstallingRPackages/slides_inperson.html +++ b/docs/course/01_InstallingRPackages/slides_inperson.html @@ -483,7 +483,7 @@

sessionInfo()

sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -506,7 +506,7 @@ 

sessionInfo()

[1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): - [1] compiler_4.5.2 fastmap_1.2.0 cli_3.6.5 tools_4.5.2 + [1] compiler_4.5.3 fastmap_1.2.0 cli_3.6.5 tools_4.5.3 [5] htmltools_0.5.9 otel_0.2.0 yaml_2.3.12 rmarkdown_2.30 [9] knitr_1.51 jsonlite_2.0.0 xfun_0.56 digest_0.6.39 [13] rlang_1.1.7 evaluate_1.0.5
@@ -830,7 +830,7 @@

Attaching packages via library()

sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -860,7 +860,7 @@ 

Attaching packages via library()

[5] xfun_0.56 magrittr_2.0.4 glue_1.8.0 tibble_3.3.1 [9] knitr_1.51 pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 [13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 vctrs_0.7.1 -[17] compiler_4.5.2 tools_4.5.2 evaluate_1.0.5 pillar_1.11.1 +[17] compiler_4.5.3 tools_4.5.3 evaluate_1.0.5 pillar_1.11.1 [21] yaml_2.3.12 otel_0.2.0 rlang_1.1.7 jsonlite_2.0.0
@@ -1335,7 +1335,7 @@

Installing from Bioconductor

sessionInfo()
-
R version 4.5.2 (2025-10-31)
+
R version 4.5.3 (2026-03-11)
 Platform: x86_64-pc-linux-gnu
 Running under: Debian GNU/Linux 13 (trixie)
 
@@ -1362,7 +1362,7 @@ 

Installing from Bioconductor

loaded via a namespace (and not attached): [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 - [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 + [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.3 [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 [10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 [13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 @@ -1371,17 +1371,17 @@

Installing from Bioconductor

[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 [25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 [28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 -[31] tools_4.5.2 parallel_4.5.2 colorspace_2.1-2 +[31] tools_4.5.3 parallel_4.5.3 colorspace_2.1-2 [34] ggplot2_4.0.2 GetoptLong_1.1.0 BiocGenerics_0.56.0 [37] vctrs_0.7.1 R6_2.6.1 png_0.1-8 -[40] matrixStats_1.5.0 stats4_4.5.2 lifecycle_1.0.5 +[40] matrixStats_1.5.0 stats4_4.5.3 lifecycle_1.0.5 [43] flowCore_2.22.1 S4Vectors_0.48.0 IRanges_2.44.0 -[46] clue_0.3-66 cluster_2.1.8.1 pkgconfig_2.0.3 +[46] clue_0.3-66 cluster_2.1.8.2 pkgconfig_2.0.3 [49] pillar_1.11.1 gtable_0.3.6 data.table_1.18.2.1 [52] glue_1.8.0 xfun_0.56 tibble_3.3.1 [55] tidyselect_1.2.1 knitr_1.51 farver_2.1.2 [58] rjson_0.2.23 htmltools_0.5.9 rmarkdown_2.30 -[61] compiler_4.5.2 S7_0.2.1
+[61] compiler_4.5.3 S7_0.2.1
diff --git a/docs/course/02_FilePaths/Downsampler.html b/docs/course/02_FilePaths/Downsampler.html index 420d5c3..18178ff 100644 --- a/docs/course/02_FilePaths/Downsampler.html +++ b/docs/course/02_FilePaths/Downsampler.html @@ -282,6 +282,12 @@ 05 - Gating Sets
+ + diff --git a/docs/course/02_FilePaths/index.html b/docs/course/02_FilePaths/index.html index 68d4a9f..6860200 100644 --- a/docs/course/02_FilePaths/index.html +++ b/docs/course/02_FilePaths/index.html @@ -285,6 +285,12 @@ 05 - Gating Sets

+ + diff --git a/docs/course/03_InsideFCSFile/index.html b/docs/course/03_InsideFCSFile/index.html index 83ed0f3..89cc3ab 100644 --- a/docs/course/03_InsideFCSFile/index.html +++ b/docs/course/03_InsideFCSFile/index.html @@ -294,6 +294,12 @@ 05 - Gating Sets
+ + @@ -546,8 +552,8 @@

flowCore

plotly::ggplotly(plot)
-
- +
+
@@ -593,8 +599,8 @@

flowCore

plotly::ggplotly(plot)

-
- +
+

flowCore is also one of the many Bioconductor packages maintained by Mike Jiang. In many ways (as those who completed the optional take-home problems for Week #1 know) reminiscent of this xkcd comic:

diff --git a/docs/course/03_InsideFCSFile/slides.html b/docs/course/03_InsideFCSFile/slides.html index a99ebef..35e3afc 100644 --- a/docs/course/03_InsideFCSFile/slides.html +++ b/docs/course/03_InsideFCSFile/slides.html @@ -485,8 +485,8 @@

flowCore


-
- +
+
@@ -497,8 +497,8 @@

flowCore


-
- +
+
diff --git a/docs/course/04_IntroToTidyverse/BonusContent.html b/docs/course/04_IntroToTidyverse/BonusContent.html index b89f25e..6b3eb9f 100644 --- a/docs/course/04_IntroToTidyverse/BonusContent.html +++ b/docs/course/04_IntroToTidyverse/BonusContent.html @@ -283,6 +283,12 @@ 05 - Gating Sets + + diff --git a/docs/course/04_IntroToTidyverse/index.html b/docs/course/04_IntroToTidyverse/index.html index 523a09f..690ec45 100644 --- a/docs/course/04_IntroToTidyverse/index.html +++ b/docs/course/04_IntroToTidyverse/index.html @@ -285,6 +285,12 @@ 05 - Gating Sets + + diff --git a/docs/course/05_GatingSets/Downsampling.html b/docs/course/05_GatingSets/Downsampling.html index 0d73e82..729a79c 100644 --- a/docs/course/05_GatingSets/Downsampling.html +++ b/docs/course/05_GatingSets/Downsampling.html @@ -282,6 +282,12 @@ 05 - Gating Sets + + diff --git a/docs/course/05_GatingSets/index.html b/docs/course/05_GatingSets/index.html index e696490..763f3b0 100644 --- a/docs/course/05_GatingSets/index.html +++ b/docs/course/05_GatingSets/index.html @@ -67,7 +67,7 @@ - + @@ -285,6 +285,12 @@ 05 - Gating Sets + + @@ -537,7 +543,7 @@

flowSet

str(flowSet)
Formal class 'flowSet' [package "flowCore"] with 2 slots
-  ..@ frames   :<environment: 0x560d90048618> 
+  ..@ frames   :<environment: 0x55855d56b440> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 1 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr "Name"
@@ -629,7 +635,7 @@ 

Memory Usage

message("Free GB ", round(Memory$free / 1024^3, 2))
-
Free GB 53.49
+
Free GB 52.13
@@ -741,7 +747,7 @@

cytoset

Formal class 'cytoset' [package "flowWorkspace"] with 3 slots
   ..@ pointer  :<externalptr> 
-  ..@ frames   :<environment: 0x560d9ade0fc8> 
+  ..@ frames   :<environment: 0x5585682fd140> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 0 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr(0) 
@@ -791,7 +797,7 @@ 

Interconverting

ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
 ConvertedToCytoframe
-
cytoframe object 'file382b177c06ea'
+
cytoframe object 'file3df916651526'
 with 10000 cells and 43 observables:
                name      desc       range  minRange    maxRange
 $P1            Time        NA     878.809         0     878.809
@@ -1019,7 +1025,7 @@ 

System Time

})
   user  system elapsed 
-  0.554   0.004   0.559 
+ 0.608 0.020 0.631

Alternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.

@@ -1036,7 +1042,7 @@

System Time

# A tibble: 1 × 6
   expression                             min median `itr/sec` mem_alloc `gc/sec`
   <bch:expr>                           <bch> <bch:>     <dbl> <bch:byt>    <dbl>
-1 Test <- flowjo_to_gatingset(ws = ws… 539ms  550ms      1.78    13.3KB        0
+1 Test <- flowjo_to_gatingset(ws = ws… 536ms 542ms 1.76 13.3KB 0
@@ -1192,7 +1198,7 @@

packageVersion

packageVersion("ggcyto")
-
[1] '1.39.1'
+
[1] '1.39.3'

If you were able to retrieve the following package versions (or greater”) for ggplot2 and ggcyto, you should be all set and can skip the subsequent reinstallation steps.

@@ -1760,8 +1766,8 @@

Take-home Problems

diff --git a/docs/course/05_GatingSets/slides.html b/docs/course/05_GatingSets/slides.html index d1d5981..feb608e 100644 --- a/docs/course/05_GatingSets/slides.html +++ b/docs/course/05_GatingSets/slides.html @@ -663,7 +663,7 @@

flowSet

str(flowSet)
Formal class 'flowSet' [package "flowCore"] with 2 slots
-  ..@ frames   :<environment: 0x55684288f168> 
+  ..@ frames   :<environment: 0x557c16753070> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 1 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr "Name"
@@ -1126,7 +1126,7 @@ 

cytoset

Formal class 'cytoset' [package "flowWorkspace"] with 3 slots
   ..@ pointer  :<externalptr> 
-  ..@ frames   :<environment: 0x55684dc35038> 
+  ..@ frames   :<environment: 0x557c21ac49f8> 
   ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
   .. .. ..@ varMetadata      :'data.frame': 0 obs. of  1 variable:
   .. .. .. ..$ labelDescription: chr(0) 
@@ -1299,7 +1299,7 @@ 

Interconverting

ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
 ConvertedToCytoframe
-
cytoframe object 'file376c7b6c7cf1'
+
cytoframe object 'file3d545cb6d20'
 with 10000 cells and 43 observables:
                name      desc       range  minRange    maxRange
 $P1            Time        NA     878.809         0     878.809
@@ -1951,7 +1951,7 @@ 

System Time

})
   user  system elapsed 
-  0.508   0.008   0.518 
+ 0.626 0.000 0.628
@@ -1991,7 +1991,7 @@

System Time

# A tibble: 1 × 6
   expression                             min median `itr/sec` mem_alloc `gc/sec`
   <bch:expr>                           <bch> <bch:>     <dbl> <bch:byt>    <dbl>
-1 Test <- flowjo_to_gatingset(ws = ws… 515ms  528ms      1.88    13.3KB        0
+1 Test <- flowjo_to_gatingset(ws = ws… 515ms 529ms 1.81 13.3KB 0
@@ -2325,7 +2325,7 @@

packageVersion

packageVersion("ggcyto")
-
[1] '1.39.1'
+
[1] '1.39.3'
diff --git a/docs/course/06_Visualizing/images/00_DplyrMessage.png b/docs/course/06_Visualizing/images/00_DplyrMessage.png new file mode 100644 index 0000000000000000000000000000000000000000..7536820ec300525ee2765b937def1a7c4d5d7fee GIT binary patch literal 25995 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 RE>EGbG#@h}!EDy1{|9+j$Ho8v literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/images/03_MappingSlot.png b/docs/course/06_Visualizing/images/03_MappingSlot.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a149997eb6086dcdb5230f66ef963c7b7af4ce GIT binary patch literal 27423 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 EU)y;CCIA2c literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/images/TakeAway.jpg b/docs/course/06_Visualizing/images/TakeAway.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eecf2d9034a6038afaecb99b4757e01efff88c73 GIT binary patch literal 281823 zcmbTdbyOTp6el_mEVu*>4grD&cSu5TCqV~Ea2O;68{7f}4-ggxLS?e44fu<)=BAXQURRRUmOU;sWoZh!{_;I$&y z!4?2eRpkcY0RR9DfI}qK;~oH@d#wKvCIIvI)BkbC;|T!pxO-WO$h6PduJrumUj2FrJWMJoEyX9wA{r z;{6Zu{~`>`$2sEQ;yuMDc_*B$1v~({xIJsVOi-?MeOGrv7yi-(CR#8=Z|3Tlt z(8$=t%G$=(&fdY%-NVz%8|>p7_BA{r@>^7NQu2?K)U==J8F~2yg+;|BrDZj>b+Gz| z#-`@(p5DIxfx)5Ssp*;7x%q`fI0Ct`x%GE@XLk>EdUk$sd4;~d`41Nc;K~1l^}mt* ze{hjK;=;tjdV+=fA1(|`@5lOt3=5k@5QqGYF778c3Ra;Iyk~C{bE~_avI*;*P+ESO z#HV5xLA*fy2kn0#`~L?l^#2Ok{|5H|;(`MRpI|&P?+F<|9&p8{-rWHAj?ljoF5kK7 zi_b3PcdkRHi@q@6uwv_uRud$Yptqt7$#+;KLRmz~;CdID?#>xr-6Zt{uGu%mZ{mpxj0sd7B8(36JImj!h_Z-KRM;tM7 zyO(uX8XKS8;UflsFC3SBJ7?RBJWXLDn7TqLFAThe4OkM$LrJ!1VXF^NGg+kM& zO-7@@XNTY{-LA0@8LkGt^8FB9ATm40nIqjswmyx0)oziO%0pX(=59!Nm0zY)hj)vhT%KD?;!jZ<&w!>I3RkHLB@hAm z)U2NQE(5qErfRVI&iPMag4?cfGgB{52NwGB?_W*1X<#!-E{ea}m7zF|{tQ;jtx=f3 z&h2B(b)*fEZZUqg_vL*|IJA~|G7!_k0&J*O1)D9dj_9_K14&0X@pT$})`30`Jl;1G zVIq~$SbbF+A#LPY9>=5%9GRWma-eb-dmTQ1?@PiZen$ia3Ibxcn+I1(YyeM|}- z*Q3((6mceM>r~7@Qhg`kw^rUVs{RZt9yzqowqM1Xf@xz3#KOR>9nTb;`Fb2v8*;Z| z$xW4jzjbKbjzFVQSkPv-_*2Y^0HOgi(w$!s>-7;aQ3!dG%ss z8qa1Pbot}~Kwy8*ga$qU@GN@&$pIJrZ3;Rsn=}5E8oRzow`R4AlPX;`ls_PYw}m0D zzTLC;AzcX_GdLsHJEr*4iF$>GUPTLY2Tz66Aq*=6+|Bh*jyq5NHKy*~Z18dLxbh!A zwJTkLNBC4`+9wgH46MeAD<7#7&t6z`X?_xrV=@N2T{JTFUQ$Cr-bH(5-fYYU_Oz5C zG=>JW<0kXDM)5`*sRySW@R)lFU&Ib$MgB2n`$|ovG{_tqEu*>exAKbPpFSk=@?~pB;RCSBDJ5X=NbVuk(quqHHxkT#w(^v zK8me7Oq^cI`ZB2Fw}ulRGCtRsR zEb}2);k3p9rZ@A2I~LR)@|0-vtL`Lwlfw4$(tQ%X_7JJoNx>WpenqAZB+p3K3- zB^@`R5T!n3S20+-OaKX0N_9AH=(P(@`+QIX z3+LBb32SNmvF?X|D}EV(wpx$L1iI4f%!^BfkL5ctUNXFWBerM?SbTpanSc>czQKTb zdr!JX1n%e(SG5%dwdq^KnlcU|lO%sPB~Hx7`Ur|Hh{`hTD298OYNI^#cXi`_2tKV}Fo?miSSpSmC+Tt|8}KSNM!o6 z{)_(nupin>g1alnJAt(-(A+d#Au$-o0c+Ue zxlH^6pzodwNa-0DUaZ0w$%1qiV`$8l>;g~B_?BgBk;Tjr6wI?A%wh_ zWcT6aXlCs>c)?(m%yc#}D2T?tp2BO@M_CLIAcCkI3>nR~{x$uuFt2-ul}H;MGGqPA za0f3!ENv7{_!CYO@0Oi1;{RsysPg=xdCCJwWMQbVr6gd=953GKMUMn55f`ZVU&4o{P%UfV|}x zo2KlV8=EJy^!*p|)JJHa{pK9sv*I2?A30c^J-%l-E{Jb$4_ zbJ}_q@{w)+aVYs7U$gNzYQ^dH9=kk;_=%@bw$4=5w`t_6Yk-nFE_8NFRwLJ$yCmz? z!7S=VKKxRuGHU~rnF-7sP#{~i$6 z=zSE7yY0gBGC=B3M(+SjBWv{%7VfkuJS$K*Zy*Z0fnsmr(8B0`G@Et0QjTUPH6!Z} zsFYhOe|YhGIYt)bPA(e_l{%46kYTC-=ia@YJG~Z1brn0-tn|`hHAnwZ!RHq~D`@1D zeP%cb7mNH2j_jtIfOp$XZWFNMyLaO({~Q{_*ge$pua2u2>7DygQZl3Q*At3oFDE_Jn_&d(7n(Y&fEw3_t zC|;>{bltu{jG;MGle_EZxe3QanPU8-eO_$CHPYxKm!G`Ed#K9EBpLE5u?inG zci^uFK(G9hg}XN=x4Yi%nhxwP4F>b62UI|Zi7j@GP$3f7m*%$0rV_Na;iR+YOmeS* zjzBuq?{9rWrUk$IN%NWvFsgircFiNwv`Sqptg}DK%h+w1Kh=}{2F<)@0~7SG3Zh4; zqgy2`^hdGsc6xb9f z;y(-P1k41A&D<%j1FuDxh<1JB3ky{p`8gZ?(o%j)dtqS3tA%%NS$BsLOL82=00+_+%b9wf}+12+vUAukt5{pQElD5f>0+Sx{s7HAcI zflbgw^xU-Z+bcbq6Ke{qu(~ANTV}7mfP{@4dbH0ytpfLs*G+p9#H7c8*K2M|Ph6o< z3(H4Rm;2Y@J=wV9Pj$o5nQv1db<-Q%*Ryx(J`R2)Q657g#V`z(q~~>st}z3tRs(~i zDYWA{pkQOkKojtcGDiJvDQG8evy7!tTexr#*)~A95$KMqtANl~O zk$LGy*$`V0AOu8v3N$20u19FrsIB+^)ZYz#I(%_{CO~h0#Yi%Dr{M3o;VwPIaFkiT zG{m$B{gkBWPQm=Cv0OM1>jNj3EU8W*r{2)QP0KpBqw2|qR+vHP4Ns#`tS3df(UsGU z^?Cr2J5!xje(6Ag1IR`MZky{`HXs`k;TAJma+?@g#Pb#Hdixq&s}!KeM70YlH;$@I z_mr?!*)UKEE364sJN^{Q;XdA28Ply@?yrnm&(WVMf=$=m&b8LVP*12*{C7g0Q~!p4 z!6e2JUQG($+rNDkE^=5ap%r9<^=DVuW)Aa62?A8&k?>7V}%)8+IcwIw?A!Y zJUREeXQ{59b<>ILQx(i2iUNRNUcD^5vt}#N&f|4{}!JMv`)?rt^xd-`6I~tC>IcB;D<8!D){(iEMp&t9Qpc z;flyqjnw@y8e}Irk--qd=JSGhmYar4+Q^z*%LiH`$Lknogc^uQ>pod>3}l{R&7RxV zaCqx;`H}@wSyoqp2hsLL+OVIg;oqijWZ!XwIb#SFFxTobh@YUpv6<0&sKMG%oo&AI zP8JPD&>T(a~Y4 z>?oAHegdLCw`iAozS*-qOZYXP^W58G#K9QJFQe1j#o?okqYW51XrLqNUaV>Ef{4O+ zt`3wI{{rUsJXJr`-l&RPrG|-@3OAzv;2*Xd6Qe&LGDhIJb`Vn5@t)|tzC?ArG(u>s z&p@`fl5ypY(*_oaIoOQg(zRaQ?8|LmAWIF3qro9Sw7yhE>PLb%Vd-hEF;z*(Ua&z7+Bo6u$Z3+SyOF57!<&9_C7g6*mat}qv{&Q(R8sHK?q&IxqZlE=Jn^A3 z)^Od6O~X=uu9}vq{wkE?99^kX+e%?5&+yyE)2%pLIg?*40&Lzx**`0jk>Win{sdIv z9Jw~043L!3`+QKbjH>9lo3c|fRios{(qP|@P_fXjSE7!?Bd_aDbZ2ZDJEkgGJk-ly zBHV0MIqdTrJTVBoP2IvvV9^D6t9gz(d%n0ankn&-lyyS=D2s8=&uI-Lv>&~-USa9l zN$PJz10g2!Jr)$Uk8hHZXi2US0?0!kOxY^9c^J!zVkAaBpNQ`I4py61ia%3zWmwoZ zq!1QeP0e(&^*oqYBr34HXKzm;u+r-Ob^%%mH>v}RgC++gxUZ?RmN$3^+$ zMB<3cZXb2^R9T;2aU<|fPM+FDfWH-eaKQz!4iHyAV+2JFN!s~H(*p!|a3SvA*<>ij zgaUAmftlKks;G1fpOAF9&%%fc&9}v8AJb^ggnsS>>?bv&`!)!k|AozYI($r;TCd30 ztRZsV;<sU8~( z?Z{hA^G3v#wB0=b9AC2u(8R-)5(GI;R5@MFs@w);_tY&Y?XTc6bc*%gGvbn#mX!Gp zPg`Vv#X?V8i^1`{LRC(&wIT76)fMcz79$1KbrT}a&owla{@OG$+WbM4DE>ssw>2=| zhG`zSYQnJH-@id+=jWOBmD}sM#3+BOHKA22?54*JNg0$j3U?uvdvDM#caVexXcX3?vkutd@G(U>6AU)q&UsytaB1rCz?n z1$-$GzaxekfjI=8ff+Znr(r+~k};Q5d!X)T?3VS0)SvfEIcFTT#kjJhU;0UwMyx#o zDN(N9VA>>Om3q!{>X>j3YNt5q=EKZQb;_k0G@ozHf4(l!D+IXOPgEVURTZAY{ zeR_`H=gQu@f>4zk46}xac2Z5Ky;!qLemRkpj8B8m&U`6h#LKUfxxZr0nJudGhcd~vwRIrkz&pYBT=wgXrwsH^%^iABve%Mrcd|V& zY3d!Ae~>OkXBa z-mr=P?IJpAFy3<$yEC6C8^2@_j=}$3J{9=K>NIVctveV;!EQR9P9{yx+~*E7qq|jm zg06aq-n+@KtaE%ww9`X zZc2&WY$rH9gvrzU*|i_3w(nM5mUb^(xtHNpW_?G~^yJ+L*m+=atBYOaO9OA?r^7C& z5qkX7h9(=rpKJ&jR5NI!sc54OxD3&Xdx(LMwtK$} z9vm9u;nxH+E&$PNuDDe!Lywu$pHW7z{98^&CmY+4I&1d^Fln|{H^X9-k|Z?5sRe0r4*3_GSC}vjy6FK0R`m1V?!HX? zKB;dh230LfOkDWs*G6;JySZ<&9>uT6h3Js?y`{LLJyuUnd*3dRIi$pUm4N3smrdAF z9WA{Tz-CsZUzakx6eeS1;-~S+h}*!c^nPaG zW69)!`Y!v*Z$3-ay96CE&{NW!EL*et)zpmF0rRUZ7wv}L7cIfRj9P+sqJ;=&F0d9E zGS2dOj4UNo&0!jnDLXP4Z6*C70Qr_Ar%G;?$aJ=!$}vE@PUHbV=5Q>cr}Bp_!=_G2 z@Q1gZpyS>dyr z7?xll2OC?@jz#}5!_z4R*KTV^J^*M%NpLJwJq!12d29aVEiPT@5hf4bShlyJJvSy% zBt1GH%)SHhYR%Xd{pzqL`Ni#X(d(8IXm^d{8tM71acfsm!?D5Q{ekrb!TneeBrx_) zyn)UjlcCPaNu`xUZ8Mhs1!%`-)+FPv@@L$147rO0PbZDNz2oQcPn75Cn41!|2Ox$? z2$?ar8H`42yInJo)el4<_g({)9G#Wu?`DJVT&Yy1{a}0**@b#}{4-f$0$bGt*AE{rZ zaAjEQ6kRcMaXl}gqo5z7V&Y61#$cw}9rGnKNN5_iQv1LsqKte1#0#Oj!SiYppW^qB z$D=GdJ@lwxLlEUhsZ`dM2S7wdU@pRp|5AGQk9!oAIx`DljbJR!7o#L2jM|;h%#$?4 zWmvBLDTu|!mD1sg+rS`+GL9{v?*rgK-C1%^f-U-Bz6S(ZbZj7j3=|i_psY3|VtVx0Az5;&8Hy=?Xb@`QL9tDOMf7@61yr zFT|KB?W8ugMq3C9;5VRhG%)%Y=}-ZqqkRKEu-(vkSs2rSL4U}4%l@cI_ql7NM!cx%VFOkS z^DkaUsqX-+N8uP(SS}l-zh!>F+sC+1?CBT6FdFDrP zo}4>bbeyr-fo?1nc8d7=Mo=+KdNgq3%gt<}%~lE7b&}w=sE7$@Eb=28Zq_O+>1%rb z{(F<<0!T{=jrjw>L=#mJQ*AVIV_7#h`mLu@1^L6_Fssul8m6TzQ!R2+E9k9p6wI~F z=?Z!6JhqWNTg2x1!rLmtqLy;cy(JoIy&5};EFJh@%U5d^-C+00jeGdh?QoN8p$Vze z^PrYK31D4;z{y4a0x7EWAaZh*~`a>it-+Y(R{Dsf#>eDL&UEwK-bdl@m? zs*H4fihkdF!;$M?iuK#R`Qnm<3UpAc1TpDbQdE2nI|!sMW#R{jU%vf*xv z;%o!2#S-|-pqw&T9XS{TbS=k{mILw+8}M>1G2dOM$FDrb6ROP&+KVCdB7#DfiC#@# zrnW6+Wn9^Py)xaQEn}iDT||<+d%p@*&ReA8lMYPGB-uAd#=tI84@HT5)eS=`j;R*u zoawf!SWH$Zg z+tBKlxhHZ(^#gD6g|G}K-w&QcIZ&>BBs6GHpPfF+-NBq;lDRGdIk&H& z_}xX~AF?~pK4#|n9U;W>wFoLhK=}th;mi~0ExT7Xc6s3Asv*uMV zo}u=_Do<1Nn6V4wn8HsTKYUBcH*|sC>)Ek8*Thvo%hW&O@{OEB3>%aHVm9HMNcxf7 zba7q%IQP39=3iJ~v#@|gg^#%xR=egKx8mTOo>TCMVNJ9;$k{+ssCyOp0v@>N5yhtc z>eE$}UDpG^UewCD{|JY0w)kJ!n@1?AmN+2tikZjC3(A3t$+~A zPBozNsVH?%5aaFx;Asa)n+%Q~0CF(6NL)x97kv_{7$N6jdgW!`Yjnw4=C67(mw=R~ zu`u4nc>w4%Pi{9hB+(#2KOrZ*rLj59aUq@S^x5afRDmPeFLMy_F&j(YreyszW>^|y z6!nKdl4g_>;wMeZT0DvYi+if?FF{#*SqR{V{!1+ zzFvGGmW$?jj_6x$$pz_-K#j&<&RR9L*T?9d9>V9)Hs)ANy|ix;9dNmnloN_RIJ9R) zXsI*fC@QdFFTxMx^VgW}xzoodIf&=l`v!N0D9|CDb3r>xUFedwa6sa*E4x_dQ~ypV zeN4Z0s?yqJz+O^Ai&d!350|9rCIl0Oj8!f;!E_pGeR5ffh%?yvlWH*CE3?Bv$Y!m` zX`Psg9Z9=9xi1=SZ6>*Mw&Suk$x{Z7uQF7fj1`xlUDfpG zoGLV=!aEjPM`DJAD(R(9n{1pC2XJ!tXAW|sL!*nvQy%~}L6MA<=mc-?g1fgJsat^l zv=_4*3QozjG=BtHkV@?NE)3pQFkkWDJ6h^Tj~tyTTJ5Tz0I~D{5c&&DKSUUCMX)8Q z9H}my>zcb3?oBgMtg4HUYnDH1?&a!ko?A5eKS)IL2MCprhKad|@`ciScX*O^~o=iYgRu8*r($&R-Pfp^{xgv0$ew=+d_hH_-&Jgy9FuQ0C}ZJ zO`ZMZmLs$DP061djrlJ>3$2-XC%cO$-Vq1EMfchT(8b7?qPIl0B;;m0X(w=?vgq*A z5W8WtQ2*2D6Ui^ix3d+l&csp+hLY}Y4LJYh-ZR4eMd#0(>ikAB7b_Q6c}k)0be5K^ zp^K@ah^9|No7)WGUO7bf{Pq-JO!WW-<;J#n(BSWQ=}D&VY5c$2|M)MCFb0JC1g0T` zQMm78)LJG5U<^hk%i|92Snq`1{i$GC^}y{}D;&HODfGqzZHt6hn654&N*{djZU!s_mvN!-e6p|=~(KCtbmdWg=yqeZuW zGL$%gTM`(fEG87osh*L%u!1hVl`=+`_lwVU z0(Z!@_|~Zo;@m+Vx%Dn@#+Gy0=M3Fdg@?Y{MHw9UZY9J*`1}p-sZ)J8W()+STEp=7 zzIcW00me79QC{sgW?yetD%QZa(m&4LwFKH;`xypiMI$%lpcMl%}H zo_(XGQ^XCo;X7l}Fl0h%!(;lsFPNdt$EH^9RNXhnadItRhqEyYOE+%#0p8qko0>@7 z7joJ?^R}RBm$1+H+krSFpQEu({!rZ!BES*(2k67N68+K3((2Q-VdUZ+XI`l$K+h>CMW{Nvmb`(_*s03KWQ>A zRq{vZXZ>g~YT6;rwg8e_aetPWZYsKq%Y0YwO3lAYsh1{&)v$^jPPA;iwMYdip z8wQZxSrQOt?)=~XRL2N@_IBbHa^zdw%kaF@*C4&n z(QT;ErwJA+ZPmsa`e=`uLmmJ!DPEh|O1^YMZD==d$in{M&1C#xek^e9+43{I+PJml z?ZhK(-yW2Aj0|=m*irN`ODoGl8J1}2!219IUw*+E`6wW#wfVe0TgZJtS@O(Sb$K(| zlg^};3%%NZg^Ulmj|=d~@Cx&DYz|5Ae{Wi=Ai^XLO~I;^Euj2sViyz03I~sy1z2d# z#AnZ)nwS}BK4}grqxswuT#)2;6yUH*jq3R3(GfN$^{Y8GeW>%pRtxhAX&aDpgi~K}zCqu$-6g z&emhjpDK^VpDA;?7Em<7xwvggV9AEjeRv(3_e1`K&CEM^t7GEaO#0DF@RzcoAwfI- zW=cOOjW%9MX&aX_dDol`AwXvW?ie6naQOQGIMi9pRLUL;5iHN&5b%Jq#_6$PyT!OReUB zQU9tpBypPKaJzK-+g~wH8nRGPUHX`XNZ0=2#5TeCq#%5zy4@VyOmYZQ3czhWkd%YCBJTanW>Psm#ViQSNc!xS23 zWMoSnmAKAtt=#`EReZEm*kbff$7+oij6SaE8ZXt9XTjJ z2HKG)+PQMup-R1(U8ZY0XJ)EbCSJZFo6m8x;9Ep*=vJX@vntW4m(u0N8pIPo;DNB3 zs{Ywz$82IOsvqwP>ePaAjrJ7y26xFSTw2jal=kn!fcE+Jq*fBdzGr=kN=q|m)gQ{l zer3qwt6zJ3v&q!4x#j-#uMl^|;&R}EGHj!R^z|xH_FnfMPXbH`s3<}n!6Z%i-H#OG z(E?<7Wc*80Fl+y`+Q~)VA72^vM^TigvC#aVmX)QobeW;59#U3qPF_A|x6E$675F6nr~jJ2C0L2ZK5T2~JYupsV}s{Ihi(6c%O!e50+^ zJg`lTrBuLgS6p{;3+9g@@Ukn(J)Kfob1l@4FAN&*8psItdbEO~Ww{(s%0wwYGo-Ez{VXmH>w_?|gFx`m^<@VPVpS|4|V-mXECq?wfAwT2U9+Iy{Y<0|Fy zT@Ilr$umc~KIq~>MJuq7rt-k~{MHTo2dOwA{^oTJB~LmDXULuCMh>j4z7RrKStL_vEx{xFLw<`vxOhg5~k(s4zW;vY0z2HHM%uzXW>ITXa z+cp%fzv`pu7oOM8bp$(<{-A%xsi^-k*FP(a)3Q=^Xd4nBE(YN*L=spKgKiokJ)Ir< z6=(PhXIS7#N|fne#qqo3On*HYbKm2p*m1zG6msA*-h*?-+M<}E1h#D&GkcEdQ)~CU z_vxqL`OPslMoXbjSBAFPZw({&CLiB3%wdt!h7ie%&b_YsamWVv_ZAjZfYDu9`( zO`<6Lu6A#g!-s>KLZw1$c7ZvFmo-Ha{#5RKaYv2H(3gt8ooyN1-9Ms)QVR1aUZw4Y z*Jt^U)xf)l1OE*D4OqAmMhwuC!P~u1DX@<4dqHixAc$&(Is2=k9FEvhPZ^=>pQjDP zw88k^jGud^+Sd9lh_^D8GW*h~uMBSvi|>5E@f*WgKplV(`>m>80Y+Tw$LI|?fNJ3b zpu2OfH3;f>*^tfdW&d~b076BxK|)4>&9EUI#S&<{yYN9Id(+@o(T0|QUR-!bA3^yF ziSbO`b#80MpGAj;FUF!9gEcO3Nqg_EStKOkKHC$~8}k~oP$;zyO0mAhEx#4&*u{B2 z9ubi4%JKqG=4{LVp0+3K?rqz2f4O_HiM=?TVh+4jxMI+p=epB}Rpk>#XHYu@jSh*1 z70gqPbxMXG{%kJQ%}nK{Exc}CN+sRc>g#U{A^IR{38%9NN}2N9p@ZiQ!ZHxK=LzIg zDAE~!<+5F|aI*Z#R;?=%+t3%?soA1tVQj^;98D5;WX$t-G9#sXH?{>=0x#~%`5`Y3 zK6kEhS)$0xSxhmrf^pmYI4`vd5&rkf#D=e9d4?K;)1(I^@5d_3PaPlgtk%DSw(*vr6KCx@`@KmiJ>dp40?b)xmMBsn_ppQi5f_ z5CyzEIUDdLiINdT5-#^}(i@sqOaxmNyrLZhowN z_f4cUU2ySNV~Ak4oB3vN8j{{1_2xd@+Yj%Q7h^KKTAX6-kFuA1{~PQ`7&xL0L4tm_ zh~-=0HLnC$ugkcZU76MR*jiS4=JdYFeVTj5!NzK`M^(|>3V8zSh-y`J_5soDDx20v z8!JvR>nCECH*-@2tDVc71e7yBWEf8cr^AadPwQTXOUsM@&^M;$LfueE`t= zd8O)KN4PH=@;xpFFsaYpyX~bjrKXE3j*sCZUTfIxY#*7ZTP z$EqvQ7xGyp3s_g$3Tq3Z89ZUwt?f{mJV@?>bCzmn{?+$vL|87d`JgOF26?3g2& ztaUG_1{$|~!7-ba8ug|SM7p%}Vs`!~TP@y{Qh7?l?bKb15~8bLnr=mH3N{|wXLIt! zJvCu)+uu$s9P!Ue@8oY-9_)1Ytd~%oVj$qv3bVIu=k*6lHp;0z6VJ$aCx1cgbCe_I zIRrKlOjDf76-LHodwcY=i(m|puZM~V_d%ZEq;Hv-nn}Jg-K|!x8G0R|7%IB$W^3{D zY#jCh#T4wB5Ftl9HV2oF!=t$|IDvqca5Z-abLW=+~LX)x+z+j!%-CT`5m>YaI40z z^`wrL!=Yodv^zd&f)R+6Dn~TIh;mcIo1!ut_ip(4w#ZxL#@-#?_rMXYG zN|vFYt5nTwPSuqj)y-$C8bSVSwxYh{Kdz%u`4n-1J5?pejSlK*ZciWyYZbYPgF)i{ z_?oTURHtsSaE)>(0G9N#a8Ls-vzt20MkaCC=cBLf;lyP%8sCHL2dC6!Ym;O)2b0}~ zHW?ZR{O5I%e*0_mj?~mrFIwyAWViC!g_ccak_HQvPQ+WDEpH9zcGAE9v9!FGAExEp z*Fqyln{j4%5*VBz+XkD1d`U6^Q48aM5w3!*_00YQ_{Jf-P2;&xh#bkdUpb^G9ZAG^ zNj1$k+HAV|%I#Gr+!*(*A#V0(MgNX}xxc}TJjWzpkY2QPg+!MADY;RGUOMM;ksMp>*RGlD^+v*W|MHDjZ`fx0rv44^ zddn91*(k-b@;d(1DSL$@+hUN{-H>_;PZ`Rl*7)}!Vc#?W8m$ErA!dyq(MbH#kft?w zswThnGp>pAxz^FI4Vc2CYlC6go~Y7jciL#E+#yxaLMU`vEx3vJPZs7OV0+(mj~8td z0hKg{Xvc_{k=h55)_up38~=<7)G)j;Tv#R7&=|Sz2Mxfqv5nAaUEs-OU zA0QHIu($Hf!CcfF)8-rCEJbd1_eLp2M*QWAC1K6FmrJMDZ<@@d?^=BF3Y;c|bEORR zlnp+eE@b4EIO;g~+7<`7V0|c`XT${avg3wj|!S2ph3I`5Zfsq7Pfwxv8YZL359WO6OdIg_SaNaH8(?*Gul82 zCbHG`AI&dTn~KzFPd)Y*`XXK*4Q%clpYDfc8U#9zZ#7 ztmFtiY6tssn&1lf0btrXX#n>Nsuk+8pB%pon5GZz-SGMn;5IPV%oCu*Rtki)R~K}D zS0scGtrK#%bK;H6JMh%yT<(+f+>A$gke~K_a{j&Q;=_NgZsWiYVe_ZxA;e}57W;)z zeD~?toxahNqYVPHBXK{;>CJ(gK-yv6lyglWYPf50hx0zUG)3^BwiBbz_O2dy|JLSC zULc~b9@gHn_yqE3(i!RLvxn>W9WGtZSK2q9H>X8y#7hfQJM6p6!S&~}W!g;a^i+Rs z{=le*jt(vDMxSP>_n35qO!v%Xv)D}XAzQ^sY^*CjW*`cAjXQS;sAwJl){Ga`4RelC z%gG9Iq+srG{W(v9(IBaSxB{E}`oz1gZBoiCU`@5eKsD3|WwRaG%958Q=BzJrTS(SN z_>!6Lnep{j7tOlge9|5hsmT7L?mEF=kzqlSdF8XY^erXx*lApX2KOGzF?45@wRI}5 zak}nhVN+Wu5D0Xj$2)xQjvbVllddB7!&r874er zyFBQkudn_m_ldw;VpZIwLPyaRSn5m`QWZa9q;l@_>mIU@P-W4LYDZiD!ihT8XES>?Cd49G}a-5IhZ!FyyD*Ov0oQwVaDO^XB#$29pmhjdNI2-iPJsIbg96-prv6bBNV=*(`ax;zwL$7*V*SKPRhnCiklP-C>W6(^pMQ<9}-y{SXm1( zI23u^lJed9*U2K}Ym|6&)nxc*WsMJU^miH0@CSU|64d%Y(oDluYjAJVLrT5RPb5Af9bH2}8(7`P(3% zR1RJg0il{|PhT{|e_mXpC;?FIj<~@y?}vI2b;a7O$&SKjtXYYPy65otYJLrS30CR<)dahtDl zr;lqO#(p5r%pEYmWpD2DP+7TJ(ILHj8rk--;5OT|12n&#t!tf$0W7N=UE$=JMOgrN znr}=;tAYiraKZLlJSVT50;ze?MfeUJkJ|q`N3c zt_c?pV@6^G9~E3d9sgzW2Quy696^gL9I4LspL)8~Q>S_d+9%4S2y8vu2BhLPn4s38 z+L=y@yO^k!_vtjGigFRxe1DDkj@G&AKM$QY+62-Ap2gqIQx@(G5q3DjV2v%`daKy$ z#io?q$R&n_`*9{(Uen^jsGAn`bRfj<4&Bd%k>+W*k#~j&d3py6n}*W@G2enet(qTM zQ{N=t_qcq@J^+p1OD}@%8RkWUNFCsh8bJ!=MbeP{S%Hu`p`~`SHt*W2O}ALX*!xkr zSFrB(;CpyPOVEjT&Rwp>Bt21iy%H+RKkzTmD8u)(z=|C30o+`WW$AD(>R7UuZ#d=1u;(b~z zD(1;v<4v`@yVLCLb{HlZh`Yai!ZiSP*iU-%PmNy_JWb)hix-|A)MUN9(qv&BtSUDB zu1P>Js8QKiF#Ibr&s^}A!Jmts74bc$tL9j0K6QqvW+vY@nj}RkHx3Lzl$`a+YW81@ z`u3gi2SS?1z!q9JjeKPcX*@S6G*W+Os3DS9JWF@+6uji2H9YoM9w|vC5z!i9Ioz@ehYz6SavvXQON0J&#Vk(Da$3 zTWuOMD_iM9X$aBAMjm~|fs^PzhP{{eZ1Lr01Lhk_|+^mZxLy_ewTBpU|ZbC;>KHt89N)1mIRZ?&mx;~ zgsj$t!fGp$anSU=N8$#Fq(NgX{qk9TtwD@TFmgaRBeB68SCf2p_-W%G7hh@G=Y)03 zr;C1PwYQmKD+a^L6Tvyp=U*plzC6`5P5vIzP19+KcQVQL`-Ni*frV&pe}^Cd6~0nI z^)>ge!e0^T`sc&VCTlB;iDR|3jtSoIBF>HxNm((*a6#jaYb3cBJXOb5kJVa~I-U*T zzu7xQ@dtyvF|3Jhr@xFemq$=#NhU$Kh|3_z`M~GU)te96n?upGJ3kKSI(z9_w2^-5 zD}d$*<=lMK4*apm$UQ!9t$ho7<82DvrGRR7jVw?bnNm4b+BimX>;cXW2>Ocohs8RV z!z~k7k5};R-`VB4wU+K3VjGrbf!BWfc21+s-+@%7>S)JCPOE;^T;TpMX&x}~=7p^I z%JWQnOUr8$V00NJZ?&o1WSNwYy1rJ%&%JnGjI1^9htt7jueR&iY@>!5?PL?MwQ#;v zfVU;pHi7S&{R5NWpM|9GA&k#+qv`ij{jN)iq$Wt3R0wvKHevu(a3832x2G%tA{eH&)nFk?1M4PTps!hsDpC!V%Eq{4J>X&sng# zusQ?~U&}N}4y~#AHtIxVn2C(WOSx^Q?{z1RE7!kfFAIE0(0pYlhL1-jVZ!D$=JCXOQDfClUm><$lV z?W}%1KAqy-15UrzH2pT+E#r?{g(X}IrGzp_Bao7=cHp;9lzJLz#V>R#)2`k7o!^Ue zuN?e5_^@@o4qI!D67~kU)g~(tmRT^rEUM!%sZ~I@ZlKqW{?nfjul_Ume$wy5e-3q9 zY4j_w_gbW@7+Xn0DQJjBA&Fg$pGO>5VezZLTK@ovEv&vFcvHmgF9iVvk?WdWd%#{H(=IOWwTrm!d@-hK7T?$P6phgk=lyUFYplTEF9 z9JJ#~Dl%^JIXgSM&)N$|@dbsii0u=_PGGpS(sdaA&npzl$cV>+Fa|xzuWaylf_@-) z1K`XykeOrDECF~e;_@W8ha|Ire&Z%F$KLDhUmgDdW5e*bUDhlWBGq+WChliOu)Jln zXv1w#B?E~970Tz+*1o*>C-F~Nz0m_)O2@<2u_BqLl{dzlc{`kvz!C<1sV41YbmAjZ zl{jk?qaPdeuM5qi+v{x`sq=HlYad5*Ge2LT5PaoBO1@V^#(ZPLCZ{6v;-4Qf`p z0w{;<`jyqo!z_`Z&O;lGOBA=Z3Am-d%(S=E($SS*i6jM9}qw78fj_T^~N|(c074D#9jw?IKEt+6s2&8WR09gBr zAEqjA9eBgU9})Zyt7*2cd8>GCSU^vZg){hIG)kr z{{V#E7S}ZY01oQ1=}Vwo>9>*G`A|eH(&r!mWI^f(HS2n2rKD>z$#JJ#+g!;GZQ59f zI|7ml@#u435=Ze$>*3zFqUd(|!A)BK09DfM#lG`3mX~a9BT}y8k{E^+?Wqp6qWGTv z#Us;UYw6@$h-}v3e7(wc%Ngjo?rS->Cw6&Nu+o)B8M4pBpN#jO9QcIxwie5&+F8V= z=FzT%N)%hjJaOw@ zYvNx8U+7*PwTDu)wecQ91kVFks~LRWg`+Q zly+s{20Y^=*OlGcoo~SY8h;GlwzH;a^Ots6Ry!q^aRt20fW=NvUiIpCUlJ{KjTN*B z^*u9IGC~$RxUW;sE;%_>-VY-g$m!F$8RBE7Ds4&+SEY?d)?n}(#GW7Ui$G;91bT$% zr6xanYM9A)93Dvgc&~u}0B@fLU3dfHw}n0;TH3X|+QquuU))C{NP_KU-U}-LQ{@OT z+ZFbu*X;qK-T1@9-Wt{P;ccllC$zh`bqQ|j8FR=SoxiPk$L+JB$?+fI#<3)pY5k$4 z+6_)6m4PzH5hr?M*LnP^FJpq98l;~z_OZA78TkAD6J0v)!&I|-%hc7TmJ8OEr(1P+ z)?k|zfkfRaoSrhqzLC&${{Rjj72Kl@9^zYTNY(|3ReYhkLpKDURV4e@=fCVH@rpe) z^-U`?+FELsQJ_(f1c{x*vi!<$=+6p4CY^hGb8B-pp#m0ny1kffXy4=zH=+WB z`KOXxkKv&<_B&yOm1wq|jqiz{3DU<-)wL}?=3f&HLPFC(w+1#y)H}lzF~`e(^!ztNfAc`5rRVu=XbSnmVPDsJ@wX_i!^ue zxshknT^K}%07V>!mfM2a{{U~=x3$TwwHxSk%|`b3R7s?WvDBt>xcV_1FJIEKmL@Ux zWNkV%Z|v&57v6e4yRCdQ__uYS>6h`_J>9Iv;?@AcC$}oB56U`Zsa$(knfSBAo(A!* zji63EQ+wfiOB5q~FSxu<3e*%i1uykbttoFgq|*5b8#7qtsU)r+ClB-U{(8+|LTnV|6T+ zw{{HB%<72$0J!qmK*-!%=RE#Zt*Oa*rRi3BCDykjx-|C^ZH{R?sjVFtuwxtW*;G-x zsK>Qh)_g&y!Kd1Idrh)~R@d&C64o?UxDlvqHQmgeB#At{jB$`_r8gyW*rh?nm%S#> zEb#Y@n@O_0@XXpB)wZpuYI5Am73AJkwcER4V!$93UAwpElEikeP`2vF~E>e1iug=G-yGV(C5*i%PY>)I48z9o)D2rM&mLrmq@@ z)Lo`%p^!+wJY`AwQF#g!{{R(M@t2D{L7?go!F8&~C)neTD_wmhH#2Qu?xzTR{h*@{ zn07ST%_?m*-^}YgCT_enEro}PhN+`l#cFk6djcGNWg04_-*iPE76Rb0{(A$t;nV z!vHh$0nbjfl&__P>O1Ma%=yE_9uwAl1*=?E?+JZItQH8e6wcp@5XZX;A?aV&&L{HW(S9Y-C{fPT_G3)Qq8M#5{0 z7jF+(+eDUA*vT5l5}6sAFeUxrVdZ47x z8co4**MaIQf8vGyo#HJ5e+^t{5l1nO*xdgBXwSdwR;r<+@!^=h~g%4QkGPcKb&y9;I`!p7T<& zWtsHS`CD~{X8E1)Fzes%e-%r;^*gG~%E|6>-xDwVJq6~8;ok5r{XaKC0zJ7Y8tnU^$!B-zBkac6>kpd6Gt((hT47P$sj-pZWxjP>V500@dv}Jo5X{} zIzNG;(xiyIvtLboK)F>_D;q1sqyh-wHYr)Xj$A(^rrSn-wW?~7*r$hd-xr-%NYf^3 z+eEz69(g8pVgjtO#xk9Rm^^|r#~tpU@w3F9E%3hkUklr^!R6T{jlQXDhTXy8j4Xmj z^BAz`e(p2J98>tFNi@rg>+L@F3*WUZoyMmWMtdZH#u!GdvM^W9;hc2G6$Q7%sJs_r ztjXbxn%{%93wWDR(e9vMGREyPQb>bgi)~^{ASW2-jv7sFbyP`N#hS8wVDVY;gc^*o z%Mw}39h^Q+nDC29gN^q7XO=dz851}MBOLm47Pi`FhqSx>b5w%T^GCU~3#v$Nh1Ow5D=E$ z+~i}LqpRuO7|?YKeP6{Q=`|VK?Wz5!^2SHXK#d|hT}8YxBGunb`xWFUN_^g?vGH zRW7C)yv=I*dz{STNi*{(^E1H5%xjzuf zjioTY-aN1)46pv#9jmqQ1UB{_2hs1XZ#0*O#M)Fgv*mA)Cgmb`lG3kyk2xGO$zkbYnGaYt;}=S_=rgwys)7{w(!P!fgvY@ z&MUyQuZ7x&!ru(r>RKJ;_OE@U>Qh}qZ+dfU6}a59tPmbcqLs@IF@f5>AI87hKM=JB z@g2-lN1#|6dpnT@z=|(0xI$e(8O}h@x3zTM1^7$hO;h3Th;3%Kz0_sXxnpGK_ZCoRpDDAR)WlDv__d@a^bi{X<|)HR)3MbIW#gg5gmrJkZgHX|~B z%QCs?@9$oqGzRfzi8qUrNP|+=Zl^kQa7#Yxi(6D6HfHN=l^W1a?QzH3h|2_{m@wh^@N zU5goG*b!OAT9fSQ`&%Y6$53g$6}q;Q!*{nDjr5B~A4{ zc(Ip7y76>Quk&7*uUG8j?F$oU!~t&Xp(MZQ@xVqcFwGtqQ~lO-m& zyb|0PV%h%yEXG-L$@y?MA5UtJ!QL>|yib0xXIdq(h+Hs-V@SWDF$= zylsye1K9gkhladc;=7F#N0KQc8n&^kGfg$iw9v|tzS%@YepJTXY&?u-y?E!3H7oxB z4>h)fs&6*NIabr{A>Q`VPchg#07xppD9@m;S@;F<7gW58M!lLOvQ0U}kypmQE%QAhTlkr;=(6~eQ1J}67Wcd3OF^dD#IVnB%%jTON=EgB$C^S7E8q$`J`@xZ_F|6?_8|oM$~>Nn@ulFx@(v$M0b|v87DBR zu=6~)*!}#zSYz&$uD4yd+3{ao@UMof<+t$;p=7Q#M%x{}nPrbITZq5|WQ9h+y>fG& zXgP6Ms&r{3VzTT07t)(rmqfE$)zU6St+t<}!p_XKVG9WDAQ&tZ ze9XtY6V&?G&7Tpq9Wz&5Q(D%oCH~OUSuS8O-FbInMvULIIW{Y6NPV#-$ z+yaJE*-ik*s5Jo8?|exfje3zGwYIj~JhyVB&gz8XHIMHSNj!?!(mWxl+Uilwr^{t~ z2CH^1BzA@3XxD1)frECy9XPFHvGsMPrw&=}doo$Wr`vs!D_69J+7%Iy{$zIw+=f={ z4snlfdZXd^B)rz7w6=@Pl}2_(*$OJ1&yGAPBpTF^YOq+@Y3QnCNtQT}ebNx0;spNy zD)LPm;;yf6tEPdbEw-x_#Dd=YShhm5zSd?!?7R{eZ#5D=Gy6VxsmgDm@5bIsX{K2e ztK_K-+PQ5{P-|%tD4~0~eDwwtUQmC3Kj)=$Iyc5iWALTo>gj71uKIwtv$&bwM!qb1 z2HJ4L)BJ18@4hIFH^i4PX_~~b>(X9*qEjuvj38f^W0nBz7$+X)vo4NM=TcE`W8XC& z5$UgY4XRxvle;=Hqh|yFaDDlxbqOTirx*l`epSqPLLDyFKeB7Ot(r%t&-SaNw_wY7 zWcihpj-w|Zg*#F4ov+%ZYjR~Ev*0F4UdQqur46OI!HmMHGEs)7SLUB9nyedkO?d^^ z?LXlg10}S{er2-?dpu zmNfv^%6gaWlFD3KXjXBLS?*bzKZk0~&_8OOZ^d3G)AZwQV+FL2`_C^uKN?)|MW{); zA6`A=N^pA7UO9E+YsH#nj9wS;ca9*7!x#4R*hZ$Sl1evz-D|+d zgZy`E;%i+x(mAy|%a7kejDF8MF$?Ai7qo;9o||i*v4ZB(`%<+od@n7evZs@JfIYEh z!+hON@0ez~nf40>7bf}oYwF;9I)7#B9=YPg~w5q^A|6` zDot`)AH*A9hgUjntlk-tUkTn^G@5YK$-FOaSP5-Q6XgJ;ZUhcD5!$|jvDJJZ;eAuW z+AfEEaJEyy<*oMj5nD`SB~Y>B4CVOuuOj$?;=Kn@SI~S(q!uu;jXGeU{fwbz0YE=E zXEGk2#Az7DnyYB2>~;Px@qV#yqFLM9+v%G9mb<3H*S7k&jH@8emaQNFU?Gh_{{Uy+ zscJWu%MG3FhL>^S-G1KN%D%O=iJsg~5|eElJ3de_cxL1Ghtjd`Z+t!CEe6uxP1UR} z*5JosaiwZ&D;sH#3#O+*yBXTc@33@F+5Goxg~NTu0bo{{R(u z*T%mYcxS>|gnlBKt@NwSde|+;hvBufYx`MT0ufcdRYwI|e_xpTSDN^X;(v*LENR-n z(H=`}CMcqs{{UFInGMNR+Be%n_n)RW4w&|>p9yFl6Tk4S)~%)Zc~V_5nn}DzaeTAf z-cIKVueog4L9K(mBQOy{7SmD@D7E4W~*lvtf_q^w&K4# zsvHf&8~|~HUWedcjhes1t8e&1JS(Z$Po$;u+h|ue`aV4A8TP>?=_7&3AO2U?F&k?wia5q*rAL`42zJ?>ZB`^xNYr< z^v{kz9dsWae$P6tgW?|#+{@w!gfC#qR_E;v8BDR5{o{Z^Jx>+o38-FpyTrDdriV4% zwXMyp4lL)nPqW7iV-L9r!)+v-V?5N(N$7IWpwzwfV`IQ~lj=G?vvGZ>C8fJrC)wwo zGP7Gq2~(Fv%kBgXxabG1dr!je9k;|k54VH-IpZyCc#}%9b&BTCO^V*phYH&lV(%;N zGw)s-;!R&ulHXE=?1ioIoLgGQZ*3%M;Z$YSNB|)OWR3?0v2>3Dc$dQZ1-!Nzh2Mwu zIPcWMadE0DywNg9%${m|?l%Fqw>YeoNi8}Z6{sq@A4YsY_+4vz;kykJz?ZQ2kHz+v zmo0m6E`^oDVpUlIg#3(27&+$vS7W1m3X9=Yn(H1Q*X&@@w8uKLfeJLMa2SxOo`bdr zf31A0qWo9av`-X8bcR`EwvgOkyjJY@M6;dyr5%1?dh=er@kirLkHp`G8l+lIo&BMC z45+Icys}&_@Bn7VM94gP=C)FHx*~XLw51AgmWHASHi*%OJ^qn@~X~c;xt*2eH zPZ(8VxCibM$dM$0IgQeHlk;^-qUC0q-F zc0xQ_*>wp#*Lvx6c$>M{?NJ8hCau?F_Ch-?nh5A=Fb2QIIG)JH;Lt@qP1*h zjpCmWc<159jo^J++VX8i_fGTfrjpb_1d(AG1C!3;2qztgsvi(6uRaQRV)sF{y}!M( z@inukyBXO2LsxnK^}DoFP&&1Buo@c4PusPFKj zo$=3yE;OBX((21ln(NL*{?LJTMH9;LAQF#WfPcViU&6l-E-YcY@UEV3yx9>WvegtM zW#2rgJunD4ZoK$Iw-iNu5?Dq!P9f0u9f&4&%K7dwcjS6^*=Fh|M zuAvR$-3eP-c$Nv|k=c=D+T1$rMINIDvg&;lX~NpAj@w_CMe&x8sOc7><670VpWi^1 z=;lwf#TzV%8c4v;9@S#SepTu@&2Ya3^)C}e;~U$}8~Z0wu+q0ems-r9bxee`i1{q$ zB~<|Q91h01Zw6l6=;d`&arW(3z|dT+gK6NSKn$QYs=U9ukjpE?=N_2tT|7D#gQfUa zOz`!v7rNuwN2W_Ww@^(YBNldz5;Y+~E^wS|MgKh?C zRgccQ#z`X}{uSq571FgogqpqnpKq(%{ibV4VrzRj3dGI=k+`SV1c&Aqq zPo;Q{*8bY;YBO9&%`Bo=Jk@n70b)#raB;M#>}uzYb$i`<+SdBRTe7^LO>5|yBei-?x8m;sf5JTaCFJd`+eWZl$8jU2%gJn~ zEH|&*MPlpobCqt`t~SfW%ix`A{{TkPwFu|c;-Ae)b(m5(kjMsBGI@4T$~PXW6n3mh zJU+U=inYx?>raXuZU_L>wVPYSj618VZdC52cCLL%^r^dh5h_=+dM(w99}zX<;IA7^ zXKg5(Mv)NO*xQEN8px%h`Nvi{AbvI5co)Pe;_W=ks2dn`>n%D(c8Hi-2||EkEP9c+ zG52F$Q{x{84-oisYrw6}Qoo#gXb-MZofIp?Czd!5}>l zmIDAPw&we|$mE*yZ;Cz~@aKa>vPI$n4W;z(n_2CmJG9MEVXgHP$t6}^5)7-O}ICHUC98nO9KE^LuI(*<~7tEPr-T*gx6Plg#Q49 zsw-n}CZ1=M5hJmUm4@&UhBLQm#z#EVO8rc#!8DyWc6qMY(HTPCZI^WND?;?XDPY45|kY$Y4tkmy7}5HQ<*1 z9=-8qk>WigTDybXWV)kOM^p`?#2p|Y6E7(0f-v7yJ^IXTCn9<}B=HlYw$@2@;NcW0(OHsnut_Lc-fj)h^^I)Zcad*iiyA@TEDT`%L-f#N%DQr}meOGp;#;z+hUj|zm$ zp1&YLpKAJI+u{w6gxU1xg3jAWxwToRnka?KUr+I^kfMT1 zylctF19wl#pwX>wG$l4Scu(lba|g2R9VKcH!NIMHDBmx72j^h=_DlV+KnAIA!oy%s|PtO<{p3$)aSH8~k0F%^A219KeZ@tf z_+Bl0!J-XTX&UKXITqzmBTC={lNkG)U}M`o>i+811a39y;$P}5Ia+pH43qJN$Sz!T2_bRUj}))K8`-utK7jY%+YQTtb1|{u0i{t z5CUW8Do1MJbS-DZ7rzfRoi+_R^HkIbxM;57f+&(n096ySFbx`^$RKfs1GQb&FE4xn zq06D!%Xxp}XSq7H?Y^8$x`N!3g(gk}aShlCL2jo%FvMC;jjs6O?@jPL=1pSXN4N9m z@Q#NZ+=S6W+D$Zgf=Fr-xke9i4`kcWQ3!>~uKckz!t=d8UYm^BaX_ z&!O*LkKoU;ct1|Rc)ULkglrl~qZc-|Z2th+tcs>V5gjl#<2>b>vV2o+JTDHD29a$P zI;%8SX{cJckV_2g8+{M`RS9jp}1qX?GJF{{Rqa8kVbheKeNSUtE7= z<|$xOV^GEBBfvyK5@Z+i4! z5!~s1CA))8)fOq2?5h+S_59I?c@+T)3v#N?*w3gn=iV~-W3A~rezg^^iSF(^IT?X% z*7EW@t7tA{=HWn4Z~;NJvDZG8tZ&rkyrT6!dHtKLn`AETe%EyK-OeK*2{&w99xw(E0CUY|e$VZS{vz^W>2=S z$`?Ibg;BWk&~~V`*{yiWQjNDhvG`Z7>pu>B7og}~BDB)HE8&<#miM}a;QM{m{LW99 z;IHoCehNJQcjmIs988= zH#Xs&6=NSOle~Pb&pzUvoOMJx3kyxkpTv4To#1aB>E1KGYolqW_={iis9!hx)kFJyZQ-kf87uxeW&P?)Si7*uD<% z<9N@+rv5n+Jw66|TL?oZma{nqBFuLZj5mT#c-u!adz`APkG)z*=e&ER_=`@mj%!F_ z@Rq54XC$-9qTUzN?_nhnTBJ$>BdOf@UO#vbdguHT;S0|P-`O^~a~_|dUf;c>?<@&5 z)#3%rk(2%4L`1Kl2fcSw{0;Gk_GXi+>LW^m{^g!#g6=8hlG;R9EgzObq6`NBg(Hr= zhBep0?JC-M7fSIyr(#n{YpL(`JDBa_xRyYsD`*t}4Ibu=nU6m%J5@$ejz4TP7TFz_|AELRsPB=Xx_5S>SsKy_`R>3eqsuc2#6 zyV7(`W_#)UMWyO?6RejOmX=CqD+(xGr6EAd0W5bD+}AVA{0d~WfNhwgP>4d^my+BK83UTa<{y+O50EH5$hTMEibsN2p*C8#D?%gX(Zn_RNi z@4O4IO%za_VhNF3PO~!Yd}GX3B?7r%c>vFr)ip?H4%?&F&C#Rpisymq#;wuCbXot3vp>mw-vPI@UB&pklsKV=Wu zqr?9I8T?hK={_gbB#K)`8)JD0OUV?FVq%|jJRJ4Gqh6x=%~kI>?s_e^?Gxd@4tV!l zwS&ci^TT@HmKOEx;tK(iCvy%ki-VUvy*a4Y@aZ;qt}+uJ+Z-L>76>JJgBpWc_`f=A1Mz4KiKzwF)c zzrz<3PkD7Ly4|^qoi_f|qz>6_{#r-~V1sBQ8S6=##x+{yPjd&xAGRNcw7qfe{0noc z=bUFc(zs1G;*0n~JN;Y3;^SR|RbBdo7w(=@PVzH`2mX5J zCmx$?>uI$g2l#m|^c`2>M}~%+^1~Zy8YP&<5sOT??-djd^2UEcuT+$ zYua_pcJSHV+S#DRiJtF7AX)opYMm739E zB>B=K9AK9NZ(awje3# zr1%Hm{{Zbd;2DRBd^4-*7cwMq!x&4TUhGT4fgU#h00<3sTf zj%V=bb%G>vvI$km!iJEzD~;mVQ$ z00WM=Bi6oom*Wq_eOJaezBbjo4+gJzvHt*N#pcLjwSdH+ZQ7?2Z6uM$dP@CKpSG&z zr6qIdZ3n~+q3KtC9!O-={7vIqlcg9HK{n`i8A{9o{K7s$`jUIswBLB!I*fW=v1zD} z3u)?-Y6)u+!vM2{nC+oVvoyat?~@Dw4mcJ0>+tvDcf_IMlY48T>g})HiEYzWiq=AG zqj82|zzUVM80DK^0VzHZaBz2>W+$( z7`W3eqf(k?oo1Kba|w5qljV#m_QN(Zro5-%$BR4<;yq7Iy3ssqq*}#m8mwmT zP-{6Y(YEgkkOAB=`PR3_Is7rJ_?BsWHFKnBx|O@g_YYvq{&3prts*bWA#9#cBxBNz zdJ$5CsWlob^S>Q@EAZcr?(~5*v{n|jF*_!q;mDlF_NHdU7+@pZz=bG;fD|0_UU#I} zNuqeAd^4_U@?5o)$ksM2jTN2Zlm4-ko@Ir%0H9;@uT{D6X0Kbd`X8+{?(TPCF{-QOoNRl? zgftl+z@8k_A=M`uwf_K}c2zXwyS4K?q9bYJBQiv}Ip>UKnHPh63_Lh={a3^jT(O>L zo>^4M9o5>O^|oVi2^zLW&cJl$x$OtUo-XkBhYq1U*1B@(x=YA3nb^58Lul!%vAY?Ey>sbaL-6b3TpkJ4BE6d4$5D8u5znYy#!bbdF9^h_ z+{{;M=QzL>(R@vY^IPy*jW)(rxm$^CZs&Q*q!z*P8%n3;cj^ls$_Hwts{AK{($TE7 zjc(IW)NLSHyvr$JwTn)-*uOhtg2b^IJmVA_QK=Y5kn{^ri*}br)Od2rKBiJ zIugW4J7Xk|!h;#%sZMHA*!SNL{BK`~7n5i(=^Aa0k|SR(_Bo8s0UzqZuguP;o!u}; zrFp-ICGlT^bv;EqZ9bE)8(BR4KF{pq&$v_ap`QbU0QWiI*O#V?s(4z*?D5=7WbXY<-X}{y@^sk3igi&-`adj@aKlcqb{X-UgWODxM-k?L?3+b>N8C%o5qAFUBPH; zYQ8Ufi%$valK632DHXK)*|eky6d;e3D9Jcq{hGY)YrRKNxYwrB?*73(nFD#2vcmF9 zZ5Sj1pDE?L{cB8Xy29(?!8|!{bu=$C!#J5EhGxlE<#;8PP0jit0v z!KXo_m5uJDe8#US0|y|n9{%;l_=mFSLP!m z^V9OLY101yW1okX5av%rve55&5?hlb&k z#9|+{N2yNoO)lkOleziEF~?4|*Y#Ixv*SP3x*X0l;lERs)GTH37M3+T3(E_wwyAk% zZMZDSG_kG}xBEPd9(b%fABTD_ld9OA9$)SKPIXYi=|6UoK17SVz8Ig*vHUS@Eu2Q) zGE6{j3|AS*$^C0f?T-#!GGvP^yFT)eROji%c$F&hyEEU0E~QFI!%LD`URY{Z+RdJk zt?3un+BLgLd10sAeD=tX<+v;BPg&juF~sT>STJTEHaY0M&N0vUR~h4<6l>1#MPYSw z0^CUQ+#7HCXbI0g{MTorD&1ShGUpgfhU=VTn!w<-dFX#b* zhOeeuX?OA&VKTnw+y2*~;PG4fcl;BtT9AXO_}0oc{_VBDm~r*|>+1gig7;C+;R9}d z^}Nmp`3}ea3De>9JM~W(>USurL!?o8 zV1t3v^RFrKH^FO9gkKajjS|L7iR`VUhInPU``btZk8hXx*XV;xcARwtH|1Y9e$$#E zUmfW>w14Vv^ywpS_mPW#CKWiU5RE3{jdJ{5T9uNUIQ0#46mkaNxq8u2Xj2)q*z^1( zf%*Rc_2{pXx%x7ehXL^4P5A!+;`{wt>qONw&06+ZM0eBPUqSZdEsjiS_c=dw^ZAPD zwJ!pAuf=-ox_6I!f8dP<;?{F&*G_}&l1vp#L`d(om-DY_{{V#Jz&;z(wENq=FHrG5 zzZKd+YjqBuBAsM-f|N2hCj=9pdhp+km(q<{BWBjGtlBk#Ye&>0Yl~}uOR|g&zyv5j z&r)mNIqAZ*s&YYE-A`qk;Ubg9ctXLF_^&h2%vLhMWv*qo1UmB@G# z;g7=YM*dAV#Me)HPR?1m0jJ9v1tK8MhEP!wTiJpNP7rhrBmwqFKHA zS}1#klTuffNSe3Uql{l!n~x~!HtIryANz6OmHL|U z&l%i!2U}b1Q$w@Td`02;G)KEl3ss4P=HX!>O3XircVv%T`qy3KuaA0GpYYgdm->5J zU1@J5&}vaMMj14S1WSFX+3A*u*1j5z{@19^Vm@cu zuDe2~_&X5C_^Xe)g!rcB;_Jt-i|uDewvcJMDFz!0NER|!Za?cB5=Y=GuJ9j&JWKFH zQnawpTwUq9ouqej+26Q<9PLs`V8b#l;6V4T^n7K5{tzus!&m7#UtU~DW0nm*F|r_h zvWY8_BpGsc`m-MNEy|@&*+E}hcRe5BU%{7yL$ib8rk`&whc0GYIOn;UEp9E2#qxF% zLki(S2lJ;Y)&b*M8LBSJD+Td2t- zVDrblc6yhBue2WoXg(s-b;~Jq?OBRFrkf#{qbY5H!Tv3{Bzh59y5-M=wGAHc!}_;{ zqP^1e*(C<@($!?XcOpH6NPgy9c59mOZ-ezu3i#ghOR~|mOI-_CSnj;3?^Z>&c-#`; zbif-)KJ>3+vNiECs*;VOdzXl9>}|B21I5>ui>~Q^?!}Z8;ryJ&3HY7HDs`K)BRni9A1Wk!fnVarOjt`3ZBtW@Tl- z$`fJ8K45LYuHZ3+9rIkh<;}3tZ8WHDE+^8hE+c5t z_=6?4mc+0^I;T5_yBe{s-)*pHZ4^zWJ@viQ2}b!OQ7Ah??LRJa&$+2KRNNzU&eKNJ zue5Iy>35B(t&R1>1{pT(!|k2ZzaYex0i3uLSTHQO8z;nJHuWZ z(l7N(sqM89rfL3noHjElc!9}OQPp$1pHgVOi(ImHZ0@{&@P7Nk(A(W6joj*pB^G>{tlFsUQ9y@`sHsuZcNLPOzxvIK9jC2>Vvb5Cv zi`_Q*CA-oM!1LjZB9$uWc~guGeJdv^U&!KcoZ+sgko*<>q_wXLcqS{&GgO{0whMM^ zZzeX0XArDXE3xMz$_e~+R1Fs}aq#Fm~9_-Hk4 z3gNZ5JWh`k`c|K##_g(G?ssG%e&_%YOCH}!mnQZhDjcm_-ZVT%9qqrwA*VxqYHlwe ziu&VCxt+qpbl}A*L$Wd>a3e0nFc^?=TAmq_!^F}Z1I7Ac=@))+yoX7dqPMoXw>+$o z-6;L<%D~`|bDla^f#{w)*EP%gXieUir1*zQxVdYq-A>!>mzu;=C|L@kjl2X=l5>#W z)zRPhcg7we)kK=t#0Ig3`a64JELvr{-3ZiXGO`fH5TI~WgURBl^H_++cJ~uK6UIIk zywp5jrN4(}msZl`)9!S+vVM{TKR zEx3eS`A`oxDzYECNh)$U=Cgi2X)}0#NztvmJ>zd0>y{44_ZnWOteIe%Hez3B-dcMsdasH{vd@r@iKtHmMie?&gVPHd>1-HKxK70V4pj z0uEcyf!evjX!Nsi@X#yaTV?5v6bv@r-&+i zqXA)6>*cA-bIw_-go*Vp0zhTc?o!`S5v8@Qidw9URJ#b~P2V=`vjdJWqP-T&!&cr3 zgIToj?!BmZYT{@n->9@h$h(jL&AmG9!4>8DZ;CGbcQl&1={j}7Xc~-B#j0u6?H}6b z5w2u(`_6$$!Cr@Uc&U@JF_ifm>~sf4gI?72i;a6qx*GoghaiSqSf`YQig$gA+Z65# zy>}il$)@-#UhwCNpTySFpX_Z{OT7`^Y8JS=w7$4unVK_!<%J-I2a~v0Gx2v()BJPe z-6mfT+Cg=zU&OjBI!*g|uWvho#`Yy2DJc=iVe5{d*Hhu&1;Oy!SJQNx^^)hq7qP2b z>N=$6>fz#y$>vQYOTw<^Uwl+49P-7_nMo}Um2R{T2zYk;OE=e=wvBj?EHN#qh~UOI zJGYiZdrNFlk@qu>YnAv(t*)iwKln%Qn%7Gf$!})`?X(eGPkW5E)GzXoRgf|3kZZZM zy0gBr66soXnbUO$&6UhLCCl3+u8AW7yJ^ZdU7oo;>x$PKPw;2N8!dBBvV+8Ta>=&S zPqG1{AfeBhxB?j)cg^f7(&~08MpvA=p0{bOcz;DU_u96(t7=n2so>t}ml0dp+BiE9 zd27Znc9J`T>0Doq{2`}aoo8FntnKwXS?`Uc*1C(N%jQY~hXZNqLC3ypoxSnCpW-b+ zq`S~B)(i+etmx8=)+#%k267Zv8t_=pPX*d}X0SaNa5Y%bQELj%&M_t-un$ znp!sxC(iDSP!Kr480R%;h(nT1qOZiy1X+K=AEaoO-UBxl>lBdcky_h{CMq}&xB;}Q zbB|1V)-QtN)-UwUTjAG=Ex)w9M`A5?3nPDd<->boyTom9n@&O<>-8eNWPDG#@U^|n zSCB_4O>k{)H5)lvZ#wOGY5vdEKZoWVepTRK5j0&lS@8yotlnx`s@_}QNj%Y7z!n&g zE?zfh8?zt_(Bl~QsD4J%PEtxIS>oFbS5EMk+x581=(=H2b*Hx9_9%vS+FZfM$|S%N z?KxeeKP`2d47!iR>o}#^vjjJ6pTk1ABL=+j&Dy61zhZxs>rQ zbGkMpd)Jw29x>K@b3cg^Xjo}e+ck>V-CMNs<%wi?d;aLiSP$adM{3#9{BfjfULS;L z`aPzntjnmhaot^B`7pyIt%NHW;qX<99@!Pt+W0z84eQ_8O<}0s-P*?S{{U!9eDbUB z{o{FsIQuwq`xx_`!?iZt#k(cnL{kAyDY!jIwydl>%!v$ZHyY^;@=&GP{! z;Wu&v5qSWa#Tu^4^T5E4K+iBWOo|(5vwz@_J%5#K~ za7iI>u0I^qvlSj{vW%yq9q>cMx^Kg;651`Mn)*JP(@K-yY8#eKM&>>p-eLZ?1(y+a z#(#>vKjEi>r|`Ub?zwXuy3dI`MXp`XHnn3jJ-|^q0TV&h07PCt+Ru9AZKd$fhrDm5 z*lSiAwe9}qpG~+nfLcxrY|;tjUzcHE+hjbc2E9i_)btHmrL~7gw~tV}Mz~wsX`aeS zCTEcCl*GWuin{PlkkQcb0E#I1IOdf6X_a$nQb<;d205*XNKNO znBp!0X&Pr>!Ok+OK45d(6=8<1u@9Wn)uK%|MY%pE(qh##jUMmJhVw+3Za%=XB9pl? zS{yNASo4y5VzaF;HS0eJ&!qT1C-KIasg|05?MFqiwt_r1_jdW2hp6L$+!~fo0@?on zYS?Ld?dA82B1!G^x%8HrWdkT*%iEF(CC?4d9+<4Z5+v{~1llYS2VBvIiWVA>nfI6th%;mC2 zr^-F+$NvChpA%YWnw+*elxVn)Z8XCxh=-U@%k&_j;Pd&{+FlgawF|2+3TskcS*_No z0kdBw+iX~kr1G2Cvc&cI=kYVdZ}3;+&%`Z05b)0W_|$F0f5IM5IDQNyBC(UP^VM-2 z)l!#3-v0n-A0JEM{{RESWoK^`di=L2nq081XO>w3+`+rAIQoNLh47Q$?Wcl%97W*^ zh|Kzf+QqACan45Ti_S|#&((fkERTHGi+E?oc7GbaJlpt^cxStN!d&>RI1>V$TwQah)J zgM9FQNaH>v`0CH$&AMn>rNsU})%T0NFG+$@XR-^p`BLut@u_|r+>X^-MbLa+En8Oc zDtK$c+SF?du}Q02{if>LAG`&fzI>$^W4dBD9Al!2^p67k6VffbBc|Hunl7SmuJ1+s z{wvpR;kHR$F}WFW^Uj5o;W}qNrkmp#rSNvE{i)+05Zd0~aWl9`8@SA}Ljr%R zAxfN{e@boK&)WNWsB^6gGyEs;6|zUK>(>4v__S_f6D8bGT&gf)c5L$ifT&>L5zijg zFNJ)2XKAJCcV7+fA@E&|mBdY~=@8kAnJv7txm}}>`C>r9a>_bw^sgTHjr&_@+Ej@a zpW++e8r&>wl9#n62OWavs0WPuS1;i&0sL_I=JU;>Sto*YtA$3EW}U4=L)U+lKKEa} z-x%#ub51m&cPDex{{U$}8R^v+t#f*=uBCw4mIpK9{0 zWA>-f;IYuWH{m}BTV73TaUJEQ-SwD~NtsCsii74cjPN>SwQXL0$J$@RU2@-5@usi; z014)kCA62fCdEr^3%OaPQ~U(sbL?x?z6t6YH^PlmTh^AsEio={S??|6vPq#9nA)($ z=as?*ZM{B!dTQNG79MzrE>&ow&TRZS@t@+C!<+3!OBp;absMLVtm3&#Xj;KpcRJcH z&6SZ(SoIhks;7tk1o&KO+Jk&T)n8TCE-xNL*|yTw(HQ|ZFDj3?9dOF$`2Fke3y%+Y zCq?kvc#782J3CjfX_oTZJ+cdVR0dY`7&Y@}h`cA`J6{Is`lXb1Z{Xy;wu;(YtAh>2 zy`p@}wqBlDax%W>)~@MnB$TO1weX4Xn@#vZ;oUIlhfB29^@O&0;<(WC`6NRtARlKk zN0Gw@A%O!9IN;R(015O>4jpFh$5GL*w9B+dwUivnO}UJ~W0btEUA}eU&@KpWyw?@uPllKBPZx+0wfhL8 zv}uN=YF;U$x_M;UN$(P&C+b?Iw`~I4+}_hf&p7c%!Z^G&JL`JxpJ=`fj%cO3NG?s^ zmk^Md(T)O^PcRZw<>%Km;@=N6t8EwJr;fCXe-_zUXnJEyIvcnQiK$u_4zO-tnlF&3 z&r17);GgXe@Xz7Lg0pktBYmlAbDP_PVPzzYSb_KW<=g?!(!MkBwf_Kv{vm$UpAg`& z(&p2&9bwq%al1Tn>CzQnol~)Q4oLT`Q&V1MaGa-ALQh0{Z^F+OTg$G`sCZXOpGrEU ztX|JpxJj*`R9&jDC`WfspCz{c02VXFMe%FLzA5oC-B@Z?+85{;A>L3Ful~+!~IVu9*_%F$={auIrC2RI+)T1v^(Q_4KVxGhfv1 zJZX1-tExTzn`qSD_|)0Syrh_H;@0zk}s zaVK&J?O9(EF8oJpaeb-HqA(h~SF+Dy>a#Ry5JKO(3S&&6UV8qNc!N}3Q^MExnr@Y< zT1PFUFXUZ8BvD9wsKB;k7#q;;1a`|Bl^ZhYySqsqd!YDA=06zfb{-$sE+Fwno;;&t zYY~m)ea>AGztyNH6qD5M$3QEg()97+67$~HepvPpOJn=l z?_ICk?{!%<8%vuw^gHg}|v2F#UBOz5o013}p=sp-Ul6*hZ-C-6mHLG3f z4|57aFD;`Z1>?!w(k^n{z){++*E5tGPUz0iHHkEz6KQipubcZ=W;5wQEX)zYqz&dd zq50ip$va2Oo!+LsXG!sgguW7LmrHl9Pk5Jew9#KfrpWge6F5>MSMDS`muqvC$>56d z4+wbAR@XJlJ4jBSCYPs0IfF!+G_qt#2{DLgDndqMF@fEgSaz(h9{AeZNYS+$-D+92 z-wZTzSxFkZK=#+3Q*D7m0rz*OP7ZV2)-s9aVlc3o=wB8-H0kzUHMWbx`V8%^YVe}k z&TZkhp8omYWJXV!wtzt$zVAwMYFdwm{vK%m01oc_5B-y^L$P%`tv2f3=1`7HO(xQW z5Ll6hI2&_b4d9;)(yKV773~GTDo3jz0o6rjS1I1d_xHa2v z5O|AChVwzcNUjr6f;EwMZ9tJQDsrHM&$;xgifdzPIAvtzvN^36z;+Vf>w1ovEtS3f zoI%#wZCEALldBR8u0B$pP~a!ao!<4Kqu6*(Uk>U+QPZw<>leO?VW;YBs*=FKGdwJQ z_6r}I+uFOI3wT~z?ORH^y0na2+}zxo9WEHgH@s(XQUJp7oO(J$N-oQ21M_THb2+8fKSyVIG{Svgi<5$-OPNs7FZt@goN$ zdRM65d^fuA_PKGXn|ZHv6FW%KJX;ZC$ttSHm&b2>)lU_CMb_@TH5JS@x`n=-e;L!_ zH}_#mB1){xW5)I2#~|YXd(=vtp`$jZI&~jC2CRIk7c zeTTyE_)k)oHut)HjLUKMh-+GU>l%w31lvp|n*=_kBVm)}K)sffF6%?83`X0K|+umPlNp@!zj;2u{ zjLR$XV+cC+2S4q5R|VmFJ6$)&VJ`JK+Wy&_?0O!sq_>_>Y#}-n8;J+kccnTlGgw_t z3B22RQV7!K5p3#IM#E@zC!l6f2>$?Pt!h`7`kt?*YWB}L@aB;^!!ESk`K^t9N~UQQ#By1O)wv@rQ{3Xk_qU_PS0 zCh?utp>?OV-ibRz(ZKQ|?4M}m3uomc1Mdz&;-BKLiFST215U8g;+w~swbH^bbdaJs zp>7jlBj-oKJ%0A;*Rj*T;a7NC%Hsb3!|e_A#lyp>PjjoX$vi-9D2T7MR5sDH^Vimy zoMz_l22}7RzJuZ)iH~z*rd=%Zte;_qQ3}BnfNXJvBo;s3>x_C-z8TQGZQ)IRZBBhZ zPnyF`xiI+}MZ(KGC{6;%2P@9wk9wEjwz*}Z_^RJYv0XkLHsbLihA7omJ4>SF_#~XM zY~=kaC_F#$7e%?a@eSBWuO`**tZgk~xI3S8jO{GDc-V7~_z9{?=Tb^iw58Cg@i$9P z5nT&iD&Azb3+H)HF_oe~#K`A87bJ{&gX>lNJ2k$SrNWWw6W(e|F(KX)EK$XPSmUM$ zP(KRgC)b`Ga&0rj)^?DKSr`|N?m-(Xobk0wZ6vTAvJHBtjJ_LqX~Wyt!zHY9TgDYk zzF|zRa7h67&ph%eN^ycWoT=gBqS@xY3-OKh&&I@(!_SI4+m!R|;!v@)dB|V~Ky&(6 z+^uws?d7Rh^YVjVDSSEbJ)eO!n|(k?Zywcfo4XQvSJaS$C|7P7l~|8VfNR#vefHn+Ew+VecA1$fxe7~AIhzyT-BJsjg+_C3_mhJuTEPZ znnBu0pBeanD%Qci{{WS={{X;APyLpyT-)wx4(xMRyhUa-PZ;X$-oL2yk-1)z1w)(vYRF6m6?_whR~L z`;XJhB5T2>Ua%_4UbUvp2n4aJ4y3MmHJix~;;=JJGe=%O8;%lTxe261W%yLK= z74uKQOei06urYTj<~q>0YqC>yY@xr$ej!F!2Sf(nk&=6D*G0f~P$z z*RHv#v*++!{@OM^Shu@dHE37vs~mkOt6H9i9htR~3;zJNiei{@2Gg~e zt}HdXShaB``>0w;Vq0DaPu@S?k&2Q>PncIrb@1NT;m3pSC0T8ci6XRQmBMX-)=ofI z{w4<}@vkoUb#1JCMARF@seNZP^Am9_dZ+H@bl&;vxl|~$JNCfAa`QzfZ#LXMQekh8@&%$;Z z&ZKJ+kS53k=n7HTRSt# zlpv~Jn|AyU7}2~7;%|sI_u7YxZmjOU(;GBaPi7~!NeNwmNt}a}Jdv92{3+rCBzM-& z9gLd7xrMB5tW-Ef!4C|syBKaPF@kuliw#138qs`DY$v>y=J3ldqbe`hp5cf)_Aktv zbISA}udRBO&5wq@A?f;*`kZ#UWD(o3mg(*i3)4ENc6Eeunac2a+k@VpI*R5;eB4wO zk;mLly6=TRW(|a+aEMlKQ2*jDLEvo{oddBzj=?t3MHM zv>yoSw%6V=f*l&g!yD$(?tb5YzGd38NI!?>LZo|p*6w%IziCd5qWYK~6L;|~ym}sy zsN6#XiEnin^oc&pWo-ddfiyCa83P=g=bvFt*8Eql==PCmP_3?~pxZ?o+3Hq22S7J@ zf->#BatIqpT!Vp}*FWK}hj!C=QrpEEg{T@0+_E}pzF?4$t%#cG8|Bz>xUXJ)>(sm} z;VTb_IxNuGOBvKHH3*X3Vq@lriUX8Pe(o^Ev4e`9Tk6Y_P5VT>)5<&-sc6DGrIUHo zFIdR-`jfOq^fBBwLjM3E0G8vebzUOVycuJo#U_`oYD?mFbbT%eUv;|Wg0Wb@#sS_o zgWKM^zl!=Vho|w*qiJoWEv@3fku)<#W>vaHUpIOJOJxjacfLDU3*ze^4d~XEM?%pP z?XlZP>3XGvL5mPp7~7rTZ^r<%*~M~<4~OSsZJX>5|ctRgmoNJ2}h!rPiA*vM2BEZ@Wr9V@B4)2$Q3 z@ZJ5c?@iS-$W}IZ7)cfLj7f%zsGtTH2X~=*GbT| z8>VXsE)SXJ%{Xgjk}^pc1G&jL_pea#e}-a*!x3sa%Sj!UgFH!T0Mm;|u(%7oob(xE z$FcRUU&9)vt7GB;Z*grVxnUNgLO~uCLFNfBzec`ut zy1J6mNR+OgW;0Ggx5!sN^29T?NBh;xT+6C>aS}WA`*^mya}~{uDv;Yl<^bk0#{~ut zZ0_A%lK68~@c#gg7sM8N&7?M$@;8!@q`87OV#9H69e6wrI{Vgl#2sHtpHzdVBQE7zFZKC+RhXxcLvHr{q~<&ZiNoU?k?uZwK1 zyk+o@TkzGS5Ny?+Lgqe1^(w56i^WwTQ+}@!t zEW!j-5q!LSp+kSbsuAQk!i{fv9)aSW2f(pgCElf`>K0nk-WXCld#7{+oV!G(JRD>L z^sYtptIrhprpDLA8o%}qntaIg?NUo%u-*VTM!*<;nQy11dd7$0zYutC<5n8zO-sU% zsG3-yw0S3;UD&S0JPvXTdJk&kF735X9a(8ME3KU`Mi)~P0$M~Z?BGCh=eY_b!99$W z+P=r5?UG*M$M~zq8aIc08D*hcYfpXS=&#Z!qP2i*hUa(!Nu-~cwvyXLCAhcT6iX<~yL`Dq1?kmVs$P6FYkwC=`Y+lE~3Lh=ut_W%GLK3}bHw|*hjyesh!N7Z#JO(Rm$beUIJ(k*UT zC3e%@RV4)AV1>ZPpcV8r_rp&NXr3~b=R()tM)1Y_3w2{}^2V!ok1{J=$Ba03*cax` z?`mkqmLr<0jI=!G#TI&G79Jn6)@9VA*Iw+$2B&5h&9Hu+Ot|Q{AYk*&R?)BgV(TA= zrn3IQn$|Xw#vMXs@^uKrjU0@KRQa2L0hhMWd)KF3tbQfb?kCl48(P(LaJKVX+xbks zW0iDCl0`9-8id0)&ysruu2X06=UI7h;%J)NjkQxrr)ls10-6s7VxCLUEW+G z>~EaJ!)s)5xtrd(-3P>)r^Ig@S{toS;y(>(x`>JFZ1>rVc~o!m`55E{@7|Lxbv>jx z4?p;Mq-naXwD&g}LtA*17P_+W3eR(=$!Cc-d8}~4S&m5A3S^D>IK^~#pA&VRTIL&V zPWIaSR`VoldkLp|yIe8b=0i9=8w_^f70w8+QPp(s583JOJdJCn&u@7ptoB-!+)UPR zla1X;ZP?^{SCDvDLh%0pjQmBZ-Rd{7O=%3nPPWzHklIWb!2Q;9-}tH- z#ME%{_to1yyTiH`qosJKOw%;GXteoU$2OT~X42eg_kL>Zo!{mG3IONvt(|8^(>xiZ zN}3LpcYk>W@_F~Nl!7b?Jh)_&=Pe{z+y@;&uM)qs)w~mVqU$;awFtP1(XHW^Nz-O! zxQa&G6w_dkOA!#j-~|W0dk&T2D{me6BI8Z*O{AC5!{ zts-d(eCf?-h43(kT=6EarQd0*abarmv$gGekXhsw7(c(8VRS#Ilg(&!6*c+Hk5y(}FYC)~MQ}h9Y)y zwU)y?SMcXe@c6aR{5f-|>0Tm;uh|mbcNRC8SKjf*$c?eUR3Pw9Ipt4>yg#aFHhOP~ zt+ee9*6t;Vt|KnOW)U};GhGr&G5J)++>M$3D%kM(*FUmGpEc;x29@N;8@i3R$W?rp zzyNZkSZC>27Csm{hlTYW55;<{uWjNB>x*)bTw>lio95c>+D@5YO}?};y_`}~O!8j> zc=lO7AYb@C%Swhz?Hcm-$ld9;UTm|&G-@s6a#WT)K?~ zcx!vuK9IKMC4xtk2fVjp2h2*4Q~i*8*N*&Bveo_s{?U40h+0K9TBe-3SDA5dhrE!^*mSM zXMp3e)3pBp73rFN{;S}NS=HyYXq`1%Yhs(`aujm`*%4u$2`9aG-Y>a{tn@z+cu!ln z)RR|;t*(=CsI-1`c`Ey6a#*Z;bF^{ueQJM!9wyQ}JL6-gjce?RU~9-OZcgClLyxm7 ze-eNJ&-+HZKZ@T6EVbDr)pR?1Xzw8pdwZeXO6#ZIZbnviWci|#8-IAdiVp&zo@}c} z3yE$?*`8~zd_<2_vhdXUibZFrT1?W2Vi*>CM#2a@%M5^w$T&l|_pg@h4BiCz&wCxD zHE-LrlBnMx<1`IS-V8@WkDEY0FeP8?p>?6e|Or1 zXIay!E_w&4>sA^rgJEs0_>W#&X#^pj>dk)7glGN`OG&jI8eKC)vyNMNmR&ubIJRIch{N4_*CVC)ZG1`N9W>p+9lnQc zZT8D+=nvXXpm~rNjs8@~1D?OTs(-dGjGx0l2Q>{oAGO?Sy2%=Swr)YWfqKgu5!3;+ zkM>v&)xc=7_@Cj|!%v4E9)iX@{ddHT6}%cqnD3N3qv&n8ze-v5z5&qP7PgFsSXk1OEUD>sY+hVZMbO zWMzAeQ_V0(3vnP_hjOsSSBxBySlXY9EIt`Q4z~9e(Rf~Kf3;fK*hcalXsTdBAUwzc z=Xl|Hsr*Ocomt|J_V-7$*YxzWis~z2aKPHO(JFbyP9{|752!2rG|ikUN=_8z?z5ZI zW7YmWc*x13U5^a-M#5*dxbX&+6tHRWYk2v7{CsSW8~*Z%+rrh)K>z){_J zGj5Zn>5`kNgaIyQlXeulNa{?PC+2RQ2WsOy2X}eleNI_*&k{u*qpdn>Moon$63PJx zM{FrvV~Xp%cjJr3zp}E8tm79JpiOagKa(xXBf8;#=cWJ$XTQA+g_cS+BDu6G_}{|s z;|&_$RnhgE#kyxR+*&>@*EP~?|j8@OWoUEP|1)5xHY zG~@1)fdL+%`q$aIr`o<1rJldy7~+!6ZBp@-40jR5=5AzDkKzV6+x`SA^NYnA?xFD$ z#@e2>b0ECb^=sKKT>PPAmPX?P1P;EHgI7F!Y-0$jaNO&D5cvB`@c#gdS5ol~pC+fJ z`4SH+&g0I)kjfbDcWFI4c%I>(AGG^sTUt6R-T-WPCC`C>R@R*7)H?)N^G>7F0>XQcRA+2e~z z@Hd9-^*I7uCEl1OF}`pif@#SBi~?J)%~If=;ZF%!)3mlZ<^8e#EPP_VZ42R#gJZLr zSpLuE!k%McxGcr~R6KR-(wk@d6!@Q9eLr3Jq2n1X^(|KIVoN(YO~J_H22RI0;BY@0 z>U56@U1^%Ux0+U`G?MwsZXvQrXNg%if2)Z(d@j?G$3DirBV1j3UhtKi*Eh1sX>lxf z?poS3Y10K5nABxhd1Hcez@)7mjj7pljX@@IR9lt7i_IJTD^K->hx+SfgdbBR3&flDoYZ+M|6E)5d!2CQ*A~ zeRPn@b!|rZt?nY3GFAWw@P;7c{i9X%EowpHk!KdIWv}ZpJKN8FHKVAvfDbs(n(9az3g|rK2NnT!!_oB2OF1;|(`ZvDA(2hm7?NP8YS;K`iU!;h{&3j@aTV zpE(1g4{T1i(D~`ctfwf&9oK<8C2{cc#5$_$+Bwxk(?vF*4aQ?C?0lIv{{RZ21RK4N zrF!p(ekoaNJ{8n$G^k0ZlbjyiG zt9dLD>h@CkhSFH03Vi+GVl}~FM;lyv8nNLm2gva*k}PG>?KG>{9aB@&qb4aQNcX!r zQUMLe&7b8|wR)Ya4yxL9bZGEDioXl~A!;5t)dz*V0jpct*_5>!hM8$9+v*RV92V)p zRUvr!KDEz$5%9-|v>)1EQqgq_E6YC=S-|q$$8VWrw<0w=&U#=l&3=sN8t;bhJQbuv zty)_byNzvSwXnK*g0trYCicSfp1n!pzdd{@X>;N~+PBA1cyavu#J<0UWpZ{&8aark zJvd&K*D7@56)3Gwo}}?l65Nut^gX9ipToMwgJ{Ng@lLB}Gv8d!sPp}yw$IJ~h`gx%Ar&A6dCkbed!rDX^ARL%mSs;bR=*u4^;lzr%|!7Hbwz{{UoZ z)>js>i&c(z%#kn**dZ6@E?HaK09MD3{u$~X8Mx8qy^iO^a^74^8M^aCk@);Yl#YtQCZ7(;Jza{swEQ@NdRj88sj6ZA(vwM$@jHpuM)WA`c>5 zH54<0hE$GTSR>?(tN10RWbn3sW#_?Our+;Gz}^qG*8C@|SZeY^e{XRs-r5AZRN4e% z$$i12D>P_G?if~XDLbRoShrF(xA1bv+u^2hnAV zQ__)E(%V#3SS5lq7)V(`$uX-cFvo27tX}2QQLASsW1_IQzPr|K^*s{Z?d>jYrHbbA z&e`U*cw*c)#N&b^7+*1XzytVes@6Ugc#_Y<8syiPcJ{h^yUQ-01kZakac6XFr*PVm zF$ZsByVktV;cdRP;OH(dto3+<&l98CO&EK7=@EftK)@9s1>>fEwbpzq_=V!jId%K{ zonqTe@ZHq1w31vfxRx74rb@ z%yq}PG^E>Fp0*DMhr+{_ly^N7;n%}^4;5uO4<#snP=howG(Y5_f5KK(N;A?Xi4HXO`Ayc0Qaao8{&)K0C=~DFM!YSW}FvBJzm(76GLU;yVMf;g?8+BV1j68Wzn*YwMFvGWJ^ zb^e*3GW%}gM?dn>KI#7ebXS+?9}xAwhZ=>?gZxo#9;pq~aW$0J$83^rP{@vdyfgZW z&ZKoU<(1Qx$ESE&>MtH$=~^YWo28Er>7rYfvxU5iqY5TM#U=;cV$F~CtG4)i;MLP5 z)86w=z193FEYaT^#yjMEq=Pg60DW)*{{X;i2IJw<9}K>;rwbiBRlP&@nDpzXk=9HP zkdeUocAR_HO=05Q7RJj%(XTalKeW%3hSWI{Lg?y5&fPJV+k^e;)(XhhGKE&$RgNP6 z0O3`X%WbcCEVqF*RMY{}u7%IY0|ULHx9SuOa=eYkpz%hDqTOD2cE?+u9TUZh$$NFC z>PA;L5{6|G$1`%#NEahL8-03}h0W!S?aqa&=;rb-SGuec-NPI$J<|b+bl|6f8y;|5JPtWEOxxI7-$y^F-02=2`)$>pk#ewD z+^w=&LYW1!B#|M>&mLeT#g0 z%bJIWq_KwL>%7*<2m;}mDlKS_^ndzOHD>ww~1R&mPMEM zOxfD7#*O>{E`F?PZq~)sgj^N(JAEg^@oAH!6KQtVnx&`^yzz{??PeR80!Dsr-j%MF zs|;RSPZ|)%K3XzoCvPBk`D=@s_r+cy@e=vk^|Dz@a}u?*5eS?WkAIW7IL=8YJmH0R znyTDdybX74ZD7;ehY{M7u#!Q}Pu@K^t{RbU?Vc@YO)q(oHM&T+^BPUxK2KPT^LMP)thgr^0}s6EPNr#?9uhq+J&{C-!05h`#a#&Hy$d{ zE$!Xs)UDA-0fzkX&uaOVJ{6nR65i_?)zMeMlgy4ZY=-$jUe%#*@RLNk^3B8F&oK&c z_wK5w6pR(`$UOVkqVrVO!g!G3w*D!WJ|k+k(V zQO~_(>C(e-ZakJ(Optct83&wVs(6>-KZeDDjy*owMA{U2v6keh{v-6NUK)ion+WX! z>_o^_>;U7BZY#vESK7PS`urvx;h>>=mv3xUrrdVtAH`6lMI02yJ*vgg1%Vs7_NtEr zbGrufH)gpG{W_N4#n*lhk}X!=J@Q)};05LVS2fw`AG9Bfd{3v`YBoL=jWqPzx$f`8 zLg5VslTWL3O3Qyv#}d7}KF6r|N5_mLjDn@~2~lrVfR9 zsa1{6!uR4g#7p>NWrIkuj$DN%@>!$@C#V2+#c}>F@dt}7v>ThfTULhdI9v}YV8B*C z#6z5ry|~6rSonGUrDLn>Hu~P0(pkqKAHMsFU!xE9x_*^&#g1(Bd&dPMkrWz zMiF%Dd%!X`JVsKO<8Dt*na8~q&CGVnl?Lx(_r@vo-w$Y-Zmp<zc>$Ka6$1+9OQwE({A=hNTe$2s{Vv->SRl|XY}zH$ZY67RX9A2&0`+#! zIURBbYW31-XlcsitJ+#qnpwJghp2FT^ca&UQf=F3}hxma9k6}>!U-0GC zjm$cgm73qhH1N--X|}L~a3ogT?~(VmkgP|eR`##)4mqH)T^C&!y0j6gwzY92QG?Dh z58gX={N4B+tI6*ED0q{^mudyot&Q{>;rnD?E5|Fi%H_LZN9S3}61~B~cjjFU`&%pf zpz&Y98)+92&33a!JgFAySupW!>^J4UtZSHCOYJD?ms-?QK{cG9K?7N}*_n{xS7|#2 zan~6geJU>&cuM}?#M))fzY6LFC;M4XINPk!f*7L&`CEXeap#s0JKY>L=~Rr9Nb@g=3#fP}#5VSp*HX=8JYv>wG7^$U82hB>+?v4g zZ^WMv_%_~KeHsXKOX38dYKU()nE-Nqzyt8FN!P{9J|$7&J7to`QITVKSyEYHO~hmZ zGtM`4{wksI3dc&&wHx+LI7_U^V_2n}300Gz4GAP}00W0Jpm9ZzDMr6{P)S(I!h zv++ih+U@?OYoTgdZJORlLIR&?!*c1>i+~V)YXex)W3so7?t6bH?Y7CN-HD?FaY-VseU2fcppo*j7g?i-FSv;i)TfNV~ZgPZQOm{axv{(2gMy?{{H}9x$z7W z%toq2fm-BC6f!T!qmKUHN=)dZPEdYCdWFJG71~*tuONG3Zq4v~I_LZU0CWW;oF89$ zE_6lktan;{uAzSmO$uG5+^|6`S0pAvC!%%@>z_)C;j9{!zli13S|k%mByhnBFIj;j zk?Gf(^xqk1w;mPn?fOd`+LU(gl6fl&%q=H!`)xbQN%U7oq{{g3uOu$rBX%8$0_ z8k|cUQcJZ;I1FS01Z{FDo$y;E5z-rQ%BOgIjBW&_fSb=Ay_SM?n}>m6q#tY zIp{|3yZHC5tuMj)&b@DWb+73w;u}$BjIr-wAYz~Z!Fk*OA2&>3cC4KX#?$LwJCNLH zI*sp&8U{aOaMM1R3heX1aNc1jBRLofIHp;6&fCB`OX#Ok)o1ZG*0gK6-!{;rNH>7d zE_yFwI;m2SC;{FeSEyhB+ z5(Plg-;}RI-lm>=L!K+M?Zkp4RF)hD1z& zZcs>GLEG29Yl+gdTiYAmDKv@f?exnlS#>>FA^p@#ES^m07?Na66&&}?c(=pL&m4SF zv+*vIsoz0Ah%`&Ix4pI0BQEl+X}KAGZ~z>THv02kz3?yL+IWXtx}EhMUfb;Oi09NA z>8)ch$TO8#*cTpQ#t)?^Cbu-FN}8nFdz}uU;;kp)?dGFtr@Z>Ehjik~<3hTVY!fV> zF<9657h@?0*EPlbJ<;s6o84PV@WhbnR#vx9d!(iN%Pf|}Cnz!UxlkNr@&Fa+ng_!B z4;@PSR32zuI#4fWwU1@R+^Wr&XC#t`rqj+rJ?lf_XTm$#e`krc?G6`%#Qqwa`(DB0 zjkB^T51NbzPnY@Cw`5gpL}U*P>mM$xqE5A7cg-+!R$n#JtX+^wWVOGzEMBr38nQU2|6-xz#v z;0wa>E~) zbz`OWTDH*=!WcA*tJ$SZ zD)!I@l0w{EhU%ju0ewL|>)d=};X6-^8a?)wx9fj>W`S2s@`}r18zH4&dXhos&GS$<_wV?6XHBef@cXgatV%A%b=b)$#zI}d{L>3Zgq;+b1sSWUHrmv%^F zj@mb2B-wwLa+htr^P1_t8+emazVQ9v@aCT_l(0-%=JbEdM%%edL^v$vixN2by{k9I zo-YzVhdfC-PLoF^#k|*cQ>xrWZ6Ix{Bz>~Mk392QzX!$T_MdlUaCHk!a^}WFOMx;+ zCzbNZsF98iLvl|%`ksVn`#AeYt1@)&4@@=3)GlLtol%`6@}Yzzip&65k&gh9 z&PenksyByhZoFX!hOISg+wTd>G*ihHqN_Kb6Sno*yb~KYC#_AZMX30$4LbKq(=RmG zZRV0Uidf@?8!@Bggo+rL-V@9|87`=@{+g)3`V0ojc84SPh z8p8Nb;mNgs32GYFi+q+^t4b{N%UR?yz_%)KAC(#CjkZJo001@X+T_|T`W;JElTV!? zwOOY7Nl6cpD8dz8r{*Lu{4341%Xs_^b!eIfp(^M%vy1h1a3;09hht3|00!aqY@NUD zA6hSCmW5fpL*pyd12vwbH=(B ztz$LC&V_e*9+$6(Vf!?tvh8gdMLW@&Q6Td%f*cOUwmf~Q_~*oWCXX81Bo(MKrLn!u@s()|ZIBDcpQ8)Uhf!g9CA6DC%1%sp#*<*Mp&F4a>v%YuLkPg zAJl#m_$$T`%W|4^#)%Ex-YUlhpzy=&`&=`N={OTsi8{F$6YKGZ7*k{JcHnNrQ)9$4NqFLzB21G#+Gv2t_<;`;vX^) z4^;!wzMQrAfdzzmcAF-vJ;c|Uo=b~}73Q3v3FSOoZgx32U{nG*>yJ9nHD3gHgHVPG zUk>OqYcV4w?wh6Q32i(?a9NJ^KzQhRz#i1U7&OH2r-iJwe-3zVTU*^S`U{vt!EVt_ zfWV`9QoqbMXD6Hy$4ZwceGVG;j5#K+V{hVr!R!A3iI!Thp5_OiO%aH09`#xaa2OUx zDgucVI3x}LD_=Ry@hblB;v`dDY8O5uzR^UQRh_N9`zkox5u|y4<(v!%R}1qnOnOzj zFAaFF!7Zft&eLB0%-6h8bLCs;@G+VhJmxVwwsC?0JYfCN&pdqt;V+Bc2KWGEtdHH2#%w*&oV$p{U%c18yrA5&e_AqtN3c0BBCr9zUGDtBdD-xjo90RGC< z^y}XeYew=o9?QepPnW0L+QzbO@*{tnA2!{`leaaqsB2PQcp^PIZ3|J+B-JjWw@niE zBO5e9%HgoVNZP7)o@&%T5q=?fx(Fg$T?^svk`=Baz1P_lif22OUy?n?83)q2e-!*c zwed%f5$-%;sr*AaWsqwqJU6F#inoqgB*Bbh3X2)!{{R(qVkuLMZvo(Owd>U6s+4?@ z*ZAe3(r&yy_BQsKh4e(;v{#pQ@tb#%kfzk%kf3w*%{s@#R+_{?=GCgbUY#O z*Tp(g-Q4SbCAE^)G-SK7k57co@q$7Gc_uPrIqE%YgPQM@`c*l~q+xG$Zh9AqG_4x@ z;nlj?Y9~&)y_!qrThtHdtYwkXG#-J553XyH)-+!WMdB|Hc)sdOjdFV{MbqSor3&i< zM(6~vu-eBVyXP3LYsUT{@V)Pcd>f_s(@55Atu5N+t!}O6nj1i6DvBp~*lcf*^XNrf z@wLZ>G@l3R9wC<6<4EvaPO#YB+ui>1;lK-=l1!s;KRM*|?Om4TjqY(*#VAyk9mUyd zkDkA54~n+7FvsAZ2udw9Td1J8xwlx%U^=M-3zLta;;R0~e+P7UMW2m4OBKA=SCPs* zKV>^M$lfLar;r6dDJ(!fsB6X-OVs{2{8u&>F_|R4oW_zk!p8`2nWgq41MsiV-w=2z z4Kg1KX{=%&*!MP?Uzw*wh6q?RZ^3TlFs@X(oVa*AMBQqe63ct1>Ua0ETit0bt?Bmc z=_Hrmy_KUR%Nk??5UVZ+s5Q5&Tu0%*32FDby}8w;lH4_vHYij>1D*0`JxYx8^sZA@ z@U^Xlx*}X1IkgQ!N15FGlL*h46^wr>_28a)^u=lDUlR14R?|UGwO_8OZXsl~X%jO> z(E?SaDo)XyKmzC&Slx0-A=I(zSe&R;S%&&;Uh94`EmkQC!1oaV9S)Y_bvT@8N< z_>N1dHCcy>1VZL{()4Qau-Ov)rK4fhKYO$v_Dy;88pfh@Xth0heI^YvOwF~O*7gl| z5=dhiB}ic*R8?P8KDCwNdmTT;SC+mGTTA4c*hX(;j^U#!3XriX^=52xJuzAOpNF5q z{vpwPJ>lI_+fvj_pJ|^#-pl2+w0>-1&Nr{`8XuG#6CbW>l&;HP6LC5(8S2_shQ2as z7nf_VBv*|aO?RnVh>Wg69h-n01`MEj3e(a29dz0@r#FW5c;Nebz0I`HZ)v)#HppJVfqEN_7C@jg7AVNk;^Zdd{9Twvk&_ zvAsy;SGJX7G(1^v`5 zII?mAy2$Iu+%ea^Rq%g-=bPe3ggjkqYZj}c+-eMNH4A-89mzQivAaZh$zWHWaH6%R z@crSv(%$D<(sb=!5h_RK86*k&wN-(Y$sxPoafTJiYLDW$uJtWeSJT@4Y{ajo!J9+o zTg@9Oj~u&x?<9I+rM9*_s?mJS)7hS*;QdR)mYSxesOmagR&oo2XR6%XK!H-(oPvwx zsbJs4&C?7$E6}yihtlhl={Ei!hSN*%t;}-EEZPi)8026u8Km2cU@s(RAlHEWIn?|` zCXZ*VT%K6NKv_9G1QKOid@gB&xoMgjNsEpm1!5YzA5pptE4MSs|#pS+3&9H%#d?7Nk?6R zM#2mn5P#0y0TCIS23{cCV2>7n|$G4s^u(P}SET}F#>%W!BXs3yq8OzR)&z==zamx^?h!6UVUyLw|1B7@&&fIXhSN-tOyask<$n(&u{EC zW%2%}qy2}=ztFE?mr#~7=Xn=J6UvkXCu%uj`;R$h_N}q3~nj7m2)2d2wqUsI+S+ZX(me+}vEh{Cl8d zAOkP75w!3#o@-8c$|^EPk?d>XXHujkqdc#~x>mn0#@`%XX_LvQSZLEn1h-c0m1IQ{ zNrpVI22Kb*%(DdD7S-8Eq z@eS40&xkcEYkQcXbh>vtibSYOV}N%yIQFkaOFPT`J4BOIx3d?rtChWpnWDM!*D|cG zzbsNJl_5t5KJ~>VX6$>^oRv7#pIy$+#{Mz?0EMma*5cE|J`$ed{?ZMR-rLzd#hHw< zApQ4NU{Q(BIW^_pAJs4Q)G^w~wmMzZ(#1R2p?M}TWl*vo^-3~-d+bN>(=}ZVUlV*k zzPQl*K^4}UB*|%1CO;t(I?vI7?%vq# zTyKZ9d;4vFUbEE5))pt4dtFCNM~3|vl@X|#KlQP(1Q2}LVj0f1ZBFAK?adloJ1L7Ws;~-1>=`8MjCQL!2D#z0 z;wY{4ZAVf%q!O|`T8qTmb-v|R2+}Db$><3FmCpE%`^3=ro5y;-pKT_&sfo?i;|%?h z*4?6vEF~M~V&F&uFQ>g~_&O`(v(oR!gs*i7br8c+OS$diw~{@eqAXH!lB|3xx6Ob% z5mvV@6%vbSozIHwG_MJGrX5bk%JSP+xzwT-mThh3M)Eu)$g#vYASp)Q+jq5jm9>VW zr0OqwsrZK0OZH*<%<|+M8nu`@ncP6uvp}Oj^~fI);&Hs(p`BkUPEZo?@E;Om8eHk`*LrQGDOx z*iA#+#+^I-Pg0hs)}AE~qukwFTk2Yps_HiO(Z?f*ns5R%YxmAh?DpC!Zx4JM)^$xU zQB6TKtxC^KM1xSYp4h$J?V33WExRB2XmOv)w-Zp2z8_pcc=~i2ptcuNUHrC_B+Iru zBpwQOiQH-~LJZ4K_K zx`vxQ?CS9gxSB*I0K+8g0-eQ=9e+C2_>ZY-6IuAPRnojY2lf)8rnDlp0VD=?1Oy-r z#3wmx@*r0=-R8simaitYG3&HA0Xghp5~{QmDuy6P2pnW zeOc)KIiAbH(&+lkR#94Ow>M(iA~Ug3db#Iz@*A+*fIH@(u#&?;w0&A8yHvJyn|u@O zNnPd6=Trl_k(18@+PuG2@eR(C;mt3^UI+VDlVuw)F<;ELNpraHh!5P5cRsnVQIEx% zXNf#JrAKpnscKgjmP{eH6S85BL5xm4nM}Cv-nS{ zEwzoE&Z-klnPZ4r#cQ_TPMIZHH_ZP4$GJ#Q-OA&&dLM%!i^6(-rETHM8;vr`@r2AL zbrL>!X6Laa;-*sN)XKgh6xGib_;0CdSNJU`S>J7FoSBaIAZ%o@KpZ*QCb&Pvgzl`x@aU4D;${?bw56K?QRL@r(SC& z+Wu>GA1{;?23bfd0p}pUOcC0yCCnZjxYD4IT~A@F29ynm;u!|u5{DwQd@W)ILRux9FjOZeifRY1J|aMF|iRsK4N9^nDiLI>JPOi2`6I?c*XnO4n}Jh zECaBF<8Wthm-6+hlWA>bGMkhV$tUk447kYYk?qBHo;bI&@YjVSh3_Fx63Lkjqugbs zjFlXxf4XXIFTktg9}in<7TSfas?O{l53+4B;NXvctzWT|S34yY8cMD7X8|I4k-04x zl^Z2JD&~WzLt!hkMip3Yc2v)|^scS^A);uP%WtV`a-=Lmfp2cRvO0D5HHYFTG(7`c zI%37BYQ=tYc=(ARBj!2Bd@w(a3XG8vgO!>@Q0lkZJ=N5fbG+8qlHxmNRS@oFBQ2j` zKPrESq`7?>GYq!&_o56)miRG~wD17`0C%l)`saqcD{{YS(O&Xftv=Z&QZBM3a>0oD z9+cfnRMISTORJmx78rGVhi8t;2U(>I{PKs>InTXUvVBdZUNLIQ?8mh6)~n%rb+@|K zUd~C`?gUoy?@$@fUqiv-isrxJA@LQutRf8}@5>nT=eLbr`|>@rkHU&Qfz+whYW7BL zw}bV@&@|02N760VNzovZEk9Vfv{i~o1F+6i7Gs^qb}`SjMXFfnww4HFx3t!^!yfB< zfe>=oA2UZ9qLm|@xdh{k@k^w577r9enumcki~j%)TD-&^Gf%iju!ZOJN*fk+Hm|D~9#QIj;NI;dN?h6trDC9vdlr z66zg74KgnfLhiQk`7=DATrnmwmgEp~$4cz({utVL20beJ;`-mi`qrm6n%0*aw!Dwa z1Gk)HpK5=M?7Us2OJ@d`;GF`~NxhjSwYt*`!Z!?XTOXyM<}WYBRuCmwUzMq!TL?Mrfhsr(cfH2IgZ(7${a7u2zBAQ_5T10 z=DbhvtHfG%zk6Y-J85>WGbCm5@Vm1NmL!g&1ascDH2(k+Yx*3Q8eWa8{kqP}ag<90 zWnu${4q8%Ifx)JZ>T!%IwN1TGRJ+r>Ee@%q>Uu5R+*3|oYsDk&M%|+fh|#g-cV`59 zd(=naou7`pOQq{CrKRi_EA|$)x4S^OL?KHnupzesanqXdZF|KUq&l|SYxrzpgdmCj z!phN(Ne(8*R@58 zR@yIu{6XSqW4O8y>)}nVp<{hAi-p>%s;6lqpcRYp>i0_Uq&IWerQy^X2$IO4StEnX z$&(CvF;cvJE6RQxYIimt6K*vh5zjo@L7R4?X!{SGz>uNYIZ`k=`d6=bj>}H*E{mzp zCx^F7b?01LL~i7FW!j)HFUd?O9C46+>KV%lbB$Ft+erCm!}jv{i&BN8)1be(SMb~1g=O?_nYSFU5=@xX>nMr@WZIZHLc{5O=GIW&;>jz2*B_1^scYLJ}c8a1Fe0c z9}Z8b>T7PHZSN)iRhmrfG;RB&>gk9QCg=__K3kt!r8qnW?~Rqqs=#8+^!NZ`}js zM!&<3$JCmiSkZNTGe!RZgv(9TZ7#I6f-stF9JB+1T1>7XB)W#5VeLLN*$eii<))0|@AMr~m<+V~Q_h%~*O$SF?T2 zXHn8G^gCP8;qMXMX&wri{bPT#+(u-$4i&etP%xp1 z5HDtX+qqb2UM^DavW1Us7 zuNSf1yXsAPX0PJk1NisCi>B&c6x4M&vCJwELaumOj*593}#q4=joeRM}K z)O5%$?hWmxqaDDOYiXHqCXF0`$_n9>9-ms9*_?`$=<`&j&f5O~!uFpJHOX}A%Z*wK zkF-2j52aqpC%$jHY!;Q-m!v6C&gXgfq90jt>2RfEk?Qn&I!YZGKz(%USg6gJWW2 zx|-hZNEZyQer@mbd4DkEagp_>er*nj){BCi*5^0n+DY;9%U;&CIs7T6_^#7?U+K&C zn}xc!3a8G2{_cKWoMRsK^d6mS<1Ywl*4j^oyji2_-etTGcWJ6nJ1PobKUQuk5pz7x`Kd_NV`I+u*+(;(GL z+xcQBY`4t8GEzh&^xA(K^l3aj@cv8f6H2}D1l}<^eXR1|+G@J2_cqUt0bqVz{QiQx ztH97$NVan7TIQXqHtFRdodmjbEUW>IOn@oiZe(4j*Ez1vFBxh2Cc7*iBEPm<3E`AO zt;ct~G^JPPjfmSKV`yY!!32&?RjxclIhv^@bbS8+@dx3Rhk(b#Ujt2`Y0GhEVmxQz z+tqMx;f);w+pCU%1Gq2ye)VtRkHl>Q!}`2h>uGwPouu7bmC|LfyT#1+QRSX5FTU;L zE$PQ<>Az_W8(Yp(aj3~3iuFAoQ<^CCZ3=%etR*`_K_Z3<45Y?E$zk6t zeX72%td9rVc!W<7(zN^Oh1INcqnYiNQo!y5ff*^C-lY0hBjQgI>b^g`wq09C)GuPP zwukM1WVKUpB6G4AnU7Y?X9xS6Df1rGaV|-6y-wG{S}lXie|2+cZuHsJEupY;_Ia4( zy6#rtuy=gR@}8ZIbRHYHV`r^jX!@CJus+dm5pW)%M zy|KDJF_KedrHG7CO3thlhkmMoLYDOy6}j+=5fbU|e|0=JdWn+UM{EcaOP`x+?IBcg zhVM}s*=lVHk&0?tn4T`uyiXsDtuLcdc&?a83KFJ5ggXZuo;IJxvMlfQF9zDdsEeQM zyZZ}a7NslPNN1KOVpu>MyC_lr00FO6@jc$H;eCGQ(togPwvZpS#F~Z4hV&e5+46uH zzC+Jm-K&l9UXi8vqd>X1vd}ewrs}Yq+TFjC7M>F<(kq@x+)jOntm9E%LLNKZwY5Df zPtvt$bmOb(wpUll1a{NIcdbme%9bw0o!(ROmst!aZ(Jbt70!HX@vJwKCEk&9bp__1 zfA+N1;I?+QP$4*VaB#)cGh_^5g;UTXmh)548(;fXzL0cam-gxYm1AuhaTBz1Fjn85 z4`Wyw29a^EYqwSwnx40%=@Q=gDW^j+z0=6Myn=R;Hj<|RbgtP(*3jOKrn%(rp?80s z@czq1Ym04r`$Adl*6!BX-r^OukfH}T937zJ-n)+vd{Wi5=xlV)5oy-b>NJqR5>f&H9K#Qx$7)2r;#5HF9-*t{Mv=pM#zUG8lq#75- zZEwQ1o*c7(2VL1&UCNS$c6ba@mwo4<1-g4x{{RyBC~5Xa{{T_5o?SlOo(QCe$(l>3 zS-@BjG24K+IAM&HuO|3seXPae5v)zFORH(xrH#Vbo7RqTbLEZd1565x518O*acb4o zym_g7an)=z4HH_5*47J1?r$$A-)vshnUuwC8AVxUFXj#E2qObODWt5~O;b&I9R|Jd z&fms5-l?p3O5)SQo)FWt-?81^STES`FYb4jYh>607YIO@$6ObJbsaZC@okQQZv?t^ zl3nkP-6WIj_L0r@Wp*eqIfFP;qym6o|d+H6iS3>_YB0w;dYr&#q%a` zH!rAT-n>8J4yc|L_?6(F3{T0e6}YpYa?B}k5JGw={4UETVHsKNt5jN z`a@i}DuG0%Q|Q=5lXv@A?M2SJ7ld_>4rv)VYF(eaoG9nnk9)MSu zR-L4F(zQtQMecJRBhz)AKU~nHu|sDCtI2z5W-ZD~2b|1gwq`u}YqSyL%$jA*jm#2U30g(9AQp|&AL{nVbGzT#y?0gcwxz1*_i1CQHlcT9iY-|s%z+S= zMJMnr{{RB5KLYrU%I`$ebt&~JWVyMKrh8@^%xo~E=l$k2DtdC*^dnuU`!y5c581b0 z);u}m=Dv_U)~+u6x$Y!#?JS$hu`Yi8ah&`6SJodIJacoUcu!HXT`=hyt=l?C&c7_^ zRZC$10DGV1Un6`r)1Sj%wB_cNIhBX}BpY5pHk_M`@%S*WfB4*oIN0Zf_d#kP&V?24qWe8joxCrK@CW`4?=bbk;&C_b&?+3znC!#0U) zr$QB(BbG*Ntc*GhrA|HT=?{qi0JC?3wS7`OW=l;#OtXhFL#fXk0CDoFuNcmMI_1A+ zUk*dyPlX;Cyj78InmeY|VA>j4^x087xCMzo5^xm!C`SB zjstGWb_6N&AtWn1H_A(6s5SKXIK$aS==i+Wt|~PrA8E>xR`c{Z8=u*q;cbqoW#TDx z7;$V3)Zc2EvEC7M=~_(lK&rd;~gG@9r9BD%(zW%et5OHR~o2BS8d@FlRcG9dC+ zBD^qFjX*tkt;N)?^$!HDg{bPYS!;7m9-n&ww~jaR_%m`;f}2F39^h1dEYU^&y)}*1 z~~tuof-&YJ6aHS_-V z8;PfqGR(!;pbNv}ePZgq8G_c{JC<0iZtN|Z*X@X35h+j`%pZIoZk&&L=`1`k9p=8S zZ)2NBj6wD|O~V;2%9a`P9BxI=QJ#3LZD+&BOuV+e)^2X^G|O9wE*Ec`9no{Re4}|A zTPhchcAELi^Lx=}=}Jx7QD%ODe|u~$^jlp<-aT&a&ovlV0QTzg2&R8Wrb`wb?GF)L>hC zc+%antsLZ_x9B)kjY8(J zK6bTP&bx#ox$Qr({{X{u{{Vy+SJfx8wvSQOmedkt0rd8l04{{Y0c((JrZT3x%v9C8EvY=UVC_F-C@u8n7{__EVjhBbXAeKs9F z^Grr*qmt#z60zWKkEBoXo~~=7yV5WGXX8y*TE4imORWYQiHyP#vggcHb}Gk(F-EZ} z`m->tJukx%-S~Dbds#6~y2Z!#gtOdQK!s%3Oi0-nR@=2m&Unvy&i6NuB%i#FBSrBK z_IHjfA=5O*iHvOsoZk{(oJzagGwuuz3_&PPVv>SSmvMUKPmZlt3!m(Jq!CaW6^Qg^9P5t zOZ#j1JVkM+-00C8h#@lEVjng+9YAoP{J8@d$52mt_a6~zgJ19`+ifjvZ;S{n>>;+g zL-v7vbXhCD^! zPZHc*>Jmw7rr3wOw}u(=(Gmc4Z&C9P&c2`UjG9k~EaSV?rMcAgJvPQ&Hfwlo{FGRv zDC)!xNF4mb`cC~+i6SDJdqVZmZsM}qgQ$mkYnmMkm?d6os^5h0t0M70B8-89rb6(q`c&AA5 zhmQ1Xxcm*`6R1Y9*_}%JPFp*5jdDJG$T#)IHl6_Hs`zKbmfjxlW%?zp{mfQTjYcck zQHDTwCAN>DABB3(r{aw&;^ru<{?Tw!;3%8ODH=9F`I!BA_Qh`1v%tZjZ5Q|((8IwgKJ=K_3MdeX1(x+B~=9)f1)b%@e*R@!$MXr&i-_2{J$*4FB z1%x>ULC4-=vRx1lt#JB2fv9|8@pp%HJyO?O{{V$`Zb;B=ErQ1`tt3MqX<~onsNKT< z0CiONsQgi9ZTmocSn(~(-bHEP-7fy?QPd@}v^NcTc%-BdM{GZND?5Y-Zwde=z1vXu zU-3_0@Wz)vh@^wVFQi2U&Y7cWcJa=lbWA*Va>l^hlabFsp1B62bJ&(CRMD$m$Cvo2 zwJ3Fv-W0RcUrCwFNuyredC|P_oIJ7Y`INflS$bs&?^M1bcrMECN7FUCJIk3YwDO6l zrk+t1OoaaCHazcD+qfQZR<*n{#%Xw!O{ z{tVP^JQt;1-^Z*rnW91?wN$iVml4~${mAqCw+?a$ZgLJPmyf(Xajy$+5ZT&Wo4Ia< zhm&V*G!i*?ASey@qzV+UJ&N|lR6i2@SD|=z*TdHS7x4C(r|Of2`)0Lu{iiZIhA=Od z5CB6Xoaen7Qfi(l@h$$ZcjC=r4-i~iBenI8m1|{X9%Df4yMsF(F}x5k0LKQBeG81G z8D0qJlf#I7HLcv)!!3u1w4!Zic9BBO8BiHi78pgrAb)tbtyuVJ;yVj{Q9MT!kR25b zy_7aH!11&s^CCsFV=g(b=s@V4pOzKUjK4Y-aHQOHu zT1kGl_uB83sJ;EO>Jt%kvdt?1PS7`iNyd4vJ@|ujsa*KOQn|OBx0K~tCaoyX=HnHL8 zOqTG+bN!*VKP!3-!5Dz9Ne3sdZo;|Edt30l-Y>S)v>jJav(ur!dHk&zNVB;K7#>@3 z@~?j|9AuH&u)JHM>Kg8&s=)I>b)!V;LQiCpJWw=k=eFOuwKf6|T$Alsy4+fRwc-6D z%13GJqn24ev@d01t0PH>gq@T+Dq%+)d(^x2Gj!zSq|aH^qSHPg_#;!a(IvjIwrkb< zeWZJ344zUjidQ7>++6KGze@7|01y0C(Cs`mrrB!NH}KurJ6qem++`R?6sI7_ylxo5 zAKlwsHkm$)CxSJL=}xB)iHzgTeJgBAW{-q&0mE$=<%ThjN~z+#4g5*)??Uh0A{x(*Yxj(QvU#IX^n3iYB$2t=R_~McsCsVuGPa1IKzhH3@Zai zxQ(Nh#pATr8hE3E^xno`Xd+T_iziIyCvo|IBV7zWC)7rfe`~14{iA23r|!%~IlSvv z`4yUH`3}#SM$Ud}X>zN!Z!OeLt6K3S_MRK^-pcmc8>06STU@!cLmPD#(&VG<#&(bE zTOSDgQFG&Fv(fddp?@`%tkT=x-&?XqkdcK1lhkcLI2b>LdBpmR8itjiSZGgiE}NrY z0#jDhnc|)xyusv;;^d}JWgeB%YBri5fjm?8KMr_?^F~XHQFHbMyJ>~9va=YIJVuLv zKkcEcQog1Nn@Q7>->KefJ`;}D?E00&(cM{?-JINR5QUn+Qy$6C}EZ)tHnzHiyp7Ts=|;Uz@M1&x>G z`AQLk&OxVq6Zpe_qIla+M@xZhCTQieasx?_ImzR9Z@^RJwt{(7eUp=SXWEl^2g8tW zAKB4d7d&7vQ|*KM{ehZ|3D81bKK>ok8B+4z%9it5(Z z=GHfm#7wG^q)m)`#d;okb?IJB1@6DAPvQ+$);oPeQM-4Hw5#QWNLf>Kf9(*s`~@`| z9tIx`QOZuS?e=k5+PfGnZS9JTf~XaTvBy*IS>7w~mYw38TYJ4y(A)?l1__V+vylD9 z{OdmB#484hbtx>G&+PF7BvQ?|<2s;)fH?g*!=JP2fz3iS`Gr-JDQ6ypU$GbP@ zRB=+HKWk)bX^VcECZVK>t>0UQcU#{yWsd_cqt|OEcC=qGJB9{*u~;4~hV$Ycv!~u@x|v7>aihkW+bpBzgw3Df{{UH!aBH&h?4R0N zI%({Vt#Na25Lf$vGC9clGO4DIR-G7Ae6v??eZSR7rCC zsOr2$;oBWT_QO}ypz`LlMVR7EsVE8q68?i7J#$&Qhm1pC>XK@+M;4iQhsxAeP4N$u zF3>xjrE4jEChJ}g)is?1QMZcz(%MzFg4WhEBHFtsD$*X9$u(!fdcKXS-a>Ut_@~q@ zNMiFSjtFAhc}#z`zLPiLL2CRPfC zhy>@pLH#R|)P5;=QpD|(U(?fQ=p-M~ruH}^jFuh#@}1d2%flCzF}yRv*9?ucO1G+a z007C)L&r)hF6-mZf}oda*KJ>ps9A^UMI6F;rCaQImYw475BTY#x}Q_k>}@8FH4|HE zEaD}M{lU1B2{}0b0BBc#50310BduB3-)h>Pr+We|hLRc^m$-#^V95OCd2ICLSBQAS zQ1B+bX*mAQ(WQ!cf=8vnV-1d_XC!E`hZ6(}sNomn&Uh!du5Qmr@dtzMq}9A9t7{7P z7N!{WI~$;oEWF}BoRH-~DqsVt)y*o z`%$@yF+7d|NTb>JSO5m!@vnFA2Zt}TUxrrR8`E^1J5P%0&6+7~Zk~Yk?*OZ)+M`x$_pH1+Nvv;I; z#>yRf&i2wfX`L=ZsyGYsjp(6R3>@RQ=DhF4x|V_AO={A4bl7d|8u6COM47i3fm7tV zx87DH<%b;yV_e3q<2`TUwzH*N*!W9H({8R+WIBb&dyy7L-f%bvAk;dqf$sE)NEs@gDy4l#fL&UwT)+UdLm5;!P`C*6ps6-V57Xl$ot8 zXNSwUwE2i_M^TVR;a+~f5~c8; zg<;dR&j-mio2T5FR6^oLM$Qk++>8;7dm81uYw;3a9BN|kO|xlCm{?Xz)L9}J`@07x z9=`t6+^%<1lx&Y(_;so46X-8{BEhUpsM^l6*uUmMNr_6t$CM$X4QNltXNNbsN7q{8t#$_Wq5ZvCtx7( zM_zxzyPHoF=vo!^;$GV77fmhan9Uu=?~FgmIqTH&I|{Y2yrAV3*v!^7T_*nk zS--l~_f7VQ%GzI8uEPRtRuHO=B2rl79&?{s)UnZZYm3?MG>9*!+h&XATLThC2?Lg1 z9R_)BxybEUTK>47*sP?v9ehWp*h}Hdn~NPE zOr1Z{F82MNXjO5;P2C6sk6hF(#U|jDkyGLjn(M^2+I+Vbvr7tXX(nRu$iR?efgPfJ$I~(LEPH^3GpFvanRknx4(M71~{{Ue& zQbwZ|*Gh{x=ompvw3#bT5-RU7>aC9vpnIQ!5df!2XLeud)Azn)Y(*~;Ey-( z%rk4h5$s@!@*{m`Yb=)sP?fexG@L%oyaR{^D0rfE?@t~IJL(_ZEx z(_Dh>y?#-M^Ul=HLCNo3&V{My_F9Z_Om3$81Ub7~%ZXO%DER%{#X}q`WC4&d+O^xo zc8jMZuO6dt^OpMzNn%tJf%2q;4aE08n65TY5uI}S_{rggzP{5gqMBGOX5MueKquxO z--woAJy6jayw27&ja5=U>NPLyF6Gq!0Jk(9Ip@}8V)MmtyWzW!aoY%t07%<{vK~~i zs=pO9PY?WK@b#UJoVQwLr4CY9?{xN!^sBH`nAkTUuqlJkf)9H2T{h;;H2JkVJyLhJ zyti3kZ8)rR0-zBh6Vb^hajqN3J`lLK7rrC#?Zkt91z zYF3{U;IWs&mdzi9Cr>8g!L3A#Z7>*~42BFgoCe25+I!a#@gLzVK0f#p;O`gs4&=$> z4-44KACibwr-cb=ZKVhJ<1EDg0K6;8{{Uy7h;!I$w;nmu>@P2M%T>msp|a-BRks5! z>VJmea6+HwJ2aW0v9j_`Sr?`89&VZjJhh7Eegt??S$ z#r^}EPo_9FJ{#TpNZW7n?lBQ~<$ zYA(|i&p|2|18-0c)6RLN7tHK5qE8P8_=WKM#JU{*8`11qNd>K*t$C)HZQkPH z0)^Ut)#al?52+@;J@D<8t)N|N7Cv%PeJO(NS%zVP0W4vpdqciPuiFsyH|C}O4mM}Kd^@b)YCjEpb~W89`6s*8 z?xkUI4B~j=pL0fvBycz73O0It*zHzmZPS*Pp%DY&I zQ26WW52bGSS6R@!XDyZPyc+LP(gnr5Hx|$`TV7kp5hn5&ebOzG6q#vXbUjMx3&on>6%|14GiT@2oVLpG;s{XNE^I z0HuHcvFJ(3$Gv3u^TW5AexG-&q|<29x=SCGIP)R8$IHEcxJEfXn67`p9vQyy)Ov&J zdfonybu_X`ek3F&(&Knbjig7j7~9-q*0Hsyd}rcM65mGp#nWjrf1%neZZ2bz65yzC z0NUMK9*hrqnl##yZHeIhtY-+mhq8FtM`7lx zxqJ_7Ri74J_|*8P!|`a+EO!?uC7Z^VvB&mjRwv3IX9VqZAgLaOYXeZ$d^L4_3+M^v z=%jzAMP$u9kX-Y%<6f*lVaKqkd^_<;ycKb#S?CjAc%I8qSuE}K8ExiS$X5OGc}zBk zO#0^%iszfT>sE!SB^}NJFNe_hqTd1EgRz959gTVoQthuqFNtGW+_^q&q{>iPuM zYj*x2^A<+bZgz!~5~^E(C}l;YCd;iW=wvuB|{!#yutwYS%NE3HGLXp-4Mb8ljiNitkqpe+zs zo8&IVa(m#4`Jdu3*7QG&J_OPA%ex%{S?=z&<1MtIlG*2lmRQQS`nDldlpGDf_pe9L zZ!P{G&OnN7U&1=A$d1&d*q$9e>Og$h;&ITi-gwf>Q`1D(@*6a<5}A<; z!@K1Oe}e^BmhZbAtC9GnsHE)Hu>t=82^f+A74~4LnTEX>qMvO1AftDl@j17?LSrLCclSa0yYI zdeV4WbK(7G#FiH5k;!xpt7HH>lHtf%qEJBCK0xI9NnT4~XMGZ1SzCF|F0BlZvfMmv zJ;+tuvMAsvQh2IbUZ?%7;;U$ND2p^?SQ}{>Xe!;Vj`YuHo9z9aEp#JxLDvYuJsn0eP% zmXYlHC8DCNti?WHzi=_>gI-_zPAm=aheq)ppA>P}YPMVL7TIwealp+O2R!ZpKso1u zUak8#cqjXR#=bJX^Jlh(*2Wz=B@eZjT$D3NJ&Nrgfu*tX^zZeT$n-s9Mt==z9}q2U zO6l5IR+3AtJ_69iE@MPU zz@)lL*q}3 zdY!boW|^mbn$zsfYL|xUHjPTU&xZ7$4~4d~z0oYM{M(zwRu>ngFfR<`Kx zu5C5@T~=h8*GaZmn5=h3SuV_oPs%}9kYgQwookH0)-G&yIqfy?5!vZ>_Om+MO{B;B zzc*@~%4H-Sqn*C~^%sftT`%F4)z^*Y)GzO>8C!kJYEsB8E(;Wi_GcS8ASf8%*TlcH zckK&r;#(;^C*gP5;rl6md$QSVwVwAaPmPvRGh zZ}gijcJp7*qPQPqTb?}0{_8S~1>s*sU()AYC?P3yXa$PO8 z{4p!;QjaV~EM%SwgV&5;pECWQz5%X>s(63Jo-MSzH#17oMQdX+M*2f+-2}H8=X;&U zZ>H1UzS!{Im!)Vv6D73`TKu8{)|Wc2cZmwSNCrog;mGGaj0({!n9#!1oA$C=vxC>} z^_#yFy|%I83-}4QlIbmBv$MM@M2(4+tsIgDJu{GNg7F8%o2%BbwZFSv8~YWdmf7#E zWYcbUxhfVd=oFLGl5_bA_I*>~!|HmLr*nUEcLb6}B${-PUU>&jnSsf3y|V6D_vB-W z@Y}Bj>-PTu5p)YFr<__s$#rnojPfk^(MH&S$T)A3J>h*{J?gL0=cQJx>B&NyyIY=t z;Lj0gnt#Iy^s6at^+bqC9o^b$E9P7o(Sz-flEJ}X2^?S#dg}fhzN9=dF60kpw>qqM zaKRjlcB9MOBQi7m<$3Bj$UXB|n(l>ft$2c2WAOTFkVA59^&9P7Ba%UGTXNx_?jr3V zFVy$0f5aXd&@}%56YBmB@E*B$;oWX~$gbWwCy}i5>qbEC!Xfg=(uQ=6M?zTEi($>r zk=*7lwXI9yBz_^dlG{kL(fl`g_M3*am&$ATVvrDnJmE~6usGz`Rd?cfyiyu1Qfm*l z`47@tk9USY98|{7| zSx7=j&gj^7r|Et()9f_3JVAG+G}?Zm*4G+}URlQ}vsEOIB*ne=F+Ev!`{y*iW^|<$ zC1z=OpTm}ZBk?bW`~&uDxHK(0Pgho%^MltRq{i9sp!@F%y#JY9Hm0@+K=&)VMB$sWq=DJZQ zmJ6ef5tQXho_=3?b_fRYy;l9*Ebr3>7nT{ z-|M#aXe3)bMqJBiv6ntslLL0$=N{M<;yxn%pu8jS)Xi<+-xB?r?Jkx#zte4t3yXcL zv=$&|xUW3%hwWn8g{+Wh-W${4S+Xa%jY3@Ba&pD`^Xcte?pJ4>JW^A-KEL=;GH9CR zmF@hEaj0t1c~D#4?%0ZwMm(hox##BjiO1z#&Hn(4G(UtMC-HE-)h%?5D(z#xv%kJ5 zV7N$-`IaaYmSToN`8@vj9jo(Z*YgR|4 z0DNuu%H=Do%1#b z47l|9e^Xp$rTY)~lfWK1(eytZ>)Lg+H_QRL(VebkfRaM*+@J!)Fds_#13>=(f`9xr zw(#8Ax$!@Vt}WdhNN@a|t+f635&Xadk@!`{GQQ_6>qRQjO?I)1;*Z*gz+NP{*CS0r z=F3bMaEm!3v|ln{flA0p^=-rOtNt?o0D^*eM_jhFlIusjTewP@?o|Mi<8RB!9f(m_ zmj3_%z8B4VCY3jXR$WRg-7Vd(iDiWZ7zz}{Cp?vAzS**bNqr7F(P%;UZw{@q$ni7#Tg@c#gTtnFvE zMJY4L#zr8XNFD2w@gMCw@sr1T73HR#pitsSojL|SYx%+wGXjfUTM-?U0fx* z$Gx^ZaFmsSR#=mA1@!f#)wdN2KUlpdEsvEv6|4B$;2qYJs@?cv=S+e)m_dC#nS{(7 z9mS?U#CH+5+upxIz6E@H(LOC`mKsK#tInF`q*48z#g5T{iW)F~h;T_h{?)_yZ{p?U z{{V@+H{tucIXp`%MRI4-?rjxEmeEEMDIL*JpinR{PdU##avu@@0Au)cy=r}9!#B5H z0r5@3o6CJF-X)h!+!P(E%fcV_M@|oV6g9j~D%fjO_HkOH>q|>{G<|yJO9V)7qE~YQ zq)cK24b2<3&9|=|G8@*s*Y<+&wwJG3SnKv49=z1Gcr0X+!G}|8$>Nl!xA!3L3R&L>5Ga-^qfVObG_O0+yRrEAxBw>s{Xr|36xtb@!CAiB6^Qd&_neb7b& zFKwXrqr!e4)czgX*;{B@WICW0`)@6aVr@%g=_UoT{OIYB4{QPNSH2SX^4;w(Bh=zA zsorZdUaV`gqh^kU<0~(R_b^;MSK8K@JInScBe{y< zSpyY+F~`mb>w)|`eQUSUd_ia8KO9)=4|*)&yR}(Gz1{4W=^3|?RUD)8v7a+;2N_f9 zYdcDx!(KJf9^&rG_xomdk!77BW@aIYjhLdIaQNen1!(BdG+rzI&e61auP)+P)=2J> zGbHx7D!@h)B}*f6{BV6Lk)3KPe)QI-Egyh2879;(A-&Qs^!Qd2DXsji(TB*0MB8KYZZ)!NTqb9AGU=r?!pZy++@`@afGJ z!`ywKy|t<(ti|O8p^&HmqORYSc*#DsU&NMrexrXdhf|kM(=^M!v#cn{ZKD%UBC&)w z%&GF@1B`>}Y2L?WIZ5el4IN^}eQQ_M{7){SZ$6(ZBBthfV2K|-SR1-CVDLEPde<#$ z;0+JrKA-35ca5R7;mn#|rleXGMrC3#&IwbGdhhjp7sL8?fex9ecz*tA?`84}!j442 z5Bl?x1`3q}o~mnF>)}R`qFCEp={Hl^*(f&VYuVB@j@^JITyAXq#kt7s$E`Ts+-^=U zQ-#tzA}%}uYjl>6d!@~A(c8gmc=r2T9i)=nk@9^j8^u~?yQ}Hib=9@)%of*-w)0$G z%o!mmAOb%#sb6nWYtdlw9q)#(%k8yYIum45RR+%VE>H_vFqobgNGZ_-5Bxz1Gk6-|r)Np>&(pKT1t8Yu!RN&=Y43zj4>U@}h}SF?EY z!n$UksLut?uo}&-i(0~MNHgaQKx5b_U&^}sFM~P;lcUXdqQLS?G8?OTWoW`?MES<| z;B@K!G_B2`N$oD@j(iqd2`}t4yX{$SrfWkPNOp^xeXWrsms*vot%TP1mfvNWC3TR^ zD8sB|a7zUM=jAxZt!byleM?XHlP;%seQ_i*%7IpEa*1q2Y71@Xo|s-Z&vQ_fv>I}9 zI~`u?$HCqkw~8p6QHJ8f$g-Z=RF$83Pn`k5hb|dgAd|PRrY?c;Kf{t~mh;b|=+b!M zq;`d^Y>aWKSs6AEpa&yv0Eu?yeyLoS^!FLt4%vx-=W6WqL3l>nJ;ZIDCP7QFs3_M$;-Ck<2 zTHQ}~siu&{WtpS$n_(xE3^H<0&FPOyA6$>Zk}{`-rA9J$Jx@s2^y`gQ zD{V-fGUDzi?k;DQAtEKo5lDxAW`}HJmbA$*EkbN^Tv;4;Vb;f(PMSKM&;bUah9z zT4H1aG(yZFh~5W&QDn4kECb`I6kGS4ODBo^!A!u7LPr&GD&k3u@wm^z{^TH z6O41{1w@-mLv>B4`38~_7Q1VaWqGDvNT%M-AYRDKpeST2cP`QiCm6}9o-13ebHl>N z>^8GQr>yUEV#J0>a0rcC12|&s&p$P2Y7ku7>UIp4utRBOZo#df^3^4iAeO-7?FfL+Zd-n?US=`E^&{S>0LOLN+~*L z(qL%f6OzP7-di6&YI^RSq3i3R>v2n>*hw0~lN&Fyp(l|lynlUiPSAPcwLD+qD?6*( zJ3S{~hs6^H^1roo?LPAMSU6FOg!0ORjDHaA#d?j8hwOAqxwXwR#1d(?m#{0slUls# z<`UagP?FKEbMo}+dz$3DH)Z1sy=LO(E4v*&H<4nR1Sx874*ZrIKZxfX^T*P>nMu9Q z`%UXT4>Rz4c&oz~64~gQJ@wwA_mW!JvRI3MG?v`nVQy3m=N|Qb`pd;r{7bpkZ?zp3 z-uRQIZ?n5e_d8TT< zBJlhW-PzsSTiVGniDFMJj(hFz_4ccdsOpV1QYqf%PO0IGTbV81d(B70vLwrJ(CTx5 zw`a@%#T*}XfyQ?pxyNes{a@j%o-5bxG<%&7Owd&y?besD!xSRc5HbK{^ljtUgI;;y zONcx%;j2wYU4d_`ZA_6RjMlrIpM#yiWpj`-oP4#hf8&j7N7XE^Y%Q*Aw8@c6J?5O4 z+DQUbK_hD2RX+T{hTa;KF$MYxiHcf$p9UY91X7sPD}5ADr6Oo9zL zS(fH>Yjm0L6UA%GXZTNw_w)p2L@cUc_o{7;00%0 zLKPi4Z)4EQ>(#_ly;$sLC3q}q07vYOmSDzF&@6+4RnMoNt16@~GN{{G+Lq*`6( zp(Nv8Xe@1RT*6{V-PM~c;5ay5jm>>0v!f_;Y|_~H)r!SYe$GkBP3ZPsXFu@j>U|r) z77CUU>Kc{AX6)(Oq#kv-k%^JnTbTw!ju@X@^IJBM=pHeKOUs=hJQ9{j9qw!pEyTw; zDF{G&=kE%u@eM5W-->!b(4vyg)+plgrnk5bw}o&s$4rn$J*&Tm!y0~e z^%+&Z+j9%a_I$bJSPTM3Y}d<6lKjm3Wlj)`bSsJVi|tCzJ5Ly1YL+wU?P&&&;u}~e zUo7OGEm2dEj(2nK(z%^uPCg&itPFQrea5u0?zoJ?VvL@u1ZeHXG0sQRitR3bA6QSO z+}~;Xm8-&*?1+BOGjwn=3zx#4{{V=tZ^7RQJS(bdI-DA`w>SFIL-vb!9^l)wdlWHf zoe5VXCzH?VS;kT3(9O8T`=WTGU-1`)KEbbePs7#_cy4x%eN<^~(#XvjB)cR0$ejGd zalrSjJO2P4cwfX*t7(#3-rKA~`ZT&%XDnnAIe?Y4*a`5!ndTEb{=NpimU3 zBL`qo0R-oq4Iw*C3aV*rdq<13y<6dh+w0yEpHcfO+)r)x3tcrpjWE02MsXo*@G-^- z?_O!I_=?ug;@+Dj)#6^+T2F<%bBMJ_AAZPgdM)5C%ZnRq){WDX&(QMi~!7tbpMrCda zmRDiZ2d{pW)hY8k7*&H*xt8a9sA)GI6B_r3CziJWT3h3|Ynu3g^f+RgIY-uQ=1 zC=xq%KoUYfxXrmwy0Gn9-?QI`wQD~EX_uNVrwmtCZub#8#)1ajE2)j!_;;#;52>n- z`#32r1?{j*6u zz?baf3%g+*K(CH}Xe-?(#G0O&sc8Cq?W)5o*FQXX589@8&B!?+*B8v09E*R1t_ z0ci4SnzYxG>LA*~J;LP@JRR{7{74C0`ewXu;Qs)PHEaI>AD8hY8cq1P@YFVz?fb8i z-r92#$P|ANR#Es@wCI1?+8(v1y_UL~gmzZIT-yDPC7NQS;zd1JC@L}SNo;muTB%Ex z+YniJW-kid*!W5vN=4J2B)-!w$ljt+wOt*%>|(@!voem=)oQ*OJ~f%{uI*VaE$1<` zYQ9>|PEd8z99 zc892Vm&v!jmr=Jt371hTB+ks43&Dy+iF&V_%d8v+edK??AR+PE=+6&(7Y8tQ=AJ+m0Z>|?-t(Yqo@2MejUN#ZeasH91D%Op1vNDEF=3ZyFr zFyjSJPDt%tFOIw;55uW+?MuP8x_VjK+(oEdSzB3`iq>ak8|93g81j0kEDn9Dm&dJN zUcb^V^<7p6pIh*=g_iqCg|8vjorB1*7eF33RX4JR@HcqcOt7fQXiZJ#d9`( zDVIv|G?tz=wz<&b5xuR&&5ftp@BFNRx65e*Zps`s)5b7yMeHf!sYZ8>-A<##J}wvc z(mlHm?RSDfXZEA!l~TjZ0n_hio=-W?wRAoX*MH$NlFHXjN#4TR-J&07w0D*lC6{8i zrgCxaYY*Z4T5pK8)eC02mW^v}_fIv0GcdO@6b&l%Mi2i!7tj6#b6b zrjF}Q)1FHiRupAaFLL8*ecqYoi`?}mUM`(a1o6QAx4#Re9hxjX|YC0dp9d7GU)h&EGc04*^lUdax^90jK*>q-qo!KAsO4gMrgs+sjgyp~p0Tca|p%0K`s0z>+592|RAEdCmsRq?H{hgFWsLlm(> zlgo&~BuHYA$;To2&mBGKqt8@1-?Wy8qiTA-mOj&@+ug~e$8jaR%_XFbD7cjY4Rnhn zWJE~Xiou3?7~;J)+T+EuYPNI7tHCyxBym{7Bf!EqkwH7Wvmj47Nh(NQa4YBiU&ULk z6Hc(ytZ(I>CXW&_&2t^XF&R>ScAyLaw~PT^hu~irHjAPCi^O;K^J!6RWtwQD^Te(9 z6gWFc+#jItReK%Nrx_&fcDFa{;~gwB+>51qTC;Ys!3SV%{_O zTXz+OmBsbtv`-=(Tw{v#-6LF!<2I#fdj-s`q;7F-q{(jZ z%W%>0=6Rt2VYsl`PJUl{-?on1!nzp0x{Yk@E-!qwBIZc}bdA*Pj1r-F$2{a8YED-; zu~>-Grqez%{jp+(_rpI9d{tq5x0dp(w)@P!WWX4rIc5IzH`jjG$Z$iS&Q3RRc2bG4I4d#Y+WRN5w^ zs`#qL=ft{Sn-OHvquZyvqvS9LKQyNbxjn`!GF^AX+KX6tw@2{A8a|7lr}kE!x@02Z zt!?FE&v22qE1da%SdCxPHA`#D_V8?tHkGn(D$FDXKeJlQs?yy~>Po(1{n|14dv>pI zi^JX<(eCcq zwx0Fvg~J_5Ld+up$ZQVfRAoQLtKVqw_?N?hV$>Qtd&Y+KblWf*&&?7s!S5L-XXRe` zq4>AJ*E%h&_P&~Kj=G_1kF(rIgjOgI&HmW_Sg(nGEB@csdUt^J?+AEvOtyIyC$ocF zn6ei}k%nOd>5Aujo?T32;Ze049zpwE{B4q0=kO(tqj{+Pjz>$oi?%HwnYNiD+%8$r_1B)B_Fw>L65{oE=KeZZ6K!oN^H7(a&eyFFA76 z%Ng}lP<_FzQOu<3N!Omp4Knjlj%cT`d;LaZBgbQYOmme0?kN1J!vTTE$|}?z z2GTXH1w2~Xt(KQ#pDOE0kTDk%!;qXW9fv)5ubn<2c<;k!#X6nT-Zpo#x6~z;+Tz09 zSlqtsGwwdP$Kh73e{W4Q;nl6ho{y(Ky%oZ3cy)cBW@hfiJGTS!6!hwS4QyQ+RAcO? zcE771MEorhc=O?wzpH9`+%a0e+9QT{m1IaCX;B%^+*i&&;5EhQ9vZ*+f#ImM-wtZ9 zUF&*n%W8ApI8U&PnV5~X?X>R#G}=d~uaHJe@BJB8lO zDqC)B;xKsQHPq@K2fh!%;0gLzOz8lf(rjFS(d$fd2s5(ZWwuxM+85t)TS1|^&DE~kGvaY50rdGZ$6=u<{-Maw}%7n zXa0J3IP6xw%g{VA;Pb8ci%#(7k*3=XQQ8=1@a?s?l&u1n1&BelzHAZ?VOn1Zd_fxM z*E$9Do||)}{fVTEO%Rn#h4!>gz??A~&hL7DrtrZ^w0ZAzd~c;`pBsEtX4h$9;+eF| zl#=1(X{ShL3ILF?ZoepAeKA}95B-}wVdG62OZ%-yK+v>k7tWUE=Jli~-`ya87BGJr z`f}^Vx`%?q&^4SsBhaCaTYWcAxVkW0eU!0KV;vkWNC(>;sz=mQ#a;vd0EBZ?&^3)a z$Y^d_>+B`uniMS&*ou(YYG*6MiogFj@C2}P}0FNn1}?-JPFTdmA; z*w6M$WhI$U?+TNVw>b17y{gmpX83PqtZ4c+krtSdDSOtx)ERE&y+Q)4QJEJE%2AFn z{8U?blS9`hn@_#Jyt%uwjwt81gG?&%C{iOWAKnMPNB64_!MD0^g1kp>;+VA;i&WE6 zYm0q4L~$d?BP?R_*-K+;D`au=`sSNyY+R_)q?@I=>V7ZMf8hewCr=IODKCVjvQ&7C zsFxQv9EOrReTqvcDlnrTFz2p43*c|SS+w159}#NaA$?B~hqkmp(Op|ffC!OWp->eu z{>ZNm@u$a`{wHg8-Xgry&XpdRWJ`En)6TbPfWuD0P#I)U!B=PZt8?LZ#OwQsZKcz+ z8(V7)X(EpDU2^7Wk_V1Q26T-=ZB+q711LW)-2(*YDK@n{`jEvsJg0Z@)4{$q(zPEL zUt8PT_=`)rw@BaZO_?pNw*pyz+Ro$u0Bps1KZ12X5%@#m4~MkvQ(Lxz*5^_3?Um-* z*Q!uI@0YkCfd|yrXYtF%cQ;zzk7H-zeLC5%U}sy)OAEVr-FGr`{*dVC$EI^!>wFQ` zb;xvUFA(cfS(ppWbEjEEjc-4a0SEx)aITGy_Py(P{3muEa`q90WR>(?%`J0T&^%vz zb*k7c*6l52xO*7338A@Lg%QZgdGay{2iJ9XS~tXX*R`E6$);FAZLDb*j@Cl!%=y{^1~)wRBB@`Yo;wd2#YMeQ>{s6ttu&trUqh|W4YmEX zi%(`{pLg3;QB_$623!_lx7d2up2gvh2Utkf3N>3TdTlwbFK%v1z>`SoHc2LX4uF5N zUNieZd_bSZ_IB~XrpZ2oYaFGcE|SZ0GH;Cz9Y16^9k#NmE*FC$M6U3 zE#dzF0_ij9z8lb|o_C%baWmbka#S%;4{TumHMwbHajfb$`joyOeOlX7mRo_oac-&m zrgySOT$<@)7wMU6O=8h(+r-n;jr^_0bz>kbS58!J(FU5A!*}NWl+v+kV=|X~E z_iys6;3y5(k80$+J@Ja?;jhB0zlVDFhh*^7%Q*hgzBYszgzvw6qBYX;(Mv5yi|KFWX$1T-vk} z$s`XJIdo+#89e|!>y}j3i7ih`whk_esU>IB)7RnB{7c~NAH@Fv4e#`c?_>#KwoEPk z+lApLLDVkXgYWHLTkt+RJxjyamm17|Czo4&P1<+{loL;KNmMe<>=GZGIN#R*RyT|O z66!=r>qQ6~qee#~8OI0Sy+h&8iEeZ|&2m2y*l5~h zYYcK}ZkLI2w`vIrB337E@G*nPAo_}{H0;^SN~KA`xV;v^rFc?*huVgfsOZ{}^F`nd zWo0v7G%nwJbm&UHdS}|Zqy3k6Z6(ZlY&vGOc|4a=%OfhRg$ntZWBglodgE$;3N^IwUFMOg_`+$m3u)QJ z7S^K-z&7UdSd~@`tO9l59`(+8QK>F_qo}Yq`lp5_cr^#MgiP|t<=D*{5T;3Xb;1Q4 z`ZCNDbOtyvctXr(*6)9N;40uFh= z4P{<7cSld*?O#fl#Ntb9vo4=|8Me1;>vG;hgj3}OA1e%wG3#2I?~3QM)8aQbcK-lt zwwR+^N(@T?a5pmT;Yk~QUca4UUR!E@F4Qb_4O2mDZ9W*x%cRF^be>9MD|hCEG0TyU zPrK5vyjSBJ8@(3WPlD<07IMNn`EeUbwB!<^KfCgg&pa9!l%XYZ=Ztm6@wJtnwX8jz z)wP&phS?z|=VwI)iRB3gw_Mkv{0_g=d_kdVqT=~ADV2j;%-?q1KvDyIgXQ^3_5KrH zD}Da}2&T5tN22|z<4L{E#q^Nd?h;*u7>G@JS!Uc7Ot`HAUP-H z#9)Ey#<-sXwz+YlS>EawOX6U*<$S3vkwi%;JGt)O{+O?SzSs2Wv?kFs-w~#tZ)LjZ zCB#KZjx}B1G+-lcgQGsnF- zC3~Xcl2&Ju_-YS2;_}I~=moiFd2H=w9&BuYd0?RGee2PGXWxiAPLX#kw(z!@Xp%Lx zz@63yGAi#SQ2pb``MdP(S$gfBpWv?%>6)dsn?29jro_67%v4V^0tVQ~7z>PjL9B0w zUk){I68M3&jV+*+F6J}OCDUv&L%oB9UhD`w)GfhkpJUg4E$TO-PY&z$QC?hW*S5_B zmoShSrfjfR$3O!D8{gWOM4s-)!`f}nhpjE{EiZ@IH7M^GGfF`Xx!bA1JfA=-YfabU z)NgHkI`O5&f=T6E+uAb5*CP$IyPx7;PW)Gv&8b<%@gGowSWQAZc;tm((NZRc<|Bv0 zym5?xp+j!Z%ey`6OW5YASJ|Z*8~!=)6@~ADuI_In(k-u6?7}Wx9K@nW7!iN5{dZOl zf#D0+@D8V=eUi!{CE{D#w94^YUbtr<8BYt+t7sbDopWVLg0i&0-GE{^fC zK^Y{Fq@S4bc{S?V1?`83OIh7&(pcI@9@T;|<=c|1MkE_fa&v=K6|KstM)dh#Q_g-5 zXqwK0;;mxK#o7dx`rJNM&Y2VdNo@q9m1xNO=O4xRcCTOYH;S}t`#m}vySX8|WIBb% zo_7h*vm}eRvB)(KkB^7$C$zKFKHTzYPn1h`J8k||EC$>&5(@FOj1kRpUl8wP(;`Wy z@P@Z5TkSAQ8^$DcBOyGZ0}{ZDgWDByc3K>?C`Ov)eGP~3+G^9S^g31AL}3Qr%JouY zdu1dnipP}*Lmj^4_o!FJHx`Q|mXd^+#$s7x1R3KzGLGGk=TvmfA6fCvlLoBU7gm~d zaz?3Q@}wdr1eJjgRXJn5Ps@yVCZf2HP4HH+ANIRLHIzTOI%VK_WV=>;yn)x`+6!$M zQF^= zZ2Uy`iXIk)T3KL2mQ`l?f%OB7V!FL&!k!%0Y&B!1+@flhFC@_3Q&B^7lKc{ zaJq+twRtt|J@qX{O=@j6Sfwz%!Q54VA;RS3agI3RrNpQ~UEJBz^!vN*I`>e&x3^6z zS(D9<8)<%Il~e-9-)LI#?~HysveK^XwEY+(-dPSDwpRs#=ilZ2RnvaZSN=5c&FnVz zabH{MGAVDgM{V~EnK<3_BDqfve$DruCh$}qB)Hcg(qo*mhPrLvy#p#eiKR~s8C2$z zK6e!BRGU<`N1t5$OV#e~=eV9DJd()L7Ci<|a6PE5Ea|$H%gA6TQaKtw-TmCF5OMg7 z{xnyvu&t|~F)U+Erq84FpBYQxhPBc)TZpv%J{!jJ{7z$8;z#`L}$-jz@gg zcR!8nO`ZL=w+-Ca8fB8ovO{`jj{70FqOEw z0n+pV^Q?>2#xajV39mk~y(3i8ms;9#^^-ChLDa7b7J z%EN$LgM-cp^{9Rw_`g@vygelGMWomuoHg`Kl%C^w1I{VYcK`qj#?=S8uF~sM(>z1= zHj>_GYI)3rY@T=3qXrO5hK#B3PJwUo4CFn1PGPUDV+eJii<_L<>*KImFS z2A6eVs+k(e%w9yWZabk z#}(N_9O%W_9(UB?Tb<3c*-P+BF|{87CgOJ?qfs@NSjkZC=mDHutwzcaf-!+*-@H00|ybdxM|A zish?W$@@pt=)+Q2NT@}#%r!KF!agxwHcdG$FCerVuC8Y-<}euj;lRiW7pE0t!1`t8 zyW^#8KHy6Xw*LTYl2(z*Y+UYGz~gDg2fk~(_>rY}cTa*Z5Z!6;-e2T|-?>69l3R8+H7^TYUud#4I%E*) z6J;&_-7e%Xe-x?x$+vC<`UR)l_)+z51zKtM`lhF+%0PMT%(#ULk`ya{5nuuQYj;oa zIlI;8@c#fhwCanxdr$|I2mxG?)bZB1uZdnZ@g|jfC7q?4Uzdo*C9+zy%R0yNJg!Gi zmuUY0fYvZ`c1agayQH){+T+I&_;z_Tdz*)jD|UFrx&nsEPOEZw!G3X^^a8yDz`hT- zdp%O`UcJ@e)9;~1)30pUWn}L(gcHMe_7%%pTYtiE6T~Sh+`I!KNiuw)h~n=`hSaHy^&;3zK1>Qq|tm+t$1Td)AY&i z(&bL;nc}mOCo@O1d5GnCOm2@mxH+hdbkrer1sfcnkM!%^V^m#M)#SO=vMv74brf@i ziFSZPBe4Dwc_8!Bsw!*RliK)l=Te^T<5awPEVTRiH$t)~4D5e;FoAZEHXd`&VbAIV z`%hX8qNVw`Ea<{G%rht*ln<03W^M-=$?r*J;d_X!CDk=uGV4&k`xLrmwaJJ3)zCyLV)s?Qj9o~;Ly6y5@h;MG}kZfr86ll*v**RQb-~e;a z9?x@id8+CD74ZK6{3BN4X|*_D`!i}z;O%BHhf;tM@}6_;+PrJR`bYdA{ymP{QM?~- z)hCMj87^&zhVtM{7`?UDNM|GvN4LFw8S%eQxw4PK7Wa1PVg0M-T}IK#`{ZvUEg=3J z=2P=^?budzV&v?2PPC^t37$FeC*h^y-}ttF4{0|e!#dob@iFk#$!RRE8##s%f|B~NO8FEP6t9Op>?vm)+B{4wCzX3x4SN7I+W}@nOh4U zTL5ktBmu`X<+12VduVe>o;9QB7n&x&;GJJnXlIju_FPu-%nDmaaU7eSao8|YJ;|@6 zQ%lqI{YK)}Z9H3Q$#9msg~K6soHjmU$K_ThIVZN-@caJ&1I6P{hhGppO`}|YXD^4@ z@3e~&pv+CQn7BKKP;w8@*Q`NvsB8KKmW)+eAwhf2Wd=jNg2wY zYHMO}-sIdNvEAx6w^|L2*VwJ0)nK)g?Ds`X5=m!ow6e5rppY_KoOR84B>G$E-Uq(X zwR^U^!+8h_3R5qyu(V?JzQ#r_SGy(%;pzYV;hy*C(J;|!9BR`Q>V=0uHd!4r;&cj znpU%C*K4cbjnXqxi#2x7Tj8yGxF4>>|AKl0^}-`RDi# zltPo=2kBnT;cZV+@z;uFm%{g2Wt-|2=qJ{ERX6$-&FYWd+*|G(pxO7DD)8_Fp)Gw|c!duI)I%H`K zs>UtO30|GCpZ2Rh?&)pxPZ8)|C)47wl`I|XZWb*4re$)Z+Z>c^?cI*N`-=1L3^nhG z4yS8u^RA^7(7&BDO&ECmv6UJ7t@54+6dzeewJu&nk5TcLh3?FnhO4M+w_2C>D#snH zmQW8P=G;~$VbPOuQau3mu2V?x?u!$6vsTq?EcGimCbP7*c`iQCWS&JCS=8|yBs&uQ za);8p-wNK@_&dXQF^hv5Ocof?@6j$DX4qs@W60^#-nst(8pUtn`>k(DHny5xmvg4f z<4TU~NX+4beWGpOE4v3(Bd#M99CebE`6IE^X}UG6KMo*|MY^=KzSFNvT78wQqwKE4 zg-9imMh&%)GpjGlhX8U7RQnFA;uXBnn_9Fwb<{E}mMv=c7-&k!rrol4GUo*P0bIPW zYL+G&8>l>;DW!txt_~a5(E;qibiS$*Jl3LR>xGsj187z`A^F(KL7j zbJQ>ck@TjHn9x+?dy{w%#Tu`Ld|{^A>-OL9l4=&JVA3uGhB#Jb!eV7T8w$Urbq%S- zpxj(s>oNVN=H}u_FZAg=r#92OH*glOoc+WHoDK&)^HgKWMzgex z504)Uyc=`izlyr-dYoF0uVMB}_-9p?-U~;ZBD6kFMw2K`{^68=4MF=Qc+&4q@P~-> zzp_gl!Pr*6gv6&gB09(>m%tIeaZ4ZS3u=)#bO)Z>{e{vkl8Fuvv_N zH#pmHqwudc{fK-}bWLwsvug=8San@0cpAyrh;H^MDZg(R2X!WRn2JgjqwJDw`d3)c zr;ors82GnjZghP|T7&y8+fK7YNoUg;JlNQv`|l>klRw>&2Wr#sZLX){y$1Fx-QE_C z+e(TFWOC0X#`bNH#;x+k?7O;i$giJe)pb2C>hW~3bK;*3>DKob7W!IFu*;=DV*U7v zM){f*X$dRSmi4b+hr}^>r{Q|rCbev{`6>1rm7B}5l34eM)fc${V4qq?r$-Ms(RAuG zo%J~19eAfo_yupSc#S+xE;R=x-p5XsHae7V7p>pfB zk&fVffaji->2`h#__5;|tsV4@O2W@oo5_afT9n({?mz7}J9!6=IW_hEk>THje++CT zhr_xSt6_fxKVpXN-ofI&npfy0C4eQnub>{Z?PYvxb)j9^X_|GurKGgcYLUZuk;sL} z`#hu-4Cqt^`E!mlj%c(|-3-5ypEQr0Zogrlh^eecrd-Pf@(0^2+C-*QLI5}neV8A{ zzJb#};GQ}sgS1P#%~R~!zO0cWY}aIevfC?xhH$+(3^#jwR*kpE3-1MZcFMzEx{pq{ z*PWr6%cfA*{zl*ZC)*0z>KTgjf<;St?)B!9xH zshl2q`qrDTbr$KuGF+({9t!wt;As3!tZF_CeK$^zL$MdPI)mHDnk~HX7T$i;-!b71 z)f{B!y>xbI@hjs6r-c3>c!T1s{u#Ztc@spm(=1!}7LyhRS!I<@as%TH2pqnTW5|9VrBWa0r%vIB*)3nkbUdcY;7)Wq0=<)82Ecn(rm9S zmL--M1n_yg&gOx;5P8~pQgPa^*-Mu4Mzf_FlZMMxyeoAc zhi3Z3=Idl$OG&y22@$E~SUKmMFs?;aFLfg+(x*ADZikX;9vX|mUJBE6NVHpPT~5~O z*G;vyeKq1bmHg5I@dm(WXu~SH}+{RjEQUS@^+l~cl>VFaK zd^_U54(pfJwtHF_+UM-ZZSGH+O0X#W;A9+*IrgEu>UPz_Dv(XDyP?+j*TTLH@b%o0 zXu3VMwuaW`Cb38!ITe}Nge>;_G-t4WI@g)}L(w%)56G5!W$NjAuDL3uzM3v$md#UQ zw2bQA6e(5OKf9jw>)#Y~I~_*Z?r$$8-*0AosgBITfq@c8KZpg$1J^a>7P{t};!DV- zzSP37ic70=HlEVVVnzt8BaKN_z>JS}HA`VpjXXUrRVU_kJ^}GO-W$5V)-|6C{{U^t z9I;wLH2bw@Ye6j0pZBaPTI238!idQ`f%h<~-dCdYT;4J<(<7RKH?J#G_e6|Q7f zkN3gdBy5Hom4M(33}of_D_)jg7sGy+I)0s_lReW|Njk-M9O)CI%Q7+oRfyq9_4TfW zlHD{dP6_qPTdg3-l1%ZyEhh5|7hSFi=jZA4ri|kh>vKm_guK-}GpTrjD~$(DdzY1F zj_3wMX%*%X@(3iq3boSens%r055o-=mZ1sN6};PcEUwxiB-o?DQaFqw~B{DQEf z((U{!@h3~xG>u6#``DqnFlo0o{$zJb&^Gy`e$pJ3E$E9~XMptEoeu8*08sGBxAJU} zuVlEMQ3~ak2Hj~zjm8*S)_{4wyeQt-vLm#?;uH})<37I$(>JZm_4 zU4u8ty}Gj&$RK>(D=$rtS8Yqiq1|-YzT0sDn^C!F?a&DWphZEnK3}68V2bKI3*)x< zgYe?_M|m8*mC?OvBSQ#iS=EC`zs6J?3~)dd!)Q9F{@U^FoL9~)7glHz#oev0WQs`Q z3U?on0>O?t{$i!Onkl)#dt<55HEmMP>e}}I06|HlHu6VyV@0?&Nt1$GBqr^mC-o@@*37Bsq~0Ri%(%Vk5bb z5a*Buclx)0^sP5f@dR^eDWkejX%D3?yuBaLqL1U9PTNcfb7xKEu<016m#4;AnFAH}~Nc!GJ_=fQIw8e4e~CaW|y z`kDe5XUmP*2p|FuMsj%Lp2|tJc8{FQv9)7b6xvQI+MYPK+D4~5I$PP?MRoRQQhDsa zF-tsBADPJe%FIiaJmt@&YkX(;OM5wuHM@vp(r3F>TdOtOm~a~bd;HAY*PLn|D7=GH zmghm!?W{E$eT<8If>{fUsV}f$csLABau20z*nCXX@4OcVl|H9?VW-YrQcWx8l>)IY z@=EeD#;VGB^740MJ%=NbZp|NJl}>2NlhWNu^pAkrCxi6sUlqlx&;64G$l}{jL2mOa zNJs9SzESsiJ#k)#@gL*9fvyWpJ4&AAG}uGM_WM|f(_pw&QV5lPc~}BBW97je^IRRC zfud`+npVB2UrYVJAZ3QjQ&Oe{Zhp}eWR-2;XLkVe#}w$A=F?u2M~Q4(EQlPwKY*K5tVEdG2Z?o-nHy@de_9QMqBR+OJ%Egc@`+t2<;L`A)9tV zk1~9!?m=&xuFxycych8_PP&Gls@_j)cWZF5#c6wO91={chG|iov;jXlKDx=7g}Rw%F@CT1;_A1D|-Nv&;L!yYcvv_q-*R(s2feLm(jzq4DH zC(UOg%!M5a0E(m>ws`5&FzQLOs-6-!dMYuKvhK;gHTZ8&*L;1X_+rMvuC6qV8a;MP z53;O_W?jn271QQbWh!>`9$tIakB|Nyd^_{rukcTqxQWm}UVRaAx>a=a_@NFJ=-wXLiCA@NqB;mbX5 zRJ4ObNKt}X-^vL>J4a=n$a9o>QI!G8PwMM9u@tO@khaMSz20sug1O- zl3y<0QPU+!wF@=qyV1UIF^-&aed|WT{Cqk_xz}LUw2f`ydzj@*Ia#EIP9*UlGz@Drzpjxpq4%;gTVUKI;D|~?k9jxrx;I}6fZIqcaUSL zF_VnfK|hLoQ>?{d1j5!Ud9BQB8&6ejQNSBiu_usneuP#Qm!;?$Bf+j|I=$(&yjd(P zbomO*ma4HF#~df9218bKTh9@AD_WB0UhsE_wQmgD+!)hP&?7~aMUu^00F33(@3gUJZm`)RypTsKi5xP4wlR!u1RV3z6~<|{F>9Cio*&epxQ5{i zMArJGaJ+B=14u%GO9G)l9-!7Qhkh$tO{VHr*0A2&>UR6&igcZtNh98NdBuKI2X;B< zis*GKzY+M>T~^yxxzc<)e$d3x!*>HtS~UaAD{w!As2?w`PkId^qOOv;kp-TCadWB9 zq^7fFZ46)rxD2q|sLuF+AL{Tnu>SyhvTk+QAHnw5dLEg5HO-8lxQV0^U0zKjijjQH z$;UM&sduZ%;>$Jg+E_h=cL*RJ9Xq_q**1rj8}AR4epQL_M%%{LzAv+~x|341mdZHq zZtm@)iWQMgRC#E;=W;k@^vA6Rt_ejXZrbY?+Gd|=qKy(ecw)B^SS*uldx_j)ZOXh! zDzY{exZ;`OuMOYn@aW4FQmd`UopTnN7tGWYC_8+mQWU8tb~va!P2+ZNhd0&)VXr2R zO)*y3x?IW%?-8pEu^9V+<2gOeSX+Cq6f$dxs$9L)OB^3!zE^;WOEQn$%-*0*d zTiCUxX>s^!+Y(wwXD#Bju)cOE*6jP4GqeU($sxN{PXc&`9TQT&pIX(MMO51bo~e2W z^KO|oZNmQmtc!p_Jn~0s-n7-U?-Y27(#KV>hWcn#t-i$#!XF+kM+zes^O*_q$3JlVyc!+)4y@g+9;6cZZXXn_zn!WLX5#8Nua$u> z3NyNZ%7^Z$JBB@TSUw`xC-`kGww>kdlK$cttTeksGTlwJc9w-#=0(VEdT?plcAu#D zpG)x-*M~*kfjYcX#`AL_48)j;{x`vpr>5#(4|pd^@V221{*S3@7Mj+qu9pK;+cn#+<5E6-Wm9KkV4}1F7KsTgjTB2rMNg?9RC2c8m%jyjc7Xj zyql5u^Wk5MH2(mz>X!D_cd*+ql#M;ZUR)zFP$N$-Dg!GM?oDZ0#i4z&E1RpqZLC?J zv|q%`T|(^&$u>aPagWBE@So!pclOs>UZ*49G|;SYM`ebVHdzS-fzT+y{AkpCGp6ZU zipPC&lKG-pukKfLvRuU@u}5M)>D*a%{{XY^Rcje@yg$1(bh7w^PSmtk*8Df(G}8r~ zZ)JId7MQLjP01rgo1iG6}wwm!Rrrj_S ztP`1I!ufmKmMx5JUN8r#q-80>Fmgzf!-5Zp*7o{lsjpAr&lKKV%X}t)`KH=c;zg0W zt8w|7*3@J1jI&u?wu5RdY-Sd>I)coxy5}hzsIT&n*yQ!EIPmS-!6I3sG^s8#_fb@pP`DeqWFJZe&CJt@ zM_ARbJT2oZ+e_H(te)BwZ?#1bXywWbsCDSWsRP!zzXf>OTl@GeAH#MhPM=d|T~0Y) zbg3Ew#!cMuzi|HmcD++Y_=%!;r^DLso1*EKcTvDa%;czI%zpVG4(A;6#c&=c@%(-e zTYD>=KTYujVjtZ#nu*m8RQ%hNs2~yV(vpSsE-G@;$4la^b}diE4SR58Zw^Ijw$WJ0 zBM-D&oPxt|Bs&Igr6-Q*;*=h}+j>z-%M%PGP+HlmCRt#;naQ*A!_(XB4;Er8!{&@@QF zupGI3<%!82^`|DiW2RaUwymsJ^DM6{Q$@BrfU4+-SP}^)GtX+}WAl7xdg%s?FLld! z*7`XnRz5^3%)rOa+>z=tSXwTlt^7{$Zo72$EpuZWZqTgrMFcP)3MBIw0rQ{bit>3D z=eCzL6Y9kAgu0D}mv3#VJH?^cT}f|ks!Je~5RwGek+}QOoqz}REI)?53&QcQ#OpNG zv@M!0t!fqxIz*4m7FL)W#^2)Ilnnib-%95^cc$waK6VVkge_2(uBK9%a#ia+naj3kG;s;J(v#F&`qc5V@`_RYq4!-5i!QL z@jD^dPYdcj>&$I5tz*G@#*^Y3OS`zdDL$yN-Rf3BvoR!?yx_dK*!x4C!AENL2=p5b zZ%T@5T`{#ycF4;$uAY*j%Y>8UX`FJIUAsZ#n$A?46=tH>V;4w=LGY}XT3y}Fp{Sds z`(nc#s9z~RhwpQeK_mUcQt2KX({&l|VqH?=dw_;HpthX?Nd$vFU|&Y$pZ2#_1+J++ zm9Ms=spy)8rRCkz8=GA~5jOt-;mS9Ee&ZFJ@gK%B={Id}G{Baw z?A~7^X&J$#Dl(3#gp}iF24;AR;AW?JZ63L2Gu+tOw2fnBJYHP0LZAS#NI2n(9DAQy z<$O#vYfG`I**2@D*gQ#XeRX4EuX(1)5Ztnk**OT$=tre{C&638fAIQUCsWq0X0o~~ zX{SqX3|A9L8n5p5t8%PC*^~XzTRJa;G>;Ex7usq|;v~AggY3Gtku8`p;@%SdpLK5*_(w|8f3+iy zYj`ELp6cEw46IL>-fH(5Cz{{*+2egq^WoQqv@6-<@pb&ZB8F?7J7`fYjhg+cVVHRg zfg?LlVm)a-34YM_{vp;S@WqaY_MHa#UPv`qgGV$gmOELyfZK*oG@%|_qqdu`1t%Vd zQQ*&mR-ORVHAmF$ZZ$!otTIJ2SwE8-I)S+t&RpkqGqm*U#s+uChCUI~v@2a@t*#@M zW}3rJhSztOFa$=I8FEnx$p;-tu8&Xnt7k8aY`hEMYiG3aEG?O@FPPlhS^|rSwyzG| zaJ@n2y?Qhr0*AqRRpc6F#ByC;{FifG+D7*mg}HAwNBNXwmI^olhpD5f=T^klg+%7A zp2vjC@RP@y-iK!wh3@UNTV;SwbgeSwnr1Aaofb?27bKm&=hm$L&b|TAJV$+~cxzwq zzNXiLR+{ek>X$J_?x18cj;+UEOnO(h=-*-R_MJP);@es5bftJFk5Y@tiqtqmh?zOs zJ06+Mc`w9IjI(%(8`yNaYtIsB@mxptZAe&5w$}3xFe?)eG7ppGbICa!s?kuyR;dY7 zXuspngnBoGwS}}A#rBdzJ>`@^4gUBD#IeP`Hf3@bsXKacoY&4a_L?>Q{qD8l%h@&k z8q(ysyw%|HrpG}O0E!6*BPucP!LOojygj9O&c{HPK)KiLJWD-?nQy9_X@;p_msc7!o~h#PTH<6jzh=0G&9~%vsA3MqaB|qs@pPtkVR2By zrR}8t$2GH=`g>=uuilxIg1tv-j?@qBx=*E}tv zYCa3`ANHlR^D?yZByi1URe+F8vV6W$jBZiflisQL`d{t;00vxXz7m=Ze@D8WNp*vz zMvZZH&VE@DN8FDnRAY~n*M|H>@L!0$F=+5x+S+Ow9G6jCy!Olil2D2x49oJ%wN*hU zoPs+F$M9#x&1d1Zp=YSwJ?)jOa!YM2vJIAU8E_&p%^%GQqwgc!pIT!2tvE;8UhN(; zqIn+&zBWr~V<(98&jxBPK}&qcI3IdQj(>-7Ie&b1udemq4tQh69uDyZ!ueOeAk%cu zwA#gSsIZFK-A3h2qwgP?n78{_?Of-Mb;t1chb6ne+v--*2e!DIZX|{7 zo9BNsBNfT~9n@vjG^l(XXFa{qzOnG>v12pC>dOx|u!| z@g|>R@XN=JnzR@4TrR zc^d5sWPq`ZIxYeEjsaq8%|0J!(|kR(_@&{`5!tQ&oZ5B%nH}V@e(pP#jl8E*{6i>4 zeT{c|AH_cr{66qzk71>FUS!g*76hBc@uR^Vz1u{H%F~W8!4z%l-@P)$mGiM(~DPpe3N!KUhxrPCMH znrVK|bm{YXUPcDjXAz7JE1S}MSto?FTZ!P-G&>pYWR^J7P|~jEI&(6&m?Dy92*vT7 zjybKn4Ijn75H!smYn$B(d@^BJZEUU~Yhi&Bv1Vx8nA$Rm^C+6SMWh$H zJ;#PL{Yp&>POwm8(_l#?xQ^VjGa-%n04okhAC+c!Z_V)S{*iO1_?kOQcHeDfC)y$+ zB;3RqBW4T;B=9)tTsvx#T6{(D>~_g_b*(6t)u+FVY8&laEg8uH1(uWeqU zvnHuMj8+~N(&oK}=F;u9d4PPl^dzwxPdt0kC3B9XeUg6m=0ROk;YY^p8&JH`;Gb8% zw6ng`?Weg}ZM@U|j}y3MP|U279ih9ATKca*vhg2;{5z=X{ul9%gJw;=t>wm_q1eQz zWsp22ip}R{iMG5HjG%!Ib4xsmUB3DLC3E9B}Sl`YGyO zAn^vTD(SQMgIK-HGAz9+@bP)3A?^9khSw+sF?3E7`XLe(kq^&2mYbWLv3;?hqK+-h=bHqB^7 z^nO$pmkP|wa|a)IuGKvBL0n(NWVN;MABD}z-cRBUF63Ond-hlIe#+TbUW}xM401^8 z(zK1{r{Wz#D1%(}{X6@fynWf|MNE`H*LMRDtj?d}>4Ti}kj;mCD0f?a8t*vD}p zwMUW{%AE8J`Q4B9f$vclcF|R^kJ-*pdfe)CpNL)<*8Dr7YMPvaU3O--Ni{uM>OGJ} zA0A2t1A-9_+BC7QL~NG9G&mTV~{cU=A+d90odGlTUU-LB-OQ5 zj!SJ1Ui(ymE<%>dNE8EawC*|S&(^w9vOM)#tbcUjZ4XKD7mT%E7=Eh?8q0Gbs!64l)gSRfmQ&*ma8(Ti2c`nTDfsvPUqtP(cpT zk-siU8-d5m^{-a&Z-sn6@Ylhg@Qmv^7L~5*G2KaQ`r>JjKiQ^{R!=O=C(khXv*vf) zM{4pP1L_)Yiu_mNx$ShjYil>UQD;13?8yj-c}2r1*i^|N+@xoL?O90YqgGR@=)+$# z)O<~2ap9Hl=ZbXmJm{LM*d^%9`<8fQQ6!Q+Trl$S@{lkF26LQSFA*<@Ji~veX%Gup z6{4_*RCydtYUU+p3{Kqb&IcczPvQMu!%48wbUl9FYuN0iK74wF=_CT{&Jr`QP%x)@ zfDbqVq4D2`JQJz-=H~Z9u+&>oI*gNQF9yuPt3ji7rYsYOH(jM#%IczFPgUY+?8b;ypXV`fcO?0Bziv z=GP#K5G~z5<&M=ITjt4cr=@$hj&=QVSoAL%$Ez8&CI-+f60NA4h<+f+q4;0II!>1?8t;kX zns}hnt>SH|Y{7TP@-PLF0*wCvv>0}+4-`!&g)iaIv~3OUJXNU3Wzjr6dd)akm*r{a zQy@gy$p>jZ{VD$d3w|7(2KQU>7m8Be`&6`byT7@bsM9klyra2!U;W658aC9%$H%``jBPvY*SsLu_? zt)qM}h)Hohrj}VGzY_h}p)H@Y#!h$0j1|DZ83w(#Oz;nbE^=_sV-k4!<3PUA?V`1_RJXIT zv4Bq`MG%CJJ)OqlJjVKVtv`$n;w@*xc6xgFTF*@2psi-bvW!$wrD1b;qvZuxfCmVA5o#o_%X zJ2_^(ywtoxmV(wsvz9=S&Ik&oM>`Stz*HNKIqO3SjY ze}?1KB%4yRo@==yj^9teXO0Dn?mV&m{mM*jmdNOM7|HOhYxc0T)4X@$x3aKnsa|2G z#}0!rK4egh#Gx_$!tTQ!s%wqab?=D(02%`89w+|M(EL3tEo&Sp5YywHBt05d0oZP4 zBzGj9_3xhyKW6^`4(S%QdS)k$c>Z6Kse*q zHOWQs8(Z-L>Gns$>NOoPqqULs8Pd+*B<%&ZG^aQNGGm^YbkZ(Litxny!6Eu)vomIH0k~uHhOP|?e3+T zHPvGKTqZ!OzEn&l$lJ6qax<1AwN&u^?xPNn7XJXlGiqAMo9z*Jg308&k^W^Z9Hjl+ zf-pONG$Tb6u1|g8Zxj4I)F9I>e0P5&H)2VQ)^;|w$k&nX+%~i)0VLsd-iYE^j{t6+INMnn_kh)x7k%SW-ImwX&K^3rp5zhakoB)y>(OO z<@a|!a~X-j`+s3K%jSE}f^=kCNpAcN;=7BTJ~10zX!rVj5rLc)b;N6j*|m5$`A2$+ z4R^+NR~pRTC|K>Zi+j@X$#Y~RkzwNw#7WFx=PJDZbz|V&)%Bl(EVONVPt-g);s$mX z0`6c5JDIWwCvfLE_pTGhe-&3(&?J{j@gA?@WrFlt$~4GIF8sRfz~z`@IrJmax)hvM z+CEN}7wcG=P^Rx2?s@!P3X8{MTZ>HbADgQ|bu9Nbu-LqI8tRNVERIVDDnj%8D3#-S zmVq9>s?K!34@==Em-qL2Y;nq#tWe_(5cx>?bGY-)J6Evy4@=ejS*Yq-Hih9x?In2j z$8)PeFeugXa2%X(wd zxaIF3rBI_BJ5*yU*x@g{bq|OepINjT)uCIhXCyNOS zTi7PQab(GS5n*}NUoVs&yE{l2`L`av)vi7rUdyD%rrbxQYMNB{GBCMzlrtVYvu`fU z9&@+-p!FWT1-^@<*=U-*{FgVkNh(LESV#7swJHp%%5Xkl#gzX5yHcWD=Ax2kSwF-p zZxnbtTD;b@XmoufvKdoNw{J0vF5<4^=G+*@anl4=6dGl;9uR|F)8l<(UB17z`)qOB z1$Z_u`pjpOi~_`G0D4wGgtg24D%RM@ru<&n%V{;KOo)+6k;ig;%qZ+ZJ?pR0A=Pvp zW$gSZ5VF)Rm`!nHCCnDPN-C*u;${l@9gS%hcYBS}P}Vvf)`cgBbr>!+O-dxW*7W#S z$@>y{>E)dK>^2Nwmg7CE%k^8^eI@4b=h!Ya{WrvNB+iWsEHWr(1mr&+nD(c9P4Q*- zfP6KlYC6(es*taFcWligLW~$kI;iMyHe>yY^Zx(|-|IgWp6>0n7`z>${^7LSX0m@e zTYQl6NT-6Oz##gQ=~m^~nsKEUE6V)Gw%eOqja+z|=SrIL!$G!7Z39QrEy71LW zrsB)&?QN>Zb+KW$bz&T{0gzoC@y~Ht{vgnNF?p`sYBw#a%cNZ^ES5JDPb@lY%Bb$= zWSpyHe4mecr8btQ9W1sKX6H>=zNVj#8r#AC9?|VJQzo}t1v7AT<%NR#E~?}M;TW|P)6gx2aFu^Shsyn z=d5i0@tQA(V7KsouN{TO~sb2ln_H@Y3A!zaG9>~VDbdd8N+4YqJmBs zah&=Z?ljr_GdG8B74(;}gH?>L+Xce}iNMMjXDO%?xRMdUdbH%(@;SY!Z z01_gbPLIR-)|IWs?H#v>G`JexNaQLRrI_z+%KNjHUA&%p`Q74oVGOjZl{{R%dMtuMstBtVm$A%!A#FtwA zo|+QiTNi7{cPr-^QOC^VZcjZ;Pbym#K6v}Q-+7*vvv{wIi1hzp?c;wn%4TxOtI+ayh_XYU{ojctSle>Y7c=+MJQz#U-mLe=buw1jbi9 zi8roP(?n8r5^m+KS{-6P65dZ?r`q^l(@%CyR`zS9nrC+V#dG&ijiYaKqSrrV^U-*i9n}?LBSp<;=05_N% z5nCS%{uo-Wy>X}NRvK*3T4dX4`rK&Z8Gr^wj5#NE!x{W(mCY_zG4=zP4?TZD^90P&rt^6tRBS_SASo|%e>G#@lz0*r!WfT_^D&ckveeyG$d)GVQ z-wNuQ4~cCpu9;zYVEa?6S&077(II6lgZQ?phCYF4W=T%mvg_35ExdW*Xi^EhIjJm9 zrv^!y^1@|lBPXkRk_b8X6{7zD81(-D318jn8h)f?OhzrFFi4O>58mLZ=db1~*St64 zSuO1^+I>FDMz^~NE-rTyB$EI>M{a;)X$$B_twUqtyUh;T^GuWMQrkm|xgK>MTqKeQ z?$6089y8p2RHM1k2U?f9+2uY6lF#CIi5pO{wu$ukE<;OqW=v+|A2Y8kzk4J2Pfopu zscJqAgH~~OrG2YZzgZ2*u!7q%MIr)IcQ`5n<2WaSUPzPpvtRpQ(e&iF{?QEtqRaQO zVH}a1aD&qw1}nVybExW`7x4|^-}$ynZ5l};TR|k7XOM7myb+DOw;X#`mbtznpFC4@ zwT^1U>Gqx>Ti7&xUvb3o+v)mL+X#>i?p{;@aVJs^++*ImEoT1!R`J5>2H#K6^sPS9 zREql6^8Fy1X_z2V3`)h5a3_`@F>X7Z?IXiFo!*bA>ag8fe{S1cI$T?eg+-ruQ@UQm zg1inm`ql=nbwjEyz2l2JR(&2sgc~{Im?Xq;C?n(EpB{{=3{zg}DDmcI%wS(ZRJK5~@9Wh-r zyQpnsRJ@MZ$cemsq(;1QsJ}O^eJE!_hb`YzF7rTJ8DY4BDD`B$Ww>jkhIV%64xv}% z&j4ie`c%5_i8PBXNUpDL;j$%YATp$uss<5QuLIPB&ItCZo(a`8=ePd=gmYKFoh{Z? zD?DTcCpjeU<#;2CPl?t`bK?=B+dMjaI%}h>){GC@!Rj5y*QfZ@-odXjxzbx%Xj zEgUe08NeLlq2r|$&Z85Dl(+CNOxNJkd_&?L8&|i}4ZMOFwI8sF?XK1^$GWe zAY96!)ukm!Wke+eY4Wbj^cZ(m z<)dha%q7Vz&UyKO=%TW|7FSS7f%*Sx(x$i=r%x3Of_ zB#S0MSqmyNpiqA4IBvZF4);nbZmM@o)cB>U*~>h`NwbPGXMX{;(3^2a%fi1LG&_6ST}$_qU1(_ux6>`9K+h3S zgDl`F+73zU%?6Tgr7Kg=^iLkyX+Awiy}8k^v`va&n^m*1Pbxy$3lhz|t8FB)Y-i^7 zubA$13vU$MYVBkpzq!)kcyF&^zF)IX1ZQi>DSd%Ts)6!0eXG6kzr{^c#M-;hq3ae} zSB9-_H%i)!(ZAWG1bneEJOiG9V9Fzq1TZBp25b0@6(; zKp0RIicHR$t3sMrJ70ruWo6>1_1Lu|qWEU=*;XG9=|WGo+rlszmPQ{kHo*DG`^TE~ zKZian(=R?E%Lj=r(JtqXX)GkX8&>s%gs+|l20)ISo_bfx9vAWVil?bM0o0P+4-7e_ zYv^YhaGl(@KC1ZnWpCjv1$%){A*CUR#oET;OIl&qocoBsV|}IEYF8RgqZfsBNsPs{D2x%J zoDVRm`}n{E=}z#!hOh7Si@hd23hwt&mgKAg=W-})CI-RKZ7SdJD&OkWR_NA+JQQg) zDJJ(XcvIs;>7N^$R=wFh{f*tkZ9H->l8ZX5ayHY|ipHZq?27cwQ{tzD{6d<=oPHhD zyeHwbzJhzbT_Hhme6oTiw(OZ;#iwo~2P2bTDZ>@UrKxIP+g5hQI~`T@W;QS#>f!lk zBz@2rckFA@HLru3&Znqowwg!8JsVJxInvI?&qDk0qsbmxS&2T}b>KX;brl+X97Z%ZK1%Y!JBL#Zol6rdA)cR%fd|k8MGTZ5v&_^87M;xY0 zyH{{J7CwPTPSxd~8@yX>;GJ$=8XKFttxjtJ91;+wa5pl>tRss*c(KlV)LF|!dH&zq zFJn=1x4FmoxAv3q4xgz(tZP3F^yqbvOTl?M+@VF}sR!02{{?sjDrRkTNz04YS z#3qr2-P|y&6U`X_phs_&)C2c=@O^4sSHK#zw}hga{>=sL)Jty~d8TP)lcViL=)e{0 z&r0##7W2d&5%F~P?HpHknslPlXs>NvedJ?oQl@w$0o%1~sB+CIT6(KGDuk)2Ou1D^{O8b{vUmh#+quysOwN^dUl+N96Hgrj#N#=fg1EN zp6&JYuQ}35*&j<7#!`%vaMN85Pr?2*9xl^wV|(p7-uK8761zZ>Uo#HDlkYAtGwgjU z-K~FS{{V=(Z-LiNwAFNrjVwte?Tw@jxXZmmFlUtE3ERd8JlDmSz5}BWsI+gglRu^`?JpOE<8P9po<$Tp?j*yEYr!R>F%iwh0YWR zqUCmskWK*^W;y1$D~}cGegnCC*{zlxQ%aL>imh7D?Dy7o?y9j|z`>872s?o*^AgTF zVyao_+RmvnYMO<`mX{8eKhp1|l~6>a;wJ$8<{0F9Vz&HwHi4~+Tl=j}D0MRt-z}gX zV7VJXnlKdMS|T#P#e?ZsH1|HPczHr8QQGO$8!vm`JZV^+jzIbYi#%m zfn4rROAVxT$?skFiTq!0<4**;OcZ5K;jA5?wcYLe>Zp|guF!^_(E+9t;0eq{N$T<14+{r(2hBJmZG zk5g-#c_oNmT(!iJTs*i86_`fs0y8QeL1sP0be0-UvEq*q={EYlwRdZv-fXgXt!+1b zltrH{h*DKnW0WoGj5}4z@^(n$p+%}{RUW2~hW;YnYFAgQt!hx|x}A-)tm~>uV2<&d z5vs)Nh~;z-AQ)Boc5&SNr|~N4$Kp4}TfH_bk>TG9yzpuFcT+~OI@&-29jJirk+620 zWY?m6clgEs00=qP{5PY#moi+qjkKje@##eg0gDgfJBj?OoBfhJ9GcWx)}&$)+!ylg z?zaJPBu5J7|wCc4)?P>+Pt3CDs9O6FHiCOdUuE5(L5F5R#dPL6^-@W zX{1^$u!!w0@*=ayPU1)e9FB4gaW{v>-Za(hEc|hKc@~o;)0=%i!;J)gyv_rCqwlse zoDM%TUf=Ng-$$EL&~(2pHnX~tYiqc#A8h9AsBB74F0GIO9ApvNqw&U&`agnguPwBl zHT5Q#J)QNvpOVU{B#7t<fUHJKMYIwe3Ssu-$y}G&Z5FO05S-NR=IO*YvKt*FGAUpgi|UM<-x=t1vK@Na?jZCb_~M|+Jj zB#ukPw!4tR&wzGJG4mtw#@=(9!9eyYNnw`#PG3^c^)%6>SCCuBV>q>ytQ+@{%JGft zN7DoFtQ~JalFD|H4My%G;3DwT}n;WC7Q>dos}v1%~sTFh6LT8#I1w)VnhhC_%;Z3hJYBC&he-i{_1g?6mj z(s;7M>q*h>d>^Y{&bPOQJIi~g4)sTyj@!fuVRNBt5c!tcmZlafsANdfd=bo73QjTvn^f=Nvyc)w>RO7rUoqYx z(POyK?&s96lKM8hKWey=;SsIZ%X78aKm@ZD_o|mGY2nR2!%)!So$uau5njUEn&xNP zueA43w;xbxJVWtH+gb5Jx9}7#qTO0z;^NL*c!T+_p;wmA&GP5(Fu?>K!;|=vec}%d z_zOQn3i|U<((m+Z zOPvtQYVfcZpJcHOBQi!y1ZfKdbR|7sq7kei7);J zPpbI0$JZa)o+OYFqPz>>a zMsv+{+P8rGHSs>ud(CzHQDX&$p0xm<}@?uF|=2R)Qe6?JYlB9J5gU73# zx*moal^Dm`Np5QRn_bi)*6h+~bu&D(TgeT?mVxcnA{kJ!Cm1dyW4Da69`(Pjc;YV< zY1XS{XBMY-XDd$6reCxY$L6ugnV;^)7^%-p=DgZTd}Xf>?DvrPYfD8)VvhP*?{3B+ z+)1{NSin5n7<t*d{-^%ojbwyCd%^jSdBmkuM6q6 z>6pdKDMbTkme>Fh?_F{DQ=)ih!#`-zb&YoN*&$nNa(_IA zt6RUn-6)b&)b69TKv)7}1{4mvx`oewdha|>e`L3@U;hAa!F{J)7#8Br8QvM7+JQ(# z1cuHzA6lzxs@>Q}Wn%*Ru+CZu+?mJEk9VewiiJj?76r$ z?(Q+XvkYW80Bs!o(VUw)s}G*3RnM*h?G78JLTLTo#%)1PuQG4hhf6TQy~4rmI&<2VG~NMW<Zn(sipZ2&3HV@?2Y7$Zigmb#V}8x42b146qNl?5qhr z!43RXY6+y$TGs1Rifty+%^pY|=*lL%X+Z$0iH{0T-^aIVe~Wc}HcL%ERcSQ4U1k#$ zZ4P8uopyxsoDuW#5w~Znk=mgVuQtU?XV-PF1zpD$q?!WV2&9rNBJe|XB;Wv!H+;O1 za-DehtcKMgzH7Z3R(rI(xMo`|R!hUnMvBa=zw*p(W;=%jk~>zmzu>D64{BH6Z1D{C zS2y;1*4^P_98za9MX-_z{J?|$*R^m*LesoqK8YRFkwK>!qNJ<^5mLJh;M{SuBAaUXZ>Rw43o|=Um$4uPNfRRZK~Z%ZKXo;`3-R| z?q`+_%F-|KDOW6V-!{^{v0VzC6FJ$FhXw7c2_*k3qCr;yIv^Up)xy1x(4;ms$)v1>YhgKnQ_ zOMg9*809ey%!>(F{$hPwrdaw`?}hva;a$>eo+g3|3#lWOf3jnkNeDuAsg(-`Qg#uK zYQAYp;%A|Sp-&5k+wR=-uY+^xx`vr|J*CC!nS^2=(dsTo-NxQ4 zqwyB&T+;7jdl6%*!FW)8t|;2l8(`(8W+Ud?vyIa!1;&nXP1%iQsQg1D5_0 zdCq+WajB%(CG37M(`=^GuWrPW*oU{4(is&FbL11ky2$t-asaHKh~6<>8&>e;w}<9y z-FEWT;nHj&O}5Y$&g-W~0bB*bj{g9=q>NnGR$2J37l{5XTzF?ennrI9+y>OH@2tVy zB#Ol%v><{QjAXGLSdP`!YFc)ue{-OV?Q&atZ4nmE28_nnu*x&alnMgis^Fm>kX$t^sHPs*W{7XV}Bu8MspQPJ%A1ZiDDHl5(!CG<6eojhbU5_O>jv=++aQT9t{ZIaj)hNP4o-fxM?HLP8WC_( z-=X1N0@7@?o4b8CN7b#Z{>yOe(Z^zsXB!Yz7D-P#vZsU2G3!aMU24}JC(tzM^-VVB z&I{xZ9jiwy5zL6rBL}G5W6nMO>vzV#3;zJ&5Vg3rX>IN;B)N_aqBcQnIWfy5ionRk z?q5%kR65p{+N)Vf4yl`H<43sDuLMv&BKxII$844@!8!KzOxie!Ri_zJS4EvOMO|0o zeU77G`b648>9Z!XBah}*3ZS3EAbu6CZK6ZrJ4>AzV~*#;<82YVS*GY`0+gMrRJ8lPG5Zm;0e;hSrF1iQMGnlU~6 zs%>l#0k_QA^RNJex2HbzuVb;L7~U%WM_;cM)O4G9ZhR|jk!sT|w36Mf>q{GRvOs?E6x3xyK35owptS^T>QltLj=@X)MZ?cee-4G1$NaaHGMwb^-TE0A&3uzxZ!) zZQ@-rWz=;8bEPAB(m{1 z3Dt5C9o;$hu6ozQ-(}KHkqy&9VLX7m_YPSLD;_|LgWK$1G1wv8K*wQge1%8~zg2brrC?O*=`sveB;{ zFD@jxgxkh?a~b=@oO9bb9jkK3O_J-zx{Uf~h_7`E(D6wfrNn68WZWBcK&K#J1Gw|^ zdkVYZEmJ}9PlBYzM1`UpaLkzC=KyEh+OV9QHAb?N zrmxF$JHs9_nhg(9(?x(=o7tm$>JPrs1KHGn%QxzGcgP*8?u)0rj-7igwwjL}ktQfi z{{Ux5%b%K2><&&n{p(sMi|pF9rNb022p6{PDHBGECU>Ae#6e%msNCu?-n+sh7CMab zne@w>xX+t&(QzYg0|8W1Q)bAmkpu3t{@rl+cS%Ub(ps&w5XI-{amGr=YaJV(?&JfEczo0g3W z_^aMlG=3ustsefzQMXZTWo{U}GO)wPk^)As5OrY>e{`;&}sV5lWU_Dj^22ibKHhvcCx=JIp{d8r_wB2R9#x~ z!YO6ChwRr@&lp559x$u``X9=dw6n0?RHC5Xq;P5Ww%T*gcM8L&-4r=CNqE zWFGmcCO0+{+(qY@Cym`Dh=PG~dK5hcMSXs^H_=Zus`+s;fMShAXMxU7`?cqEJn2tl zE5x@aF@|{4Q zJ%+F1d#6n@{^IXcyq4MSOwE{_;FOLr{6`^A`zoWgdlI#kiKR{$hs`IVKAQ25jXWRY zZwU+SYSP2(Nh3PkN2u&c7y>~9wpbDPSBti_;T>;Oy1CT9vmvmG2%?)#OZ40xQMo^O zdE^1d_|~t*&xEt-o)y!dMAY=1KUVuAPaN_HP1_kI?2*FF`}H4Sp&$HQ$gfJ(b9 zqhoTm@rFq}pS%Vci)Yx@uDjtaQ&ZM&VAH%Ss9fDiJIi_fln(5tCGt!QgLKGw8Ne#+waL6=FmyR?!>p|-VK zNaSdlnIc&u<-;qhW8S+d#y@ECF*BVhHAknJ=Gym-G|MeUI|=+dquSU)#@I-fi2;$q zC=kxi$;UyCGn#LLw7(Cgo#N|}rD<07o^nHL9s9@jjWZrwISN07mn1j7J6B`je+qb8 z;#Rk5V|N&L5`Cs(Wdh{zUE>jUOtv?kP6+K-nh(S&J{Npq_=lmr=AUz;%RRjDMjv8a zY>hTGY@g^1>e&S!p)5lUhsSO&Tcv)u&lXBfGUg%CbikgQKu3lk~1*PP2=}-X`%j zvn8eF#OCZzYpdyytZM++3Ko`6kuAcIgmoc3>%Q>SjMknrk5%y&k$H2kUcI{{x_l8y zX)UB^NO)F00o-KIwhwxXE@jy0gbfSB_K9(IB-zAUJiya){oqx9;1s?h{h+)ncOQ!2vT0*m zbz79YlGWVCs-HO{u=#QI2Dr^JG;yr_J=Zkp>W{!GPIHD={kfJy%VXxFt|X!bUG^@gD(rL-0oHn)<`XQn_u(iM?a71(td za&zxmT2(JL_9;p@MH+I8ahlQe8>e_G<68J%t80D@64~mL=_>6Um-5`*z(z~J&=P-n zx!C8?m(spk(EM4ic$ZY4!pLRO?rr0Hidot3Jx_XVpG$PYxwwD#kVY*(82r{iv$@gw4ew6Z|a*hdlwuM!|+^AdJA$nAm;<6l(kml{@wqiOaM zNoHwj+cC0@K z$*XvW!CHQm;mwlVy@I3{7ZY2CR@fd(c@Vx&?n({I$Ln027G5mzhN-P-iuPBwu*EgS z&WUj(j~e-o2r9$nBzsqS-W}FF6`{f6EercQQH89ekiw>^z4?B$RS@DaRO5 zUG?UZWGGY26-`DwT0GV|d#A&CiMc57G6@D0N>3_+hmF03YdhaouS1SzUQoTC_zROC0In z3cIuZ*R^?ei}4r3J|%+IdmUy=4M0j7Q8@(KD=Nnc$dQZWDTH= zV&pKkxP;u5X>A*cRZD%stOGBpW);)uekbtmp{eO`+kLY|&|#J3WVk!-E)*AtCdK&% z96oc;Q`}Z^)a=7!*R%cZ<~5Iobe(?MOVg)H>t}O3v0o!Qi4N`lSNCwoAQRjg#Q1aL zhF=)?hfbG7xA6VWuOsSE+v{pBZZ1JYQ)?QpAHk3hJo}3EFNzu_kKt>N4cuuKS9X>f zjg)}uSJNR16_+MBm-rR7oSt%8xh-qJ)_x-J-lcD=Tf(}(*yWc@zi2kFxmimyteuI@ zcKiF*O5-Z?mJrdXcPfg!91Vci72y8>i@Jx4{2y%> zj`Rut0JZGy;j*^ZKFaa^q8QkgkN14B8}eDcP#AmG*NHWz()@Fzc%#G`rMx;_>=GmW zns2l;0to~`1CN>hS<{8?NUMuUtBR~@RHCfx&gbF>_I`=24KGaa{jQbay%yay9aB;J z7@eVc_Ti)|PEJO1>4Dm~oo@cl!&oxtdX25NpBb!ZthOO~r=rHslf1 z8iT|>BiDW->Q@D>gc=dLQG0!=Z-z@dRd!fjSVU)F%C^|ugJ&lgVO+=U6&(g^2i3mxq&YxDfULi%AvZBkeGPJATVpp^Q4CNyttuU-qqZ8Glv z08h1&!+283aFQ0o86p5Wg2e7WH(tP3eejpzhNa*ygBO+-`qqx_`izcRr2kn z8(YiW#^q#CeVkT*!e0Qki*2B2TC9sL(pX7(Y*odrtcZj=A(6gf$&-*iY)G}}(`%kI z@eSR@){Ap%qIeS3StZtNEs-QtV9L>?j>1NW7u&o0!M!SBYie~(Ce=zl>syx-#ItEP zULLfTIOR(?pq}Ga7qAyIu~5ZNaJdV&)E`>uyfr4V;w!0QyHadyo;mI2)u#JId%x$J zBuok)lsP}`*Bz=|Xp5=o8f~=tb;ZzmMdkb68|l^UvJPQbtqm$Aw3UWcW4G8z6C z+-fgnH-_iFLpn>Qui73djlp9h$JtysAB9w!OG8;ye5!U=e|eAM&jIURE4R~cudb2A z7jiY8r=ncQlG#q*KJb8$@dd~^=kI$`cn4DO=z{j!Rl0Q7Acjqr_5y)!{=Nf3zt)Z#~b8VS`B4uU&Mz zO+lry`vj&|iQ|ddH;Pl&ax$9Bp2Bz+QQmIt8=fQZ15I_R>Ty~{YVcjy1-FgX2yURp zXK125cWiLO)oNWL^I6f&^{xJublMfe+*?FMNYY=#0oe@5-z0JfkYW1m3Fs@B)^#0I zPVo)R+#1#7(%Lun+if?*S6ZPjJnJNz zWD%msett^fMn{Jyk=eKHk;KYx)#% zG}@BfJl2+%amN+ZQMJT&_YycBVuAMq5w}0=)PEWES?sGG1dOC@ zk1&JVa<@O>S+`>G5Tk~NHT7qIsd!rb^{sPAyp?qwKUY(0Ev=#mUg%*ww~c=8)y5Bh zl-DETX>}W)5NVd0W#R}Y0U%^|cx~DiWP68K?tlOY<0I=_rH-?&>Q)z;b=IRQLvR^C zv?qh@jUZLV5x?b}ZH=UN+g&Ha?GjyD?@+j!ORZjS?De)T%{7zTTOx)(x`l(4QpW?P zDLc*_5q0OO~D3YtlZ&A@|i=9AFm#@^QXq&h!=h$*55~mSbbLB)q#rSLSikB z03edt01jK4=Dr#D4ljuwEc-68u3P9jR14=`Y8P$+0CZUU?myP7^J!);_)v-VpThg; zHN6v1xPmAw(f5me4s~@8JgVDXR}qmAIN^f;2qzrYFO2>gd`bALHJn=KjWmrn!(!SL zlTNUW(V=xfrCu^N_8+`r0pQ}cblo1>TX@Pzc8PBc9-CSDCm7?U2dgYJYC$=>vx)HU!*}qGsUO%CwP&z_ zEylY#N*3NRAa5yd#Gk#%VnB<4NzHX$6iEC-uIp0Xc#=z99??=ruP#w!xt8@}ByJ>- ziV)xt#zF6z+tz$paW0vw>H6bc*;?w%BT;i}7)az$2nq-K#cY9|*sLE2X&2rbp6GaQ zSGUx)*cEPC))y-e%5qUzcwh!I_>R;wSka7N)0U;#C9~AD>($V;i+SCy+$&3a_Pc@! z2Xn?a+kiRt_N^^mRPeknF0W@|+I7sRvCV1an4OtHB!&6Wx%zaiDEvjK_`6B*C6|db zWVdNo%Z~R;lkE1Zx+Z6B&+?Yw0($T&&aL6iDKtgbb(zdMJ&mk!TwGsX6BLNV`EI#V zrNPcI#%gYs5&lL}gwQV=Ra?bO$ zu<>{sEba7rkaY)O%y%(iwl&5E?B|2&SP!J!c#B!Ek3_wXM)0XJ1iaPbial3hRo}4` z1>W01NuQ@~YAr^@_y^)jX*x_Td#7GnnQ!O3Qq8PJUev_9u}6;J6#`5ibO^*O077DfId~j ze5^)#b*y=;JgqGj#$}6LW-`jHE@p{Qnna#F@qiJ=!N(czRLbOqB;=W|;a?Ej=~iZV zF12kZP}RfSM;l0jDB`(f{o5wh#DIK-{%%x_#~f(uXgmkuJtli8r_{9@sA7jh(X}`G zL(Omb z%5RaE=O-O=nz^QU!tYnSjr7eAP<=w)DD%1tdw`pU>@2=uIBb!Py>rhsjC?}^>-w&O zw)%#Qi6D|YOYfBF@w3G9Mxbz2n5oD6MzOy(h7yx)Lt>AJwCy3hK|TG2hxV?fV`#0O zD|Pdyxf?{N!?0gL#bu_aW1(2w-D-MtcUHG^0eCL$24Ik#peE%duve!+*S&R`6q3F4 zekHQ`Qs(9;WV4CVHVm08R30*R=Wk!msNdh}I!B8YEgb3EQ}0X0)CZp=M7a$6U)TY( zamIU^)+*YaYM&;J+QYP)V{hS|M#1LPt>J-^=X$cqn87&_xdC_KhI@gE&NkWv9uAr8 zV$H(bhx2abcJiiE@=EGB2LKF?GCiwv!CJJp*K!+nYpZQJZfQw8-Tb`g){#t(XaMaVGNWxjYmF58_R4&7m^JLfo-v=P$I|?;1Xp zdj!JO+5siyrO#>(;y7BUaT#rlF_W zoikIgHwoo3t`c~U%5uH2gZSp9%H_>_OKY)%u3g&QTU+0y!M4AiV`U+@wihmNHzA01 z=W!o}dC!f1vOGcInD1>gkL>>d5J1A-%2b8pf^4%ao@7Nx!k?Qz?R!%-kBPQ^6OvyK z$7*$*E*acMWgANsqGiS#3c*MXoR{N)U2UeBJ>H>d;zhWFO1!<5ZR59vQdzDpvc@?X zfje*jMk&t5N|Gw6a@yJ+VR7PnpB4DKU5CUAZKTiS+uQk;v8R_bv8o~f+m~XnQT!*r zJ%+?ueZIA++1qLwlvkJWU8SY9+*eV~_Yf8(;#MCrfOiewTEMn~2G{N+dnvSyZvN`x zDRip|h<`hRs!Q@zA2*TnW7rDXxA-ZjCYx`n=$BRt;t4L6=nF~YFd&S4uRoXakg6N+ z{J`ftVwxtJvONO(MAS8F(|4mp(&-;)j%U(j)F!!mgSf&G1AMAiU}Ak6+P6R9CY!^a z8P#;FZw|tm#+Rr?Z5r59*R;QCM24)Sk@4?&09=WeWm&U#k_-lWD z`Zd(rGuy0xWg}Wi;F@OuGM_Qo%7dNTNIZ0}Iq(LLuXx7y$Jb*}@TU1S6AaQWuJ-nq z2g*lui4Vle zyQ=t#(hm_ei`xB{QJL(~VB~$07{?gk<TCmp9rxkUfn4bX!WS5+aqt z20!amc0ReJj(FW&RNr!^gZx@s!y43n9=OuA+o@(qE$tq~QuHDDj@b|Tz?%u(?tLkm z7Ne>7vrf~6#;X1powXi|Bac*l9V6DKg5iF^t&4{Y zpDzpBc79(@d)EtL@c#f&)bC^Q4a8Pf`ifbkOKYXB=}QdzU-Y7!hZJ|%mg?aCYb$uQ?O3Kl{|bQ(>2Qob^T|=7ydA^vzh+QrRoqRrkQM@2Wg~F;sdw)S+8Y7;ax{X(KSf* z%UCr#7mcl~7FY6PXXL`joC3;Jj`$*gl$HigOR2;QODo-!Q{7!LiTs%o-zcMhnp@Cx{3^bmeQV;4N%Y-5D?2ZjYf`O+xOmtF zaEFx#k%Rr(?Na*3!&-f=m-cHI;IVejonKFFyf2XkWUE=e6vVfo_PvI@fljx$cqQ0K%#)8jHx4VZ& zw}^eB{x9BJI<5iQbMvTRc*k7ObVgTv%^Ut4*MH$KvD3Afmg7OZc^ynJ%YgDI3W`Uz zGJTCw_=S6Q6uwQ>(p&=@&Sj5?B;YGXKfRttJ*$@SZRV+UtVyiukZ4!`0A`%WHP(t+ z(&lwyLKXlFvH%X>aa}fv{e+hKc9pAmk5;kN<(V!mV-BWB23u^PFx}J~;NqGx_Kr_O zlJQz-Ro@k%MsKwFE}*-b+T`D14DdS=zzmYWfDS!a)_;gBm&6)G zT1})j_F6+o(VKP5agq*4%6fLD&X`_WGT(%4Ak*$sZCv17+k=}~xM>%=+`yScTUG}zEAM$*b%f?^mb zec#?W10H}^N#k#fI-7WMI5j(X@2+5(jH-*eWC(WckoO#ZwI#}*z3%K!r%QXM%(~5l zacWw0tM*Ou!b4jj$p{cIIL>+Z_O4RL#g`g&%4vF))K6yw=2o`y;oV0` zlSc6BYF6=BF}jL7jAlYeTpW8KuS)UOv8MQ!OtMI|WQy#FK>`k!NmV-E%ZXLdH4Rw$ec3Y3=V(O{XiDg@kO57!0v02^|X#RQeC` zs@h+OCz{Jvw!Mbc7Q)=eX>~p~B$x&@e0!2BnDF0?JYR9CCxv`hq-plD%@Dh@`yvv} zl15YIBa)`Gbf%r#Fsli|SC*!)!wY#dyBnJs<(V9-Kq6_HLSrwGT(=YU zF9-Od`bE>@yt0CKQ2;C*o!F9cI{-y`PlLQmrE4GBHW#{8#CpULHZ~{{7gapA0IaPu z!{uTU>Nd9uHYpbAxA*Og;q%yLw{5K%(=KTIOL9#j-p5hD)+}zNZ!oDa7}&gOcaNjE+lJ*gf2q`lLT|ddvj3uj$Knux3;>_zQq;9Hw+pSL~;hzJ8(JY zZYwjywyp6S;a<6Y4~A!t#8zyx{{Ut|bV0h$CklEM<-Zz-OP^zktsi%pB3s)F^_O>( zEW%8_Le+f z;kU$J3HT#kwA3`?tN3>MGr1$PzTSw#sUBf3UeRswpTTszKnw; z_qZNZ$0|l6Bj)xs=zkCVH{lNxe$S7pUX2RxS-IDR=t-;v$!JmIeU3*{mt&85@ehpO zvxbYRXwTwr0A1Q?*Ce~mq&@smi-JI6wy>X=Fx|=yF^^j7n&eAU3_NNzDJ8M&U+|WA zXU1L_xf=E5wf3z&(q6uy1mYO&r&GP;g`xqoE*J3)T^^a@jXO>FRpMPvY1YTZrPk?L zW@lMpMps!C+mZ-!q#xo|uY)v;C}Nu0(^R>?(JoohWSFM(iBAo=Nd%G40OO~vdPvZI zAb3{B>;4d1yRQ}aP9hm~3pm?sgtClnXJuE*bjUcz9M)<_bTL&e?Ai3br{R4s#D4+& zXW~6e#8!G#uNzAQEBm7Ceq~ZWiO%OLf7$k}&lmhd)O-VJrRmq2i)vbijjRtl&6@($ z+P)HWPx@&T@nrg`^skXTQRD9v_+li{JXPTf-8t-T{F$b^jq@4CS$X3nS$c8JcY5dT zL*XwU!{&=0_(nAZv$wa7c%l1}Ly)sJ&zXoA$n+w*;aVy-vE^2sS=8p}dRyxLBGPa4 z-xFw0rZjq-MmKn`IK5GoeW$SjfXBDJb)OD=7va0#i+&%M#IssnLvyD*^2c!}ma$E3 zAu1pH{7ks|SC05&#QFv0)#$a>bjYFAUMG`Fg2+bgAOy3dpTe#8_MURY_phThe;ZG! z=w1);j*F;?ZoDl#R!+@zxWjLDR@PZb^j4A@xKxUFJsOp&VkkOlR(^)xiI{6Tp0#c~ zO=Uf^UcHsY+?UG?k)o=UZh8-!Za>+pTGov$UJ}wK@ZHnTsA$qOt*FOx50fXAC>e0W zA%@XOrRuivc*|JSZ^ga+j;TC?<8%vi70l?NWG8ZvilujF{i^0~HNOq&J}I?^%S5x% zB#Pc!vwTG zy`9M11cU-cGIxgrZS*0HZTR=Zv-oeq7WVHppB|@gu3D@Kr=8+8RT)rw^5hfik=nU` zh(08XTi4R(Nf*;wEvJ=Cm>^O*n$a2y2x0AwEYnrvE|_-Dn|cWrhqR=~?O z7OX1RXIe4mdmL}TO-2ax`w6uxm72mktx{W>%sMtC6lHPwcCgwUspqB^!51DIYLFjiB@;NbGAb!^?H8 zO>Vk}kebzn%fSVnvjIrp%JVoz`FEapKQ=IXij;FspE~AJvC4c%c)UTQ>3`W4H@c>W zZtV@F#1U;-R5KSNJnhNt#bN4J3Vbo4&2@6N+Ks%*Ev>ECv`9-Z+ctZVkJ7z+O?K69 z?Jx9un_Vhff8Jfd)9-km6k^zfaH#(PyCWURu4h%zuQhKHE}-|CJ(B6MTii&u)>(=R zh2ctqz$0(y-G6yao$$P1uI^!KzYlfGF9g`OjcIue?e(41Q$i(JqyQFjBP4T`-f^0T z#aZ2}>*zm7&#!nnyN@~Ss6NzPt&J(cV`QZzE<#$Dh?v1A zam#$fFb9Au&i)|y%GX1=(tI!C4-CkPV$_^EWJp8%tE9$YY z=>7@t#>qT0_8Z9}`woMkN`-8tOk;d&jiq{*W;^j3XMiinwU36HPmXjO8wl1#lT_5c z%RZrZJ0MH58x@!mN%ZE(qM+qvla7LyL2W3705 zPSY-Dbq^toX;Q4u8gk7Maq=E{Z1$`#g&NDV%uMx*x4Lf%;JZmyx15?xyp2-sHx35Lh9$*vyXM78k^ypnh_ z7;UA7@or$VTaPvyV5)K^xY~Cv)&vg3nrxa*I9bXY+_$fIE5o|g?y~xKh4mXdw0BwN zx&}rrNisx`ETttG$;tVKeKA;B+32gEwEsplY@?TRGkx>gqmGWL&dgN?c(nbjXc=g#WkJTx3rezO~1=A0~5P* zw=TdAnFgT^{jfFSgcE_Q75lstZx_iPe#<{5^HeTTUlJHi7ajmkst`DSD(ChD`fuwg>qgp z{h+k#p9Jc5o*wexwh%p>x2qn>FEZ>x3%*Wq`F+hix&}FH)R&&xCm~{GDmNS{W>wBUQ|nqp?aOfL5p^WBdl?=ZlJdvJx~NOH z)UEDdOR1!cv`cX8PQ+vbx_}2i!%eyHEWR-DX|}n!dp#;lyFqy`%)D@pxh{aVLcdI@ z9gTH*MV*$jqTRi^+iBLiEb zH%8@zNnnnnB+1ulAo2C}u3pnwUx*j7MWao74v`EZXmv}t+smFLX5aR90Jl7CY+#+k zv8?szWfcA-_d3}=G~3*z^_$vU>bk6wJ%*E@*rG`_)2|Yl3vh^|8I`zP9CMnj;a>|_ zUPg7#i8m>z+(647oojV)@YrdCCvb)_{;|N|$lSLbfUY;hup7JU3%i?3eJ4@5R{Kt* zEZQlqB3u;?V?|~8NGBljNzXOaYR*2)+Qp5hm18_;EH9=lJhu`k88Nr;FG0^d8i^@1 z4x5s@Hk(V-yk8!ywlQit+orPWKvmFNLX!!a;FcR=RTF6rs>P6SsP6@TMZQ?mu{hL zA{CZ29Fz^UywkOY954qs$IFxJz7b6~OKoGr=^2*VSvsn3RQ6OcwiUanGhsnyy zLm)wt>^@WcG{|1xP1X^vC4yZt&vuz6qdYsHm6^gLqjnqj40~5;qH0%~W#WzL_DOG9 z8f9(D(V+6#zun{XHKHn=IInsEa@t0jq{n}!S?UvMyJLkWFcTsa;Hh(+nK|e{Aw75Xlw;)L*Amn**vvLXNigvlPr70_w{{XPG{Xbla z87-%~w+_;@mb;_5jfAHpNI&!+@u@s-8ciekYIbY8d4t9Mt#J#z#+_~$$U#xgT)7@+ zLZQcM+1A85lrY=snp751S_tkQ>gbTJ=Y@fG@Z6rCTFcV4*t{Qktj~F;GTe)_-FY-6 zyyq$sHBf%)uRMKyXtj=7v}IDncNZ<9=vFevacic_6RcWY{k+R8K;QzXSE7}`0P~D{ zS7+gA+8gaFN7QU*C}Ni2+gq!C@;2iGA9(HzNc1AS&ri^_+iSZ^O*LCmwT-^pYoP`DC~xgX0E5%p*|Dt2qk^{*9a z`+O;LXK1(9+BDFsr`TgYddv4htY@rmovb@;&wBH%4@isQ?zMc^5y7Ne*;=enTO>-% zk_@vvfc^Y#82krnH7^(Hm-TjYR`oF0*xiqBMF` zi2}wW@>$(sL55B{=Q;K@iGQL)tLhqNl(T8VE9R2r?d&A;THf3MQLyJ|{os>~XY;1c z>Xnm9D@2YWeP+n$wilYFp8jmwq!TU7mpOZIOEE}^4qvAgkEvv_CqiL3w5356UWp4MA$h*Pk00dq8@O^VrV5w4^J@mIZO-sdB zdKIAY7K1&likRLh`JX|29@BK+ z6lv?KNno1Q)wBpqY-j1I!7d^OTj;t$05{9*AYPg?|rAUr*xF)`cPt0>s`Js5+Z zrYq?UCc{toadWH5Zv?0%0!byi4JtE~ZXu8!4l%|(`_o2su@j6^sGDzN%Gbm?E}y7c zTtRtdc4OYN$}OZwucJS~ByxPJ%G<{D;NWASq|`L63&ckIRJ)Sm2bp~9RJMwF5(036 zoyw4>jtJv{U8jq_BwIg-uC%*}UqsymtLL4!2*}?y|PAdJ#>|QMMuSx3Rn9dz-Hg>vz5`({2G>E;q~6Uooe7j%ZWu)b`+{-rRFiv!dDQlP&VMF(&YSx!>pmL4m&IN#T?^t* zidDYRJL>H{+;T^NNru#-s34Maj{R%59uC(v18J^VNcQ%sL^_6%4Z2xd3un$GHv2wi zU+-=i0Y*6Is_(F)gte*|)qvD5(H9a!Q=T?9V zSlC)ia27cVXC&?f?P5sjkCfG_ZcfO?lAQ@kbsduGXF;PRz8Ti94gJoNmdP?D$g=XH zVo>)C;N?+q)9F|BFNfBCGfPC&buB{f&f(*}wYj#68*7x41Lkkt25-C9(;k)A$)f7s z3-F9qmzK6NS)_tBmF_&?UD%L-F3((aKVHK_P4JGfqeTsaK9y&r&+}S=X(FUdc`>%) zd*qMzt60!?JbL-92K}|&uc6}JCe=rRz9DFHYIk~$sRh}WFD!ETsv;TO%YX`yal6?1 zS1oI=>OLX(nf;ZdczR7U!uF__mzuPV@>@kCKGr}6ce4ZE1A|(>w$!(N0Mfi2|-m`BSLA22-^ z{sJqGvT&Cv?BFqR#8KySv9*73tY|W6kD=_i7B1^Ky9wr$W;?Lx=gm8IoROY!*j4`k zh(03G{86p=e^Eq^&sei89Q~zH%M`*ik&rN}jOX0eL|U3brbnvj>vwgj>T$Yink0(o zw&-@^ZLQZh#z!A7wRHNXli@EH_z6VMGtW5tB+>}jOB_h~CnNYW-=1ki^;(ZCWi_`` zE5o{l^|kSW+S#=PzqXERrAdUzBtWn-D-XH}4f6XRTDRf*-?mSx>G8?r+1Yb!n}K-M ziQn&zm5pR2(R?4Q=r?M!{{Uu1a%>hb(j@3W!?%71@~AXDOHq%*))GT<^I|wx?V)^; zAwR;q`Pw>Uan`A(_BE1qBI2K+f#QuhG&?wjox($`LpPid0^(>(b0JgRI_KV(`!ZjM zkl$ZiL-x@L`#iH-0V%w42MnE20NPmlitBZ;=V~@dsCaG*d-d}pg5?-XxG)%UM?;+P z?Og7&b$e%|%VQb{b{*1fTyAcgzaT#E1X%3+bmT?KJ5(2I!VU;W#1A&gCist+!Z)1J0>NfXURn5Hd%5I`TcqU8f zSw3WF$3#)j)SA&g6W4qp4ZLYEl0UUA%e=UD+kx_J>JB;lXw`Ixt?uT((_p!WSb15} zX+dlP2g)rOCbFQaDsZJJ*p64&CPP%@bu3UH~>+HG{S|c~v_Rq596XpeD_ZRMs zy@)5hS@3^~H5+T&OAS`Q$#T&JO-kZ%um(~0fc56HbUjb|6T~V1021Z9z0@W0?*7nK z6u#vuaDJ8Onu0cs;+a|W>tm*C6PYdURg)0Sf?0Fz!Tf4ulUGBl9$4GCYRcaB%fwUa zmUl9j7XC!g85lx?BMhoKk9z0+KWQKEw|*b%Hp>;PpJTzE=G+MX0C*1|hUA=W=iaPe z+W3=7wYs!TQdnhmP10N3rokEe#mV787#_S)350)U`W%T~AQA7IH1LO(KEF zR{6g1Ki(X6?OD@?rHD*Z-1j0w>Hg0Z>7NJw6nG{t5a+~j-T9HS z&0xkrVH2sy^8<5=^!ff64LeeT$}5jLC{(LW({ah?9k|6Yyb}ey!G+5<-VWOI{ghL; zQ}dcw>X4F^u94LE^214YxVg8E-u~7%jGI`Z9$LxW(;d5h6?ehjA=58)Qo4b=u++w# zBsz0Qe6fdNxM%ynFY~WCy0b7BjyVe^?2zBYeJO)UwDMZ%XNFxu51fCanPj&>2_D!d zKdmXlm0bG#7IzF~RYp;<>e{xOrdw%mls<$_TwI-80NAkw)-0;y^fHlC01x@~qevsiI#imJawXfr1VUKj$C(Jn-oWYftd9$6T8@o%aTHQZePeXb zx5-S(TL*4^h7EAFc6*f_<*!4kHc4eBt6>%0rPPMp#$;63R1K%*Z%%quTcozX(A^A>x7qapm(QfRNeu{{RZB7l#J9x#YN8 zA2-+ey8~mlo+L`)b{xnxgk@K#Eu6&gTf<7#GJHyX6_BN}m_!`3DZ>567 z`7%hPU`juaI0NSBa6Jur-@(6%ULU=SOK%BlqTccoAk;LyRv03?a!!23y8F(`N@0CR zy=8nK@xO`uEv3Ddh~rJyl`z^qri|7X=-=|tBOTB%<+7ux&w91vUk3PF#|d|;_^-p7 zo|mcEK#KaFoeBsNQp{M%I-o9az>Vj22j;cqac&FhPgMKmD_=+zQHO<^e z(Y3y}Z0RPcYdQY_SdugH2JE&6A3wc(v8>#9zxHzRE$)@4Y9m(g!w_J(j%drYM{!>@ zNAd27v+auXEnDHYjyxHsi;V|Vz42dxXS3XmXFA$msb>48CVX7u0OP66Z~QgUY;RzH z6KhtM63cUEBu7J@2ZDRRj6oL)~A$qJ_xL$6U7?OB(l0k1dcXu zAmseRkC)oK_d)ny@Y)X?-)dHCd2MGINM_S5wFa{mtmAWB!R4tXQ{`QQj2!o@PZ)e` zyYV-TbZ-u8w^sMI`W~W!4PH4|@3m51C}bEJDp~SRJl3mWR8?t3duXpyqCc`nguFAY z>6#~rwR_z�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

H6ai{}>X4)H&3RwI4+!ebqh07)o|z?_ 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�rx>#_*q4N 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

{zLb(&HG`+_%dq)dbK{>{qEln< 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 cJ^r**vs=cj09@qmWH@wh}_f-XnW&**xcm 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

&jYwB~M`IAbCR5WkbDsEEr#8L1>P9cS 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

+
+ + + +
+ +
+ + +
+ + + +
+ +
+
+

06 - Visualizing with ggplot2

+
+ + + +
+ +
+
Author
+
+

David Rach

+
+
+ +
+
Published
+
+

March 17, 2026

+
+
+ + +
+ + + +
+ + +

+
+

AGPL-3.0 CC BY-SA 4.0

+
+

For the YouTube livestream schedule, see here

+

For screen-shot slides, click here

+


+
+
+

Background

+

Welcome back! This is the sixth week of Cytometry in R. At this point we are slowly but surely building a solid foundation of general R knowledge, and learning how to apply it when it comes to working with cytometry data. This week, we will explore how to use the ggplot2 package to create plots. While these will include plots typical of cytometry, ggplot2 and its extension packages can be used to create quite a few visualizations, from statistics, to maps, to graphics for news articles.

+
+
+

Walk Through

+
+
+
+ +
+
+Housekeeping +
+
+
+

As we do every week, on GitHub, sync your forked version of the CytometryInR course to bring in the most recent updates. Then within Positron, pull in those changes to your local computer.

+

After setting up a “Week06” project folder, copy over the contents of “course/06_Visualizing/data” to that folder. This will hopefully prevent merge issues next week when attempting to pull in new course material. Once you have your new project folder organized, remember to commit and push your changes to GitHub to maintain remote version control.

+

If you encounter issues syncing due to the Take-Home Problem merge conflict, see this walkthrough. The updated homework submission protocol can be found here

+
+
+
+

Preparation

+
+

Masked Function Names

+

Since we will be using dplyr extensively throughout this session, let’s go ahead and attach it to our local environment via the library() function.

+
+
library(dplyr)
+
+

+Attaching package: 'dplyr'
+
+
+
The following objects are masked from 'package:stats':
+
+    filter, lag
+
+
+
The following objects are masked from 'package:base':
+
+    intersect, setdiff, setequal, union
+
+
+

If dplyr was not already attached to your local environment, you might have gotten the following message

+

+

The reason behind this message is that both the dplyr and stats packages contain functions named “filter” and “lag”. Since stats is a base R package that is loaded by default, when dplyr is loaded via the library() call, both packages functions become active in your environment. Consequently, if you ran a line of code containing “filter” or “lag”, R would not know which packages function you intender to use in that line of code.

+

To avoid this, the base R stats and base package functions with identical names are masked (ie. hidden), so that the dplyr functions are instead prioritized when code is run.

+
+
+

Load Dataset

+

Lets continue by loading in the dataset we were working with during Week # 4.

+
+
#StorageLocation <- file.path("course", "06_Visualizing", "data") # When interactively writing the code 
+StorageLocation <- file.path("data") #When Quarto Rendering
+
+TheCSV <- list.files(StorageLocation, pattern=".csv", full.names=TRUE)
+Data <- read.csv(TheCSV, check.names=FALSE)
+
+head(Data, 3)
+
+
      bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1 INF0052         0      Ctrl 2025-07-26       Male HEU-hi 2098368     1894070
+2 INF0100         0      Ctrl 2025-07-26       Male HEU-lo 2020184     1791890
+3 INF0100         4      Ctrl 2025-07-26       Male HEU-lo 1155040     1033320
+  singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1     1666179      1537396 0.5952943    0.8820349 0.8627649   0.6420138
+2     1697083      1579098 0.9106762    0.9052256 0.8602660   0.2145848
+3      875465       845446 0.9705765    0.9845400 0.9578793   0.7403110
+       live      Dump+     Dump-    Tcells        Vd2+      Vd2-     Va7.2+
+1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070
+2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499
+3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402
+     Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990       164771
+2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858       208241
+3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209       371723
+  lymphocytes_count  Monocytes     Debris CD45_count
+1            587573 0.11796509 0.13723513     915203
+2            308583 0.09477437 0.13973396    1438047
+3            607477 0.01545999 0.04212072     820570
+
+
+
+
+

Identifying column value types

+

And let’s quickly evaluate the columns to determine what type of values each contains

+
+
str(Data)
+
+
'data.frame':   196 obs. of  31 variables:
+ $ bid              : chr  "INF0052" "INF0100" "INF0100" "INF0100" ...
+ $ timepoint        : int  0 0 4 9 0 4 9 4 9 0 ...
+ $ Condition        : chr  "Ctrl" "Ctrl" "Ctrl" "Ctrl" ...
+ $ Date             : chr  "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" ...
+ $ infant_sex       : chr  "Male" "Male" "Male" "Male" ...
+ $ ptype            : chr  "HEU-hi" "HEU-lo" "HEU-lo" "HEU-lo" ...
+ $ root             : int  2098368 2020184 1155040 358624 1362216 1044808 1434840 972056 1521928 2363512 ...
+ $ singletsFSC      : int  1894070 1791890 1033320 328624 1206309 917398 1265022 875707 1359574 2136616 ...
+ $ singletsSSC      : int  1666179 1697083 875465 289327 1032946 735579 988445 767323 1175755 1875394 ...
+ $ singletsSSCB     : int  1537396 1579098 845446 276289 982736 685592 940454 718000 1097478 1732620 ...
+ $ CD45             : num  0.595 0.911 0.971 0.982 0.957 ...
+ $ NotMonocytes     : num  0.882 0.905 0.985 0.986 0.956 ...
+ $ nonDebris        : num  0.863 0.86 0.958 0.941 0.841 ...
+ $ lymphocytes      : num  0.642 0.215 0.74 0.651 0.705 ...
+ $ live             : num  0.902 0.891 0.876 0.915 0.895 ...
+ $ Dump+            : num  0.2109 0.0625 0.2002 0.2147 0.3383 ...
+ $ Dump-            : num  0.691 0.828 0.676 0.701 0.557 ...
+ $ Tcells           : num  0.28 0.675 0.612 0.631 0.44 ...
+ $ Vd2+             : num  0.00812 0.00727 0.00465 0.01135 0.00475 ...
+ $ Vd2-             : num  0.992 0.993 0.995 0.989 0.995 ...
+ $ Va7.2+           : num  0.0145 0.0158 0.0158 0.017 0.0133 ...
+ $ Va7.2-           : num  0.977 0.977 0.98 0.972 0.982 ...
+ $ CD4+             : num  0.634 0.612 0.664 0.438 0.739 ...
+ $ CD4-             : num  0.343 0.365 0.316 0.534 0.243 ...
+ $ CD8+             : num  0.273 0.336 0.286 0.486 0.195 ...
+ $ CD8-             : num  0.0698 0.0293 0.0294 0.0476 0.0476 ...
+ $ Tcells_count     : int  164771 208241 371723 111552 291777 271870 487937 220634 415867 184930 ...
+ $ lymphocytes_count: int  587573 308583 607477 176662 663667 510730 726238 451047 710964 652155 ...
+ $ Monocytes        : num  0.118 0.0948 0.0155 0.0145 0.0444 ...
+ $ Debris           : num  0.1372 0.1397 0.0421 0.0587 0.1592 ...
+ $ CD45_count       : int  915203 1438047 820570 271304 940733 675857 921660 701657 1066884 1017713 ...
+
+
+

The type of values that a column contains are particularly important to be aware of when working with ggplot2 plots. For example, we can see that several columns contain character values:

+
+
Data |> select(bid, Condition, Date, infant_sex, ptype) |> head(6) |> str()
+
+
'data.frame':   6 obs. of  5 variables:
+ $ bid       : chr  "INF0052" "INF0100" "INF0100" "INF0100" ...
+ $ Condition : chr  "Ctrl" "Ctrl" "Ctrl" "Ctrl" ...
+ $ Date      : chr  "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" ...
+ $ infant_sex: chr  "Male" "Male" "Male" "Male" ...
+ $ ptype     : chr  "HEU-hi" "HEU-lo" "HEU-lo" "HEU-lo" ...
+
+
+

While spotting the character columns from the str() output, and isolating them using select() works, we could achieve something similar using the is.character() function in combination with the where() function, which the dplyr package actively borrows (ie. exports) from the tidyselect package.

+
+
Data |> select(where(is.character)) |> head(6) |> str()
+
+
'data.frame':   6 obs. of  5 variables:
+ $ bid       : chr  "INF0052" "INF0100" "INF0100" "INF0100" ...
+ $ Condition : chr  "Ctrl" "Ctrl" "Ctrl" "Ctrl" ...
+ $ Date      : chr  "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" ...
+ $ infant_sex: chr  "Male" "Male" "Male" "Male" ...
+ $ ptype     : chr  "HEU-hi" "HEU-lo" "HEU-lo" "HEU-lo" ...
+
+
+

We can switch out is.character() to identify columns containing other value types

+
+
Data |> select(where(is.numeric)) |> head(6) |> str()
+
+
'data.frame':   6 obs. of  26 variables:
+ $ timepoint        : int  0 0 4 9 0 4
+ $ root             : int  2098368 2020184 1155040 358624 1362216 1044808
+ $ singletsFSC      : int  1894070 1791890 1033320 328624 1206309 917398
+ $ singletsSSC      : int  1666179 1697083 875465 289327 1032946 735579
+ $ singletsSSCB     : int  1537396 1579098 845446 276289 982736 685592
+ $ CD45             : num  0.595 0.911 0.971 0.982 0.957 ...
+ $ NotMonocytes     : num  0.882 0.905 0.985 0.986 0.956 ...
+ $ nonDebris        : num  0.863 0.86 0.958 0.941 0.841 ...
+ $ lymphocytes      : num  0.642 0.215 0.74 0.651 0.705 ...
+ $ live             : num  0.902 0.891 0.876 0.915 0.895 ...
+ $ Dump+            : num  0.2109 0.0625 0.2002 0.2147 0.3383 ...
+ $ Dump-            : num  0.691 0.828 0.676 0.701 0.557 ...
+ $ Tcells           : num  0.28 0.675 0.612 0.631 0.44 ...
+ $ Vd2+             : num  0.00812 0.00727 0.00465 0.01135 0.00475 ...
+ $ Vd2-             : num  0.992 0.993 0.995 0.989 0.995 ...
+ $ Va7.2+           : num  0.0145 0.0158 0.0158 0.017 0.0133 ...
+ $ Va7.2-           : num  0.977 0.977 0.98 0.972 0.982 ...
+ $ CD4+             : num  0.634 0.612 0.664 0.438 0.739 ...
+ $ CD4-             : num  0.343 0.365 0.316 0.534 0.243 ...
+ $ CD8+             : num  0.273 0.336 0.286 0.486 0.195 ...
+ $ CD8-             : num  0.0698 0.0293 0.0294 0.0476 0.0476 ...
+ $ Tcells_count     : int  164771 208241 371723 111552 291777 271870
+ $ lymphocytes_count: int  587573 308583 607477 176662 663667 510730
+ $ Monocytes        : num  0.118 0.0948 0.0155 0.0145 0.0444 ...
+ $ Debris           : num  0.1372 0.1397 0.0421 0.0587 0.1592 ...
+ $ CD45_count       : int  915203 1438047 820570 271304 940733 675857
+
+
+
+
Data |> select(where(is.logical)) |> head(6) |> str()
+
+
'data.frame':   6 obs. of  0 variables
+
+
+
+
+

Reformatting Column Value Types

+

Looking at the str() output, we can spot that the Date column is currently showing as a character value:

+
+
Data |> select(Date) |> str()
+
+
'data.frame':   196 obs. of  1 variable:
+ $ Date: chr  "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" ...
+
+
+

Character values when plotting are generally treated as categorical factors. When plotted, these will arrange according to alphabetical order. In this particular case, this may not be an issue:

+
+
Data |> pull(Date) |> sort() |> unique() 
+
+
[1] "2025-07-26" "2025-07-29" "2025-07-31" "2025-08-05" "2025-08-07"
+[6] "2025-08-22" "2025-08-28" "2025-08-30"
+
+
+

However, if year/month/day is formatted differently, as character values, the alphabetical reordering could result in your dates being scrambled

+
+
AlternateFormat <- c("26-07-2025", "27-08-2019", "09-09-2025", "16-03-2026")
+AlternateFormat |> sort() |> unique()
+
+
[1] "09-09-2025" "16-03-2026" "26-07-2025" "27-08-2019"
+
+
+

Because of this, I generally recommend reformatting these character type values over to Date type values. I will generally use the the tidyverse lubridate package, as it has various functions that can handle the date format variation. In this case, since the character values appear year-month-day, we can use the ymd() function to update the column type

+
+
library(lubridate)
+
+

+Attaching package: 'lubridate'
+
+
+
The following objects are masked from 'package:base':
+
+    date, intersect, setdiff, union
+
+
+
+
Data$Date <- ymd(Data$Date)
+str(Data[,1:5])
+
+
'data.frame':   196 obs. of  5 variables:
+ $ bid       : chr  "INF0052" "INF0100" "INF0100" "INF0100" ...
+ $ timepoint : int  0 0 4 9 0 4 9 4 9 0 ...
+ $ Condition : chr  "Ctrl" "Ctrl" "Ctrl" "Ctrl" ...
+ $ Date      : Date, format: "2025-07-26" "2025-07-26" ...
+ $ infant_sex: chr  "Male" "Male" "Male" "Male" ...
+
+
+

You can notice, str() now returns the column type as “Date”.

+
+
+

Factors

+

For columns with numeric type values, we previously discussed the difference between integer (ie. whole) and double (containing decimal point) values. When it comes to plotting using ggplot, numeric values will generally be treated as continuous values unless we specify they should be treated as categorical values for plotting.

+

For example, if we look at the Timepoint column, we can see its numeric values are discrete, corresponding to the timepoint in months when the blood sample was collected (0, 4, 9)

+
+
Data |> pull(timepoint) |> unique()
+
+
[1] 0 4 9
+
+
+

If we want to avoid having ggplot treating these values as continuous, and instead see them as categorical, we will need to specify to R to treat these as such. We can do this by converting them into factos, using the factor() function.

+
+
Data1 <- Data
+Data1$timepoint <- factor(Data1$timepoint)
+str(Data1[,1:3])
+
+
'data.frame':   196 obs. of  3 variables:
+ $ bid      : chr  "INF0052" "INF0100" "INF0100" "INF0100" ...
+ $ timepoint: Factor w/ 3 levels "0","4","9": 1 1 2 3 1 2 3 2 3 1 ...
+ $ Condition: chr  "Ctrl" "Ctrl" "Ctrl" "Ctrl" ...
+
+
+

We will see what occurs when we try to plot without having specified this numeric column as a categorical factor later today, but mentioning it early, as creating factor variables is something we will see continously throughout the class when it comes to both plotting and statistical analysis.

+
+
+
+

ggplot2

+

Alright, with the data imported, havinf refreshed our memory of the types of values contained within, we are now ready to start learning how to ready top lot in R using the ggplot2 package. For this first plot, as we learn more about the grammar of graphics concept, and how to layer the different arguments together, lets first decide what kind of plot we want to build.

+

Glancing at Data, let’s try creating a boxplot, with the different timepoints on the x-axis, and the frequency of T cells in the CD45+ gate on the y-axis. We can envision we want something at the end that resembles the following:

+

Let’s go ahead and actually convert timepoint over to a categorical factor for this example, and mutate the frequency column.

+
+
Data <- Data |> 
+    mutate(TcellProportion=Tcells_count/CD45_count) |>
+    mutate(TcellFrequency=TcellProportion *100) |>
+    mutate(TcellFrequency=round(TcellFrequency, 1))
+
+Data$timepoint <- factor(Data$timepoint)
+
+

Lets start by going ahead and calling library() for ggplot2

+
+
library(ggplot2)
+
+
+

Data

+
+
Plot <- ggplot(Data)
+Plot
+
+
+
+

+
+
+
+
+

As you can see, nothing is yet outputted at this stage. Let’s however peak behind the curtain.

+
+
str(Plot)
+
+

In this first chunk, we see that the data slot of the ggplot object now contains the underlying data.frame object

+

+

If we scroll past, we can spot additional slots, which are currently empty, waiting to be filled. We will sporadically check back and see how this changes.

+

+
+
+

Aesthetics

+

Having established the first layer of our plot (Data), we can now start by specifying the next layer, aesthetics. In our case, we were interested in placing timepoint on the x-axis, and placing the TcellFrequency on the y-axis.

+
+
Plot <- ggplot(Data) + aes(x=timepoint, y=TcellFrequency)
+Plot
+
+
+
+

+
+
+
+
+

As you can see, additional elements were added to the plot, namely we are now seeing on the axis we specified.

+

If we glanced behind the curtains, we now see the mapping slot has now been filled in

+
+
str(Plot)
+
+

+

In our case, we are building this plot with each layer being connected by a “+”” argument. However, you will often see both the Data and Aesthetics layers combined together in actual practice. This would look like the following

+
+
ggplot(Data, aes(x=timepoint, y=TcellFrequency))
+
+
+
+

+
+
+
+
+
+

No Quotation Marks!

+

You may have noticed, we relied on tidyverse to figure out that timepoint and TcellFrequency were column names, and not objects in our environment (for reasons detailed during Week 04). What would have happened if we had included “” around each?

+
+
ggplot(Data) + aes(x="timepoint", y="TcellFrequency")
+
+
+
+

+
+
+
+
+

Yikes! Not what we were expecting.

+
+
+
+

Geometries

+

Having specified our Data and Aesthetics layers, we now reach the important point in our plotting step, deciding on what geometries we want to use. It is this layer that determines how the data actually gets plotted.

+

For example, we could use the geom_point() function to set the plot geometry as follows

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_point()
+
+
+
+

+
+
+
+
+

We could swap geom_point() out for geom_boxplot()

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot()
+
+
+
+

+
+
+
+
+

or geom_violin()

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_violin()
+
+
+
+

+
+
+
+
+

We could also add two geometries

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_point()
+
+
+
+

+
+
+
+
+

As you can see, many different geom_ functions exist in both ggplot2, as well as other R packages that expand the plotting capacity further. One I like to use for my own plots is the ggbeeswarm package, specifically the geom_beeswarm() function in conjunction with the geom_boxplots().

+
+
library(ggbeeswarm)
+Plot <- ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm()
+Plot
+
+
+
+

+
+
+
+
+

We will continue building offf this plot version as we go forward.

+
+

If left as continuous

+

In the case of the above dataset, we had converted timepoint to a factor. But what would our plot have looked like if we had left it in the original continuous format?

+
+
AlternateData <- read.csv(TheCSV, check.names=FALSE)
+AlternateData <- AlternateData |> 
+    mutate(TcellProportion=Tcells_count/CD45_count) |>
+    mutate(TcellFrequency=TcellProportion *100) |>
+    mutate(TcellFrequency=round(TcellFrequency, 1))
+ggplot(AlternateData) + aes(x=timepoint, y=TcellFrequency) + geom_beeswarm()
+
+
+
+

+
+
+
+
+

As you can see, in this case, the x-axis instead of being spaced categorically, now appears as continuous, with the individual dots being plotted at 0, 4, 9 respectively.

+

Given that geom_boxplot is expecting a categorical factor, this fails to plot correctly when added on

+
+
ggplot(AlternateData) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm()
+
+
Warning: Orientation is not uniquely specified when both the x and y aesthetics are
+continuous. Picking default orientation 'x'.
+
+
+
Warning: Continuous x aesthetic
+ℹ did you forget `aes(group = ...)`?
+
+
+
+
+

+
+
+
+
+

Fortunately, the warning message provides some context we can use when troubleshooting. If we implement the suggestion, we are able to rescue geom_boxplot() plotting attempt even in abscence of specifying timepoint as categorical.

+
+
ggplot(AlternateData) + aes(x=timepoint, y=TcellFrequency, group=timepoint) + geom_boxplot() + geom_beeswarm()
+
+
+
+

+
+
+
+
+

This example generally highlights the importance of being aware of what types of values you are trying to plot, warning messages, and some of the quiky odd-looking plots that can arise when the assumptions are not met.

+
+
+

Mismatched Assumptions

+

In this case, the two “geom_” functions we are using are using x-axis value as categorical, and y-axis as a continuous variable. What happens if we used a “geom_” function that has different specifications?

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_histogram() 
+
+
Error in `geom_histogram()`:
+! Problem while computing stat.
+ℹ Error occurred in the 1st layer.
+Caused by error in `setup_params()`:
+! `stat_bin()` must only have an x or y aesthetic.
+
+
+

In the case of the above, geom_histogram() was expecting only one column being present in the aes() argument.

+
+
ggplot(Data) + aes(x=TcellFrequency) + geom_histogram() 
+
+
`stat_bin()` using `bins = 30`. Pick better value `binwidth`.
+
+
+
+
+

+
+
+
+
+

This would similarly be the case for geom_density()

+
+
ggplot(Data) + aes(x=TcellFrequency) + geom_density() 
+
+
+
+

+
+
+
+
+
+
+
+

Facets

+

At this point, we have added the Data, Aesthetic, and two Geometry layers. We have a decent working version of our plot object which we can continue to edit as we go forward.

+
+
Plot <- ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm()
+Plot
+
+
+
+

+
+
+
+
+

The next layer, Facets, allows creation of separate plots based on an additional variable. For example, if we were interested in seeing the difference between male and female infrants, we could specify the column name within the facet_wrap() argument.

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + facet_wrap(~ infant_sex)
+
+
+
+

+
+
+
+
+

We could similarly return individual plots for various treatment conditions (Ctrl, PPD, SEB)

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + facet_wrap(~ Condition)
+
+
+
+

+
+
+
+
+

We could also use the variant facet_grid() to facet on the basis of two separate variables.

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + facet_grid(infant_sex ~ Condition)
+
+
+
+

+
+
+
+
+
+
+

Statistics

+
+
+

Coordinates

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm()
+
+
+
+

+
+
+
+
+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + coord_cartesian(ylim=c(0, 100))
+
+
+
+

+
+
+
+
+
+
+

Themes

+
+

Broad Themes

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + theme_classic()
+
+
+
+

+
+
+
+
+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + theme_bw()
+
+
+
+

+
+
+
+
+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + theme_minimal()
+
+
+
+

+
+
+
+
+
+
+

Active Customization

+

Instead of applying broad theme, you can also modify individual elements. For example, we can

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +
+theme(
+    panel.grid.major = element_blank())
+
+
+
+

+
+
+
+
+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +
+theme(
+    panel.grid.major = element_blank(),
+    panel.grid.minor = element_blank())
+
+
+
+

+
+
+
+
+

Especially useful in cases with long axis text names, we can rotate them using the “angle” argument (and horizontally justify their starting position using “hjust”)

+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +
+theme(
+    panel.grid.major = element_blank(),
+    panel.grid.minor = element_blank(),
+    axis.text.x = element_text(angle=45, hjust=1, size = 16))
+
+
+
+

+
+
+
+
+
+
ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +
+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))
+
+
+
+

+
+
+
+
+
+
+
+
+

ggcyto

+

Let’s return to the initial flow cytometry style plots we generated last time using ggcyto, and see if we can customize them further using what we have learned today.

+

As we mentioned during Week 5, ggplot2 implemented some major changes going from version 3 to 4. As a result of this, ggcyto had to implement several bug fixes to get the developmental branch back to working order. Consequently, as of the time of this course, you need the following versions (or greater) or both packages to successfully create all the plots.

+
+
packageVersion("ggplot2")
+
+
[1] '4.0.2'
+
+
packageVersion("ggcyto")
+
+
[1] '1.39.3'
+
+
+

If you are still running older versions, and encounter issues, the updating your package version instructions are here

+

Let’s begin by loading in the additional R packages we will need

+
+
library(CytoML)
+library(ggcyto)
+
+
Loading required package: flowCore
+
+
+
Loading required package: ncdfFlow
+
+
+
Loading required package: BH
+
+
+
Loading required package: flowWorkspace
+
+
+
As part of improvements to flowWorkspace, some behavior of
+GatingSet objects has changed. For details, please read the section
+titled "The cytoframe and cytoset classes" in the package vignette:
+
+  vignette("flowWorkspace-Introduction", "flowWorkspace")
+
+
+

And proceed to load in the FlowJo.wsp example from Week 05 into a GatingSet object.

+
+
# StorageLocation # Defined Above
+FlowJoWsp <- list.files(path = StorageLocation, pattern = ".wsp", full = TRUE)
+ws <- open_flowjo_xml(FlowJoWsp)
+gs <- flowjo_to_gatingset(ws=ws, name=1, path = StorageLocation, additional.keys = "GROUPNAME")
+
+

And return to the plot we had left off on:

+
+
Plot <- ggcyto(gs[6], subset="Tcells", aes(x="CD8", y="CD4")) + geom_hex(bins=100)
+
+

To start, let’s switch out the background theme.

+
+
Plot + theme_bw()
+
+
+
+

+
+
+
+
+
+
+
+

Take Away

+

In this session, we saw how using grammar of graphics concept, we can create ggplot2 plots by adding on individual layers, which can permit us to build different style of plots depending on what we want to visualize.

+

Next time, we will take a closer look at how to modify ggcyto plots in other to visualize differences when different transformations (scaling) is applied, as well as compensation in the context of conventional flow cytometry files.

+

+
+
+

Additional Resources

+

ggplot2: Elegant Graphics for Data Analysis A book written by Hadley Wickham, Danielle Navarro, and Thomas Lin Pedersen, who are the main developers. It is an excellent resource for both beginners and advanced users alike.

+

Introduction to {ggplot2} in R by Tanya Shapiro | R-Ladies Paris There are many R-Ladies groups worldwide hosting monthly meetups. Many of them post their monthly workshops on YouTube, which are an invaluable resource for those just getting started.

+

Level up your Plots with Cara Thompson I really enjoy Cara Thompson’s videos, if you want to dive deeply into how to make your ggplots go above and beyond, look up her resource videos on YouTube.

+

Tidy Tuesday Make sure to star and follow the hashtag for weekly inspiration!

+
+
+

Take-home Problems

+
+
+
+ +
+
+Problem 1 +
+
+
+

Work in Progress

+
+
+
+
+
+ +
+
+Problem 2 +
+
+
+

Work in Progress

+
+
+
+
+
+ +
+
+Problem 3 +
+
+
+

Work in Progress

+
+
+
+

AGPL-3.0 CC BY-SA 4.0

+
+ + +
+ +
+ + +
+
+ +
+ + + + + \ No newline at end of file diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-17-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-17-1.png new file mode 100644 index 0000000000000000000000000000000000000000..121d39bdfca0c790e4138e6c6c6579a7e3a07028 GIT binary patch literal 3250 zcmeAS@N?(olHy`uVBq!ia0y~yV0B<%U_QXX3=}!ML-{q3VhivIaee*z_5c6>+Z9~0 zfg+p*9+AZi46^MY%-H|*V=4m!PmrgJV@SoEw^ufD9xxC%aNztu@7?AzBuo_x%p0}N zGCLT>vorje+Q{U>#w8%B;gGU`VIp46ZwK}UW@gq79uWnjfQAzej7p=N(J&ZI2cvmm zv^*Fs6G!WX(duxtNifQ*LQREWHc;1Az-zkBbs_FBL7TWf9a z+SypBF4SBI002}i4<9%V0L+I10HC)&fn-n03fK1m07_yzD~E%!KY>7?l9Cb#1e!N* z-u(IVm6erMR8)TY>8Aw?7A#!2aM7Ygix)3eRaI3}Q&U%0|M};imn>Pbbm`J%%a$!) zzI?@s6)RV+)X>mawQAMs)vGl%HMO*~)~s2ht*x!2qob><`^zuCtX;cy-MV$_*RS8O zVZ+9a8#is*q^GC%>#x6V-n@CsmMvSiZr!$Ro4&rjfq{Xcq2c!J+js2Pv2*9nUAuPe z-o1Ozo;^lJM#jd*d-v|$w{M?`i3u1CHZ?UhGcz+cH-|tVP$=}b-+uf3_uu#L-+$o1 zfkTH5Sy)&cK782H((=fWBS()OwX(9Zwzjshv9YzawX?H3cI?>k{)Iudgoxf$;P5^Y`~h zB9Q?B0fB*mK|w(%6e>74I3y$ljYeZI7%Uch{rdGAH*SQ6hTgn+^VY3fw{PDL3k$n* z=g!@`ckkW1cmMwV@bK`6h=|C@$f&5O2M-=ReE9IuqeqV)KmPO2Kc75#5*-~K6BG0F z>C@QQ*tod3`1tsQgoMPzL>vx>$KweE!n0@3o={H!m-bL?Y$q=NA+d6c!d16%~=mWD14y z=FOYp;$kY5N~6)KMEP0Q>^5Jn)-CKmw10dehn~SdUz<(CRS;4MX8ntHt?g}mKDeB+fwgXxd7JQg&zO?PjJ%P zW|3fUFDi@V=E{pLu4uxqW}@89V3>ZcK;lG`vSB)(9*;WFxMyCDK1x2WZw9m^)0FKj zxBO>+Lg#rSLiVQTR9FnIG`WB*5LnUAmrDG(+{d`G0Htm9H0fI+}Q#vif)vQhKhcgP0FMk(d3k`0iJ0-jm?W14?m z-EamoTy`xPl{y41eB2_Y!s2mdHw)n6zym>Q?H<9{%((CrptbG!x_D)TUy$0e7FN&H z?H66!apfwh_5l%k#DT$tQqT`u`Qb-DFy{Xwa2mW$+uAbK=4rf`FCK%OEm}%gI9~?y z&S#lxnAW0C6y?zS>ai}6iDAHrO|t!WKPU4Ud|QamWDch;t*0c697>;H^hK}n*$iE= zKo$qcsW$wUebQkzokwMexF&BX0YL*)eyShf#5(!+e~_PnT|3jdKhUs)o8D$xh048VUjBTyU`Gg9dh_wdkne#b`<(5?L5*^P2W-!e*|mLqn5DGYpUFr zjOmq>87T!#3>?EAi3>l1)oGNDo*S>_CsQH$5>ZL(E)IUNZgB^%jQ_@MU7YzXTNx-i zF-0O77`9pCOS5d~=S_J(L8E$a8&_j8P@N7_ubbF0<}B&^=Hjyl>H@AU*^Ik?_ z$DrO;RWucQjIAXIPVFp44}=+U7Z5aU(L@}sfwVz{Im1c#q5@)cL+D@h%5(isuy|I`>wKW2O+9icilA^ zBg;1xr}gAwN7ih5BO`Dbwlc7aP`4uvXxiGeweP#7@`LvOS5hKIE&Q}P!%LBGCFx5Z zYG9TS*oq9Q3&1)fDT2^|1oqOIoXUdoEsbKmjD?n3#|u;$`ZH-+cQYJS>CH2-?gj~` zC@3I#bS60?AB16~?QXc+{LxoYuRz@=<;X0HwZR;pUc;(Y;xa?A2G&5am_~OxH(_m_ zvwJruaV=W6FO!xPj)_+fB}TW4VREkL5-42h}X zHPQmhK`MqA+&~T~R8?1UT}YXG8|h!$s*@tTqk+Cwk21lt(VB!|IjfL`l3Lf6yCaVc zrTw3~^Sel)02A0uUYQ8$PKrjKANDeKk*Z>AG-mbS)>+ZoAM(CnW!fg_9-&-bUni6> zOZv8I=!Rgt!xu(=4x~MO@NQRFk zU-C$rb4G4KX}4ex1IQ7x2ZKkQ0{3fT;nN=m0JM2{m>A;Z$)$0Zxyne-A~_wD8%#8* zGx0E6Q(+J&(WEcRcuu`wa|Okjt3o&lM>{l})fobXy&Ly+w(IUI3__GI%2e(?IqOL+ zG-iK?$ezXT0wO$Tw-m##WqIp!Fq#YzzrlZe9<)H=k6j~LUUc=EW;OCFfp;^-Oo!kk zC%ZChOmc2wHA%M-q#HAw7tCqaU2p~Uiu05E)SZ*470VSYs@BF!B8&%woCRxtm#(Ew z$CR{$;fKmM1|r&KZSzt_NWgkROuqk;IZ2bO&C;bG{Bp4^R3vIl^Dl>1>&({C!we-0 zKRMC4Zev%L6Ba3)tte4KC;>n8j~%~yyxJCf*-9>`Od-qswa`z8s3Z+2Fg-^;mh+r# z9#T{1n278kr^~qA)4$K{BK_a9yZq;W-_!WXnuBuoCp)KGKxrEuv+Mi23^FR84H2bS zz43Do8H& zY2n2nh>IQJ!N-`|V?$2BbSwG7^PQ%a4PyvHJc}x&poTV14pF)9lG>37%2B785g55_`fvUcp|;fE)~{lih5`?s+!joP{Bpq$=V z&ZvT7yZd@4bEWvsrjFa8u!*#_1h*PfU?TrBpEEnaJ9s2T2o?_o3QtKb!dgaR*Afi* z2HID|=a8DvCqKzEqryotB^y6~uvW=0I zSCBAnmaI}|%KI5g%f5J;24w6fYpJje1U9S8$KFeCdrcBI^w3UjggTl^?tqPzg6u@q zCFL(E7j8!>In-U;ZAj=cJx`@(4-P^EuI8|dD;Y`Tti?tK0vD6ukv=yyN;_4S77^?0 zpN=$I;~^=s1SO+KvZrTXIMGW6D0GmvaLUMZ;ue3SqqPXhx$EdmdX2F}cAV?0pfIb< z?%hAEX=||Vz3&o_JUV`KYyCO%ZyFfERW77B`0KN>%%*_>BH7xRNlTY}IM+uZ=K|6X z$Pa3tJ~zW`@UO=M?_)X0cHA9E;38!3daY$47#Ut+Oe$7$Yxi| zDz;`!Rtx)v*HPN`Fyf=vnE0;f*?JUL++_R<$e~^CgeGC-jYh@#!?zpFX?vg&CepCb ze>5htw@+WjIr=`h<9T$7?VI%b|O4(_55w8Sw6Ux-yyOX(Z21 z_5wng!hwnF&!FnuR6Hy3%`3%6Hel5h5jg>lvhw8BN_4r>=8+*i{=B(Z?K)OGa9yjV zWIP=6a(sbZ#Adnic82gS9n~2wj+)?IfH;4Xp{%1^k=nY74a{I2Z6FDds5%2j@qWXD zQCBkb`{)5B4FJw%`S1WhB3mNTJPSS3h_Ca9s1uwP%?$P>BcdA7o;{QGSSm6rzf$je zbR=@!QD~pe(4Lr4X#}dE0yGy;^R_z0k0(3;{%<2*+_=9|_jU#Q=t-jFo7qf$v*bM~ zz|rUfO}|1l7Ak}Si+&45uH)?-ZcmPzg)(?!wO+r`#9l^-ry*9!;euQN{2?HNu8*veul4a~ArKTMLMMX;&ZTFY{6&JRT|nalT#^ zbKl&nf2PKeTNL4uqxib)iG66YeL3CoEUN;Fa; z!|B3JbK&2D@`|MHJ#VD0(Lm`tT}`tf=@!9PGT0)xIt(;NOA^eh>)KLZx4!d-CODoe*py{j@lJIP
  • hKjyJQvD|)DZc{1Xk@J=v1L4D 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
  • hKjyJQvD|)DZc{1Xk@J=v1L4D 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 literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-23-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-23-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6b0e1fef0dcab575cfd37a5e40320e20e93bdcc1 GIT binary patch literal 22323 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 literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-24-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-24-1.png new file mode 100644 index 0000000000000000000000000000000000000000..12bc4088b0c2a5caa248f43dc384b59acf334caf GIT binary patch literal 15096 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񮨹ngJ&@Mv6=h4fm+~qF?5J=`TPWc0*;_iv-rz# z{N2nC0q^MC7n1>2_&ZNBE*ZP(x#?bq{vZE8WbF?ms_0xNCsFl@CJ35aE)~y*Z@SR; zkX>8IN;NTgcFEC0SRO+y;p_z4F1?phnuKd(n$0KenO#k7xNWC^`kI3SyW>%hJAlbR zUCMhwE7iC-CuUo8K^c|$eS!FKsHD8S*g1k4kn1vILTYiuY17Hx;vFuUlds}-w;_ew z>e@{kd_>VR$%^TeS4G3c2O~da(Izy<0)rZ^akqJy(-pkHPp zGA|8Rf_q>Kt?cebM^12kq%-Lijikg2<2~Ja)V`@DRC$&U%rcbX-cPKFTH-qhHBY&RYZTJ z`{<3UpO2O?l~Bo@qLukmt_a+-bS617mEHKB%3!=C#yEoMq!h++JR^ggJSo#_L`tYB ztf~xnY$Hm&d9_S(n&UnI~&4>@g=S`UOrexL9qsQ(yd@vAlT`NDYu+83=md3 zkC)Qb4z0OD^36E3qCQFQjc)}el+l2XFXWtgPFxBStD4x|pzJs1QN{>DSG^c(61UZ% zM-AVVZhhC(!ryW*Cf$M+J>!$dopJBy~iFIH3XXp}g-3z0g6 zaMX$112HrMm{P9|saDLNuq;W>TQ}p@i!Tac^k^tTqW$T7+rKUCa{S(-MeS{S_%gY& zuScou1&>^d0YI&~9Ok1&s7qA#MuH`_|Me(d2~Fv-8>dSKUumxfN>5q=bxY*q9U(XM zP>RG6E<7W+(*D=Si`_^&-nblS{YR%CY2oVc_dn8&Q2=hB@? zo|xLPDrA@+kcmr517{Q4On~^+)2O1iBp7GaFb=J=%<_Dlms1Lh>K}dRqV{grr7

    J1mgqJv(4x(;EC#e8g7?DQ-TrmR1jYzD*9uLez&q%GX`RB)(5Dh{hJe4>A($Fwow zSV$3)WiAoN;7%7+b13Yod$dYvn{$+m?fYR!O!p`?y3jMKaET{d7H6wNZn-*(>+^+; zEi0Pz0cEXWjiZ&@UkBM!d!`WMVSxwRh_rL#u_}zAw4)OR!_T)9c1FN|IJ)Zyh^8K# z9(#cZ7;DL5l$3-7HMkcQ73#3O!tIbY6qJ`k#L*Zgbr^O#ghOQiUmJ6u*k6hANUwRK j|K_i3|GNR1Oo8<-P|eRg-Z{YE_t;DgEshi$oVxs9R};Mv literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-25-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-25-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f1386b260417a60bb27e316b81d8276cd2548c74 GIT binary patch literal 37455 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 z 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 Vt66Oq|50WD0#8>zmvv4FO#t=$WBdRB literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-26-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-26-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0b34677953d39d0f847a80353f8559f32b2cbf17 GIT binary patch literal 24096 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 r_l*9J2oK%_N literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-27-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-27-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ca81a6c386a378a7622370bb20ea62d0b25d03c7 GIT binary patch literal 29257 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 literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-28-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-28-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c6aaea758416e71bcf7b90dda17c55d3f020bd2a GIT binary patch literal 31902 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 literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-29-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-29-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b727d4fe4f2ad929d91e12dd93728fd5ccc3e487 GIT binary patch literal 31713 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 z z8TY$DNj^l~k(Z=?fkzyt$i}&wM;kG3Lj_&3#Chx@xmHqAN8$QsBy?>a(|+mjvqbvT zE`FE02IG5P!A`T6OsiFqE>7P2Z^jP5BVU-B`o1E~Po*84x);NF+$1zAvUAt6mV-iB zZh&d!xwWsp`th`+J3;LeVTxg>D}cTkux?SIwFy4HRaOFJnhY~sccmQ33*W-s3TCdj3>7sV> z+yz+rVB!*weaiS!$gnHV*`2(_28k%GewP+Yr*|mm`_Qi180>R1hv$4SG5qL>C)iVp zy9t*a{h&?L+qB32%9RDyH&FHf>A!1T zD#xFGgNeyOgXz4AUFq)CM}{-p_;+;w9G+lu)r7XwM14VSQSfMy_n!|$C+{!s$Gx@? z(ZBL0w5OR<&aUB)kgr2W%zM;%RgiW?{8l4i-My>LOMU)VnbB0fxNwR)QZ#&NDy^Dc z<$5#!(?9LTIgPJET#nw2B%^i7l7dvac-T?VI$QX^*K8g3wY(g)Px`cHl+H?k-pJYi zR~e+~tbFGvfyjG80pRWuQNM>sAmnPBuiV&EM8bOuyN1n~leW+PjEcVN;u6O`T=bQp z5qe%2L1_%=s^3@nS!TQ&EwvPJ4BV@F?C86LiR`|#R=%+a9!3DJBr60ExJ55jR0t61 z{wlrC;i8ke%SLNKFDSs_9YXHTO0NW#Ndt~;OfDs!7_xke6yW0*?;ks+u;&;Gu90-; zn~mNKm-qBK?$T@saS{JpH|S#u*C7Jpwvm6ycP!u~=i(xFf7ELc3SN&=^F*iPld@8o zXj%;aQbn$2i3nT~EBsecXGb5)%M8($XmYqQXH7sG}6h?bKT4i!kNNURT<%!e>*sra)B-lpklckUfF-*tZg%g%um$Gx?=#Dc5+ znIE@scukD|pvsket6$aUeAA4)Qdo&~^^-CIS4V~3W29>82Bb>=8WiBJ^6tbQmqR2< zG!)=@d>ZsEjB!}#$j5n)6II;`dz_3m;csogbEHT@ zPR=Zy=X)%vKkZ+GFW5Gzf@7t6&Gzz{pLU*=o@~+8cQ~BO4{>)xkjRr9@KSH*Z>3(X-@)mh2;=f<51*{_IIfk z1Dhv7_yAhBM;rP<0_I5njp4811!jf8HvDQKj6s-%X zy6MpXb*3OV*$o>Z%X9qLJQr--W0}!XZFQ*Xl|@`=Q0SZGNL*r_F&VFH*zza`AMhz0 zP`6M?s3H<<2M3la6%R7E7yyiB_9ke=| zE1SdxVNo)#$_WuBlTCmb9WWH^=58&5Z*(Fz>__vrFEXINW}0_GODFSqVNQ(Yw6#FV zuOS=W{n3s|7;Pk~=QxE<2fVO_c;b25^Wr+`uM_a;ObJBmw^E6ZI1I%-U`z@^hw9H) zJ84lwWJdVuUwWWx1La=N@NZQMzQ;sfad^N~#Wp@R)9*;gj93+gX5_a;Ci9-a)w_Yk z6mXxEN2#1IS>gfqUl@@BKoQGd-dsPrJRCQg&+h4ThK!b{>TB4Co_L46Y=6!|B-B>|zTkT(=tq34hH`>I-ti5;L>mFtk!lVFu`h4Eh@^MjOnX z?U2-mT@y`F17NZPf3HmYncq@9jx~1;S*P21w1&C!eui;fEE(#w*D7=XUSGks=k-wrI`|4lYO5TP#{VtEie?Vzy1QhR4*4ox; z9hj<1Wc9}Iq5ZqQ^=!5Y3YA_Ru?_D`3d)XSVGBBF8VRTq0K}n5Qp3mPsku)-C9r9( zIl@dF{;AwZ0EE~h!g!taj#d`ZH)nIBs@&2r`ez_F1J<>L7RiHlvxTZ;iV$#K8m`~5 zkJn=n$JF&*g{MlUVvJ$n;$g5z{Cc+^U$z?sqiPvHdE{@o)Fazx)qf zks~ob`BF?>!UGe>hGTX2>N~H453PvsNNT+uAF;bdZ)*R}0w1j7)N3*km;8)2_3kR~ zmDz|=v6T|sv3_`Le(G;N2JmoroT_4M{dP^JbBD!e+nFJP-R$EXZSxtDFoC~J<|ABn zXeZFt=SkfUwbt;D!6Ih~ewgJzkoXOU_bZ8WiTzJjd5l)C@31|93_>VFDcf!izjkF& zcQaA#v0D3LWYAWhlEna)hm-rH?+GB~RO8l&1oc#s-tVt1pGMg39w8}kklpVCy?mdB zmUI1eX(fZsmS2EEQha>E*oA6etpsNsh%-?)C(^A0nSb@i#qBaYIY&c zUfJH|%ksnGWsK)&&ZSd{#3A538KuaLtdx|LsdcX^T@!=q)S!x~-f(1=+ z5gYpQe*2D?k4h~jQR<>=LN1*=ANwsk_>;q*Gh_+NAhhX7`PxD+F>B{qtuAkRG}wtE zlApqjbzzB?$hFUpBasihJBnwRF8iIlmms_J8-wLTb+&wb9uAiK&<1SNouf28=V0x{o`>!1|$&zb#dtDT6&NUGZdZbyxk;Suw@9$8Exh z&~AvuO(}%-ZiC}=#UCB;!#2|cE#u6P>%|9feZ)|jrGdycU6?8pB(E7B_{%qO`@_+y z=kkh`se`;KP&o)*il+E9b;VW{Yd12ng@-Ep8xxKY6zyPBkaW*h{h`y7Q`>DgsQb_b zA+mnVRzr?ZJD>oP%qz_0pdZtXt2D&TFfrnHwzt_~>g=}LTDS#sy@*nFYcq`$^?U}G z=-ZUu>}zOM+gf8ckXJ}fV!^TK3F&9!7m433V|Kb&!ZPXSs4a$VwZQG)5y9-0Jfw5m zKeTMmpb{>~clKYt5z5EHqa!oW6t`sSDNtn(QO9u7T!X=wOt%JdpX%w6jE2;L z2QyWaIbX3G(n7AY8J_E5#*JUJRF_^KCR~ZCHpkUW`UP;ixNDa_F#jIF@bm#D(p~8M z(SCF9?q;s;PJhFxwtI_}E+?bvVq)=Q(BSiCmB}kn+;yeTKV9*(gqgqF{N3EFnjJJh zNCi>wsZhD-2}yT!?2aLD|DHIJ!TM{0zGs5p9Cs22vs?X^K6JD)IOI2@;8&)Kag8-` z2=P9;$@MU!y|Rog{}BWuRW=~Sq)I68No&9>Zy;3!Ua@UU4S}>2m1@6&NBa1j7yi?5 zPVyIVz^l4wk)1L(S_mf_+F$z_{gR4ZrU(c5Zj4kCM-b~%jNU~ix{V zqjNA?8hLC}^V55JQ5uiobZz00Uf$4md-v|EccTArxtu_Z@^b1oSnOi8NRAR`$O?u_ zFl52ur6qSZe+{;5iHyrDT(ikGO z>!%Q_D)DE9|6Fqt|7oxo8r>)&ysLt~>Udg$?~~~A^uI3oD)%;9%2#eUh$Zn&R35CkIql@-_6YZ6^uT07WzWzUq-!aV36cMRKx zj*pS{A7gY11zHxZRtJQP(kzAKXGDTf+nLH+F~5>^omO6LBkc=+<}HaVBO0v*{&&(w zO#ZRo&L|oEQBZNf_w4=^k2ozcBWYJbLvJ1HUPs|=bpZ2n7>4Y* z;^Cd)Il*^6sqCqzn1Os}D)KLy&ZB#yXl~mdIKgqmfxVea?|3yh&kON-{%82@se<|K z&(heNX4sCuFoJKY68OtIS1o-#6d*BVyI*HRGcw`Q1G2-{`_?7N@xn+J*Vq^)qi1!% zVXmB}c!Ydag27&sb}4d(R(X{W4)^8;;R__odk@bi+PYm@+fP$mv(xN2?NS{gbzJBw z#KL#ZCOtnudEt`VlRZh#v5wPt3aKNaw|-!i$MSF!UugHHOsm(jABU0Tpf<5vIbb$3 zqUlW`V+R-zUAL2Sp zuPg~4B9IjNZO;s)BYhGbk&W$QQIUIM`SI%a=efazJWu)l>EFM4?MtAy`RLsRP6Q*{2e_&Xf)X@&pW!F*f_FU%nzag)lA8rM_dJ44j2@DQ z^yeb2{Kl5YtAGlzW1ORwxL1=C=W-IpEw1}b(X!^k0)>jH~0N>SYLiNjwMUL7Krl>fK>Wky35lh=B`tp25AkRfi8lW@+Z(n3b=Z9=Z?s!f(Jm1lIz;M<&i$5ZQ2`m(1MxyKM z6~>^?nq&*+TfmZ``I;6Ca^x9<_`Ww_w*~fM?~gnD=yfj*ZA?Y+8aD?9h5uTlWq~^5 zW1pZ$ur5C!k>TB$VbCmHo-UOa9C)`V)`s5H%ygaw*FlYcd2S^)E-d2cub2x5wGI?g z3pVm3)=J1YM@X|7#v0#Nh6Jdqe*4iB>H@G=wu(b`P}+cjK;iGk+q_;mdf*X)=P9MV4?$KePY2Wbfc6MdNG2~XHUdtWD=sw zR(ts#e_{7_DvuPy1X>H(%hms2TpcrLHRYQ5R9raBia{-@%L-TelGI|2kK{v$5qUZ;;e{Tc{WLq_`^*a8NIamQ|~7m_7PTw{+jn+;K#LaQ-KEVX2;geI_k( z^{0m|sj>fb-GQ6kTWy=lea`sWWy|mH!rU$ITRS|h@E-~(M^a|jcT4QOVtrrzKeBf# zA3hRTm`);cdKkt1vvqw|a`AU%o`;c7he=o8%*fSPheBY`0MF@6? zSEDK8MK|W=@5jEpSvk;bQ=@3#ucj?M$uGbHHrMH-eg86#KK%c|2Fq zn&IXhuGxz^Gc5~qchqb{WPm1ES-I=S-kYsEzpV=J7;YWsCSV11ay}cl;8&UzbtJ8v zsi*Wlc{htY*@>3f{XFMV|FY}sDZ&e7uH)YHy*!Oy2zdgE?r;Ic%z+RtrSICkeL|@& zc)dnDwHs!2mA4vf%1q7HhxrWWKHS%6&DS9wv@!Obj75Rix|(VunrW9IG{cAPr5}X<~klBSk?V27q1t$k3qH0hZzeD}R&Mq0R`1Kf& zx&&BKKa^(nC_P9Wke#jYJ528(T@~~d&tmny)FWdtP<<;jD6u5J%a!`FHjJGMd%Bty zliQgC^$0iJD%(O&CRTs`hUHGFfR1L!b~RS1O}&nLx=5EO+crBHR6d9N7~h>VJGWAq zuUyWhTQ{U@@DQDk5TGoJ&QuUCt;eJ zV_nrNERGrX!b;Y*fOwE#WtFhGF-_p^AU?0+Ae1yp{!8CM43iC6QJ0d1KK4Vn1;d4* zKiV$S)yYvSJ-~cbTzpf+B$;g)dRz=K-2|}s=Kg=^_9)Tt{)V}!)v!9 zMfA!xT2hphUNwoC8I+M`YU>}@`zuY9K|Y8eo<}J{)SS)TQLS&&H|a+}(+k=rct@=b zY;}56uT6{)8neae?Q^WuaddvRC9VGv+u;PLP@!p}zZGkON^a?1A3!?N7tBd)D=Fq!C`uB zqiX2H4x}_PA(h>5<^s9Rr;y*;Z&OP*K7OfxPZDjMwu{t((yORc5z=JK4(_&rcPFHG zU{SN#IpYLKl~@UB>*V;%XwGlKJsmuD90fMpK6S7e)@nCUsi+Z3KYZ6+c2q~u6MW8@ zZ#9x$5W>q_NDCPOEmkgKh@YTf4v)}u$oLu^Ltrk|cLpTjMo_$R13JXxKicOWV6^Rc zJTBist@me4)#s&@;oPhRWlmYJp#zgQu^}fzfU+F*$~v5|lDuf21DB62qOHA^##K}O z8sUNq($>|l_-Cq)t-BQXcfFkg|NRttwKX3M(IY7$Jjv5VtIc)1Wu))y_sl09&KNBC zjfJWI+#H;e+kCV&i84$G@}Dw_6Kvdk@CBZ+?f%@RD?$e|?=`LOYvbIqzoYJ@7fHLk zYS2CnPM<;n%%I?+<#TihhB(lN;=-X4@AsU~A9d>ayqD{FU)OzIk87JiO?5>IGA1$z1VW*7>*j3; zgcuHi5dL?95Im_Z<(LQmfoQ7g$b0zyJUA|fJUVqy{!5>isq6DLlbJb99g zjEtO|{M4ya6ciMcl$2CdRHsj$rlzK*p`oFrr9E@z3>_UEJv}`G1H;*~XBin8nV6WE znVDHwSXfzE+1S|F+1byXJ9qy4`3n~=aBy&Na&mHUadC5V^YHNS^73B1c#)5fkDs4k zKtMoHP*6xnNLX0-(xpq6FJHcL<%)=ih^VNjn3$NjxVVIb#MP@;B_$=Lq@<*!rLSGP zCL<#wD=Q0w!QgQC_3PJf+_)hpCwKGaO?i2F1qB5~Ma5gUZYe1#DJv_hsHmu_s;a4} zsjI7NXlQ6^YHDd|-M)QWTU%R4M@LszS5Hq*Utj;uojV2w28M=)Mn*<=@7^^wHa0Oa zF*P;4ckkZ)`}ZF_cwlB`_VD3Db8~YG3kyq2ODiiYYiny88yj0&TRS^DdwY8a2M0$- z$48GIIXO8wJ3G6$xF8S+S65dzH#c{8cMlH_Pft%TFE4LzZyz5YUteE8KRPo6w|`t;eeXV0HMfAQi)KtRCDmoEbY17E#*6%-T{92^`H67u@>>(J29H*emA zg@uKOhet$2ynXvNGBPqMDk?fU`rW&CF)=Z*v9WP+aqr*1kB^T}NJvObOhlnjA3l8e z`0?YXPoI*Kl9H2?Q&Lh=Q&ZE@($dq@GcqzVGc&WYva++Yb8>QWb8|m`{+ySWm!F?s zP*6}O}@4uRwnlE3z)YjJ4 z)z#J4*EcjYG&VMV{ra`3sj0cSxuvD0wY9aat*yPiy`!T8gTZ|J_N}wCv#YDCySuxm zr>D2Kx390SzrTNAU|?`?aA;^~czAeZWMp)7bZl(w`}glZe*738AD@_*n4FxPnwpxP zo}QVR!D6wqv$Jz^bMy1_3kwU2i;GK3OUuj4KY#vQSy@?KU0qvS!{Ko2>+2gE8=IS( zTU%S(+uJ)kJG;BPdwYBP`}+q62Zx7;zc51TbEapsVMU4H0|)x#%O^V5&-J}#l@6kS&hx)~iN3)5>W*gKU1l=9Zrl1% z%`?nouLxeDUh?vGl9FFwy|NrNFw)d6P^;SR(k?W!?JKK)yL6k~{fcS9z{MB!XUzn3 zUd$0+YPeIS0B1B4cu4g2a>I@PpZ*Dl>&M&}$~Rf)8%j9H&!SjOJ-DA81;d%P7;^Z} zF{vD=xjsU6{L{&MDLH#JxH7qeE$LpbAtD38`QTvhB|wEp!$ggjb`-;UQq%v zbw~Iz-z6GX=tp{pH9H{SwB)H1Ai3(F==R{7XnG&60f)b~S zp;$YSOu0Ayu4D^mz6xO_jQO))Hgu#7iY<5(L)0xyKo)|0(#3>Hu!fOaT>p1cq6(qc zrGNM8UI@b#G|asFJB=AL=FPKbCj}LaK<>!HKTvBv@*=c}UEatrDOw*1()>%6G-|p# zJiMm#&s+`^(OaZ)Ao2nDj1#<2wf`rGV3ZtEs483TvDRAf#k4<^b}?g?7nqqD#>iv; zIYHy7^2iy7*)&=GlW6I?ZFoIFB z>8q9wd__8{BZe9G(!k@n9d)TrC(|v1H!(&J7c*8NBj<`c1)o%ZcPqSHt_#L-`di_u z>Ed)%BVjJJy;%QYI#u1D@rCEf(q5(KEGHSWAgdrTjL+35Pp?9zw71@@T)ZYO`(gaE`&Smq^Nhy%(TBn%oZMyvY%CP>dGJP84~Vj$DcuQ zT>i^BG1N43j~#3`tFDz3<%ho#XWow@V@=ug&rZ2S@523PG{=r5)&;J%_EbEZ^!r~a z@`ihgaTDaH63N;1-qy;asbnH-y)Bor3|2dOmfiP5u>@3YLy3Klh zJ4K)j=aPr#0YOoRM{i1u(~ZSI5Cf$mlrlTb9nU-d$YTmJ!M2|+_$745U}#JF`HTSd zwLc>5MX+OVpGNbOdUSY=$Q<{WwEWLMcXsw9c1oc<-W@hmiu0bRZ~wDk0+P+_VPMegC^5oo3hj?X8jcD_dDEq1eCA88B9x$%}T9bK{u}``kYN*aE~r zLi(6*)sue}z1U2@#yGzW|O<1wo$1UP~R&dz8MA!`Y5_X$MaUl6tu9yqvLP04E4ocd&;B? zuknOO=+Mo&;5!aCjGlX33_jpicFothJ=V0L`N36g%Q3icx%aaJ^DU=SvKUs zsC1rMoI0fKSg<4s(>%?!9+=u*VikRhe6n_p;b6q1C$qT9o7(2jDYhw*b_?)1c>Q?L z4ZiiYzS#v-AixMFAt(P|tSS@F!Bwh#Cq_J*+z(=Lb6M*|IyyvWnDJWQH%|Hz&Ekvd z@ns($XWXJ}*U2>030`sV>Bt?iYW>Lu2~$Z4XM1a0y!!>7k;8Ulnb1UKc>T>IwLsLJ z`ytHo(WSBJO%_BdwEgKq!q_0<4{ zL)+5p2i+7=doi}fcY3Q=QyoSx_)jyn3})Q3NuP1=#D#}{D2>s2B|ctN&Owb#U|~E{ zwzMMcttd2RW5A;j)d1Tvet2)ZKtzRRpLJSAq`~d0AMeF7^>wB?1~N=S80`a%q3C#4 z&yjp}C8(FlcmeP&q8OoSuF8`?wi0PMo(j$nf7MuVPq~?+x1an zcHSn8-5lG#>a5i;b^&#s+XjYP|AM|3^wXQ(uP~ zw=dPy$-@(u7=3q>+^-zcKq(l1vGVX>>-$tkG|$*&o+{jj-87Bgpos%d%kQ0(;k5r3 z%rbQW<(QafndwkF9hmS(@e?o+B9z!UM%6XQ|2`an?l1N>gis!SjJ~hGLXr0uV@aYm zdjj(e?j_k&+{XU3FcjEJwLJkh{@Mv!I1fV^)EEADj5UQ7tR%6){(lAyc|xSr|7VPE zNg`bx8`(dug#8o=PW2xW#8BwFer|Wqx&32Ma7Bgh#mo+Qm#Q`Y+DvPTG*7S2j`A*; z@AqP!=ZRz*a9@riHwFzgcC#4gOp51u`q!>F!eMD;EFk zUL>VP^~-K6;)nn2k6>?vsxHg@UCb69cNOCMKX`Sp8;YgnJ@#oQN zWYpW6P-EGZns1K6bg(~&fJl@C%h6_5ebU||`e*d`Zy!w&{t0Ok?{oRU?%N+3P=u=} z@1#(X`s(~WYHCb)_(&(xjpi?!DJR^yzRc7^#$t&etI8z(?FiyX5P1^=(vxpJe!C;H z6jmLou#nt;Kus^Q>ien-Pfg>KKfuEl9_kMDiuwn3Fkwcn?Au*Z{7VH8v8ShC?sR_M ze-;Oiyh#&6Vp*kZ!hZgRCQKNYE5VcP57Dl&lWV8zRv31;p9s@q1^6*=o~*>$1AkO z$-kFO5E@cSiPB)h=mgAsq1DtpvNF*mqH9|kiWLI%Qh#`3NMLwg8r6XQ=jN!u=N$+! zZ2$8lw4VfJ{Om6>j6%v5QNTC+uR$6{^ zSbvHO_5D4P(gia3@N=2-qj9E|3e_{eq}DtCn1cuAX3U&HdQ{ReS^&v*9x*K+9T`*3ie_56%!Pu2^SuT!_RK&(?eQQL z)nSK6M^4@l%`+@IoVvqaTzc7U>ATLXLyL zNd8^bhxg`-BOb{W5ft`0mSMDnVD1OXvriH(pss)&@*!TXN=;{mHM1cybR|zou|0+F z1KAZqw~ZH{jB+0hIl&8%cOkAnDN#2SExY&Xu>FQi3gs~p_k-8G|Dw10B;*rUYwSmL>DPi;WdU;p=nVYo; z!TE9VbNnWu2kDSLGe7g+?SG!>A{{*T%lVhyQTv+JiDR?Q?vEvOWZp@T$NQ%Exalj1 zFP9T;<^y^5I;q8aL1(B-im?9Y(wj%*yr)8mjJ^9=umvv05N(q;gM^7yHX8L{FY@D( zl7x2SW6B-9rc6b*qrt=CP~R+j1dM-9)&K|4zr9mYw?<5(ok{tFl~QI0KeNT&IKFyV z{+Q9?gnvVDw&xVAlOg)}h=%AqJMc$|wShi5md7e(g|39h%3_o_Cgrra_$xp2HNA*PS7 z)a}2KI!Z1ShSJ3zHnF9}m@6*M7Inz5ptve6TwH`!)M|e@hMnnE!wujlN2Y*)iA?h!yttTsi(I3Dk1wX1*~)AXwm= zAY0Ea_P{=Wzk3#Yn=Ug*{^+8VL5&UhU3hG_BfozDykf6d9t|6qZEm0DJd&MjCeN#7 zi@bZTW|wK@P5d0YNyUY7W-=~Rld)x6iz+WVCWH+sq>+$%+q%*^2M$zV_|Euu`>lZ+ zKfatuO9E$`D-xy`Yc~C&w=hJ3 zxqUdyHDboSse0dNN%o`!!WIV$D$PyE7BrgbxSM?z(=-IZ*+-HGL3bXNHi}M=gUDo| z!SBdqka=WtV)?+}1%C@2I%2AydM#_UeUWc{0+a|GQLY&XFq^P(?47Ro5ij?-#X)G1R{-BO~Tk>=Td+69t`X)#9E? zjEQvAkJLm8i{^Y&-E%AjL(*=#F~br2K`1btv^&;Cfwk7kb1`X<5lMfLj`*WGq6m=+ zM(E!B;#18&GPBajw!c+H;V?wB7v3j)-T!tu+wbcPylk-EXiCW8al{eNGK*^oY;1O(ZRz*qJVSmlLOfJz8H{|DDVFng5L-K`+Doh1H{ds0 zF)qvH2G-Z@!1a!(EGnPitqhRrYaLF`6b!#&paHLL@hR*o!e8ACtM;Ns*W5RwDa8J~ z#uU)!?rs#D344`qo4g3h^9|gtTatn6H&rrw!=zov%99ey#wNYGc$<6vWSXRaG%EKb z{_RXv>{p-U`SYlsb6yKy-IZgqE~0`qo5`?oHv(uhXMMj9CW(pj8J~te*B>xb^pkIX zs0J1DpN*UnDkUy>4s=ncbX$>HhhD`w0ttt^x&ka^JT+_8#lfL)J`P;g`rSaqp{;txNV4pPH#1zs6=sp!hrT z+1KM6Ob1&p*{tuV0+r8)CI=9DM{)hZ18Pklxo~0Yg}u14Egq#*r-n{u%`Tr(0(Ir*&b7a=6+M?+ z$AO~pO4YUt(yzGNZo51yN{VQrTgiNh@M0DNGKMX$>p*!6Xrtc%*f=)Pl*&q~Ot0ez zk7jx6v$B5~1L&(}h{)w-$=UGx*#ua6aLAQwDCBD^ z=X%vesIjM&bA)~@uY3L|vMSN5-2JO^E5KoGAro+w3LXg?^Pax@%Fkpd5jSzBg(HIG z&1DVONW1UebHoh_-(myIpC&J&4c+}g4hJ8ycOc81r!`-d>BSZJ8R_Szv&Z>jr={VNLcG- z(#D*IJ9&+3wsN_bmw{x@a&gH`YV@#bc2$-qJtTABg__f-Pu+Fykj-P4%S_xJje2Cu ziH~srwM8UqVg;=kXk+3_#oL!8a!yq$;3Fil zM7Yf8u`R7VO@ii0NclmVUwXwSeO6{f2$ASRB2g$-E-#{njPl?XknCnoNcqmT_BcaB z`p{v#u11|7W&G(!#{(&`k{kZzL5XL8(zzmv;%ApGzIrg?7nS%CP?ODAo7X;>agK}+JB>JC-Eo#%s}2W-2oP2gVzWz{HU$hCU$!QJ1!2| z-tEU997qXjvmxE6fl9e@2{j)o9^AYl`OR@GLgKj*2b3bF7b!aj#h$>UEh=HjY>VmOtqLGujuzQ+WrjuYcwBexINB$cjP{OfEYN`9jqe9^KP~D`-1a z1B9sAg2GO}V#+#^*MyiJqaREbq`jQQD=te}glASZR7^2xa(MR8E%Q$DBz+CcpGH$m zt$OeC{_eHB1NvRwBIxeSulsmIM%d+bwHnO96Agbf^anUkT|2key#c>*T-Q7iE z!76WaNXfCr4Gyn24Vm0u7~;PNqy_nx`z6c$>DZtZC{}2ssbimGagd*88Jhq~m|0;b zZJX}JW!dgy4v8vT9qMKCe18G7DSF=3?s+qDjpEq70+ z+h0q&-BCTk{0oybGs2m@AX2xco_tSrer<1eXxqzDCNzmB1|*>AwA&$rO@tVIU7-{H z@;gNnB#He~*dWD#>M#-TX-h~U<`T;`!~N=K6u^j7)Gb;zwjCTw-0gJW(|>&eFL4Ox zxGhS(t5%F4zY#eaN+$xsDEhNcj)4aiyjnfJ#ghsDZj7)gWN>!4pMvz&j=;v@;W;_N z@|BS=xh}QeCoaRcuib15d}*EQ6LAg2R?iPIv&AAzJlrGarjSr$Oi^p-&<{#at|JL# zC+iw>N8`2SD{=KovpU-9OcQw^ZvhI`-nOF3uKH=eWO42F;iHl|fIGpZ>3fkkw&0w5 zEJKY_knA9!E*a@DP73QN_cv=Vk7Uc#4KhdxTxB5l5@!QW+&Pw6AzpRDL8{}&(bV_= z!~4d}pOz_mS(g}(pPGftF}GCXg$@nfPr5;aK?B+0ttHrLY;Pc*GCdX*h1;;l^p#KX z+iqP-$z^6teY>l}e`lWFg_iFG=?Ow!*i!1kUH} zeJJbww;`4nl+&=W|cT*zp;sRVVe*}+C=o2`Y`!>SR zakAq0aN=;_Tu_DnOf`xuK?S z<0Zk)ZP!oVYmYBEo91YwwkFWL_uy2QGSGC=EQn|3f;QF*v<^qw5lDC-(t?~ED^Tk( zoDVIMl?XQY&`7$5;k8=f#QhK#F3Se)y3q{~kt) zY18Lka_zZ{v+aCPOW+mv?czoN1=c@U>z}nqG0-Nnt~p^%^jnWR@W!)ZD%qSUqYOr> zqx*e??7=O9sVADaRn8UF0gfi$ue9ZY#@n1_KRWN3|=8BZb0^FKvdhGzw+pea>;pt##{7mrcUGN3Rb*XwfL z&zUb&`OAwv7l(!6f&@%bAWS9bs$CX7g}+)}GpYLmCfQ&Z=iQK|y@fzqM>ZJ$URW-$ zU0#H9TldXHK{7IOGz%A>Ly`t?ya^RP;sFFmm_=iQvJqUQ)gj?BHU3sTa9l@@19+Fp ziWIK}uR7yyzZpzR#m^H!jma7mJO0+#?5>bO2oOl+ZI)JF1c)tk+eBz>zIRtLT;*`Exxk0 z2F^H^uzb9?Uxku*?_}ZL6eTLzUDxG=SJm9qS0aQh`7$|Qu2dTd!Y%P@S;=P5`)%84 z)6=_caQKI*Q>Ye>J=U}|XHpC=sdp+gyIgPGhLgbS)8@Lia&8bOWW>i|G7MW$B7Y@! z5HCj(s9F6Vwjdkr49c$z+gM>w{Bpc5-+}YoeVgIWQ)^W`IbQsj=lfNC7 zb-Qd~?A(!hO)l!H7|_KFj8gl|&)iIt;8wy}e$V|Op{uj6noh!(L-!#}i^X4E%n!+q zZ2GDy=VOpBhxH-s2AVSTpAsVwLkO-JpNSO-ag%=AmA6DF{hKKbFr41xM!tW*k*4(& zs{9XpPTSKU7Utqrrk;5%U$K+`4q5?bjK~F89ZXcx*>l|GP*nxjICf*GTnk_6R~1OW z=RXJQHQbi#GwPKBxjTcFF`s*_ivB6E)hsiZEt{|Z)U$6?=n`ctrY)+-5X&%Jl^zEI z12MoYHkwwlhxN1sLU-;RMFyS|A{08P^=L2=96{skyWCfJSDIqD0B5+>7L;38OOl79N`CqgTkvSdr!MA=yS zd%c%rTTVjWU1C;lS!q${xpoA*w}h((=cgZGv*;x?C+!l$UN0w8d+(uqkk+hr0c8R9 zAe^IIR0uPHX)S@?WdEN8R&s1cr+KwakSRye~E-I0JEEx&Sw|KOWam{E%#UDeAo zSA0!w+C&{J*_5xTw|P}F?0)a(Ga2(G4UB7M2un&Gm|92)4T%@~tUWVvKr79={GUnS zG&f8}GTfoc)rHf^H^Y*{46Fq76&FBCdIInG%K~GR>EExl2`ah|ep1twK*<+84>8Vv zP+xiPFf@{Y%`_Xj_`N@zR#%vteoJ@Dnl9LP^mX<6XjOv{`4!pSF2a?ZpuI6ds;ti@ zpk~-#)bpx##vUndw`P5AVK)|+rws8ez3FE^tgiRS|7%Xf6Jl;7f$vb@16`k8yz`zm zH{>4B&$cY@Dl0o1o(Auu`|cf5BAhx*^7O;}WWuI$`*Pc{Lw(Kz%7V3FSRJb?te)zR?eWIDDr^$*JFyU6B zZk2uAXD7;DaH8e|6fVecglQRx$R^Gp)m6s=i&BT1G9bPplM-fIUXCzSpR(!Q{H_ye z$Og_O*U0jT9{>GA;jf>OqZZxnm3?1Jd*+1=Tyly+lLmKIMrxPir+0i32tjT3jNp#e z+(Tc;escT9&VX|fuAU2Ie0OHbGD${aWZ4S8uq0>J5bPw~Z&g9B72LnZWE0{^X=T*7 zv|HKTv;(nGvt9bwSs>#dR$UCjbvF-3s}vt=4XrT!IG5Z4=6OGM`p&((*cNcM;cjmA zq)`Il+%?4F_4Eiaf^I{XW$Nrfwo-c;@=%}KQ$dtOI&ktK3x}R!N z`DOu!X&H)DQ`Wx;zWX31t}wALgpZ4a6fx_WH#Q&od8z6u4w}17l_rT!QrSGzN&nm; zd0Qi(j|rnO;wP@_e%e=n!0^@0Q!GPmMCK;7%Aki2rfuapBa z_^nFZJW`QUy@v@yA!h97m+B@DM07u1He+zN^3lL!XuRRTCCaK|#WR@b3}#~X7e*75 z5G+Hw?XI4O%BW5@wCF{uTM-{m_myDd+-%Tock`Pv20T&vlQ3{j_|`auljsYo`H`IzVnme*pZ9*c6lw_KI034 zRLi9YeJ2A6ZG0Wh7Tm~oB83!YPQ*;AT5GS9bQ`*>@68;bQ+Ez^LFVIf_MuxdO^@xZ z=fpV1PpcOEC)0YmPiz`tSRt5lO1SA;aa~7v;;Y0+of-O``CIaE_x~`_1@mWiYe{gh zhBQsvVJO743bj&Lm~KcIyOZ6NoS`2cj9fwj+-=q!yq_Tf#YWjQJpIu7ZWAd~n(>hk z6Pn!C!-(1Jq}sC0=zE|DRs;bJ>$A&-O7K*s21PJ(8R@4xy;q>XpG48ih^g%i-SYc2 z@;`}4+rMZrqR(_yumftGZxr*1dikw{ff-yvDyP(FOJjk9{nSG7*ldTRUMV+0IU$K` zu=RrvTAtX{ryplvOAMx?j-hUleR3815)$oMNYjAMP)- zcW$>yC-qS^q-d2*b4JXMJwgi5m7Ssx)vjC2325Q|VWT>2sd3kPZOg#uM(*VfsOwVm zm5yh9j2JbST}#5k7x^ulr!_CzA2{{$9dqWOii0Q%KhT85_hWZcIZzyja|2t!;zm9B z;NC@@O1poS*n6ru&-xBrkum#dEc!BfS^3(ti%}^^^`Q;5ahQIQ5CI=*c737EBW5m= z^9#XFnbu0~DxQG-A|;zKwEogV8R$O0Z@ow#-Qt7D`SH=IKx9<4KT~S)#HWlt8mc{M zj7YFcb2a`#?_J$yZ(HM{>ZQdPb?SLR%Y*V;P}G>!nXBBNoAdx&Bql+u!6)9bH&-e2eK^gN1$7N1?UB~TaGPyl1|#3XHll@r;EWc6vms8 zM!Ada+yN2l9CJ5#tqd{E8K9@;jZ%xJ`0-~(lJ@OZKhqkE=1dS1l`?+I-cZ4Of}MnB zS87eDTJ}T7<|=SyPEcXP;v1t}@YaL5k#g^ScT+5Z&A#hM&I_$<%%bJW7+sG!ltYqEx92@9Sc+dxJ5 z54851!Rf~4_^ivQZwGcD!?6pC6nY8xYsM1ik^`Kk3#cs;&Jqto&yr`Mitt6#Xt9_3 z1*p*RAUs=3GVzfQz$IvX$=+(6nxwRP&z1SoUqy!u}u}9GX_T-icbJHJG4bo!i|hX zjJQUnT;j{Q@Q0gWF%NWC7|Z~<8o+F{P}Nos_O4g zh7uJvBX8=41v4X*t}7#SEFpr!=K^$HxnuruELcvZ z#7SS>750P%!+Hsy!Qm^CF4(me)h^~E;Jf;qp;4Wf5T~E}#kl1$K=4LzjbRd$SY-Aq zn>iW#lp=q zFQCR_-<99Fze}Oaa08y4#DGG#>ks=4>vePA{(WK7y+n5VlzGeDu^lUZ)pL_R$ zW>l)PF=!XtW+1>t8?6INm{zg889y<1pH^7B`H5AxK$>e~! zo#dKR0hjB&dbih7fecRESDniJ(9%(EGz$lx28Z)f$ZtjFhgoQ(iyx5tvoQ7@P+tpLoc)%LC^T1(^Z z)@-z`PHsTJW$gw=Pa_^2dBB| z{vJ8f_kV*!j>pPQLDL3}K~)-T#+A%e4=Bf9v89R^V<%b+yF2@Nj^YKPBnU0XP+PuD z&D}48;C7F&#;r*o>)ojP*Bl0rhKbA#SpWq9SMH)yMitUezi(ouLxgUuCJfLU&>1Hp zA@m6O|Aj3oNf9gAi{!yfseTsf*Ya|-tP^*mRAMs)QOxcgbp@S|_0{yzd<2H=qf#j^ z!n_`6{fwHM0>PyJiAmv6f~9HQ=dH8e^UG@m?`sALcI;9TUwm^$&&h+MFWOd}*~og- zdvbA*ZS(VL_A6pUu$IV%Z7R{PfR$MSVR@@Bb^p^T)n0mxh;gWg5R1DSyrpOAb%;TQ zrSz_+5B4bsF#tv?wH|%S1X4YhWXXzv(#Oe$qPIOSMidd_G(!XSta^gLncG}{j?+ji z=u2|29rlPBH2=TEwE%by@LXu~O~&tLc8zVdH-iCa^d5iKq17ekE=Q`{75}$!uD3Ht zui*!M{VL55?V;!|6X)G4t#)^L60>zagCk0KAN@iyM}B9~@P{8CE!~c4l9TSlVbqF> zCIuxvpHvvwI9i$dwrP-H&XvhBbdqOmj%N48wMp{XOh9ycb)$I5W>Ba3kB;Z;4-c0< zYL}WK4Lzx_qbA-3_(`#zGXZx(2NKJh{Hnin<>LwNdTEDzAzgY`hbE`tq2ESbkwj=B z-NE2RkQ*yvW8OCb=R$~>74z1~?Xt&7fgDq-qEDz=PyixLZxcm+n?0R(m-sFqysDYR zD&?m0#5(*(n|mT%!92~y2v zvfOlOAR|n>jdT8A@YqFcEZxCze$r8H-k00*vjws}BYZgBE%C}8VupVu(qYR|!Mra= z-)MDbl^L_N$>;FUOatC=yCOs7KTwtAQ!SMT8xz9kV;n2-Fs0mbq4-UO>}Q{c!5HP# z_ApU>5jdLCM7g^^pK^2Sr%l;>izB?JFIg+ho4HpT%_nf2waJqheSJ`oz_N;bT1nb1 z%2Q(RYqHQ0X!HH@P$BAq_!k50zBhInY5v)}`EB|#g-PLkinVOfEXCJI5RvBgQLr9?eTg-W%@he!qt@0Qt&B^ilAnT?DK+4x zm-z(L(FGs-x2|?em{bw&RPB#{b}DWSdK_C0-BHnlp%bc@6()4U8E(O!PLm)ES|+FY zJ*Y)QQX%MyR$UG0XO$P!!KFLr%hRjn%rj4%)-%}EWG8m0x3P1=3Nws62$$vlsovW9 zo&YCgCei3E7$Pm_J254Rs_l}t_ce&Vt)9e)GI77Yn${^Br&GqJ*f_@fF(0!e_uw}w;1D-d4Rwn z79mB-merC!HYrFgrq*89AD9x-Ln&gJF&3{wBq^_mlt4y2bU-H9D`3gkM*i>`-=s+D z9x<+9(75EJ79^m`>S z?g~5H5!%tmq-mQqzane02uv;DWUR;n$83^{HlUoum-=rM0obx%3nK zraWL96#IpPb|}BM1%)pW_C!+Rpl5u~MT{a1VWJ&A|Cwrn+8riQPz9mwo|UtA9^Y!J z!iJ)<8|rYtZi5K?)#u^^*~*~80xxZMz08(^@KxR6q*$LmW6t+I2Lv*vj&O}fu*s5( zz{caLpI|X^;eKe*4l$gvbI%RfX=pKmw|Q57w|iTV1WbU&s0Sb=$Vo5kdZW6^}}$TP@+A zKxp3uBY&?TNes1IvB&aRck$KHp-NGzWpa<#AfiQ(tMZ%`2ebAjE0*aIMI^Z8;IV`= zI6W8Y3dE62Tc#|l`!XJ#mpCe-E7#&ZpF60mFx(Fbe!&l5Iz?>bV;mJ%E^Pt(G^r-R zTpZ5(0)@&_jo?fZD=0k3yyCc`Nh{TuL@e&Qt1C5K8g9+bKhOob4qtMnCVY|cf`7)S#*geE z5&x53?*`X@Ui86KCVYwe)mvP)dgfr}`Io8{Ji;fz{Q&jvUEKh}k*Hb1i4{O1fDCg` z>w=oktbl~18GrjgBzh0zkGVU^G4Io|TRL7D>*NL^NrI60s%ags3iBNU;VZ(Qf7b%^ z8?J|+u=)?=iq%BZT{918a@fMdXyE>FGP{`_Nt-(CY_e8F-j)K}8;z~N!pa1Fj7C80L-3&<>i?z?@bdxEvR3mY`}wlNiP)S6AQ+vNO| zdN0U7k%d!v&vSu%#hLe{s0e26Vr%GJ01$#`J9t2nKTSrF&fG)L1L#)5rKPkaNgeq9fzcaSr-9wPlF`sJ%nEC^e)1r@^L-dO`gSxr z_JPUmb11(ilEOej%~sw0=;~`VQ!6e;q&Tgm1?KREIvYTk8OY zJEt)}W*fb>-b%=#`Jh-4K{NI=m#5$5oIr0MsCid&L3l-!L`WOR!C4!H>P>F&IbbBo zuwN(VR~m!p@Ri^o>IR}yN1gKdAO*%UCfS53} z{6C7cl?QT-(x$Ii@O_Xhw_x?MX~_^*C$^){*>qc|rUfTJrCESx#<&r`b~mAw#CHQq zMXsd=%`qu_`;hy|0(59RB%Jg4@$)_i78BtdLfNm!qlKM8b7b_CjcUA<$zy!Qe>jDe zOXI=rv+gD)g7UqWS#Aw{Cg<>j8e0aaHM_2L=Mic|Nr5A2t0&|?YHa|8DvyB7$4;YX z_e&y&o1_SAV#i)HU43+uO9N)>D~JG-6+vFvT4?djus?Z1v^1#Un^;_)vW#%Y*W2KG z^+UunjUOCld!$a*>=4XVCFg0aeUD=xV*_6cQoBs^n{h+*XM1+O?h~h_i=c9(o39I5 zs2#ssj*esMl|Jh-w^ZCokGaU!F(w?x<8!>HRhE|6c*V~j1za6H^caRpKSD$Eci7#J z#}q46NR^S7yyJKOT#S6Z=|eGk_M8WpHv>2%(Wp^;NcfHj7tq(BL5uIc;bO*UkZF5A zVlM+IzI!6}!iotUD8hN70^M16%Hy{YE9X+TBEW1`)T@89zqrRn1?L#eY_c!A3l2kWi`F$p=-K; zze*&C>-*jG!7}clP$?PTlxN>7T#i{;8Owy#%QEO>&~(uu7KR7anLLd~J}H2@4!zAr%qpMMD|A8Q7XYzzI*b`^yfX^9JCCge{MO>LzM}=s-Uoiq&rBM7iyxxJ$PWdFZ6lwEIZ1OWg)S!q9?C$$zqUmP2Tphl3 z=HgX`gE*DBq|g)z$~R(qj&M_@k+#wneg-!8&Pywn*{3xhiKF;8hh8K`%F=^|>Onym zmx}MM#qOybS}93!&+EcU+TMwS(k+$=^m}dJc`YGgibIWLZU<0&AFT@8EtsRDhO}9a zj~-}^u_?*obhqjI9P9FFIo(T!YxCrR#iO^<$k;^pOsg~9)jk(NqXluaRHVxQA!&Eo zcUR||xdtCCX*4T_p@p{S;OtS|^;b9u;-l~9@75pvH)Dd4Px!sXQsj(%$Y42NI8o^z zkqP;id8D|^KDpnnOpsWI;MQWBNcTMO$}~p+)!_lzd4=y;5+bv59F8TxnM^BGYpgus z#zNC3NTV1)sSa;x@ciS1*fJi*=VRoFO7KNz5=?8G-+$co>Ey` z8G~A;{=9l=V{!R)X9Tp{)2!X=$Rg}Uu@T1m_0oFN`&=Nf0Z7Bm&2DuQ1pcDfkX3UY z{X=HQDmz}kS(eb*(;18*N4A%XJGY)|jH!(5OEb|Dkb&&CIiUkxj{0*XP!uf4*N;IX zpW7VN*k66zH5ix4$l&Wdv0Xbl8FXuW&4W(Xmm+#x_}B0XNeG=UwU_?m+pO@O~7g1>U z-A9Id`4!T&IewrI1GGiTqP3xv_g~4w7eTLx-820hKR5lwzpu4?Do6>4U z93o>p11n&2q_aC2ci)L4b6BeN7t0yUOtM0b_xb9_TJ=~Cr5=AUTyu(r<4?V%(lbm(Li_!JqMl{ zg6L{JJ2~&Yb2~3PU9AbMIM*LB9F<#vqf&F!`ShI`*jJlWHq92p{qc4EP~$g)*vPrY z!?cysLETv>w(=vcs+R#TT|*n`?>peYBvssnh<>Z);Su+!rRsx?R5vnyI@GLWlY#ht z%gbDR4JxW?>~|krFgp*xi}4b~#(;fezH{Sc#i1Vhl(Y5{Q-nnO}KroK11u{EyqiDP%v9j7mTbf;x(64u5HqW^;BkW;cLr4U?}oNizIxxD0jo~k}7EBvx%lfF3m%+P<)6BPpCOD?yyt8 z#ZL*Ze!hTS1L}p-r%ril&Fi3liw&7`_WgGG!oy#$=bX4w?$lSO-8}=PJA>~c!b1Am zamo0f>ktB!Z#k<6)QF^JvE#`OaGp{J8WZ!pqt_CU5idD;VYr4?+3~4>Uz0HH%RxNB z_rMBCK#H=)n7klfZ=30U&o;7LQtGM3_uvkK*2IM90%@b)+>k)6i?}68eOb0w#WP+r zmz)ol?0lU_2eh5OXVz?lq75=iT*zF@mAZ*)9K2%-}VJv!hP2%=_QL#^~`naJWQp#`24 zQfzLd_F<&mS?QPQ4flH{mJuO`;)Oqmbr&_nwGb|5NAdzXS_(9BP7lRUX3>v%QeMAH zE(&ZAm`jl}=IO@dyHX}WPg<7S+ z)XJnSIKS_^7_ZM~z<$hc2u`%oLEAO8T_g8W^fe#DOZR>J4}d5>4VII z-Kpg*P@t@0cAU-FlLKp1?$diL59|;H^<3Cjbi1@sGJC?~{K#uE%_N9q?08!e^DdYZ z-IK&E)K!Ep#HRoUiZ}v767^@A22$=oY7Ha-;6iCewzTIC9|l@oK`Ea8K9T8^yot%# zGbPLK3Kq+ok_83rKTzC4;Ll)M0wuM9%JNs(4wCfJ8NKPqPpdHzrfVhoeS7R;gtyk9 zK6_=_4iAg%AR1hP5O`Kh22>8v{5KWDuSsz)u_TKHG z)7<}lLQ$f%Ir_nul|t(mciuwdl*_NIeA|YtJk^+}^(~ZF5?5HeOqfxMbaS3(m0j+A zj*V_d*ZU!P(>F#~wMn~~wR`K(g}3I^CRvrJMt&XWP{yx^U47#8+KngTN+4gIh`7wS z^Di+>BJl?{TefLjnyHzae3pl@btBa0p6zblnUHHCii_WHSed1-<57+yS!~h~cyr=t zX>zQe@sQ65KqzrHoJikDrQ-&$El96N`RGr=?;M! zWm84x6vtD)`oh)kB)OXm@03;~)VT2RV9o_vcxyT~2q@f6oAP)f3WU`g z*PdIR-i^$+nTXp^&r~hc@>2n0ay~Cl#jk+@~Kc}HTGqubV>UNJ1n89siXp3@7^cA*8Bq9cIv3C z?Z@vMiKc3IKJO--s4AZsK1||{T0$Y1jTS#{a7R4>0ZP_GHL$Zu{g2gb@8EkwHHMRp zRs|N2)>8-VyzV)s4v3^fjU zruI-l;eCCef{gqvNIoOqG5#Xnn~KmES&7w=lqL=-Mutv0ZWr22ggnQ_45MRbCZI^g z&ko!eZovK=B2)|<)s#9Se3jDby-c=fICg*H~-L2WI`82?ond&ii>E>q9D5l(#Lg~C`Q0=Octg^yQLCiUM544kJ-CTVm$EhNY zy6iiuc6;Xez9Qg9v0);-*(-0a&*(~+W}8JHC@`(yFl10z9wU_o6oZx}*kv4O>x-o$ zIGvC_sE)fDJ_qKyM+ra`0vUOMePa|L>7r!YIp4^B&cCkCFf+*e{|gA^!g zc6OJCAdfPM1@g%IUYRsJb%DmcEFp&X?^N`-g2qjloLXx$(9jGzJd{Qno7CCmb3tjZ zqNtKfVRD)s%|J8r{wr^qY&(*l*KR%F&^%?7zkr1K{-Ze=aa_ar0Za<+PAzPSqjblg?>T$me&sQ&e1QF+bp`Uu ze+kH9X3vPd$AZ=O|C+C?m_o0o*C2fFX!qUUGiabK?mvdP>-D!k3(O@KnCv^iK#^00 z02RUP&sPm}fZgB)Y%c>U%yWDMflK86uKZ}aeePwwOKlX@2iqJ$R}JLZ5Jh#q4ReFQ zk8zKl>9>E6`wY(c^bg%pF~hp3zk`7+*PTiBDh4EgCGckfb;AB94Q*HBZUHr0Z}(hv zAenp?2*um{*HRtlAS>Sg#SRgmWg+`Nw^>$0fr|$!WQeTH2e5$Cld8EEyIyY|LCD>!$ zuom`-`wO7Y<1aVZaYNw^uUP)A_FnN}EW$ao!1=2d;wW*K+&YyE|s6Y_7ebr#AQvg8N1OpY; zF>9sG{Tu2RvG>&~FN-GRqYm6`+|A#~IUiifx7p)3Y|1-A(sY!%zi4(+Ki>3{@oUgN(KH%>bvQt!M?gUiSf?&d5} zZCcvfiZmwd3|a{U6`Jja`uMui^(t4NUu)#>sthOT|BfpE-u$%4&)bt|F>---dXHN_ z(HGqyatz|2LrJmH_)JZWc{qWH8x)KGuB&)UIh5s%a)(Y6j0|=Lbbiptd*(I00A2c1 zm|zK#{?;2^y*-jeKb@56y4kgh4r3x%`8X#tF{zgT zg7cwIU$q2K0r5W1W(eu^$2FKwSk&ro7&3T;LXi>-B(%T)WLs3$oD9yQBBI^Lw)>ne z6P#a;V`>l#iGg=pKZ@?^N^`%;LB;8awAPebmx)9N=7MWX@FFjTA!Bj~2^dvN(JkJX zrPKr@N*AKgdp~~tO_{ovC5LJ6PBRRmmttzq!t!7(R5pQD=$3_~<+z81e;o zT8Xy4asRt>UB4X=7kYS+DxPuMC1`(To3sS45Nkg*d9&GSfW?id!bbmB07M4asMf>e z@@M9zM^@;8@E!%O(lUUh9qjQ1Pl%SDAUGY((zHa8ee+6m;WWJnq^@l>n~_zK{2m20 zwrtHuv*cMPP@}C=HeU^&-OCe{QVg_W3S0e z4ImzRSPuB~OwSAn3S(kU_x{M~gVv2s%hWl?>Tc^UNC&3_AVJcN$1sn{NR5<6To^Ml zfVP{LuZv%$NOp`d?*3MqQ)S`|ql47_AoVI(w)a&c%}x^-MrDWg9LLcZ_&WV^r0cgo z?8)UrQJo!6I?wt<$xrYU$TJVhm0mePE@5|%GvBN-2i^*I07yofEJ5;{vFY+aNn17Zu@A>(fu*zFuAXx z)vA?g*nPWr`)eHi^R-(n@%SW~LXNd>^B?!lR~z11#qT(d%P(w{4gDUO|wX>F%1YBqb2f=+qmlSFrGeOWj^Az)V#?2DFxK_7nABpfxApjmylDyb#HDz+0HSCp*))y2n}EdIG9-DBUX=dn0`&o z<;QRuHQ^Cn#aI|Gh5%;GR>$A>Khl4FD-LFRo1GC++LlVPsiT*o@+aK~u04 zRk!8J@c6piOvwX5S%>Fyb?px(bxtUewSrQzT0W~tWC{Hfs1ir@4%BlQdn~&1f$p6E zzxZft0%m&LwB|F zq^&G->PJLH*mUl!5Q55&HX=-S^uwZHZ5z6xl>tdFD|~hj0$gTnz9`dUwf&fenY$Hc8lBz0VMs7d^VKr{y$~{jWLDLp*lk`^12>YpWt8 z`RufWb^UDog&1{n<=ZFDi^=r1%1n*18%%n60Guw>YBQBZ*v5`0 ze0NetKFV*}pAwL$bKCXqlDxjwCWvx3z;bO6p@ds;@YPABo?Cap2xA$!uWw#_7VxtOM_EL6VW{>N2 zopTv6bNwMJ)|9v}-C+JZ#$MS$G*a$gq&QJ;Aa!bUe@IF8FMqB`RTp_F|LS1Au+H+v6mkMpe0Dcgp^>_XGEMLt9cM!-i9xa?Mwd|TutZt z!y@kWl!f90{bE3_OJcq_WNvP~YoWH3*6erRXG}Fke?OE^hi~v0cXm${w3pjw=^)f` z8nUt@5A@yasI~na?Ndg9^Iekozf62_KsIo%C#`-GH+y*?h&ZI19PjqIdflZPeOdlrU%7J;S)qDdgwYWBtMk9{=dZ&T@FlO;qiXF$1Uv8 z8qi`LxXT+jm70;qe1x>+{DJMRueqU6AU+qnvt#k0o1TsNi18As1~rXcLhJDNC6bOE|Hm1B{OqeG?lC&*{(lT)F<)!W zo;5!U(|Q22&EirOIeT6IP;=-gZ>>O)G5p9$u89!slsTmuuNp5iSn1Hv+^nB+;M=Y3 zHK+By!<%=8D=!-F1{$(rl-`Q*q<7CMz4;pS{5fsq)(h@naq;7U^nSU5JUs2-^GDC0 z$2*;4h4yn$W^;1E{SQH>R1fJXtDuQTVcnreF#!)Dt6Y@XtXyys@apm*Ju%?bFahqshgLpCt82F{z6mm6MPY)L5q zLF*jSgFq6GVjz%m^*NO7YDVl?2fmu` z!u&Ixz0Zcvn+kKb`;29DIjuIG+GMx2gqNH%C#HrfYL|HQHLeyv@>cERZQ*t?EI@_B z(R{fKF6Se>ou+wFzl-euar5L_hIFlJ^Y_I;tJ}EYiCO0#!xToC)~kO(4AC6Vm=PQ2 z;o8?3afZ6*S*d-v1-Kb%bANr2A=Q$5XwmS3|ZNgtfGd8Fz)L&Za zjfo1~OzlU-S7^q%4wKTHXc?RAlU5N~LGh)&UV2k1`zVdaW=h z*_VqyLWvAww#?lT^G&3wu+a|GsoH)mm)|-XTs&q``@UdD#y+7U_fBh-WdXyZC1Uq_ zqf2W9zUOp-iqpFd^)6gOq!~Ls?sS`BrGzde#h37C<5sRiILd}i==yH803kTNq`da!+e~;>O zr!gVrbF=A)P*n=a?A;Ad^+0Vg12P9L*gBNf)+OlrZTg|rk8=)`-chy25AOK$di9zjQ_UrqSI5 z@;TpM?HErk-B?{i?JQU;t=l+wJKoTA-}+|CeaY6rjYBM^K}=?#d`D(NZ2N&-UH>M1 zN%vD~!pmB1hTi2@KP2-KE+54l7B`b8NXj`UBctmzVLJksNJBi)>CW$W#oWp-)e_;VzBZXzJ88B?fxXT~|*j;tOY zvQxiA8n>3@GF+-voT@+d_}TKrRS=?a3VN?o3^#>7Nwm`zd!5AMJ=de``DuiB((Ep$ z9BI*EPV64z<}lzlXI+Bt&V1Lhxp&_4Cg3=yUvH+8kH(%1rFbnNx+dI|1{G3Un0SIb z_lvdrQN_naDRnM5Qyu5T$1Iq_B~p2RW35;*o-H&CXiPF?JbWkjvo5vkLPXWK_RZ;= z+-xPX4mUU%nkj11z02f~r<*>E9YyeRe9`clekXG=rAas@kf-SU<7Y5-)G{0`$wG%~ zr5VQ$raydwDOC!TN9eZBVg(d-odTP>xpXU4FbQ;!~8M?dQ~3t?oA>1|mg z&?Y*B?^|gq$lJqETF4D1*a^sczW*Wcd zrWClZzR0ZIA{5-Qj@2)N5r!v!fEisUVL0TG1{3KC2!4}Kdmbft0_5-0SmMZR0zVjvV z*J#h!M*di_+xp4n{`KaE@pPEBiq8dWw6? z9#>3%cIw#E^sGZpm$F@Q@1jtQCTiV%pkif- zIg)*vie1*Wo-Xh4kkgnel}^sgkK+lKG6r4QJPxHY-^x24BRq!awesiLR!Or-h^4;4 z2|H1nu7h4f8V%T8QI3=!SM9#k)WKtF7`c7FCE5Mgu~Qi7X6dyG0o%lo>u^cqYszkC zR^Q!7v1&w_wZCyLJ47k)4|I

    e9RC$Q1T?oi{VCj9G2v{gcCdLUB-H)c2v@NaEo| z;p)Om4!YdtwkcNOCMjCo0!J|~D1qY(zX&Bh!VM%&d{sGx!Dei&v`f3cc_0qQcGInA z%TEp>-wr8Um26a~VJ%x~Ii#m?92Am7h?Vflny73V6@lIzalJRhCkNUuA{VSqIPLNX znKty?J?+-=jETJ+us%9qed8stvSOb2pLx^-$Bt79+D6z=Dm2F{w58J2 zsLaHCX!hEh0WZ2md(O127|#ilDVh39Po_ATNDa3<)zE8K7l{w%K>-Qser>uiu1!st zn-`4q?mCnFbS{?_1(bB%Npt8K3zM2^93rvkXUP{D_lFRBMJSAHPNV(7mGzkZqY&04 z2UoSS@jh%gdE6W7&q5me6kM`^4tU(TX5*l1Mf6>nj)mrm(Z5#$w*2)0E5B&2gyQ>U zOumrgY%;t2$5FR_nuv1=GKd0>I4v}7@#L>b>x&$$LMXhlbb5*P6)cCe{Nha+_6vIw z*qMAp4cI`qJCL2y72k(Nvbqdi`y>_KgcD{m2M-=Rbm$NgiL|!1wz09XwY9agv$MCi zcW`iUbaZrba&mTdMxjuL4<9~qgsy@_;EKkH+OgUKmPc`!^6YV z)APiM6JB0k-rn9mK0YT;p7izg_4D&Pb?TJAzkfhLKww~CP*6~CaBxUSNN8wiSXfwi zcsLr3j);hejEux!FsDzSK6B>G*|TS(qN2{7J9qy4`RM5An3$Lg7cRuc#>U0PUA%bl z(xprB@$m@>34i|i=jF?nuUxru_3G7Y*RCZdCMG2%B_}6ezkdD3jT<*_-b_hJNli^n zOG`^nPtVB6z+$ntZr#ev%)EX3_MJO-?%utdm6es9ot=}DbMM|g91fS8o12%Hm!F?s zP*6}b{Ra;o6crT}7Z*Q#_^_m;q_niOtgNiOyu6~KqO!8Gs;a8Gy1J&O29L)R z2!uzE9zA~i_{ozewY9ZRpFXXtt9$nBS$%!|^XJbS8X8`_ctIo*U%q_#>eZ{p#>S?m zCK8GC`t|EKZ{ECp`}WhA6)lgS@G zeCX-v>Fw?9>+AdY@gs#o>F@6!7#N^Zse^-qLqkKu!^0yZBcr3EG#YJeY;1gdd}3l^ za&mHNYHE6Vnog%P7z`$p$zri)W@gxIHiyHRot@=!xjY_^&*y)17PAKoK>Xw`yHi3! z3ekdppajZ%Lb8{M)IC};otX(dqwn06!{JvUzva9?yR}tN8 zoj;@2^b|!cBP}jiA};+(c#Cjb`RS-Av2|;#+7NO_DxN;qd~W(X;>q=k!smoeM>X7a zqfQ?S%^C=Fc0l6>Zp=E>X!D~tC?V-hX;b8LPAca z2oQEHc%hJ{w55>y1q>LmS6D{KUKuMyS^^TmB#EgBJv5oO%ARGU!75tia2T?LQ{Y>g zU)d2Bg&fVng;l%RHg`2|8I!gy$;IIZV70hF8Z-TH00;LXEUNiclUvOykgixx3?^3a z6RM0=2CEBxhAzyN0L7|vB|vfduZsUx_9RJCeRnkct^|^mwv5B95I$srFctj3q%EZd zWzrz}=Mq!lcT49=fMSb(XhqL0*kYJru1C{|euveokc9iV?iunZpo0B4g}tb)j)>xy zW!bpE;}w<;Q=-+Xwp~2lZbeiW^LULT9;3L6Nm}MpEAlRE4uSqMwrF@%I@UxZk0UmrtlUbMM8}X zxr7-z9m`V8i5WX>FZ^!xFFpTk%fGDq7x?|xL4Ibz0)OIg856~NHyF1-F$J>|F^8o2 z?jTrpXM1GN6TjE_!kZ1|DEFvaNX@!;7Q~&J+=0p)RmQ&l47eJ55Cp#&&(I8Ctp(F} z`~utbl(Eu_=fD_v*HlP2HYV!NXG;uVUT;Kri}y=1pYdSPSrIL_&;4+5d`8H}u_G0sljIRq@+m)NV+8R$$d1)Q-iWQmV= z>L@NS48TtqvZOxjJaV)kP;(CRP-C+RGYgf*1uJ^4U_~D#I$WoM&^BA?@hiQn7)XjQ zd6@s0KFmID58rIyU5*L05Pv?6iRdrdFQLal+2Ql~qQd^Y(w6(gU|3Nn2mBrWlaVaE z7vPl};yfabr@pc_tTD4ij%l3VI=0-pr1+*2`$Z4Utq1d5~HMS_W)8ku(E7=jO>Vij|ct5tOpQ-NdK8p zHjnc{Pntyij7qYG*yajKZfJIOd-w>uaOqz!U|5~(q?O&QB)ArlDOLSVPp={Nqg5a6 zT(<_i=zpxY`Y%D*BYY}-c^~4!@br?kgy*{vx4&@wA!f^80{t&oasLy%f?sp|r}}Gu zE1B29!v5iBU`1&z#)hC0v7BvlVEP~7gw99Q!{ZQxj^bh*<7IrYLUSsBTDr9i3h-@(Z)|64oO{GeH!>OC(C0bUotI3MCqV`kSM+(6WBT!jpAOf(qqJTAU+_#X z>6_AqO*iZH7c=ou%qrGK#!EMWhdT))iLn%^mVPL0WxS}meK8rb762{Mt&1U1);jX=G)`|Yr!Cdh$SMh83ayGD8Wo|i47jq{SgwDk-0I8Dg$b_#^=(eh%&r7g{ z@Md=#*jEo_!6?q`OHlM{kS{^|e;B*YL#eh~j+9GCF)c^6t{Y&*&6J>XaV|+((s;{P zT`}9tdjC~F6kdODSvu!>SqS@^oK4vORS$kO`iF4ONs^k>>H}x>mJFoNlsSmGccK+H zEv$tds*+eD5M6*ScHo)=M|%WDa6H)t0`Ec8hcIpxBr5=~He*w=q!vt{nT+zpqv_`- z7k>A46Bbo5t6S5wl>_QBpkGW0(`!wxr~QVNR*hSBu168qB_b|}<0_Ytc=DrMjI*70 zo{z=)!Zq_$@G9%{BNod;LXXe%uo*>@+X1vMim_ToyVdUWrvQO+;y_O0sdbq2L*4~G zaO-q)go?S`cVxh@D_<10mZiKn$c{YO5rXajwkrc|n(-CBrMc~}j}B5LO)BPF9A%V^ z0m^9wfdQ@pD!bA*WuPOGGfv^lIFoYgLJ_UWWvyinFW}TK9{RNH3XhBdeD_KDRkT}0 zsEy2#9ZuQ=ttKfLwmz|}r3_`vTJAmoHb{5d+$*AD{P?M@G6*=zgyu>}*OF zo1sFfU`QHF?YI*IjBrd^d)b8evuk02uDWk}qIYE$@D~qOPrhL@QXivCm9bZ1 zU0%SdidGCRwzO)6u-hg-o=f4@TXcQm*~A&?jKljX+-$5>6u|03p$KNWCB86dDt_|f zX~04MxxKxUo^HT1*X+dl&V2}Rs@f;=41^E8o55JO)|77`+Jt+JON!XAH}P3(Qab2YF&@f4bt}S% z-sL52x%;Wa&hRsvDCtgim;A+Y+!sMADY19?i9z6-AsJ>rk>tDhrxqI^27IVnTHy0~ zad)21itmN7q8<~`m;5TBrvq(v4YTKmY4j~4k%y2|r=gOKYp^p-?mx|iU6&c$dnrE? zh@~zBKaR23nAKUVk$YJRBzx%yLR&NbeP!pcxcf7-;t!+NV$!W9kS`*hZ?P!+qJ8S>LSDo0i0u8QYOEx+{BEONDtAL=vKfrmnWlHD>=0-n9q)M}Pm zsj68SHIEE8Euua<9l7`#*~Cx(NBIKpsuCV{??+5!y#C$-UN2j)SqiNF18IT{+IJRT z)K9RVKBW3pjh2yKjTLQKI*+!T2T`)eT~7Wqc_mV`5p6s8Cja8jpR}OLO>TeW#F=P$ zD9m-EgYH1?eh>;F8a{kX5V~D%>bpTJMWygi9g>$ zR(|n3q|rdIVm0GE^E6tvU>bMujJz>kP4Pk84|1^|oE!mxO3sVtaO0+#T*QwAT2~r{ zArSdT!0gicRYkO?+GWG4pyqF^-~BGJSXB7kignl@tYxmHCfH-KC0u}3w-dFR6c<~1 zMqy~IRxjaqUf&wrmtKCya`^oOZm^XMluZw!sbIA@M&H1ahEqChHMZp>i2Jhd3A9Iv z83G=9(DV(8JbXiGgMd9GWl6(ImNNVv5jXr)-clud8EDN_jKRp%H>#EIAHu+3?01Mv zU#P2T?6xCpX7-245-bo3jBiciD+5B`_V8sBbmDr+faQN{gI@@{j&XJj=fip$J8R#&y`4?`-d{fxIVNqPsW~y}(`?-#Fnf8+^Sd*$pa|qq`3QKO_?! z0pgv{WQl=Z5$0pSQc@apgQ89`YqE=Ax$41HOh0+x8%X^scK3h~tJ#kZWen$XZgsSL z-Ael(0Q4`84v9z*&ieB+D)~=d>DcprSN(1k_##0qtZ4UCaU7vxCPzc+;om5W78Y4D zFf@gVcu8y`gjx{8msnbTV^v>R0l}$!x1N0w8L&I}gx?9?Q z%+F0;VwpUjv~n=C&`_(+LMeAE8MCt4Eo$>pqmC_HA8Up`-gC~dDb(Mp`ojE5R4Y79 z$8^qOS+(jA~sdW#9c*;7Yo2oup8>{XX2PTviCY#fIfmj zuB!C*9z#7D5x}T2b^$1Dm9)GnXUXvl0O|zurhbem*KbSS$PoawV4q0U>}g#CKB`Rs z1_C+^wkm6xGuFN|29R2Sx1BU;q1|~nocfJP{Hibq4ZryCix0o-V(Wh$K1@K^_uk4& z8f^hN0hgZ~IR&>qkzSi$pIpql%R{u&?!TBfviOwZk}-G8)h{j~V^icU8Xq38#t zaTuu}AWVKb{taIyAfX4gR*ejcQ-O_##kG5@uD&Ta^~nV=g;II+l}UUExDwbM`mWJy zNNCuMAK0KBh%>%}Wmyw=6Oe=1R@1X*ro@im(jntitR?Yq78rUJq zl7^wzZ7$YAFE8;KUi<8n`a6T_!lT}K(i!S-lcJ-d{!Mz`gM^c(W{z@Hh5a3~w&&M! zVlf4IeV{aWR?DgvMJJp~5xyG-OU)-3}$^Uyz(3Q*H(krbDgductYDM<; zOLg}y1xE>@4z8XX?VhEJuZN1_8bOf3e{~~F{he)UdyH9(AgqZLDCDo^zgYMGP;L5@ zNY^`7k6H`2;7&$OW8wpAE=!X@Dq1I_>cNN4sh9x4@j~ow{q2G^>kyzWhY$JK*u%($4^20@zG$QX9ivhbY ziB|!3oYXMudi0k7dsn{-zU7C8DWVX@d`alqjySEWvdRqXQ3s`VPZ33u6;@*(t&kSf z1swKoj@}pMNedXM5sD}?hxPS$zoJtf7>cXi-x37~FrNylDeAN(ryp?MfjC{VM$jSP zxZj{e4|fn>NPJTbcCXWs9Fb>~h5>u-5ZFYlB1w|cI^40JvYu=6U5cxTG<=tky?DKE zB$A?!YwOtPkt7Awrc*}gqe+ucc42vh6L}v|^df5;n6!s>`(}-#=J4iSP^vE_pFWxl zjaYzNAR|<{4N7gG?5B@r6XC;zqk#v>rND(L1*9%qr}21h8gL^3$CRy21?~;B+r0_} zGHQV=)*iv7n7I_%PnTjwe>@O}w(}OR&-H5V`qZ3{UMWVSzLd6Ztv(K4NK-iUE5aw%_RLE-okSqSR z`#p>^m;neV^ zIFPGSJng(B%}cQ7FtqWrXVLoS=bcenU6W zQ%Y*B5s*#63**{f^`MjWviHjtGD{}!3QjDcj!fd% zjI7D1bFn;EG!Vm!!rX>#Y91^M3xfmwTpooVnQ);u7rwM%=4lhE#wR5y6X8pbSw6wg z98e5CMA>b;)vsXHqcm>%3YZ5kjTkHegNx+BQjarPaW z{9rA?+DPpPg5Y3I=R=39CyV@T?B4PUjEZs2mfg1GimdRGDSanD^O-@Mk|m>uYHXKY z${#vqfhMZT8T;{V)4L-_cT)li4qmz)1>)L=g!9ksC6;AZy|6Exx#2pd^V)^z)6B%% zrjHm|M9;o`!i2Fui3~z{rt?B1yUDtlL)2rSIJn7TyvwCqKp!t2YeNdu$X96Uo~<-u zyt+JZeHEReK<7rnW{K)~LyeNEBSy;vbLl>qR6omAV4g7W?djM#wv|bJE`?iIOevO{l@o z1_mHQ0{JC{>Utqkx=BkG_zyfDgQcN(=*rwYt02O?4g5_0jR7K2lRl~|L0(+9(fGZE zt3WQV(f7lh`RC4M9Ci*H55sD!6Z-YuT;DU(dOcnX$h~q)nq62MLkr$Eb0tL%Wqh08 zfS@xe9kUCDk|c;9Y#B!+T9dLFs9?`A{#joBY%QAtX;LrS+PFFWz=CO6E+Mjb%&tZo zvN1L-(iR`k^w>~do5!W-yhtdQe77l*li7ZLk|ker4gLO!)4{lm)A)kf6D55)JTipi zF%!;Hq++ju&_Ofj&!uRunvK+1G|X4vHM1{KrsR3MqpLDPreWTYfP?(K!N5d()c7Gi z{iSZ^UQR3n9#=%LqCFxZpGY}BkVx?i((0TUE;6Frxq@2jyt6$LI-Oex z=TVa*V$g<}`FF+LOGanqjryL(1%)OwZxw~SFh0?9u&`}BwH1AA!X@yPl2TRAwDyeD z=5&_);Q!IJ*9I@LKDGy*@7wS!NGVXqh0JW3o&wh@V|USp>o5ZaJcfmOywOO%0|Q;S zAFjP|13300eumV3Hm;Y)O?EC~cW8@Kd#joY_RhU@^wx}(UqnB@7t9tF&jt$%%Tz43 z%-j0cf7daM__0(zm$!qTm<>tM3VloNx*wdq2Ak|N8;nHLUJYo55YBlz1~NJTPP5-U z+Z!6xT{?l|c?S7(mWSLJt`6%n%N-pHrYuiZU?(7>9?;s#C$7d7az>tA3KFwe>A4(a zsueBb&kJBWur9FCsH)sZ{%tslAH~%(Mv*q=(rZ3)af1Who;@_}@Se=x z-8EGS>&*uV5m{>8B`*WwH#l?eMz~n;+sMGDS-j!;S`fiU2ZQgN;0}%J;+l z*2pY1;}TZyps8=i?;tK^JY`%SDFNd4xRQNv!7qEeAn=2ncBT#_=*D1_lNXcRWD;Pr^kkX3dvWLyw0Zd-z`a)Eh&Cq2f?I|f-%At` zOlm`mCLXOoI{iS(sG4W~xKN(2+afCD3H>x73$^r6*06;h-}bp`v>4S#n-jq-Bs{R= za4F!*j|OHfJ|$Qw>Lc4`VysFalB^ahaTG0dpRriLefD&(cr<}031lPbPd7EA(J>g~ zfHr2BiIrmbRn!AeS^)&;0s>N4mdno0WE~C&^v$UHrum!kntDU{Y)@4#Q?4$pUov_T z^#h07a!V;0{(Ql7TmZlUx77gYNRHBhR7-B}tuYCqy`M%7jj#&O;^Xw>$Z!WQtyrce zz9F%YL-e3xr10e3rW5CQU6DqtgDiQ*7|K!CKGQwI0mz2z*jT$1>Xhu)NOWLZ`m-RzGC147gL}S z@qpJ?5#0)M@=H67k-CUPDrv;3%A1W`iq;CI-1`S)r)?k#L8%B zih~;}hC6fy?bY>1Bv+HiWb1so9FgSk7rj2pX|^(jWE8TDyYn?aZu+bbd@iJ(iH`W7;^Iu*8H&yF#h%@{Oz zUJ&y#!76)#-7ONq&Oyzb?tKg$VPirKbbdlu7+ci&9Xe4zZ(0TazFCY;G>me zHRCoH6vv;<@VL2(_Wb5d6vqVZ0}x-0DnaA$9F(_lR>m`^Q6`?Rk`dO~OL%sS9I+9* z_ZfSamC-R&HB_iY5ghAyT+e$JQLe*H*F%jrc=ga`>zg9qhRN|?HQwbT8=*JrE5iFI zL;|Xbz-zXXkGO@C1Fq~fe%gy?KU+xDcFAa%>MwCI*}Xz literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-33-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-33-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0d82b56606c1143af4e83b09cf3ed9548d6c367d GIT binary patch literal 28252 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 literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-34-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-34-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ca81a6c386a378a7622370bb20ea62d0b25d03c7 GIT binary patch literal 29257 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 literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-35-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-35-1.png new file mode 100644 index 0000000000000000000000000000000000000000..140ecc3db73235075e8a12432441e79bcda55e9e GIT binary patch literal 32725 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 P1^(2PwUx>g?mqq>xUF~e literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-36-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-36-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2e0646547a714ca5df23b97a8cbe2f3d59e1f35f GIT binary patch literal 38360 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�h_E3j~1; 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 literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-38-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-38-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ca81a6c386a378a7622370bb20ea62d0b25d03c7 GIT binary patch literal 29257 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 literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-39-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-39-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6b7a574c8496fa5716bedd0b087cda39fdebf9d0 GIT binary patch literal 26123 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 literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-40-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-40-1.png new file mode 100644 index 0000000000000000000000000000000000000000..86ca23048680ea7d5bcbd698efb3722bfe4ae658 GIT binary patch literal 27078 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 literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-42-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-42-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a2325c3ba0771bbbded263c1e124a7ea1eb1c2fc GIT binary patch literal 28362 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 n?8jlB#}Rf literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-44-1.png b/docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-44-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee1d91ba8b13fa5f9d840aadd5c9f5724fe22d9 GIT binary patch literal 27457 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

    }& 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 literal 0 HcmV?d00001 diff --git a/docs/course/index.html b/docs/course/index.html index be5833e..c259a23 100644 --- a/docs/course/index.html +++ b/docs/course/index.html @@ -246,6 +246,12 @@ 05 - Gating Sets +

  • + diff --git a/docs/search.json b/docs/search.json index 36fdc5a..1071618 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1,1221 +1,1292 @@ [ { - "objectID": "course/05_GatingSets/index.html", - "href": "course/05_GatingSets/index.html", - "title": "05 - Gating Sets", + "objectID": "course/06_Visualizing/index.html", + "href": "course/06_Visualizing/index.html", + "title": "06 - Visualizing with ggplot2", "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "text": "For the YouTube livestream schedule, see here\nFor screen-shot slides, click here", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "06 - Visualizing With ggplot2" ] }, { - "objectID": "course/05_GatingSets/index.html#flowframe", - "href": "course/05_GatingSets/index.html#flowframe", - "title": "05 - Gating Sets", - "section": "flowFrame", - "text": "flowFrame\nLet’s start off by recalling the approach we first saw during Week 03, where using the flowCore package we loaded the contents of our .fcs file into R as a “flowFrame” object.\nTo do this, we first identified the .fcs files we were interested using file.path() to specify the folder, and list.files() to find contents containing “.fcs”.\n\n# Folder <- file.path(\"course\", \"05_GatingSets\", \"data\") # For Testing\n\n Folder <- file.path(\"data\") # For Quarto Rendering\n\nfcs_files <- list.files(Folder, pattern=\".fcs\", full.names=TRUE)\n\nfcs_files\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n[2] \"data/2025_07_26_AB_02_INF052_00_SEB.fcs\" \n[3] \"data/2025_07_26_AB_02_INF100_00_Ctrl.fcs\"\n[4] \"data/2025_07_26_AB_02_INF100_00_SEB.fcs\" \n[5] \"data/2025_07_26_AB_02_INF179_00_Ctrl.fcs\"\n[6] \"data/2025_07_26_AB_02_INF179_00_SEB.fcs\" \n\n\nWe then identified an individual .fcs file of interest using the [] method of indexing.\n\nfcs_files[1]\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\n\nThen, after making sure flowCore was attached to our local environment (via the library() function), we could use read.FCS() to read in our .fcs files contents to R.\n\n# BiocManager::install(\"flowCore\") #Bioconductor\nlibrary(flowCore)\n\n\nflowFrame <- read.FCS(filename=fcs_files[1], truncate_max_range = FALSE,\n transformation = FALSE)\nflowFrame\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 896745 0 878.809\n$P2 SSC-W NA 4194304 0 4194303.000\n$P3 SSC-H NA 4194304 0 4194303.000\n$P4 SSC-A NA 4194304 0 4194303.000\n$P5 FSC-W NA 4194304 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4194304 -111 4192506\n$P40 Zombie NIR-A Viability 4194304 -111 4192506\n$P41 APC-Fire 750-A CD27 4194304 -111 4192506\n$P42 APC-Fire 810-A CCR7 4194304 -111 4192506\n$P43 AF-A NA 4194304 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\nAs we start to think about the wider infrastructural handling of our .fcs files, what would have occurred if we had provided multiple .fcs file paths to read.FCS()? Let’s go ahead and check by not providing an index number.\n\nread.FCS(filename=fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\nError in `read.FCS()`:\n! 'filename' must be character scalar\n\n\nAs you can tell, this error message is not particularly interpretable. It however arises from type of object we are passing to the function, whereby an individual file.path (fcs_files[1]) appears as class “character” with a single value (ie. a scalar), but the combined vector (fcs_files) contains multiple values.\n\nfcs_files[1]\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\nstr(fcs_files[1])\n\n chr \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\n\n\nfcs_files\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n[2] \"data/2025_07_26_AB_02_INF052_00_SEB.fcs\" \n[3] \"data/2025_07_26_AB_02_INF100_00_Ctrl.fcs\"\n[4] \"data/2025_07_26_AB_02_INF100_00_SEB.fcs\" \n[5] \"data/2025_07_26_AB_02_INF179_00_Ctrl.fcs\"\n[6] \"data/2025_07_26_AB_02_INF179_00_SEB.fcs\" \n\nstr(fcs_files)\n\n chr [1:6] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\" ...", + "objectID": "course/06_Visualizing/index.html#preparation", + "href": "course/06_Visualizing/index.html#preparation", + "title": "06 - Visualizing with ggplot2", + "section": "Preparation", + "text": "Preparation\n\nMasked Function Names\nSince we will be using dplyr extensively throughout this session, let’s go ahead and attach it to our local environment via the library() function.\n\nlibrary(dplyr)\n\n\nAttaching package: 'dplyr'\n\n\nThe following objects are masked from 'package:stats':\n\n filter, lag\n\n\nThe following objects are masked from 'package:base':\n\n intersect, setdiff, setequal, union\n\n\nIf dplyr was not already attached to your local environment, you might have gotten the following message\n\nThe reason behind this message is that both the dplyr and stats packages contain functions named “filter” and “lag”. Since stats is a base R package that is loaded by default, when dplyr is loaded via the library() call, both packages functions become active in your environment. Consequently, if you ran a line of code containing “filter” or “lag”, R would not know which packages function you intender to use in that line of code.\nTo avoid this, the base R stats and base package functions with identical names are masked (ie. hidden), so that the dplyr functions are instead prioritized when code is run.\n\n\nLoad Dataset\nLets continue by loading in the dataset we were working with during Week # 4.\n\n#StorageLocation <- file.path(\"course\", \"06_Visualizing\", \"data\") # When interactively writing the code \nStorageLocation <- file.path(\"data\") #When Quarto Rendering\n\nTheCSV <- list.files(StorageLocation, pattern=\".csv\", full.names=TRUE)\nData <- read.csv(TheCSV, check.names=FALSE)\n\nhead(Data, 3)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 Ctrl 2025-07-26 Male HEU-hi 2098368 1894070\n2 INF0100 0 Ctrl 2025-07-26 Male HEU-lo 2020184 1791890\n3 INF0100 4 Ctrl 2025-07-26 Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n\n\n\nIdentifying column value types\nAnd let’s quickly evaluate the columns to determine what type of values each contains\n\nstr(Data)\n\n'data.frame': 196 obs. of 31 variables:\n $ bid : chr \"INF0052\" \"INF0100\" \"INF0100\" \"INF0100\" ...\n $ timepoint : int 0 0 4 9 0 4 9 4 9 0 ...\n $ Condition : chr \"Ctrl\" \"Ctrl\" \"Ctrl\" \"Ctrl\" ...\n $ Date : chr \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n $ infant_sex : chr \"Male\" \"Male\" \"Male\" \"Male\" ...\n $ ptype : chr \"HEU-hi\" \"HEU-lo\" \"HEU-lo\" \"HEU-lo\" ...\n $ root : int 2098368 2020184 1155040 358624 1362216 1044808 1434840 972056 1521928 2363512 ...\n $ singletsFSC : int 1894070 1791890 1033320 328624 1206309 917398 1265022 875707 1359574 2136616 ...\n $ singletsSSC : int 1666179 1697083 875465 289327 1032946 735579 988445 767323 1175755 1875394 ...\n $ singletsSSCB : int 1537396 1579098 845446 276289 982736 685592 940454 718000 1097478 1732620 ...\n $ CD45 : num 0.595 0.911 0.971 0.982 0.957 ...\n $ NotMonocytes : num 0.882 0.905 0.985 0.986 0.956 ...\n $ nonDebris : num 0.863 0.86 0.958 0.941 0.841 ...\n $ lymphocytes : num 0.642 0.215 0.74 0.651 0.705 ...\n $ live : num 0.902 0.891 0.876 0.915 0.895 ...\n $ Dump+ : num 0.2109 0.0625 0.2002 0.2147 0.3383 ...\n $ Dump- : num 0.691 0.828 0.676 0.701 0.557 ...\n $ Tcells : num 0.28 0.675 0.612 0.631 0.44 ...\n $ Vd2+ : num 0.00812 0.00727 0.00465 0.01135 0.00475 ...\n $ Vd2- : num 0.992 0.993 0.995 0.989 0.995 ...\n $ Va7.2+ : num 0.0145 0.0158 0.0158 0.017 0.0133 ...\n $ Va7.2- : num 0.977 0.977 0.98 0.972 0.982 ...\n $ CD4+ : num 0.634 0.612 0.664 0.438 0.739 ...\n $ CD4- : num 0.343 0.365 0.316 0.534 0.243 ...\n $ CD8+ : num 0.273 0.336 0.286 0.486 0.195 ...\n $ CD8- : num 0.0698 0.0293 0.0294 0.0476 0.0476 ...\n $ Tcells_count : int 164771 208241 371723 111552 291777 271870 487937 220634 415867 184930 ...\n $ lymphocytes_count: int 587573 308583 607477 176662 663667 510730 726238 451047 710964 652155 ...\n $ Monocytes : num 0.118 0.0948 0.0155 0.0145 0.0444 ...\n $ Debris : num 0.1372 0.1397 0.0421 0.0587 0.1592 ...\n $ CD45_count : int 915203 1438047 820570 271304 940733 675857 921660 701657 1066884 1017713 ...\n\n\nThe type of values that a column contains are particularly important to be aware of when working with ggplot2 plots. For example, we can see that several columns contain character values:\n\nData |> select(bid, Condition, Date, infant_sex, ptype) |> head(6) |> str()\n\n'data.frame': 6 obs. of 5 variables:\n $ bid : chr \"INF0052\" \"INF0100\" \"INF0100\" \"INF0100\" ...\n $ Condition : chr \"Ctrl\" \"Ctrl\" \"Ctrl\" \"Ctrl\" ...\n $ Date : chr \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n $ infant_sex: chr \"Male\" \"Male\" \"Male\" \"Male\" ...\n $ ptype : chr \"HEU-hi\" \"HEU-lo\" \"HEU-lo\" \"HEU-lo\" ...\n\n\nWhile spotting the character columns from the str() output, and isolating them using select() works, we could achieve something similar using the is.character() function in combination with the where() function, which the dplyr package actively borrows (ie. exports) from the tidyselect package.\n\nData |> select(where(is.character)) |> head(6) |> str()\n\n'data.frame': 6 obs. of 5 variables:\n $ bid : chr \"INF0052\" \"INF0100\" \"INF0100\" \"INF0100\" ...\n $ Condition : chr \"Ctrl\" \"Ctrl\" \"Ctrl\" \"Ctrl\" ...\n $ Date : chr \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n $ infant_sex: chr \"Male\" \"Male\" \"Male\" \"Male\" ...\n $ ptype : chr \"HEU-hi\" \"HEU-lo\" \"HEU-lo\" \"HEU-lo\" ...\n\n\nWe can switch out is.character() to identify columns containing other value types\n\nData |> select(where(is.numeric)) |> head(6) |> str()\n\n'data.frame': 6 obs. of 26 variables:\n $ timepoint : int 0 0 4 9 0 4\n $ root : int 2098368 2020184 1155040 358624 1362216 1044808\n $ singletsFSC : int 1894070 1791890 1033320 328624 1206309 917398\n $ singletsSSC : int 1666179 1697083 875465 289327 1032946 735579\n $ singletsSSCB : int 1537396 1579098 845446 276289 982736 685592\n $ CD45 : num 0.595 0.911 0.971 0.982 0.957 ...\n $ NotMonocytes : num 0.882 0.905 0.985 0.986 0.956 ...\n $ nonDebris : num 0.863 0.86 0.958 0.941 0.841 ...\n $ lymphocytes : num 0.642 0.215 0.74 0.651 0.705 ...\n $ live : num 0.902 0.891 0.876 0.915 0.895 ...\n $ Dump+ : num 0.2109 0.0625 0.2002 0.2147 0.3383 ...\n $ Dump- : num 0.691 0.828 0.676 0.701 0.557 ...\n $ Tcells : num 0.28 0.675 0.612 0.631 0.44 ...\n $ Vd2+ : num 0.00812 0.00727 0.00465 0.01135 0.00475 ...\n $ Vd2- : num 0.992 0.993 0.995 0.989 0.995 ...\n $ Va7.2+ : num 0.0145 0.0158 0.0158 0.017 0.0133 ...\n $ Va7.2- : num 0.977 0.977 0.98 0.972 0.982 ...\n $ CD4+ : num 0.634 0.612 0.664 0.438 0.739 ...\n $ CD4- : num 0.343 0.365 0.316 0.534 0.243 ...\n $ CD8+ : num 0.273 0.336 0.286 0.486 0.195 ...\n $ CD8- : num 0.0698 0.0293 0.0294 0.0476 0.0476 ...\n $ Tcells_count : int 164771 208241 371723 111552 291777 271870\n $ lymphocytes_count: int 587573 308583 607477 176662 663667 510730\n $ Monocytes : num 0.118 0.0948 0.0155 0.0145 0.0444 ...\n $ Debris : num 0.1372 0.1397 0.0421 0.0587 0.1592 ...\n $ CD45_count : int 915203 1438047 820570 271304 940733 675857\n\n\n\nData |> select(where(is.logical)) |> head(6) |> str()\n\n'data.frame': 6 obs. of 0 variables\n\n\n\n\nReformatting Column Value Types\nLooking at the str() output, we can spot that the Date column is currently showing as a character value:\n\nData |> select(Date) |> str()\n\n'data.frame': 196 obs. of 1 variable:\n $ Date: chr \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n\n\nCharacter values when plotting are generally treated as categorical factors. When plotted, these will arrange according to alphabetical order. In this particular case, this may not be an issue:\n\nData |> pull(Date) |> sort() |> unique() \n\n[1] \"2025-07-26\" \"2025-07-29\" \"2025-07-31\" \"2025-08-05\" \"2025-08-07\"\n[6] \"2025-08-22\" \"2025-08-28\" \"2025-08-30\"\n\n\nHowever, if year/month/day is formatted differently, as character values, the alphabetical reordering could result in your dates being scrambled\n\nAlternateFormat <- c(\"26-07-2025\", \"27-08-2019\", \"09-09-2025\", \"16-03-2026\")\nAlternateFormat |> sort() |> unique()\n\n[1] \"09-09-2025\" \"16-03-2026\" \"26-07-2025\" \"27-08-2019\"\n\n\nBecause of this, I generally recommend reformatting these character type values over to Date type values. I will generally use the the tidyverse lubridate package, as it has various functions that can handle the date format variation. In this case, since the character values appear year-month-day, we can use the ymd() function to update the column type\n\nlibrary(lubridate)\n\n\nAttaching package: 'lubridate'\n\n\nThe following objects are masked from 'package:base':\n\n date, intersect, setdiff, union\n\n\n\nData$Date <- ymd(Data$Date)\nstr(Data[,1:5])\n\n'data.frame': 196 obs. of 5 variables:\n $ bid : chr \"INF0052\" \"INF0100\" \"INF0100\" \"INF0100\" ...\n $ timepoint : int 0 0 4 9 0 4 9 4 9 0 ...\n $ Condition : chr \"Ctrl\" \"Ctrl\" \"Ctrl\" \"Ctrl\" ...\n $ Date : Date, format: \"2025-07-26\" \"2025-07-26\" ...\n $ infant_sex: chr \"Male\" \"Male\" \"Male\" \"Male\" ...\n\n\nYou can notice, str() now returns the column type as “Date”.\n\n\nFactors\nFor columns with numeric type values, we previously discussed the difference between integer (ie. whole) and double (containing decimal point) values. When it comes to plotting using ggplot, numeric values will generally be treated as continuous values unless we specify they should be treated as categorical values for plotting.\nFor example, if we look at the Timepoint column, we can see its numeric values are discrete, corresponding to the timepoint in months when the blood sample was collected (0, 4, 9)\n\nData |> pull(timepoint) |> unique()\n\n[1] 0 4 9\n\n\nIf we want to avoid having ggplot treating these values as continuous, and instead see them as categorical, we will need to specify to R to treat these as such. We can do this by converting them into factos, using the factor() function.\n\nData1 <- Data\nData1$timepoint <- factor(Data1$timepoint)\nstr(Data1[,1:3])\n\n'data.frame': 196 obs. of 3 variables:\n $ bid : chr \"INF0052\" \"INF0100\" \"INF0100\" \"INF0100\" ...\n $ timepoint: Factor w/ 3 levels \"0\",\"4\",\"9\": 1 1 2 3 1 2 3 2 3 1 ...\n $ Condition: chr \"Ctrl\" \"Ctrl\" \"Ctrl\" \"Ctrl\" ...\n\n\nWe will see what occurs when we try to plot without having specified this numeric column as a categorical factor later today, but mentioning it early, as creating factor variables is something we will see continously throughout the class when it comes to both plotting and statistical analysis.", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "06 - Visualizing With ggplot2" ] }, { - "objectID": "course/05_GatingSets/index.html#flowset", - "href": "course/05_GatingSets/index.html#flowset", - "title": "05 - Gating Sets", - "section": "flowSet", - "text": "flowSet\nConsequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.\n\nflowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,\n transformation = FALSE)\nflowSet\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nAlternatively, we can designate specific files within “fcs_files” we want to read in using the [] and c() notation style we have encountered previously.\n\nread.flowSet(files=fcs_files[c(1, 3:4)],\n truncate_max_range = FALSE, transformation = FALSE)\n\nA flowSet with 3 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nOn follow-up, we can see that read.flowSet() has created a “flowSet” class object.\n\nclass(flowSet)\n\n[1] \"flowSet\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nWhich we can also confirm by glancing at the right secondary sidebar to see the created Variables within our environment. Applying our investigatory skills from Week 3, we surmise that “flowSet” is another Bioconductor style S4-type object that within its frame slot contains individual “flowFrames”.\n\nIf instead of class() we had used str(), we would have seen a similar output ton what we see in the Variables panel.\n\nstr(flowSet)\n\nFormal class 'flowSet' [package \"flowCore\"] with 2 slots\n ..@ frames :<environment: 0x560d90048618> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 1 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr \"Name\"\n .. .. ..@ data :'data.frame': 6 obs. of 1 variable:\n .. .. .. ..$ name: 'AsIs' chr [1:6] \"2025_07_26_AB_02_INF052_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF052_00_SEB.fcs\" \"2025_07_26_AB_02_INF100_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF100_00_SEB.fcs\" ...\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWhile not today’s focus, remember we could access individual components inside the flowSet using the @ accessors covered during Week 3", + "objectID": "course/06_Visualizing/index.html#ggplot2", + "href": "course/06_Visualizing/index.html#ggplot2", + "title": "06 - Visualizing with ggplot2", + "section": "ggplot2", + "text": "ggplot2\nAlright, with the data imported, havinf refreshed our memory of the types of values contained within, we are now ready to start learning how to ready top lot in R using the ggplot2 package. For this first plot, as we learn more about the grammar of graphics concept, and how to layer the different arguments together, lets first decide what kind of plot we want to build.\nGlancing at Data, let’s try creating a boxplot, with the different timepoints on the x-axis, and the frequency of T cells in the CD45+ gate on the y-axis. We can envision we want something at the end that resembles the following:\nLet’s go ahead and actually convert timepoint over to a categorical factor for this example, and mutate the frequency column.\n\nData <- Data |> \n mutate(TcellProportion=Tcells_count/CD45_count) |>\n mutate(TcellFrequency=TcellProportion *100) |>\n mutate(TcellFrequency=round(TcellFrequency, 1))\n\nData$timepoint <- factor(Data$timepoint)\n\nLets start by going ahead and calling library() for ggplot2\n\nlibrary(ggplot2)\n\n\nData\n\nPlot <- ggplot(Data)\nPlot\n\n\n\n\n\n\n\n\nAs you can see, nothing is yet outputted at this stage. Let’s however peak behind the curtain.\n\nstr(Plot)\n\nIn this first chunk, we see that the data slot of the ggplot object now contains the underlying data.frame object\n\nIf we scroll past, we can spot additional slots, which are currently empty, waiting to be filled. We will sporadically check back and see how this changes.\n\n\n\nAesthetics\nHaving established the first layer of our plot (Data), we can now start by specifying the next layer, aesthetics. In our case, we were interested in placing timepoint on the x-axis, and placing the TcellFrequency on the y-axis.\n\nPlot <- ggplot(Data) + aes(x=timepoint, y=TcellFrequency)\nPlot\n\n\n\n\n\n\n\n\nAs you can see, additional elements were added to the plot, namely we are now seeing on the axis we specified.\nIf we glanced behind the curtains, we now see the mapping slot has now been filled in\n\nstr(Plot)\n\n\nIn our case, we are building this plot with each layer being connected by a “+”” argument. However, you will often see both the Data and Aesthetics layers combined together in actual practice. This would look like the following\n\nggplot(Data, aes(x=timepoint, y=TcellFrequency))\n\n\n\n\n\n\n\n\n\nNo Quotation Marks!\nYou may have noticed, we relied on tidyverse to figure out that timepoint and TcellFrequency were column names, and not objects in our environment (for reasons detailed during Week 04). What would have happened if we had included “” around each?\n\nggplot(Data) + aes(x=\"timepoint\", y=\"TcellFrequency\")\n\n\n\n\n\n\n\n\nYikes! Not what we were expecting.\n\n\n\nGeometries\nHaving specified our Data and Aesthetics layers, we now reach the important point in our plotting step, deciding on what geometries we want to use. It is this layer that determines how the data actually gets plotted.\nFor example, we could use the geom_point() function to set the plot geometry as follows\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_point()\n\n\n\n\n\n\n\n\nWe could swap geom_point() out for geom_boxplot()\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot()\n\n\n\n\n\n\n\n\nor geom_violin()\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_violin()\n\n\n\n\n\n\n\n\nWe could also add two geometries\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_point()\n\n\n\n\n\n\n\n\nAs you can see, many different geom_ functions exist in both ggplot2, as well as other R packages that expand the plotting capacity further. One I like to use for my own plots is the ggbeeswarm package, specifically the geom_beeswarm() function in conjunction with the geom_boxplots().\n\nlibrary(ggbeeswarm)\nPlot <- ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm()\nPlot\n\n\n\n\n\n\n\n\nWe will continue building offf this plot version as we go forward.\n\nIf left as continuous\nIn the case of the above dataset, we had converted timepoint to a factor. But what would our plot have looked like if we had left it in the original continuous format?\n\nAlternateData <- read.csv(TheCSV, check.names=FALSE)\nAlternateData <- AlternateData |> \n mutate(TcellProportion=Tcells_count/CD45_count) |>\n mutate(TcellFrequency=TcellProportion *100) |>\n mutate(TcellFrequency=round(TcellFrequency, 1))\nggplot(AlternateData) + aes(x=timepoint, y=TcellFrequency) + geom_beeswarm()\n\n\n\n\n\n\n\n\nAs you can see, in this case, the x-axis instead of being spaced categorically, now appears as continuous, with the individual dots being plotted at 0, 4, 9 respectively.\nGiven that geom_boxplot is expecting a categorical factor, this fails to plot correctly when added on\n\nggplot(AlternateData) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm()\n\nWarning: Orientation is not uniquely specified when both the x and y aesthetics are\ncontinuous. Picking default orientation 'x'.\n\n\nWarning: Continuous x aesthetic\nℹ did you forget `aes(group = ...)`?\n\n\n\n\n\n\n\n\n\nFortunately, the warning message provides some context we can use when troubleshooting. If we implement the suggestion, we are able to rescue geom_boxplot() plotting attempt even in abscence of specifying timepoint as categorical.\n\nggplot(AlternateData) + aes(x=timepoint, y=TcellFrequency, group=timepoint) + geom_boxplot() + geom_beeswarm()\n\n\n\n\n\n\n\n\nThis example generally highlights the importance of being aware of what types of values you are trying to plot, warning messages, and some of the quiky odd-looking plots that can arise when the assumptions are not met.\n\n\nMismatched Assumptions\nIn this case, the two “geom_” functions we are using are using x-axis value as categorical, and y-axis as a continuous variable. What happens if we used a “geom_” function that has different specifications?\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_histogram() \n\nError in `geom_histogram()`:\n! Problem while computing stat.\nℹ Error occurred in the 1st layer.\nCaused by error in `setup_params()`:\n! `stat_bin()` must only have an x or y aesthetic.\n\n\nIn the case of the above, geom_histogram() was expecting only one column being present in the aes() argument.\n\nggplot(Data) + aes(x=TcellFrequency) + geom_histogram() \n\n`stat_bin()` using `bins = 30`. Pick better value `binwidth`.\n\n\n\n\n\n\n\n\n\nThis would similarly be the case for geom_density()\n\nggplot(Data) + aes(x=TcellFrequency) + geom_density() \n\n\n\n\n\n\n\n\n\n\n\nFacets\nAt this point, we have added the Data, Aesthetic, and two Geometry layers. We have a decent working version of our plot object which we can continue to edit as we go forward.\n\nPlot <- ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm()\nPlot\n\n\n\n\n\n\n\n\nThe next layer, Facets, allows creation of separate plots based on an additional variable. For example, if we were interested in seeing the difference between male and female infrants, we could specify the column name within the facet_wrap() argument.\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + facet_wrap(~ infant_sex)\n\n\n\n\n\n\n\n\nWe could similarly return individual plots for various treatment conditions (Ctrl, PPD, SEB)\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + facet_wrap(~ Condition)\n\n\n\n\n\n\n\n\nWe could also use the variant facet_grid() to facet on the basis of two separate variables.\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + facet_grid(infant_sex ~ Condition)\n\n\n\n\n\n\n\n\n\n\nStatistics\n\n\nCoordinates\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm()\n\n\n\n\n\n\n\n\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + coord_cartesian(ylim=c(0, 100))\n\n\n\n\n\n\n\n\n\n\nThemes\n\nBroad Themes\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + theme_classic()\n\n\n\n\n\n\n\n\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + theme_bw()\n\n\n\n\n\n\n\n\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + theme_minimal()\n\n\n\n\n\n\n\n\n\n\nActive Customization\nInstead of applying broad theme, you can also modify individual elements. For example, we can\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +\ntheme(\n panel.grid.major = element_blank())\n\n\n\n\n\n\n\n\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +\ntheme(\n panel.grid.major = element_blank(),\n panel.grid.minor = element_blank())\n\n\n\n\n\n\n\n\nEspecially useful in cases with long axis text names, we can rotate them using the “angle” argument (and horizontally justify their starting position using “hjust”)\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +\ntheme(\n panel.grid.major = element_blank(),\n panel.grid.minor = element_blank(),\n axis.text.x = element_text(angle=45, hjust=1, size = 16))\n\n\n\n\n\n\n\n\n\nggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +\ntheme(\n panel.grid.major = element_blank(),\n panel.grid.minor = element_blank(),\n axis.text.x = element_text(angle=45, hjust=1, size = 12),\n axis.text.y = element_text(size=12))", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "06 - Visualizing With ggplot2" ] }, { - "objectID": "course/05_GatingSets/index.html#memory-usage", - "href": "course/05_GatingSets/index.html#memory-usage", - "title": "05 - Gating Sets", - "section": "Memory Usage", - "text": "Memory Usage\nBoth “flowFrame” and “flowSet” objects were implemented in the flowCore package, which is the oldest extant flow cytometry R package on Bioconductor. Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as “flowFrame” and “flowSet” objects.\nOne consideration of this method is the contents of your .fcs files are read into your computer’s random access memory (RAM). While for individual .fcs files or small experiments this will not present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM.\nTo build some contextual understanding of the problem, let’s learn how to check how much memory is being used by our individual variables/objects within our R session. We will primarily use the lobstr R packages obj_size() function, as it better handles evaluating complicated objects than base R’s object.size() function.\nWe can check and see the memory usage by our flowFrame object\n\n# Base R\nobject.size(flowFrame)\n\n3570896 bytes\n\n# install.packages(\"lobstr\") # CRAN\nlibrary(lobstr)\nobj_size(flowFrame)\n\n3.53 MB\n\n\nAnd contrast to the greater ammount of space occupied by our flowSet object (which contains multiple flowFrames)\n\nobj_size(flowSet)\n\n20.99 MB\n\n\nIf we were curious how much memory total we are using within R at the current moment, we can check using the mem_used() function:\n\nmem_used()\n\n146.99 MB\n\n\nUltimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. There are various ways you can check programmatically how much RAM your computer has available, although the specific functions will vary depending on your computers operating system, since they often involve system-level code outside R. Using the ps R package’s ps_system_memory() function is one of the easier ways for Windows users.\nTo simplify the process, here is an additional example of where a conditional can prove useful, allowing us to check in an operating system specific manner. It takes the output of the Sys.info() function, namely the “sysname” argument and then retrieves the relavent function.\n\nOperatingSystem <- Sys.info()[[\"sysname\"]]\n\nif (OperatingSystem == \"Windows\") { # Windows\n Memory <- ps::ps_system_memory()\n message(\"Total GB \", round(Memory$total / 1024^3, 2))\n message(\"Free GB \", round(Memory$free / 1024^3, 2))\n\n } else if (OperatingSystem == \"Darwin\") { # MacOS\n system(\"top -l 1 | grep PhysMem\")\n\n } else if (OperatingSystem == \"Linux\") { # Linux\n system(\"free -h\")\n\n } else {message(\"A wild FreeBSD-User appears\")}\n\n\n# install.packages(\"ps\") # CRAN\nlibrary(ps)\nMemory <- ps::ps_system_memory()\nmessage(\"Total GB \", round(Memory$total / 1024^3, 2))\n\nTotal GB 62.5\n\nmessage(\"Free GB \", round(Memory$free / 1024^3, 2))\n\nFree GB 53.49", + "objectID": "course/06_Visualizing/index.html#ggcyto", + "href": "course/06_Visualizing/index.html#ggcyto", + "title": "06 - Visualizing with ggplot2", + "section": "ggcyto", + "text": "ggcyto\nLet’s return to the initial flow cytometry style plots we generated last time using ggcyto, and see if we can customize them further using what we have learned today.\nAs we mentioned during Week 5, ggplot2 implemented some major changes going from version 3 to 4. As a result of this, ggcyto had to implement several bug fixes to get the developmental branch back to working order. Consequently, as of the time of this course, you need the following versions (or greater) or both packages to successfully create all the plots.\n\npackageVersion(\"ggplot2\")\n\n[1] '4.0.2'\n\npackageVersion(\"ggcyto\")\n\n[1] '1.39.3'\n\n\nIf you are still running older versions, and encounter issues, the updating your package version instructions are here\nLet’s begin by loading in the additional R packages we will need\n\nlibrary(CytoML)\nlibrary(ggcyto)\n\nLoading required package: flowCore\n\n\nLoading required package: ncdfFlow\n\n\nLoading required package: BH\n\n\nLoading required package: flowWorkspace\n\n\nAs part of improvements to flowWorkspace, some behavior of\nGatingSet objects has changed. For details, please read the section\ntitled \"The cytoframe and cytoset classes\" in the package vignette:\n\n vignette(\"flowWorkspace-Introduction\", \"flowWorkspace\")\n\n\nAnd proceed to load in the FlowJo.wsp example from Week 05 into a GatingSet object.\n\n# StorageLocation # Defined Above\nFlowJoWsp <- list.files(path = StorageLocation, pattern = \".wsp\", full = TRUE)\nws <- open_flowjo_xml(FlowJoWsp)\ngs <- flowjo_to_gatingset(ws=ws, name=1, path = StorageLocation, additional.keys = \"GROUPNAME\")\n\nAnd return to the plot we had left off on:\n\nPlot <- ggcyto(gs[6], subset=\"Tcells\", aes(x=\"CD8\", y=\"CD4\")) + geom_hex(bins=100)\n\nTo start, let’s switch out the background theme.\n\nPlot + theme_bw()", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "06 - Visualizing With ggplot2" ] }, { - "objectID": "course/05_GatingSets/index.html#cytoframe", - "href": "course/05_GatingSets/index.html#cytoframe", - "title": "05 - Gating Sets", - "section": "cytoframe", - "text": "cytoframe\nIn addition to the flowCore R package, additional flow cytometry infrastructure support is provided by the flowWorkspace package. Instead of the reading all the .fcs files contents into active RAM, flowWorkspace reduces the memory overhead by using “pointers” to interact with the object in it’s current storage location (either on your harddrive, SSD, etc.), only reading in components to RAM as needed.\n\n# BiocManager::install(\"flowWorkspace\") #Bioconductor\nlibrary(flowWorkspace)\n\nAs part of improvements to flowWorkspace, some behavior of\nGatingSet objects has changed. For details, please read the section\ntitled \"The cytoframe and cytoset classes\" in the package vignette:\n\n vignette(\"flowWorkspace-Introduction\", \"flowWorkspace\")\n\n\nBecause of these differences in how data is interracted with, we end up with parallel equivalents to the traditional flowFrame and flowSet type objects. These include “cytoframe” for single .fcs files\n\ncytoframe <- load_cytoframe_from_fcs(fcs_files[1], truncate_max_range = FALSE, transformation = FALSE)\n\ncytoframe\n\ncytoframe object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\nrow names(0):\n\n\n\nclass(cytoframe)\n\n[1] \"cytoframe\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nWhich also still errors out when not given a scalar object\n\nload_cytoframe_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\nError:\n! Expected string vector of length 1", + "objectID": "course/05_GatingSets/Downsampling.html", + "href": "course/05_GatingSets/Downsampling.html", + "title": "Downsampling", + "section": "", + "text": "Due to trying to keep the overall file size down, I am downsampling to 100 events. For anyone interested in how I did this, this Quarto Markdown Document contains the code needed to repeat the process." + }, + { + "objectID": "course/05_GatingSets/Downsampling.html#specify-file.path-and-identify-files", + "href": "course/05_GatingSets/Downsampling.html#specify-file.path-and-identify-files", + "title": "Downsampling", + "section": "Specify file.path and identify files", + "text": "Specify file.path and identify files\nDue to the counts being conducter on two separate instruments, the number of columns differs, so they will need to be loaded into separate GatingSet objects.\n\nStorageLocation <- file.path(\"/media\", \"david\", \"DavidSSD\", \"AlphaBeta\", \"Tcells\")\nExisting <- list.files(StorageLocation, pattern=\".fcs\", full.names=TRUE)\nList1 <- Existing[c(1,3:4,6,12, 14)]" + }, + { + "objectID": "course/05_GatingSets/Downsampling.html#load-.fcs-files-into-a-gatingset", + "href": "course/05_GatingSets/Downsampling.html#load-.fcs-files-into-a-gatingset", + "title": "Downsampling", + "section": "Load .fcs files into a GatingSet", + "text": "Load .fcs files into a GatingSet\nLoad in files to their respective GatingSet objects\n\ncs1 <- load_cytoset_from_fcs(List1, truncate_max_range = FALSE, transformation = FALSE)\ngs1 <- GatingSet(cs1)" + }, + { + "objectID": "course/04_IntroToTidyverse/index.html", + "href": "course/04_IntroToTidyverse/index.html", + "title": "04 - Introduction to Tidyverse", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/05_GatingSets/index.html#cytoset", - "href": "course/05_GatingSets/index.html#cytoset", - "title": "05 - Gating Sets", - "section": "cytoset", - "text": "cytoset\nAs well as “cytoset” to handle multiple .fcs files.\n\ncytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\ncytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nclass(cytoset)\n\n[1] \"cytoset\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nUnlike “flowFrame” and “flowSet”, when we run str(), for “cytoframe” and “cytoset” objects we don’t get back quite as much information.\n\nstr(cytoframe)\n\nFormal class 'cytoframe' [package \"flowWorkspace\"] with 5 slots\n ..@ pointer :<externalptr> \n ..@ use.exprs : logi TRUE\n ..@ exprs : num[0 , 0 ] \n ..@ parameters :Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 5 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr [1:5] \"Name of Parameter\" \"Description of Parameter\" \"Range of Parameter\" \"Minimum Parameter Value after Transformation\" ...\n .. .. ..@ data :'data.frame': 0 obs. of 5 variables:\n .. .. .. ..$ name : chr(0) \n .. .. .. ..$ description: chr(0) \n .. .. .. ..$ range : num(0) \n .. .. .. ..$ minRange : num(0) \n .. .. .. ..$ maxRange : num(0) \n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n ..@ description:List of 1\n .. ..$ note: chr \"empty\"\n\n\n\nstr(cytoset)\n\nFormal class 'cytoset' [package \"flowWorkspace\"] with 3 slots\n ..@ pointer :<externalptr> \n ..@ frames :<environment: 0x560d9ade0fc8> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 0 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr(0) \n .. .. ..@ data :'data.frame': 0 obs. of 0 variables\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\nThis is similarly the case when glancing at the right secondary side bar, as the respective objects under variables appear to have empty matrices where normally we would have seen the MFI values.\n\nDue to flowWorkspace use of pointers, the missing data remains stored on the drive, only being retrieved right before it is required. This reduces the overall RAM utilization. Let’s double check the differences in memory utilization for flowFrame/cytoframe:\n\nobj_size(flowFrame)\n\n3.53 MB\n\n\n\nobj_size(cytoframe)\n\n5.40 kB\n\n\nAnd similarly the case for flowSet and cytoset:\n\nobj_size(flowSet)\n\n20.99 MB\n\n\n\nobj_size(cytoset)\n\n3.88 kB\n\n\nAdditionally, with computer hardware increasingly switching from spinning disk hard-drives to faster solid state drives, the performance penalty previously experienced when not running from RAM is not as large of a concern as in previous years.", + "objectID": "course/04_IntroToTidyverse/index.html#read.csv", + "href": "course/04_IntroToTidyverse/index.html#read.csv", + "title": "04 - Introduction to Tidyverse", + "section": "read.csv", + "text": "read.csv\nWe will start by first loading in our copied over dataset (Dataset.csv) from it’s location in the project folder. If you are following the organization scheme we have been using throughout the course, your file path will look something like this:\n\nthefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWe encourage using the file.path function to build our file paths, as this keeps our code reproducible and replicable when a project folder is copied to other people’s computers that differ on whether the operating system uses forward or backward slash separation between folders.\n\n\nAbove, we directly specified the name (Dataset) and filetype (.csv) of the file we wanted in the last argument of the file.path (“Dataset.csv”). This allows us to skip the list.files() step we used last week as we have provided the full file path. While this approach can be faster, if we accidentally mistype the file name, we could end up with an error at the next step due to no files being found with the mistyped name.\nSince our dataset is stored as a .csv file, we will be using the read.csv() function from the utils package (included in our base R software installation) to read it into R. We will also use the colnames() function from last week to get a read-out of the column names.\n\nData <- read.csv(file=thefilepath, check.names=FALSE)\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\nAs we look at the line of code, we now have enough context to decipher that the “file” argument is where we provide a file path to an individual file, but what does the “check.names” argument do?\nLet’s see what happens to the column names when we set “check.names” argument to TRUE:\n\nData_Alternative <- read.csv(thefilepath, check.names=TRUE)\ncolnames(Data_Alternative)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump.\" \"Dump..1\" \"Tcells\" \n[19] \"Vd2.\" \"Vd2..1\" \"Va7.2.\" \n[22] \"Va7.2..1\" \"CD4.\" \"CD4..1\" \n[25] \"CD8.\" \"CD8..1\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\nAs we can see, any column name that contained a special character or a space was automatically converted over to R-approved syntax. However, this resulted in the loss of both +” and “-”, leaving us unable to determine whether we are looking at cells within or outside a particular gate.\n\nBecause of this, it is often better to rename columns individually after import, which we will learn how to do later today.\nFollowing up with what we practiced last week, lets use the head() function to visualize the first few rows of data.\n\nhead(Data, 3)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 Ctrl 2025-07-26 Male HEU-hi 2098368 1894070\n2 INF0100 0 Ctrl 2025-07-26 Male HEU-lo 2020184 1791890\n3 INF0100 4 Ctrl 2025-07-26 Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n\nWhen working in Positron, we could have alternatively clicked on the little grid icon next to our created variable “Data” in the right secondary sidebar, which would have opened the data in our Editor window. From this same window, we can see it is stored as a “data.frame” object type.\n\nWe could also achieve the same window to open using the View() function:\n\nView(Data)\n\nWrapping up our brief recap of last week functions, we can check an objects type using both the class() and str() functions.\n\nclass(Data)\n\n[1] \"data.frame\"\n\n\n\nstr(Data)\n\n'data.frame': 196 obs. of 31 variables:\n $ bid : chr \"INF0052\" \"INF0100\" \"INF0100\" \"INF0100\" ...\n $ timepoint : int 0 0 4 9 0 4 9 4 9 0 ...\n $ Condition : chr \"Ctrl\" \"Ctrl\" \"Ctrl\" \"Ctrl\" ...\n $ Date : chr \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n $ infant_sex : chr \"Male\" \"Male\" \"Male\" \"Male\" ...\n $ ptype : chr \"HEU-hi\" \"HEU-lo\" \"HEU-lo\" \"HEU-lo\" ...\n $ root : int 2098368 2020184 1155040 358624 1362216 1044808 1434840 972056 1521928 2363512 ...\n $ singletsFSC : int 1894070 1791890 1033320 328624 1206309 917398 1265022 875707 1359574 2136616 ...\n $ singletsSSC : int 1666179 1697083 875465 289327 1032946 735579 988445 767323 1175755 1875394 ...\n $ singletsSSCB : int 1537396 1579098 845446 276289 982736 685592 940454 718000 1097478 1732620 ...\n $ CD45 : num 0.595 0.911 0.971 0.982 0.957 ...\n $ NotMonocytes : num 0.882 0.905 0.985 0.986 0.956 ...\n $ nonDebris : num 0.863 0.86 0.958 0.941 0.841 ...\n $ lymphocytes : num 0.642 0.215 0.74 0.651 0.705 ...\n $ live : num 0.902 0.891 0.876 0.915 0.895 ...\n $ Dump+ : num 0.2109 0.0625 0.2002 0.2147 0.3383 ...\n $ Dump- : num 0.691 0.828 0.676 0.701 0.557 ...\n $ Tcells : num 0.28 0.675 0.612 0.631 0.44 ...\n $ Vd2+ : num 0.00812 0.00727 0.00465 0.01135 0.00475 ...\n $ Vd2- : num 0.992 0.993 0.995 0.989 0.995 ...\n $ Va7.2+ : num 0.0145 0.0158 0.0158 0.017 0.0133 ...\n $ Va7.2- : num 0.977 0.977 0.98 0.972 0.982 ...\n $ CD4+ : num 0.634 0.612 0.664 0.438 0.739 ...\n $ CD4- : num 0.343 0.365 0.316 0.534 0.243 ...\n $ CD8+ : num 0.273 0.336 0.286 0.486 0.195 ...\n $ CD8- : num 0.0698 0.0293 0.0294 0.0476 0.0476 ...\n $ Tcells_count : int 164771 208241 371723 111552 291777 271870 487937 220634 415867 184930 ...\n $ lymphocytes_count: int 587573 308583 607477 176662 663667 510730 726238 451047 710964 652155 ...\n $ Monocytes : num 0.118 0.0948 0.0155 0.0145 0.0444 ...\n $ Debris : num 0.1372 0.1397 0.0421 0.0587 0.1592 ...\n $ CD45_count : int 915203 1438047 820570 271304 940733 675857 921660 701657 1066884 1017713 ...", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/05_GatingSets/index.html#interconverting", - "href": "course/05_GatingSets/index.html#interconverting", - "title": "05 - Gating Sets", - "section": "Interconverting", - "text": "Interconverting\nDespite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed.\nTo go from a flowFrame to a cytoframe, we can use the flowFrame_to_cytoframe() function\n\nConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)\nConvertedToCytoframe\n\ncytoframe object 'file382b177c06ea'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\nrow names(0):\n\n\n\nobj_size(ConvertedToCytoframe)\n\n5.40 kB\n\n\nTo go from a cytoframe to a flowFrame, we can use the cytoframe_to_flowFrame() function\n\nConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)\nConvertedToFlowframe\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\n\nobj_size(ConvertedToFlowframe)\n\n3.53 MB\n\n\nTo go from a flowSet to a cytoSet, we can use the flowSet_to_cytoset() funciton\n\nConvertedToCytoset <- flowSet_to_cytoset(flowSet)\nConvertedToCytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nobj_size(ConvertedToCytoset)\n\n3.88 kB\n\n\nTo go from a cytoSet to a flowSet, we can use the cytoset_to_flowSet() function.\n\nConvertedToFlowset <- cytoset_to_flowSet(flowSet)\nConvertedToFlowset\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\n\nobj_size(ConvertedToFlowset)\n\n20.99 MB", + "objectID": "course/04_IntroToTidyverse/index.html#data.frame", + "href": "course/04_IntroToTidyverse/index.html#data.frame", + "title": "04 - Introduction to Tidyverse", + "section": "data.frame", + "text": "data.frame\nOr alternatively using the new-to-us glimpse() function\n\nglimpse(Data)\n\nError in `glimpse()`:\n! could not find function \"glimpse\"\n\n\n\n\n\n\n\n\nCheckpoint 1\n\n\n\nThis however returns an error. Any idea why this might be occuring?\n\n\n\n\nCode\n# We haven't attached/loaded the package in which the function glimpse is within\n\n\n\n\n\n\n\n\nCheckpoint 2\n\n\n\nHow would we locate a package a not-yet-loaded function is within?\n\n\n\n\nCode\n# We can use double ? to search all installed packages for a function, regardless\n# if the package is attached to the environment or not\n\n??glimpse\n\n\n\nFrom the list of search matches (in the right secondary sidebar), it looks likely that the glimpse() function in the dplyr package was the one we were looking for. This is one the main tidyverse packages we will be using throughout the course. Let’s attach it to our environment via the library() call first and try running glimpse() again.\n\nlibrary(dplyr)\nglimpse(Data)\n\nRows: 196\nColumns: 31\n$ bid <chr> \"INF0052\", \"INF0100\", \"INF0100\", \"INF0100\", \"INF0179…\n$ timepoint <int> 0, 0, 4, 9, 0, 4, 9, 4, 9, 0, 0, 4, 9, 0, 4, 9, 4, 9…\n$ Condition <chr> \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctr…\n$ Date <chr> \"2025-07-26\", \"2025-07-26\", \"2025-07-26\", \"2025-07-2…\n$ infant_sex <chr> \"Male\", \"Male\", \"Male\", \"Male\", \"Male\", \"Male\", \"Mal…\n$ ptype <chr> \"HEU-hi\", \"HEU-lo\", \"HEU-lo\", \"HEU-lo\", \"HU\", \"HU\", …\n$ root <int> 2098368, 2020184, 1155040, 358624, 1362216, 1044808,…\n$ singletsFSC <int> 1894070, 1791890, 1033320, 328624, 1206309, 917398, …\n$ singletsSSC <int> 1666179, 1697083, 875465, 289327, 1032946, 735579, 9…\n$ singletsSSCB <int> 1537396, 1579098, 845446, 276289, 982736, 685592, 94…\n$ CD45 <dbl> 0.5952943, 0.9106762, 0.9705765, 0.9819573, 0.957259…\n$ NotMonocytes <dbl> 0.8820349, 0.9052256, 0.9845400, 0.9855070, 0.955627…\n$ nonDebris <dbl> 0.8627649, 0.8602660, 0.9578793, 0.9412615, 0.840783…\n$ lymphocytes <dbl> 0.6420138, 0.2145848, 0.7403110, 0.6511588, 0.705478…\n$ live <dbl> 0.9020581, 0.8908981, 0.8757665, 0.9153242, 0.895214…\n$ `Dump+` <dbl> 0.21090996, 0.06252775, 0.20023803, 0.21469246, 0.33…\n$ `Dump-` <dbl> 0.6911482, 0.8283703, 0.6755285, 0.7006317, 0.556895…\n$ Tcells <dbl> 0.2804264, 0.6748298, 0.6119129, 0.6314431, 0.439643…\n$ `Vd2+` <dbl> 0.008120361, 0.007265620, 0.004651313, 0.011348967, …\n$ `Vd2-` <dbl> 0.9918796, 0.9927344, 0.9953487, 0.9886510, 0.995246…\n$ `Va7.2+` <dbl> 0.014480704, 0.015774991, 0.015794019, 0.017023451, …\n$ `Va7.2-` <dbl> 0.9773989, 0.9769594, 0.9795547, 0.9716276, 0.981924…\n$ `CD4+` <dbl> 0.6341164, 0.6119112, 0.6639621, 0.4378944, 0.739256…\n$ `CD4-` <dbl> 0.3432825, 0.3650482, 0.3155925, 0.5337331, 0.242668…\n$ `CD8+` <dbl> 0.2734826, 0.3357696, 0.2862104, 0.4861231, 0.195063…\n$ `CD8-` <dbl> 0.06979990, 0.02927858, 0.02938209, 0.04761008, 0.04…\n$ Tcells_count <int> 164771, 208241, 371723, 111552, 291777, 271870, 4879…\n$ lymphocytes_count <int> 587573, 308583, 607477, 176662, 663667, 510730, 7262…\n$ Monocytes <dbl> 0.11796509, 0.09477437, 0.01545999, 0.01449297, 0.04…\n$ Debris <dbl> 0.13723513, 0.13973396, 0.04212072, 0.05873854, 0.15…\n$ CD45_count <int> 915203, 1438047, 820570, 271304, 940733, 675857, 921…\n\n\nWe notice that while similar to the str() output, glimpse() handles spacing a little differently, and includes the dimensions at the top. However, we can also retrieve the dimensions directly using the dim() function (which maintains the row followed by column position convention of base R (ex. [196,31]))\n\ndim(Data)\n\n[1] 196 31", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/05_GatingSets/index.html#gating-sets", - "href": "course/05_GatingSets/index.html#gating-sets", - "title": "05 - Gating Sets", - "section": "Gating Sets", - "text": "Gating Sets\nFortunately, regardless of whether we are using flowFrame/flowSet (RAM) and cytoframe/cytoset (memory pointers), both routes end up converging at the next step, where the underlying .fcs files are passed off to the GatingSet() function.\n\nGatingSet1 <- GatingSet(flowSet)\nGatingSet1 \n\nA GatingSet with 6 samples\n\n\n\nclass(GatingSet1)\n\n[1] \"GatingSet\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\n\nGatingSet2 <- GatingSet(cytoset)\nGatingSet2\n\nA GatingSet with 6 samples\n\n\n\nclass(GatingSet1)\n\n[1] \"GatingSet\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nAs we prefaced in the background, beyond the .fcs files themselves, we need infrastructural elements with which to interact with the underlying data, which allows us to organize the various files, transform (scale), compensate (for conventional flow), visualize, derrive statistics, etc. A GatingSet serves as the infrastructural framework that allows us to do this in R.\nIf we investigate our current GatingSet objects, we won’t see much\n\nThis will change as we start layering on additional elements. However, rather than try to cram everything into a single week, we will explore in greater depth the individual components over the next three weeks. Instead, for the rest of today, we will work backward, by exploring a GatingSet objecct and what it is capable of doing once fully assembled.", + "objectID": "course/04_IntroToTidyverse/index.html#column-value-type", + "href": "course/04_IntroToTidyverse/index.html#column-value-type", + "title": "04 - Introduction to Tidyverse", + "section": "Column value type", + "text": "Column value type\nAs we saw last week, functions often need values that match a certain type (the paintbrush needing paint analogy). As we inspect the columns of Data, we can notice some of the columns contain values within that are character (ie. “char”) values. Others appear to contain numeric values (which are subtyped as either double (“ie. dbl”) or integer (ie. “int”)). At first glance, we do not appear to have any logical (ie. TRUE or FALSE) columns in this dataset.\n\nIf we were trying to verify type of values contained within a data.frame column, we could employ several similarly-named functions (is.character(), is.numeric() or is.logical()) to check\n\n# colnames(Data) # To recheck the column names\n\nis.character(Data$bid)\n\n[1] TRUE\n\n\n\nis.numeric(Data$bid)\n\n[1] FALSE\n\n\n\n# colnames(Data) # To recheck the column names\n\nis.character(Data$Tcells_count)\n\n[1] FALSE\n\n\nFor numeric columns using the is.numeric() function, we can also be subtype specific using either is.integer() or is.double().\n\n# colnames(Data) # To recheck the column names\n\nis.numeric(Data$Tcells_count)\n\n[1] TRUE\n\nis.integer(Data$Tcells_count)\n\n[1] TRUE\n\nis.double(Data$Tcells_count)\n\n[1] FALSE\n\n\n\n\n\n\n\n\nReminder\n\n\n\nAs we observed last week with keywords, column names that contain special characters like $ or spaces will need to be surrounded with tick marks in order for the function to be able to run.\n\n\n\n# colnames(Data) # To recheck the column names\nis.numeric(Data$CD8-)\n\nError in parse(text = input): <text>:2:21: unexpected ')'\n1: # colnames(Data) # To recheck the column names\n2: is.numeric(Data$CD8-)\n ^\n\n\n\n# colnames(Data) # To recheck the column names\nis.numeric(Data$`CD8-`)\n\n[1] TRUE", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/05_GatingSets/index.html#cytoml", - "href": "course/05_GatingSets/index.html#cytoml", - "title": "05 - Gating Sets", - "section": "CytoML", - "text": "CytoML\nThe CytoML R package (also maintained by Mike Jiang) is a sister package to the flowWorkspace. It’s main purpose is to permit bringing in existing FlowJo, Diva and Cytobank Workspaces, with all their gates, transformations, etc. into R as fully assembled GatingSet objects. For those who already use one of these commercial softwares, it can be quite useful tool.\nSince our goal is to examine a fully assembled GatingSet object, we will be using it today to bring in a FlowJo workspace to R. However, since this is a free Cytometry in R course, and not about to have everyone pay for a license for a one-off topic, in the pre-course Floreada walkthrough I documented how to convert a free Floreada.io workspae into a FlowJo.wsp that can also be used (please note that as of early 2026, some scaling bugs may be present and require troubleshooting).\nTo get started, let’s first attach CytoML to our local environment via the library() call.\n\n# BiocManager::install(\"CytoML\") #Bioconductor\nlibrary(CytoML)\n\nThe .wsp files within this week’s data where created via Floreada.io. The main difference between the two files is one is a copy of the original that was opened within FlowJo, and subsequently swtiched from logicle to bi-exponential transformation.\nWe will need to provide the appropiate file path for our desired .wsp file. We can start by identifying which are present using list.files()\n\nFolder # Defined Above\n\n[1] \"data\"\n\nFlowJoWsp <- list.files(path = Folder, pattern = \".wsp\", full = TRUE)\nFlowJoWsp\n\n[1] \"data/FlowJoWSP_OpenedCopy.wsp\" \"data/FlowJoWSP_Unopened.wsp\" \n\n\nIn our case, we will proceed by using str_detect() to select the .wsp that contains the pattern “Opened”\n\nThisWorkspace <- FlowJoWsp[stringr::str_detect(FlowJoWsp, \"Opened\")]\nThisWorkspace\n\n[1] \"data/FlowJoWSP_OpenedCopy.wsp\"\n\n\nWith our single .wsp filepath now identified, we can now proceed to set up the intermediate object using open_flowjo_xml()\n\nws <- open_flowjo_xml(ThisWorkspace)\nws\n\nFile location: data/FlowJoWSP_OpenedCopy.wsp \n\nGroups in Workspace\n Name Num.Samples\n1 All Samples 6\n\n\n\nclass(ws)\n\n[1] \"flowjo_workspace\"\nattr(,\"package\")\n[1] \"CytoML\"\n\n\nHaving set up the intermediate flowjo_workspace object, we can attempt to read in the actual data from the .wsp into a GatingSet using the flowjo_to_gatingset() function.\nHowever, due to how I named the original .fcs files (“GROUPNAME” being individual specimens, “TUBENAME” being either Ctrl or SEB), and downsampled to the same number of cells, we will encounter the following error\n\ngs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder)\n\nError:\n! Multiple FCS files match sample 00_Ctrl.fcs by filename, event count, and keywords.\nCandidates are: \n/home/david/Documents/CytometryInR/course/05_GatingSets/data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\n/home/david/Documents/CytometryInR/course/05_GatingSets/data/2025_07_26_AB_02_INF100_00_Ctrl.fcs\n/home/david/Documents/CytometryInR/course/05_GatingSets/data/2025_07_26_AB_02_INF179_00_Ctrl.fcs\nPlease move incorrect files out of this directory or its subdirectories.\n\ngs\n\nError:\n! object 'gs' not found\n\n\nAs with any error, my first move is to check the help documentation. In this case, my initial response is to see if I can identify an argument that will help differentiate between the names for each specimen.\n\n?flowjo_to_gatingset\n\n\nIn this case, I find that the “additional.keys” argument would likely work for this troubleshooting\n\n\ngs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\")\ngs\n\nA GatingSet with 6 samples\n\n\n\nclass(gs)\n\n[1] \"GatingSet\"\nattr(,\"package\")\n[1] \"flowWorkspace\"", + "objectID": "course/04_IntroToTidyverse/index.html#select-columns", + "href": "course/04_IntroToTidyverse/index.html#select-columns", + "title": "04 - Introduction to Tidyverse", + "section": "select (Columns)", + "text": "select (Columns)\nNow that we have read in our data, and have a general picture of the structure and contents, lets start learning the main dplyr functions we will be using throughout the course. To do this, lets go ahead and attach dplyr to our local environment via the library() call.\n\nlibrary(dplyr)\n\nWe will start with the select() function. It is used to “select” a column from a data.frame type object. In the simplest usage, we provide the name of our data.frame variable/object as the first argument after the opening parenthesis. This is then followed by the name of the column we want to select as the second argument (let’s place around the “” around the column name for now)\n\nDateColumn <- select(Data, \"Date\")\nDateColumn[1:10,]\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nThis results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object.\n\nPipe Operators\nWhile the above line of code works to select a column, when you encounter select() out in the wild, it will more often be in a line of code that looks like this:\n\nDateColumn <- Data |> select(\"Date\")\nDateColumn[1:10,]\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\n… “What in the world is that thing |> ?” …\nGlad you asked! An useful feature of the tidyverse packages is their use of pipes (either the original magrittr package’s “%>%” or base R version >4.1.0's “|>”“), usually appearing like this:\n\n# magrittr %>% pipe\n\nDateColumn <- Data %>% select(\"Date\")\n\n# base R |> pipe\nDateColumn <- Data |> select(\"Date\")\n\n… “How do we interpret/read that line of code?” …\nLet’s break it down, starting off just to the right of the assignment arrow (<-) with our data.frame “Data”.\n\nData\n\nWe then proceed to read to the right, adding in our pipe operator. The pipe essentially serves as an intermediate passing the contents of data onward to the subsequent function.\n\nData |> \n\nIn our case, this subsequent function is the select() function, which will select a particular column from the available data. When using the pipe, the first argument slot we saw for “select(Data,”Date”)” is occupied by the contents Data that are being passed by the pipe.\n\nData |> select()\n\nTo complete the transfer, we provide the desired column name to select() to act on (“Date” in this case)\n\nData |> select(\"Date\")\n\nIn summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column\n\nData |> select(\"Date\")\n\nOne of the main advantages for using pipes, is they can be linked together, passing resulting objects of one operation on to the next pipe and subsequent function. We can see this in operation in the example below where we hand off the isolated “Date” column to the nrow() function to determine number of rows. We will use pipes throughout the course, so you will gradually gain familiarity as you encounter them.\n\nData |> select(\"Date\") |> nrow()\n\n[1] 196\n\n\nFor those with prior R experience, you will be more familiar with the older magrittr %>% pipe. The base R |> pipe operator was introduced starting with R version 4.1.0. While mostly interchangeable, they have a few nuances that come into play for more advance use cases. You are welcome to use whichever you prefer (my current preference is |> as it’s one less key to press).\n\n\nR Quirks\n\n\n\n\n\n\nOdd R Behavior # 1\n\n\n\nWhile we used “” around the column name in our previous example, unlike what we encountered with install.packages() when we forget to include quotation marks, select() still retrieves the correct column despite Date not being an environment variable:\n\n\n\nData |> select(Date) |> head(3)\n\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n\n\n\n\n\n\n\n\n.\n\n\n\nThe reasons for this Odd R behaviour are nuanced and for another day. For now, think of it as dplyr R package is picking up the slack, and using context to infer it’s a column name and not an environmental variable/object.\n\n\n\n\nSelecting multiple columns\nSince we are able to select one column, can we select multiple (similar to a [Data[,2:5]] approach in base R)? We can, and they can be positioned anywhere within the data.frame:\n\nSubset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`)\n\nhead(Subset, 3)\n\n bid timepoint Condition Tcells CD8+ CD4+\n1 INF0052 0 Ctrl 0.2804264 0.2734826 0.6341164\n2 INF0100 0 Ctrl 0.6748298 0.3357696 0.6119112\n3 INF0100 4 Ctrl 0.6119129 0.2862104 0.6639621\n\n\nYou will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object:\n\nSubset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, )\n\nhead(Subset, 3)\n\n bid Tcells CD8+ CD4+ timepoint Condition\n1 INF0052 0.2804264 0.2734826 0.6341164 0 Ctrl\n2 INF0100 0.6748298 0.3357696 0.6119112 0 Ctrl\n3 INF0100 0.6119129 0.2862104 0.6639621 4 Ctrl", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/05_GatingSets/index.html#system-time", - "href": "course/05_GatingSets/index.html#system-time", - "title": "05 - Gating Sets", - "section": "System Time", - "text": "System Time\nEspecially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so.\nOne, using the system.time() function from base R, in which we surround whatever line of code we wish to evaluate in {}\n\nsystem.time({\n\nflowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\")\n\n})\n\n user system elapsed \n 0.554 0.004 0.559 \n\n\nAlternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.\n\n# install.packages(\"bench\") # CRAN\nlibrary(bench)\n\n\nmark(\n Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\"),\n iterations= 5\n )\n\n# A tibble: 1 × 6\n expression min median `itr/sec` mem_alloc `gc/sec`\n <bch:expr> <bch> <bch:> <dbl> <bch:byt> <dbl>\n1 Test <- flowjo_to_gatingset(ws = ws… 539ms 550ms 1.78 13.3KB 0", + "objectID": "course/04_IntroToTidyverse/index.html#relocate", + "href": "course/04_IntroToTidyverse/index.html#relocate", + "title": "04 - Introduction to Tidyverse", + "section": "relocate", + "text": "relocate\nAlternatively, we occasionally want to move one column. While we could respecify the location using select(), specifying the names of all the other columns out in a line of code to just to rearrange one does not sound like a good use of time. For this reason, the second dplyr function we will be learning is the relocate() function.\nLooking at our Data object, let’s say we wanted to move the Tcells column from its current location to the second column position (right after the bid column). The line of code to do so would look like:\n\nData |> relocate(Tcells, .after=bid) |> head(3)\n\n bid Tcells timepoint Condition Date infant_sex ptype root\n1 INF0052 0.2804264 0 Ctrl 2025-07-26 Male HEU-hi 2098368\n2 INF0100 0.6748298 0 Ctrl 2025-07-26 Male HEU-lo 2020184\n3 INF0100 0.6119129 4 Ctrl 2025-07-26 Male HEU-lo 1155040\n singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nSimilar to what we saw with select(), this approach can also be used for more than 1 column:\n\nData |> relocate(Tcells, Monocytes, .after=bid) |> head(3)\n\n bid Tcells Monocytes timepoint Condition Date infant_sex ptype\n1 INF0052 0.2804264 0.11796509 0 Ctrl 2025-07-26 Male HEU-hi\n2 INF0100 0.6748298 0.09477437 0 Ctrl 2025-07-26 Male HEU-lo\n3 INF0100 0.6119129 0.01545999 4 Ctrl 2025-07-26 Male HEU-lo\n root singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 2098368 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 2020184 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1155040 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Debris CD45_count\n1 587573 0.13723513 915203\n2 308583 0.13973396 1438047\n3 607477 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nWe can also modify the argument so that columns are placed before a certain column\n\nData |> relocate(Tcells, .before=Date) |> head(3)\n\n bid timepoint Condition Tcells Date infant_sex ptype root\n1 INF0052 0 Ctrl 0.2804264 2025-07-26 Male HEU-hi 2098368\n2 INF0100 0 Ctrl 0.6748298 2025-07-26 Male HEU-lo 2020184\n3 INF0100 4 Ctrl 0.6119129 2025-07-26 Male HEU-lo 1155040\n singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nAnd as we might suspect, we could specify a column index location rather than using a column name.\n\nData |> relocate(Date, .before=1) |> head(3)\n\n Date bid timepoint Condition infant_sex ptype root singletsFSC\n1 2025-07-26 INF0052 0 Ctrl Male HEU-hi 2098368 1894070\n2 2025-07-26 INF0100 0 Ctrl Male HEU-lo 2020184 1791890\n3 2025-07-26 INF0100 4 Ctrl Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/05_GatingSets/index.html#gates", - "href": "course/05_GatingSets/index.html#gates", - "title": "05 - Gating Sets", - "section": "Gates", - "text": "Gates\nNow that we have loaded the contents of the FlowJo/Floreada workspace, we can start exploring the various infrastructural capabilities of a GatingSet object.\nLet’s start by evaluating whether the manually-drawn gates I drew survived the journey. To do this, I can generate a visual gating treee using the plot() function.\n\nplot(gs)\n\n\n\n\n\n\n\n\nWe can also retrieve the individual gates and their gaing paths using the gs_get_pop_paths() function.\n\ngs_get_pop_paths(gs)\n\n [1] \"root\" \n [2] \"/Scatter\" \n [3] \"/Scatter/Singlets\" \n [4] \"/Scatter/Singlets/Live\" \n [5] \"/Scatter/Singlets/Live/Tcells\" \n [6] \"/Scatter/Singlets/Live/Tcells/CD4+\" \n [7] \"/Scatter/Singlets/Live/Tcells/CD4+/TNFa+IFNg+\" \n [8] \"/Scatter/Singlets/Live/Tcells/CD4+/TNFa+IFNg-\" \n [9] \"/Scatter/Singlets/Live/Tcells/CD4+/TNFa-IFNg+\" \n[10] \"/Scatter/Singlets/Live/Tcells/CD4+/TNFa-IFNg-\" \n[11] \"/Scatter/Singlets/Live/Tcells/CD4-CD8-\" \n[12] \"/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa+IFNg+\"\n[13] \"/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa+IFNg-\"\n[14] \"/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa-IFNg+\"\n[15] \"/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa-IFNg-\"\n[16] \"/Scatter/Singlets/Live/Tcells/CD8+\" \n[17] \"/Scatter/Singlets/Live/Tcells/CD8+/TNFa+IFNg+\" \n[18] \"/Scatter/Singlets/Live/Tcells/CD8+/TNFa+IFNg-\" \n[19] \"/Scatter/Singlets/Live/Tcells/CD8+/TNFa-IFNg+\" \n[20] \"/Scatter/Singlets/Live/Tcells/CD8+/TNFa-IFNg-\"", + "objectID": "course/04_IntroToTidyverse/index.html#rename", + "href": "course/04_IntroToTidyverse/index.html#rename", + "title": "04 - Introduction to Tidyverse", + "section": "rename", + "text": "rename\nAt this point, we are able to both move and select particular columns, allowing us to rearrange and subset a larger data.frame object however we want it to appear. However, as we encountered, some of the names contain special characters and spaces, requiring use of tick marks (``) to avoid issues. How can we change a column name?\nIn base R, we could change individual column names by assigning a new value with the assignment arrow to the corresponding column name index. For example, looking at our Subset object, wen could rename CD8+ as follows:\n\ncolnames(Subset)\n\n[1] \"bid\" \"Tcells\" \"CD8+\" \"CD4+\" \"timepoint\" \"Condition\"\n\ncolnames(Subset)[3]\n\n[1] \"CD8+\"\n\n\n\ncolnames(Subset)[3] <- \"CD8Positive\"\ncolnames(Subset)\n\n[1] \"bid\" \"Tcells\" \"CD8Positive\" \"CD4+\" \"timepoint\" \n[6] \"Condition\" \n\n\nWith the tidyverse, we can use the rename() function which removes the need to look up the column index number. The way we write the argument is placing within the parenthesis the old name to the right of the equals sign, with the new name to the left\n\nRenamed <- Subset |> rename(CD4_Positive = `CD4+`)\ncolnames(Renamed)\n\n[1] \"bid\" \"Tcells\" \"CD8Positive\" \"CD4_Positive\" \"timepoint\" \n[6] \"Condition\" \n\n\nIf we wanted to rename multiple column names at once, we would just need to include a comma between the individual rename arguments within the parenthesis.\n\nRenamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`)\ncolnames(Renamed_Multiple)\n\n[1] \"specimen\" \"Tcells\" \"CD8Positive\" \"CD4Positive\" \n[5] \"timepoint_months\" \"stimulation\"", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/05_GatingSets/index.html#counts", - "href": "course/05_GatingSets/index.html#counts", - "title": "05 - Gating Sets", - "section": "Counts", - "text": "Counts\nIf we wanted to retrieve counts of cells found within the individual gates, we could do so with gs_pop_get_count_fast()\n\nData <- gs_pop_get_count_fast(gs)\nhead(Data, 5)\n\n name Population\n <char> <char>\n1: 00_Ctrl.fcs_INF052 /Scatter\n2: 00_Ctrl.fcs_INF052 /Scatter/Singlets\n3: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live\n4: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live/Tcells\n5: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live/Tcells/CD4+\n Parent Count ParentCount\n <char> <int> <int>\n1: root 10000 10000\n2: /Scatter 9986 10000\n3: /Scatter/Singlets 9708 9986\n4: /Scatter/Singlets/Live 9708 9708\n5: /Scatter/Singlets/Live/Tcells 6151 9708", + "objectID": "course/04_IntroToTidyverse/index.html#pull", + "href": "course/04_IntroToTidyverse/index.html#pull", + "title": "04 - Introduction to Tidyverse", + "section": "pull", + "text": "pull\nSometimes, we may want to retrieve individual values present in a column, to use within either a vector or a list. We can do this using the pull() function, which will retrieve the column contents and strip the column formatting\n\nData |> pull(Date) |> head(5)\n\n[1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nThis can be useful when we are doing data exploration, and trying to determine how many unique variants might be present. For example, if we wanted to see what days individual samples were acquired, we could pull() the data and pass it to the unique() function:\n\nData |> pull(Date) |> unique()\n\n[1] \"2025-07-26\" \"2025-07-29\" \"2025-07-31\" \"2025-08-05\" \"2025-08-07\"\n[6] \"2025-08-22\" \"2025-08-28\" \"2025-08-30\"", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/05_GatingSets/index.html#metadata", - "href": "course/05_GatingSets/index.html#metadata", - "title": "05 - Gating Sets", - "section": "Metadata", - "text": "Metadata\nSince GatingSets contain multiple .fcs files, we may want to be able to subset them based on metadata for a particular variable. We can check to see current metadata using the pData() function.\n\npData(gs)\n\n name\n00_Ctrl.fcs_INF052 00_Ctrl.fcs\n00_Ctrl.fcs_INF100 00_Ctrl.fcs\n00_Ctrl.fcs_INF179 00_Ctrl.fcs\n00_SEB.fcs_INF052 00_SEB.fcs\n00_SEB.fcs_INF100 00_SEB.fcs\n00_SEB.fcs_INF179 00_SEB.fcs\n\n\nIt currently doesn’t have much, but we will explore how to change this more over the next few weeks. For now, just know that we could add additional metadata via either a .csv file, or by retrieving additional description keywords from within the .fcs files themselves (as shown below)\n\nAlternateGS <- flowjo_to_gatingset(ws=ws, name=1, path = Folder,\n additional.keys=\"GROUPNAME\",\n keywords=c(\"$DATE\", \"$CYT\", \"GROUPNAME\"))\npData(AlternateGS)\n\n GROUPNAME $CYT $DATE name\n00_Ctrl.fcs_INF052 INF052 Aurora 26-Jul-2025 00_Ctrl.fcs\n00_Ctrl.fcs_INF100 INF100 Aurora 26-Jul-2025 00_Ctrl.fcs\n00_Ctrl.fcs_INF179 INF179 Aurora 26-Jul-2025 00_Ctrl.fcs\n00_SEB.fcs_INF052 INF052 Aurora 26-Jul-2025 00_SEB.fcs\n00_SEB.fcs_INF100 INF100 Aurora 26-Jul-2025 00_SEB.fcs\n00_SEB.fcs_INF179 INF179 Aurora 26-Jul-2025 00_SEB.fcs", + "objectID": "course/04_IntroToTidyverse/index.html#filter-rows", + "href": "course/04_IntroToTidyverse/index.html#filter-rows", + "title": "04 - Introduction to Tidyverse", + "section": "filter (Rows)", + "text": "filter (Rows)\nSo far, we have been working with dplyr functions primarily used when working with and subsetting columns (including select(), pull(), rename() and relocate()). What if we wanted to work with rows of a data.frame? This is where the filter() function is used.\nThe Condition column in this Dataset appears to be indicating whether the samples were stimulated. Let’s see how many unique values are contained within that column\n\nData |> pull(Condition) |> unique() \n\n[1] \"Ctrl\" \"PPD\" \"SEB\" \n\n\nIn the case of this dataset, looks like the .fcs files where treated with either left alone, treated with PPD (Purified Protein Derrivative) or SEB. What if we wanted to subset only those treated with PPD?\nWithin filter(), we would specify the column name as the first argument, and ask that only values equal to (==) “PPD” be returned. Notice in this case, “” are needed, as we are asking for a matching character value.\n\nPPDOnly <- Data |> filter(Condition == \"PPD\")\nhead(PPDOnly, 5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nWhile this works, using “==” to match can glitch, especially with character values. Using the %in% operator is a better way of identifying and extracting only the rows whose Condition column contains “PPD”\n\nData |> filter(Condition %in% \"PPD\") |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nSimilar to what we saw for select(), we can grab rows that contain various values at once. We would just need to modify the second part of the argument. If we wanted to grab rows whose Condition column contained either PPD or SEB, we would need to provide that argument as a vector, placing both within c()/\n\nData |> filter(Condition %in% c(\"PPD\", \"SEB\")) |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nAlternatively, we could have set up the vector externally, and then provided it to filter()\n\nTheseConditions <- c(\"PPD\", \"SEB\")\nData |> filter(Condition %in% TheseConditions) |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nWhile this works when we have a limited number of variant condition values, what if had many more but only wanted to exclude one value? As we saw when learning about Conditionals, when we add a ! in front of a logical value, we get the opposite logical value returned\n\nIsThisASpectralInstrument <- TRUE\n\n!IsThisASpectralInstrument\n\n[1] FALSE\n\n\nIn the context of the dplyr package, we can use ! within the filter() to remove rows that contain a certain value\n\nSubset <- Data |> filter(!Condition %in% \"SEB\")\nSubset |> pull(Condition) |> unique()\n\n[1] \"Ctrl\" \"PPD\" \n\n\nLikewise, we can also use it with the select() to exclude columns we don’t want to include\n\nSubset <- Data |> select(!timepoint)\nSubset[1:3,]\n\n bid Condition Date infant_sex ptype root singletsFSC\n1 INF0052 Ctrl 2025-07-26 Male HEU-hi 2098368 1894070\n2 INF0100 Ctrl 2025-07-26 Male HEU-lo 2020184 1791890\n3 INF0100 Ctrl 2025-07-26 Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/05_GatingSets/index.html#ggcyto", - "href": "course/05_GatingSets/index.html#ggcyto", - "title": "05 - Gating Sets", - "section": "ggcyto", - "text": "ggcyto\nAs you can surmise, a lot of the infrastructural style handling done by commercial softwares is being orchestrated/mediated through our GatingSet object. Since it’s able to create and retain gating information, how would we go about visualizing the underlying data contained within each?\nWithin R, most plots are generated using the ggplot2 package from the tidyverse (which we will explore next week), which builds of the “Grammar of Graphics” concept, combining layers together to create the final plots. The Bioconductor ggcyto R package extends this concept to enable flow cytometry data contained within a GatingSet to be plotted.\n\n\n\n\n\n\nImportant\n\n\n\nAs is the case with most free open-source software (FOSS), R packages will change over time as their developers add new features, make improvements, or alter internal functions to speed things up.\n\n\n\n\n\n\n\n\nImportant\n\n\n\nggplot2 recently had a major version change, with significant internal changes occuring. As a consequence of these changes, ggcyto functions that relied on the old ggplot2 functions broke and had to be updated.\n\n\n\n\n\n\n\n\nImportant\n\n\n\nAny updates to CRAN packages are reflected immediately. By contrast, Bioconductor is on a twice yearly release cycle, so to take advantage of the ggcyto “fixes” that allow it to interact with the new version of ggplot2, we will need to make sure we have the “developmental” version installed.\n\n\n\npackageVersion\nLet’s start off by checking what version of both the ggplot2 and ggcyto packages you currently have installed on your computer.\n\npackageVersion(\"ggplot2\")\n\n[1] '4.0.2'\n\n\n\npackageVersion(\"ggcyto\")\n\n[1] '1.39.1'\n\n\nIf you were able to retrieve the following package versions (or greater”) for ggplot2 and ggcyto, you should be all set and can skip the subsequent reinstallation steps.\n\nIf you however found you have the older package versions (ex. ggplot2 3.5.2 or ggcyto 1.37.1) currently installed, you will likely encounter errors when trying to run the functions to plot your data below (since the changes are not fully backward-compatible with older versions).\n\n\nremove.packages\nSince ggcyto has a hard-coded dependency on ggplot2, if you have the older versions, I would recommend uninstaling both first, using the remove.packages() function.\n\nremove.packages(\"ggplot2\")\nremove.packages(\"ggcyto\")\n\nOnce this is done, I recommend exiting and then reopening Positron. This will ensure all currently-loaded R packages are unattached from the environment. However, you will loose all your environmental variables, so will need to reload them to get back to this point. If you are working with code chunks inside a Quarto Markdown File (.qmd), you can quickly accomplish this by scrolling down to the point of the document where you left off, and selecting the “Run Above” option showin on the code chunk.\n\n\n\nInstalling correct versions\nTo reinstall ggplot2, you just need to install again from CRAN (as with it’s rolling-release model any changes the developers make become immediately available to everyone)\n\ninstall.packages(\"ggplot2\")\n\nIf you need to reinstall ggcyto, because of Bioconductor’s twice yearly release cycle, you will need to install the “developmental” version to take advantage of the fixes. Since this is for a one-off package, the easiest installation approach if to go via the GitHub using the remotes package’s install_github()\n\nremotes::install_github(\"RGLab/ggcyto\")", + "objectID": "course/04_IntroToTidyverse/index.html#mutate", + "href": "course/04_IntroToTidyverse/index.html#mutate", + "title": "04 - Introduction to Tidyverse", + "section": "mutate", + "text": "mutate\nAs we can see, with just these handful of functions, we have the building blocks to rearrange and subset a larger data.frame into a format that we prefer. But what if we wanted to alter the content of a column, or add new columns to an existing data.frame? This is where the mutate() function can be used.\nLet’s start by slimming down our current Data to a smaller workable example, highlighting the functions and pipes we learned about today\n\nTidyData <- Data |> filter(Condition %in% \"Ctrl\") |> filter(timepoint %in% \"0\") |>\n select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |>\n rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen)\n\n\nTidyData\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n\n\nThe mutate() function can be used to modify existing columns, as well as to create new ones. For example, let’s derrive the proportion of T cells from the overall CD45 gate. To do so, within the parenthesis, we would specify a new column name, and then divide the original columns:\n\nTidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count)\nTidyData\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n Tcells_ProportionCD45\n1 0.18003765\n2 0.14480820\n3 0.31015921\n4 0.18540010\n5 0.23110302\n6 0.07796568\n7 0.10221747\n8 0.12578030\n9 0.08839285\n10 0.23815220\n11 0.47942008\n12 0.27147570\n13 0.26442564\n14 0.22484948\n15 0.38022498\n16 0.21845195\n17 0.22564783\n18 0.11678076\n19 0.30514067\n20 0.15261613\n21 0.04313730\n22 0.14301785\n23 0.17238666\n\n\nWe can see that we have many significant digits being returned. Let’s round this new column to 2 significant digits by applying the round() function\n\nTidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2))\nTidyData \n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n Tcells_ProportionCD45 TcellsRounded\n1 0.18003765 0.18\n2 0.14480820 0.14\n3 0.31015921 0.31\n4 0.18540010 0.19\n5 0.23110302 0.23\n6 0.07796568 0.08\n7 0.10221747 0.10\n8 0.12578030 0.13\n9 0.08839285 0.09\n10 0.23815220 0.24\n11 0.47942008 0.48\n12 0.27147570 0.27\n13 0.26442564 0.26\n14 0.22484948 0.22\n15 0.38022498 0.38\n16 0.21845195 0.22\n17 0.22564783 0.23\n18 0.11678076 0.12\n19 0.30514067 0.31\n20 0.15261613 0.15\n21 0.04313730 0.04\n22 0.14301785 0.14\n23 0.17238666 0.17", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/05_GatingSets/index.html#plotting", - "href": "course/05_GatingSets/index.html#plotting", - "title": "05 - Gating Sets", - "section": "Plotting", - "text": "Plotting\nOnce you have the current versions of both ggplot2 and ggcyto, we can proceed to attach them to your local environment via the library() function.\n\nlibrary(ggplot2)\nlibrary(ggcyto)\n\nLoading required package: ncdfFlow\n\n\nLoading required package: BH\n\n\nAs was mentioned, ggcyto follows the ggplot2 grammar of graphics syntax, which we will learn more extensively next week. For now, lets look at a simple example\n\nggcyto(gs[1], subset=\"root\", aes(x=\"FSC-A\", y=\"SSC-A\")) + geom_hex(bins=100) \n\nThe function responsible for plotting is the ggcyto() function. The first argument (“gs[1]”) is designating which .fcs file in our GatingSet we are trying to visualize.\nThe second argument (“subset”) corresponds to which gating node we want to visualize. In this case, when set to “root”, we are seeing all cells present in the .fcs file. If we however wanted to visualize the cells within the CD4+ gate, we would swap the value provided to this argument.\n\nggcyto(gs[1], subset=\"CD4+\", aes(x=\"FSC-A\", y=\"SSC-A\")) + geom_hex(bins=100) \n\nThe next argument “aes” stands for aesthetics (more on this next week). You will notice it has its own set of parenthesis, in which we designate the markers/fluorophores we want to visualize on the x and y axis.\nThe final argument (“+ geom_hex(bins=100)”) specifies we want to generate a flow cytometry style plot, with it’s bin arguments value setting the resolution.\nNow that we have walked through the arguments, let’s visualize the data\n\nggcyto(gs[1], subset=\"CD4+\", aes(x=\"FSC-A\", y=\"SSC-A\")) + geom_hex(bins=100) \n\n\n\n\n\n\n\n\nAlternatively, if we switched things around\n\nggcyto(gs[1], subset=\"CD8+\", aes(x=\"IFNg\", y=\"TNFa\")) + geom_hex(bins=100) \n\n\n\n\n\n\n\n\nBriefly, if we didn’t remember the marker, we could specify the fluorophore\n\nggcyto(gs[1], subset=\"CD8+\", aes(x=\"BV750-A\", y=\"PE-Dazzle594-A\")) + geom_hex(bins=100) \n\n\n\n\n\n\n\n\n\nggcyto(gs[6], subset=\"Tcells\", aes(x=\"CD4\", y=\"CD8\")) + geom_hex(bins=100)\n\n\n\n\n\n\n\n\nThis is all we will cover for ggcyto for now, we will circle back over the next couple weeks as we gain more familiarity with how to build our own GatingSet objects. If you want to jump ahead, please see the additional resources section and happy exploring!", + "objectID": "course/04_IntroToTidyverse/index.html#arrange", + "href": "course/04_IntroToTidyverse/index.html#arrange", + "title": "04 - Introduction to Tidyverse", + "section": "arrange", + "text": "arrange\nAnd while we are here, let’s rearrange the rows so that they are descending based on the Tcell proportion. We can use this by using the desc() and arrange() functions from dplyr:\n\nTidyData <- TidyData |> arrange(desc(TcellsRounded))\n\nAnd let’s go ahead and filter() and identify the specimens that had more than 30% T cells as part of the overall CD45 gate (context, these samples were Cord Blood):\n\nTidyData |> filter(TcellsRounded > 0.3)\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0032 2025-08-05 0 Ctrl 361034 753064\n2 INF0159 2025-08-07 0 Ctrl 452551 1190219\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0166 2025-08-28 0 Ctrl 225650 739495\n Tcells_ProportionCD45 TcellsRounded\n1 0.4794201 0.48\n2 0.3802250 0.38\n3 0.3101592 0.31\n4 0.3051407 0.31\n\n\nWhich is we had wanted to just retrieve the specimen IDs, we could add pull() after a new pipe argument.\n\nTidyData |> filter(TcellsRounded > 0.3) |> pull(specimen)\n\n[1] \"INF0032\" \"INF0159\" \"INF0179\" \"INF0166\"\n\n\nAnd finally, since I may want to send the data to a supervisor, let’s go ahead and export this “tidyed” version of our data.frame out to it’s own .csv file. Working within our project folder, this would look like this:\n\nNewName <- paste0(\"MyNewDataset\", \".csv\")\nStorageLocation <- file.path(\"data\", NewName)\nStorageLocation\n\n[1] \"data/MyNewDataset.csv\"\n\n\n\nwrite.csv(TidyData, StorageLocation, row.names=FALSE)", "crumbs": [ "About", "Intro to R", - "05 - Gating Sets" + "04 - Intro to Tidyverse" ] }, { - "objectID": "course/05_GatingSets/slides.html#flowframe", - "href": "course/05_GatingSets/slides.html#flowframe", - "title": "05 - Gating Sets", - "section": "flowFrame", - "text": "flowFrame\n\n\n\n\n\n\n\n\n.\n\n\nLet’s start off by recalling the approach we first saw during Week 03, where using the flowCore package we loaded the contents of our .fcs file into R as a “flowFrame” object." + "objectID": "course/04_IntroToTidyverse/slides.html#read.csv", + "href": "course/04_IntroToTidyverse/slides.html#read.csv", + "title": "04 - Introduction to Tidyverse", + "section": "read.csv", + "text": "read.csv\n\n\n\n\n\n\n\n\n.\n\n\nWe will start by first loading in our copied over dataset (Dataset.csv) from it’s location in the project folder. If you are following the organization scheme we have been using throughout the course, your file path will look something like this:\n\n\n\n\n\n\n\n\n\n\nthefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"" }, { - "objectID": "course/05_GatingSets/slides.html#flowset", - "href": "course/05_GatingSets/slides.html#flowset", - "title": "05 - Gating Sets", - "section": "flowSet", - "text": "flowSet\n\n\n\n\n\n\n\n\n.\n\n\nConsequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.\n\n\n\n\n\n\n\nflowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,\n transformation = FALSE)\nflowSet\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A" + "objectID": "course/04_IntroToTidyverse/slides.html#data.frame", + "href": "course/04_IntroToTidyverse/slides.html#data.frame", + "title": "04 - Introduction to Tidyverse", + "section": "data.frame", + "text": "data.frame\n\n\n\n\n\n\n\n\n.\n\n\nOr alternatively using the new-to-us glimpse() function\n\n\n\n\n\n\n\nglimpse(Data)\n\nError in `glimpse()`:\n! could not find function \"glimpse\"" }, { - "objectID": "course/05_GatingSets/slides.html#memory-usage", - "href": "course/05_GatingSets/slides.html#memory-usage", - "title": "05 - Gating Sets", - "section": "Memory Usage", - "text": "Memory Usage\n\n\n\n\n\n\n\n\n.\n\n\nBoth “flowFrame” and “flowSet” objects were implemented in the flowCore package, which is the oldest extant flow cytometry R package on Bioconductor. Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as “flowFrame” and “flowSet” objects.\n\n\n\n\n\n\n\n\n\n\n\n\n\n.\n\n\nOne consideration of this method is the contents of your .fcs files are read into your computer’s random access memory (RAM). While for individual .fcs files or small experiments this will not present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM." + "objectID": "course/04_IntroToTidyverse/slides.html#column-value-type", + "href": "course/04_IntroToTidyverse/slides.html#column-value-type", + "title": "04 - Introduction to Tidyverse", + "section": "Column value type", + "text": "Column value type\n\n\n\n\n\n\n\n\n.\n\n\nAs we saw last week, functions often need values that match a certain type (the paintbrush needing paint analogy). As we inspect the columns of Data, we can notice some of the columns contain values within that are character (ie. “char”) values. Others appear to contain numeric values (which are subtyped as either double (“ie. dbl”) or integer (ie. “int”)). At first glance, we do not appear to have any logical (ie. TRUE or FALSE) columns in this dataset." }, { - "objectID": "course/05_GatingSets/slides.html#cytoframe", - "href": "course/05_GatingSets/slides.html#cytoframe", - "title": "05 - Gating Sets", - "section": "cytoframe", - "text": "cytoframe\n\n\n\n\n\n\n\n\n.\n\n\nIn addition to the flowCore R package, additional flow cytometry infrastructure support is provided by the flowWorkspace package. Instead of the reading all the .fcs files contents into active RAM, flowWorkspace reduces the memory overhead by using “pointers” to interact with the object in it’s current storage location (either on your harddrive, SSD, etc.), only reading in components to RAM as needed.\n\n\n\n\n\n\n\n# BiocManager::install(\"flowWorkspace\") #Bioconductor\nlibrary(flowWorkspace)" + "objectID": "course/04_IntroToTidyverse/slides.html#select-columns", + "href": "course/04_IntroToTidyverse/slides.html#select-columns", + "title": "04 - Introduction to Tidyverse", + "section": "select (Columns)", + "text": "select (Columns)\n\n\n\n\n\n\n\n\n.\n\n\nNow that we have read in our data, and have a general picture of the structure and contents, lets start learning the main dplyr functions we will be using throughout the course. To do this, lets go ahead and attach dplyr to our local environment via the library() call.\n\n\n\n\n\n\n\nlibrary(dplyr)" }, { - "objectID": "course/05_GatingSets/slides.html#cytoset", - "href": "course/05_GatingSets/slides.html#cytoset", - "title": "05 - Gating Sets", - "section": "cytoset", - "text": "cytoset\n\n\n\n\n\n\n\n\n.\n\n\nAs well as “cytoset” to handle multiple .fcs files.\n\n\n\n\n\n\n\ncytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\ncytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\n\n\nclass(cytoset)\n\n[1] \"cytoset\"\nattr(,\"package\")\n[1] \"flowWorkspace\"" + "objectID": "course/04_IntroToTidyverse/slides.html#relocate", + "href": "course/04_IntroToTidyverse/slides.html#relocate", + "title": "04 - Introduction to Tidyverse", + "section": "relocate", + "text": "relocate\n\n\n\n\n\n\n\n\n.\n\n\nAlternatively, we occasionally want to move one column. While we could respecify the location using select(), specifying the names of all the other columns out in a line of code to just to rearrange one does not sound like a good use of time. For this reason, the second dplyr function we will be learning is the relocate() function." }, { - "objectID": "course/05_GatingSets/slides.html#interconverting", - "href": "course/05_GatingSets/slides.html#interconverting", - "title": "05 - Gating Sets", - "section": "Interconverting", - "text": "Interconverting\n\n\n\n\n\n\n\n\n.\n\n\nDespite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed." + "objectID": "course/04_IntroToTidyverse/slides.html#rename", + "href": "course/04_IntroToTidyverse/slides.html#rename", + "title": "04 - Introduction to Tidyverse", + "section": "rename", + "text": "rename\n\n\n\n\n\n\n\n\n.\n\n\nAt this point, we are able to both move and select particular columns, allowing us to rearrange and subset a larger data.frame object however we want it to appear. However, as we encountered, some of the names contain special characters and spaces, requiring use of tick marks (``) to avoid issues. How can we change a column name?" }, { - "objectID": "course/05_GatingSets/slides.html#gating-sets", - "href": "course/05_GatingSets/slides.html#gating-sets", - "title": "05 - Gating Sets", - "section": "Gating Sets", - "text": "Gating Sets\n\n\n\n\n\n\n\n\n.\n\n\nFortunately, regardless of whether we are using flowFrame/flowSet (RAM) and cytoframe/cytoset (memory pointers), both routes end up converging at the next step, where the underlying .fcs files are passed off to the GatingSet() function.\n\n\n\n\n\n\n\nGatingSet1 <- GatingSet(flowSet)\nGatingSet1 \n\nA GatingSet with 6 samples\n\n\n\n\n\nclass(GatingSet1)\n\n[1] \"GatingSet\"\nattr(,\"package\")\n[1] \"flowWorkspace\"" + "objectID": "course/04_IntroToTidyverse/slides.html#pull", + "href": "course/04_IntroToTidyverse/slides.html#pull", + "title": "04 - Introduction to Tidyverse", + "section": "pull", + "text": "pull\n\n\n\n\n\n\n\n\n.\n\n\nSometimes, we may want to retrieve individual values present in a column, to use within either a vector or a list. We can do this using the pull() function, which will retrieve the column contents and strip the column formatting\n\n\n\n\n\n\n\nData |> pull(Date) |> head(10)\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"" }, { - "objectID": "course/05_GatingSets/slides.html#cytoml", - "href": "course/05_GatingSets/slides.html#cytoml", - "title": "05 - Gating Sets", - "section": "CytoML", - "text": "CytoML\n\n\n\n\n\n\n\n\n.\n\n\nThe CytoML R package (also maintained by Mike Jiang) is a sister package to the flowWorkspace. It’s main purpose is to permit bringing in existing FlowJo, Diva and Cytobank Workspaces, with all their gates, transformations, etc. into R as fully assembled GatingSet objects. For those who already use one of these commercial softwares, it can be quite useful tool.\n\n\n\n\n\n\n\n\n\n\n\n\n\n.\n\n\nSince our goal is to examine a fully assembled GatingSet object, we will be using it today to bring in a FlowJo workspace to R. However, since this is a free Cytometry in R course, and not about to have everyone pay for a license for a one-off topic, in the pre-course Floreada walkthrough I documented how to convert a free Floreada.io workspae into a FlowJo.wsp that can also be used (please note that as of early 2026, some scaling bugs may be present and require troubleshooting)." + "objectID": "course/04_IntroToTidyverse/slides.html#filter-rows", + "href": "course/04_IntroToTidyverse/slides.html#filter-rows", + "title": "04 - Introduction to Tidyverse", + "section": "filter (Rows)", + "text": "filter (Rows)\n\n\n\n\n\n\n\n\n.\n\n\nSo far, we have been working with dplyr functions primarily used when working with and subsetting columns (including select(), pull(), rename() and relocate()). What if we wanted to work with rows of a data.frame? This is where the filter() function is used." }, { - "objectID": "course/05_GatingSets/slides.html#system-time", - "href": "course/05_GatingSets/slides.html#system-time", - "title": "05 - Gating Sets", - "section": "System Time", - "text": "System Time\n\n\n\n\n\n\n\n\n.\n\n\nEspecially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so." + "objectID": "course/04_IntroToTidyverse/slides.html#mutate", + "href": "course/04_IntroToTidyverse/slides.html#mutate", + "title": "04 - Introduction to Tidyverse", + "section": "mutate", + "text": "mutate\n\n\n\n\n\n\n\n\n.\n\n\nAs we can see, with just these handful of functions, we have the building blocks to rearrange and subset a larger data.frame into a format that we prefer. But what if we wanted to alter the content of a column, or add new columns to an existing data.frame? This is where the mutate() function can be used." }, { - "objectID": "course/05_GatingSets/slides.html#gates", - "href": "course/05_GatingSets/slides.html#gates", - "title": "05 - Gating Sets", - "section": "Gates", - "text": "Gates\n\n\n\n\n\n\n\n\n.\n\n\nNow that we have loaded the contents of the FlowJo/Floreada workspace, we can start exploring the various infrastructural capabilities of a GatingSet object." + "objectID": "course/04_IntroToTidyverse/slides.html#arrange", + "href": "course/04_IntroToTidyverse/slides.html#arrange", + "title": "04 - Introduction to Tidyverse", + "section": "arrange", + "text": "arrange\n\n\n\n\n\n\n\n\n.\n\n\nAnd while we are here, let’s rearrange the rows so that they are descending based on the Tcell proportion. We can use this by using the desc() and arrange() functions from dplyr:\n\n\n\n\n\n\n\nTidyData <- TidyData |> arrange(desc(TcellsRounded))" }, { - "objectID": "course/05_GatingSets/slides.html#counts", - "href": "course/05_GatingSets/slides.html#counts", - "title": "05 - Gating Sets", - "section": "Counts", - "text": "Counts\n\n\n\n\n\n\n\n\n.\n\n\nIf we wanted to retrieve counts of cells found within the individual gates, we could do so with gs_pop_get_count_fast()\n\n\n\n\n\n\n\nData <- gs_pop_get_count_fast(gs)\nhead(Data, 5)\n\n name Population\n <char> <char>\n1: 00_Ctrl.fcs_INF052 /Scatter\n2: 00_Ctrl.fcs_INF052 /Scatter/Singlets\n3: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live\n4: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live/Tcells\n5: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live/Tcells/CD4+\n Parent Count ParentCount\n <char> <int> <int>\n1: root 10000 10000\n2: /Scatter 9986 10000\n3: /Scatter/Singlets 9708 9986\n4: /Scatter/Singlets/Live 9708 9708\n5: /Scatter/Singlets/Live/Tcells 6151 9708" + "objectID": "course/03_InsideFCSFile/slides.html#getting-set-up", + "href": "course/03_InsideFCSFile/slides.html#getting-set-up", + "title": "03 - Inside an FCS File", + "section": "Getting Set Up", + "text": "Getting Set Up" }, { - "objectID": "course/05_GatingSets/slides.html#metadata", - "href": "course/05_GatingSets/slides.html#metadata", - "title": "05 - Gating Sets", - "section": "Metadata", - "text": "Metadata\n\n\n\n\n\n\n\n\n.\n\n\nSince GatingSets contain multiple .fcs files, we may want to be able to subset them based on metadata for a particular variable. We can check to see current metadata using the pData() function.\n\n\n\n\n\n\n\npData(gs)\n\n name\n00_Ctrl.fcs_INF052 00_Ctrl.fcs\n00_Ctrl.fcs_INF100 00_Ctrl.fcs\n00_Ctrl.fcs_INF179 00_Ctrl.fcs\n00_SEB.fcs_INF052 00_SEB.fcs\n00_SEB.fcs_INF100 00_SEB.fcs\n00_SEB.fcs_INF179 00_SEB.fcs" + "objectID": "course/03_InsideFCSFile/slides.html#flowcore", + "href": "course/03_InsideFCSFile/slides.html#flowcore", + "title": "03 - Inside an FCS File", + "section": "flowCore", + "text": "flowCore\n\n\n\n\n\n\n\n\n.\n\n\nWe will be using the flowCore package, which is the oldest and most-frequently downloaded flow cytometry package on Bioconductor." }, { - "objectID": "course/05_GatingSets/slides.html#ggcyto", - "href": "course/05_GatingSets/slides.html#ggcyto", - "title": "05 - Gating Sets", - "section": "ggcyto", - "text": "ggcyto\n\n\n\n\n\n\n\n\n.\n\n\nAs you can surmise, a lot of the infrastructural style handling done by commercial softwares is being orchestrated/mediated through our GatingSet object. Since it’s able to create and retain gating information, how would we go about visualizing the underlying data contained within each?" + "objectID": "course/03_InsideFCSFile/slides.html#flowframe", + "href": "course/03_InsideFCSFile/slides.html#flowframe", + "title": "03 - Inside an FCS File", + "section": "flowFrame", + "text": "flowFrame\n\n\n\n\n\n\n\n\n.\n\n\nFor read.FCS(), it accepts several arguments. The argument “filename” is where we provide our file.path to .fcs file that we wish to load into R. Let’s go ahead and do so\n\n\n\n\n\n\n\nread.FCS(filename=firstfile)" }, { - "objectID": "course/05_GatingSets/slides.html#plotting", - "href": "course/05_GatingSets/slides.html#plotting", - "title": "05 - Gating Sets", - "section": "Plotting", - "text": "Plotting\n\n\n\n\n\n\n\n\n.\n\n\nOnce you have the current versions of both ggplot2 and ggcyto, we can proceed to attach them to your local environment via the library() function.\n\n\n\n\n\n\n\nlibrary(ggplot2)\nlibrary(ggcyto)" + "objectID": "course/03_InsideFCSFile/slides.html#early-metadata", + "href": "course/03_InsideFCSFile/slides.html#early-metadata", + "title": "03 - Inside an FCS File", + "section": "Early Metadata", + "text": "Early Metadata\n\n\n\n\n\n\n\n\n.\n\n\nWithin the initial portion, we are getting back metadata keywords related to where and how the particular file was acquired. Keywords of potential interest include:\n\n\n\n\n\n\n\n\n\n\n\n\n\nStart Time\n\n\nWhat time was the .fcs file acquired\n\n\n\n\n\n\n\nDescriptionList$`$BTIM`\n\n[1] \"13:55:29.85\"" }, { - "objectID": "course/04_IntroToTidyverse/BonusContent.html", - "href": "course/04_IntroToTidyverse/BonusContent.html", - "title": "Bonus Content", - "section": "", - "text": "thefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"\nData <- read.csv(file=thefilepath, check.names=FALSE)\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\"" + "objectID": "course/03_InsideFCSFile/slides.html#detector-values", + "href": "course/03_InsideFCSFile/slides.html#detector-values", + "title": "03 - Inside an FCS File", + "section": "Detector Values", + "text": "Detector Values\n\n\n\n\n\n\n\n\n.\n\n\nThe next major stretch of keywords encode parameter values associated with the individual detectors for at the time of acquisition.\n\n\n\n\n\n\n\nDetectors <- DescriptionList[20:384]\nDetectors\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"" }, { - "objectID": "course/04_IntroToTidyverse/BonusContent.html#pull", - "href": "course/04_IntroToTidyverse/BonusContent.html#pull", - "title": "Bonus Content", - "section": "Pull", - "text": "Pull" + "objectID": "course/03_InsideFCSFile/slides.html#middle-metadata", + "href": "course/03_InsideFCSFile/slides.html#middle-metadata", + "title": "03 - Inside an FCS File", + "section": "Middle Metadata", + "text": "Middle Metadata\n\n\n\n\n\n\n\n\n.\n\n\nOnce we are out of the detector keywords, we find the last of the $Metadata associated keywords.\n\n\n\n\n\n\n\nDetectors <- DescriptionList[385:398]\nDetectors\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"" }, { - "objectID": "course/04_IntroToTidyverse/BonusContent.html#case-when", - "href": "course/04_IntroToTidyverse/BonusContent.html#case-when", - "title": "Bonus Content", - "section": "Case-When", - "text": "Case-When\nCase-when is an useful function, but may be a bit much to try to teach in the main segment. Basically, when the condition on the left side of the ~ is fulfilled, it will execute what is being specified on the right hand side.\nIn turn, we can combine these together by adding a “,”. I tend to use this mutate str_detect case_when combination when encountering messy data out in the while where I need to selectively change particular cell values in a consistent reproducible manner" + "objectID": "course/03_InsideFCSFile/slides.html#laser-metadata", + "href": "course/03_InsideFCSFile/slides.html#laser-metadata", + "title": "03 - Inside an FCS File", + "section": "Laser Metadata", + "text": "Laser Metadata\n\n\n\n\n\n\n\n\n.\n\n\nNext up, there is a small stretch of keywords containing the values associated with the individual lasers as far as delays and area scaling factors for a particular day (also useful when plotted).\n\n\n\n\n\n\n\nDetectors <- DescriptionList[399:410]\nDetectors\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"" }, { - "objectID": "course/04_IntroToTidyverse/BonusContent.html#selecting-columns-base-r", - "href": "course/04_IntroToTidyverse/BonusContent.html#selecting-columns-base-r", - "title": "Bonus Content", - "section": "Selecting Columns (Base R)", - "text": "Selecting Columns (Base R)\nAs we saw last week, there are multiple ways to select values from particular columns in base R. If we had wanted to retrieve the “Date” column, why not first identify its index position, and use [,] to extract the underlying data?\n\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\n\ncolnames(Data)[4]\n\n[1] \"Date\"\n\n\n\nDataColumn <- Data[,4] # Column specified after the ,\nDataColumn\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [11] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [16] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [21] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [26] \"2025-07-26\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [31] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [36] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [41] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [46] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-31\" \"2025-07-31\"\n [51] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [56] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [61] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [66] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [71] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [76] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [81] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [86] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [91] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [96] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-07\" \"2025-08-07\"\n[101] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[106] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[111] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[116] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[121] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-22\"\n[126] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[131] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[136] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[141] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[146] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[151] \"2025-08-22\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[156] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[161] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[166] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[171] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[176] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-30\" \"2025-08-30\"\n[181] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[186] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[191] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[196] \"2025-08-30\"\n\n\nHowever, looking at the output, we see this looks like the values, not a column. Our suspicions are confirmed when running DataColumn\n\nstr(DataColumn)\n\n chr [1:196] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n\n\nThis is similarly the case when we use the $ accessor.\n\nDataColumn <- Data$Date\nstr(DataColumn)\n\n chr [1:196] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n\n\n\nhead(DataColumn, 3)\n\n[1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nBy contrast, when selecting two columns, the structure is maintained.\n\nTwoColumns <- Data[,4:5]\n\nWhy is the data.frame column structure lost in base R when isolating a single data.frame column? And who thought to make it that convoluted? If we were an R course in early 2010s, we might go into an explanation, but fortunately, we don’t need to understand why, we have the dplyr R package to rescue us." + "objectID": "course/03_InsideFCSFile/slides.html#display", + "href": "course/03_InsideFCSFile/slides.html#display", + "title": "03 - Inside an FCS File", + "section": "Display", + "text": "Display\n\n\n\n\n\n\n\n\n.\n\n\nThen there is a stretch matching whether a particular detector needs to be displayed as linear (in the case of time and scatter) or as log (for individual detectors).\n\n\n\n\n\n\n\nDetectors <- DescriptionList[412:472]\nDetectors\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"" }, { - "objectID": "course/03_InsideFCSFile/index.html", - "href": "course/03_InsideFCSFile/index.html", + "objectID": "course/03_InsideFCSFile/slides.html#flowcore-parameters", + "href": "course/03_InsideFCSFile/slides.html#flowcore-parameters", "title": "03 - Inside an FCS File", + "section": "flowCore Parameters", + "text": "flowCore Parameters\n\n\n\n\n\n\n\n\n.\n\n\nDepending on the arguments selected during read.FCS(), we might also encounter additional keywords that are added in by flowCore. For example, we do not see these keywords when “transformation” is set to FALSE.\n\n\n\n\n\n\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = FALSE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot" + }, + { + "objectID": "course/02_FilePaths/Downsampler.html", + "href": "course/02_FilePaths/Downsampler.html", + "title": "Downsampling", "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Intro to R", - "03 - Inside a .FCS file" - ] + "text": "Due to trying to keep the overall file size down, I am downsampling to 100 events. For anyone interested in how I did this, this Quarto Markdown Document contains the code needed to repeat the process." }, { - "objectID": "course/03_InsideFCSFile/index.html#getting-set-up", - "href": "course/03_InsideFCSFile/index.html#getting-set-up", - "title": "03 - Inside an FCS File", - "section": "Getting Set Up", - "text": "Getting Set Up\n\n\nSet up File Paths\nHaving copied over the new data to your working project folder (Week 3 or whatever your chosen name), let’s identify the file paths between our working directory and the fcs files. If you retained the same project organization structure we had during Week #2, it may look similar to the following:\n\nPathToDataFolder <- file.path(\"data\")\n\n\nPathToDataFolder\n\n[1] \"data\"\n\n\n\n\n\n\nLocate .fcs files\nWe will now locate our .fcs files. As we saw last week, our computer will need the full file.paths to these individual files, so we will set the list.files() “full.names” argument to TRUE.\n\nfcs_files <- list.files(PathToDataFolder, pattern=\".fcs\", full.names=TRUE)\nfcs_files\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n\nBy contrast, if the “full.names” argument was set to FALSE, we would have retrieved just the file names\n\nlist.files(PathToDataFolder, pattern=\".fcs\", full.names=FALSE)\n\n[1] \"CellCounts4L_AB_05_ND050_05.fcs\"\n\n\nThis would have been the equivalent of running the basename function on the “full.names=TRUE” output.\n\nbasename(fcs_files)\n\n[1] \"CellCounts4L_AB_05_ND050_05.fcs\"", - "crumbs": [ - "About", - "Intro to R", - "03 - Inside a .FCS file" - ] + "objectID": "course/02_FilePaths/Downsampler.html#specify-file.path-and-identify-files", + "href": "course/02_FilePaths/Downsampler.html#specify-file.path-and-identify-files", + "title": "Downsampling", + "section": "Specify file.path and identify files", + "text": "Specify file.path and identify files\nDue to the counts being conducter on two separate instruments, the number of columns differs, so they will need to be loaded into separate GatingSet objects.\n\nStorageLocation <- file.path(\"course\", \"02_FilePaths\", \"data\")\nExisting <- list.files(StorageLocation, pattern=\".fcs\", full.names=TRUE)\nList1 <- Existing[1:2] # 3L Aurora\nList2 <- Existing[3:8] # 4L Aurora" }, { - "objectID": "course/03_InsideFCSFile/index.html#flowcore", - "href": "course/03_InsideFCSFile/index.html#flowcore", - "title": "03 - Inside an FCS File", - "section": "flowCore", - "text": "flowCore\nWe will be using the flowCore package, which is the oldest and most-frequently downloaded flow cytometry package on Bioconductor.\n\n\nCode\n# I have attached this code for anyone that is interested in seeing how these plots were made. The content is not part of today's lesson, so if you are just starting off, we will cover the details of data-tidying and creating ggplot objects over the next several weeks. Best, David\n\n# Load required packages via a library call\n\nlibrary(dplyr) # CRAN\nlibrary(stringr) # CRAN\nlibrary(ggplot2) # CRAN\n#library(plotly) # Using the :: to access \n\n# Loading in the dataset contained within the .csv file\nBioconductorFlow_path <- file.path(PathToDataFolder, \"BioconductorFlow.csv\")\nBioconductorFlowPackages <- read.csv(BioconductorFlow_path, check.names=FALSE)\nBioconductorFlowPackages <- BioconductorFlowPackages |>\n arrange(desc(since)) |> mutate(package = factor(package, levels = package))\n\n# Newer Base R Pipe : |> \n# Older mostly equivalent Magrittr Pipe %>% \n\n\n\n\nCode\n# Notice the code-chunk eval arguments above dictate the shape of the final rendered plot. \n\n# Taking the imported dataset and passing it to ggplot2 to create the first plot. \n\nplot <- ggplot(BioconductorFlowPackages,\n aes(x = 0, xend = since, y = package, yend = package)) +\n geom_segment(linewidth = 2, color = \"steelblue\") +\n scale_x_continuous(trans = \"reverse\", \n breaks = seq(0, max(BioconductorFlowPackages$since), by = 5)) +\n labs(\n x = \"Years in Bioconductor\",\n y = NULL,\n title = \"Bioconductor Flow Cytometry R packages\"\n ) +\n theme_bw()\n\n# Taking the static plot and making it interactive using the plotly package\n\nplotly::ggplotly(plot)\n\n\n\n\n\n\n\n\nCode\n# Retrieving the names of Bioconductor flow cytometry R packages in correct release order. \n\nHistoricalOrder <- BioconductorFlowPackages |> pull(package)\n\n# Bringing in 2025 package usage dataset from a .csv file\nBioconductorUsage_path <- file.path(PathToDataFolder, \"BioconductorDownloads.csv\")\nBioconductorUsage <- read.csv(BioconductorUsage_path, check.names=FALSE)\nBioconductorUsage <- BioconductorUsage |> dplyr::filter(Month %in% \"all\")\n\n# Note, dplyr::filter is used due to flowCore also having a filter function, which causes conflicts once it is attached to the local environment. \n\n# Combining both data.frames for use in the plot\n\nDataset <- left_join(BioconductorFlowPackages, BioconductorUsage, by=\"package\")\n\n# Rearranging the order in which packages are displayed\n\nDataset$package <- factor(Dataset$package, levels=HistoricalOrder)\n\n\n\n\nCode\n# Generating the 2nd plot with ggplot2\n\nplot <- ggplot(Dataset, aes(x = since, y = Nb_of_distinct_IPs)) +\n geom_point(aes(color = package), size = 3, alpha = 0.7) + \n labs(\n x = \"Years in Bioconductor\",\n y = \"Number of Yearly Downloads\",\n title = \"\",\n color = \"Package\"\n ) +\n theme_bw()\n\n# Making it interactive with plotly\n\nplotly::ggplotly(plot)\n\n\n\n\n\n\nflowCore is also one of the many Bioconductor packages maintained by Mike Jiang. In many ways (as those who completed the optional take-home problems for Week #1 know) reminiscent of this xkcd comic:\n\nAs with all our R packages, we first need to make sure flowCore is attached to our local environment via the library call.\n\nlibrary(flowCore)\n\nThe function we will be using today is the read.FCS() function. Do you remember how to access the help documentation?\n\n\nCode\n# Or when in Positron, hovering over the highlighted function name within the code-chunk\n\n?flowCore::read.FCS\n\n\nTo start, lets select just the first .fcs file. We will do this by indexing the first item within fcs_files via the square brackets [].\n\nfirstfile <- fcs_files[1]\nfirstfile\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"", + "objectID": "course/02_FilePaths/Downsampler.html#load-.fcs-files-into-a-gatingset", + "href": "course/02_FilePaths/Downsampler.html#load-.fcs-files-into-a-gatingset", + "title": "Downsampling", + "section": "Load .fcs files into a GatingSet", + "text": "Load .fcs files into a GatingSet\nLoad in files to their respective GatingSet objects\n\ncs1 <- load_cytoset_from_fcs(List1, truncate_max_range = FALSE, transformation = FALSE)\ngs1 <- GatingSet(cs1)\n\ncs2 <- load_cytoset_from_fcs(List2, truncate_max_range = FALSE, transformation = FALSE)\ngs2 <- GatingSet(cs2)" + }, + { + "objectID": "course/01_InstallingRPackages/index.html", + "href": "course/01_InstallingRPackages/index.html", + "title": "01 - Installing R Packages", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nWelcome to the first week of Cytometry in R! This week we will be diving into how R packages work, and the how to go about installing them.\nBefore getting started, please make sure you have completed the creating a GitHub and Workstation Setup walk-throughs, since we will begin where they left off once the required software was successfully installed.", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "01 - Installing R Packages" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#flowframe", - "href": "course/03_InsideFCSFile/index.html#flowframe", - "title": "03 - Inside an FCS File", - "section": "flowFrame", - "text": "flowFrame\nFor read.FCS(), it accepts several arguments. The argument “filename” is where we provide our file.path to .fcs file that we wish to load into R. Let’s go ahead and do so\n\nread.FCS(filename=firstfile)\n\nPlease note, if you are doing this with your own .fcs files, you will need to provide two additional arguments, “transformation” = FALSE, and “truncate_max_range” = FALSE for the files to be read in correctly. We will revisit the reasons why in Week #5.\n\nread.FCS(filename=firstfile, transformation = FALSE, truncate_max_range = FALSE)\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot\n\n\nIn this case, we can see the .fcs file has been read into R as a “flowFrame” object. We can also see the file name, as well as details about the number of cells, and number of columns (whether detectors (for raw spectral flow data) or fluorophores (for unmixed spectral flow data)).\n\nDirectly below we see what resembles a table. At first glance, the only column with an immediately discernable purpose is the one with the name column, which is listing the detectors present on a Cytek Aurora.\n\nAnd finally, at the bottom we reach a line that tells us that for this .fcs files, 599 keyword can be found in a description slot.\n\n\n\nSo let’s get our bearings, we have loaded in an .fcs file to R, but let’s use some of the concepts we covered last week to try to understand a bit about what type or class of object we are working with. From the output, we saw the words flowFrame object, so let’s read it back in again, but assign it to an variable/object called flowFrame so that we can use the type-discerning functions we worked with last week on.\n\nflowFrame <- read.FCS(filename=firstfile, transformation = FALSE, truncate_max_range = FALSE)\n\nAs we create this variable, if we have the session tab selected on our right secondary side bar, we see it appear:\n\nIf we were to use the type-determining functions we learned last week\n\nclass(flowFrame)\n\n[1] \"flowFrame\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nflowFrames are a class of object with a structure defined within the flowCore package. They are used to work with the data contained within individual .fcs files. Looking again at the right secondary side bar, we can see that it shows up as a ““S4 class flowFrame package flowCore”“” with 3 slots, with the words flowFrame adjacent to it.\nA perfectly valid first reaction to first reading this is “well how should I know what any of this means?”. Powering through this initial discomfort, let’s go ahead and click on the dropdown arrow next to the variables name and see if we get any additional clarity on the issue.\n\nWhen we do so, three additional drop-downs appear. Based on the previous line that mentioned 3 slots, we could infer that each line corresponds to one of those slots.\nWhat we are encountering with flowFrame is our first example of an S4 object type. These more-complicated object types are quite common for the various Bioconductor affilitated R packages.\nThese objects will usually appear with either S4 or S3 in their metadata, and are made up of various simpler object types that are cobbled together within the larger object, usually occupying individual slots.\nWhat advantage this bundling provides will be something we revisit throughout the course as you encounter more of these S4/S3 objects.\n\n\n\nexprs\nThe first slot within the flowFrame object shows up with the name “exprs”. For the exprs object, glancing at it’s middle column, we can based on the 100 rows and 61 columns, that it is likely a matrix-style object. We might also recall we saw similar numbers in the printed output when we ran read.FCS()earlier.\n\nWhich likely means that “exprs” slot is where the MFI data for the individual acquired cells within our .fcs file is being stored. Within Positron, for a matrix object, we can click on the little grid symbol on the far right to open up the table within editor.\n\nIf we utilize the scroll bars, we can see that the individual detectors (in the case of uploading a raw spectral fcs file, they would appear as fluorophores for unmixed spectral or conventional fcs files) occupy the individual columns, which are named. The rows are not named, but number 100, matching the number of cells present in the .fcs file. Additionally, on the far left there is a little summary table about the overall data.\n\nLet’s go ahead and assign this matrix to a new variable/object so that we can explore it later. Since flowFrame is an S4 object, it’s slots can be individually accessed by adding the @ symbol and the respective slot name.\n\nMFI_Matrix <- flowFrame@exprs\n\nAlternatively, we can use the Bioconductor helper function exprs() to get data held in that slot\n\nMFI_Matrix_Alternate <- exprs(flowFrame)\n\nIn the case of the above, this displayed text output to the console would be unwiedly to display all at once. If we wanted to only see the first five rows, we could use the head() function, and provide a value of 5.\n\nhead(MFI_Matrix, 5)\n\n Time UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A\n[1,] 38823 37.79983 -184.479996 353.87714 1106.22998 1145.18140 2130.21899\n[2,] 39780 234.23021 -98.456429 26.43876 70.65833 -89.93541 -29.14263\n[3,] 267292 -117.96355 40.732426 473.94574 1177.86975 1516.70935 1985.46130\n[4,] 128101 289.87671 -2.723389 -54.11960 -163.71489 32.62989 -134.90411\n[5,] 255221 -104.50541 -71.163338 567.57562 610.23627 1416.61328 2868.16040\n UV7-A UV8-A UV9-A UV10-A UV11-A UV12-A UV13-A\n[1,] 4376.34277 3246.7952 32050.65039 8123.2637 1992.5785 1070.3323 956.43573\n[2,] -26.34649 -162.6675 17.98848 271.9152 154.8575 163.5411 -32.81524\n[3,] 3658.87671 4140.1724 59792.16406 14013.7969 3427.4324 1668.7588 1071.14636\n[4,] 739.71960 402.9025 427.37534 315.6364 -223.0423 145.7121 127.03777\n[5,] 4034.58789 3234.6626 40126.46484 10325.0371 1974.0907 1033.8450 -21.57245\n UV14-A UV15-A UV16-A SSC-H SSC-A V1-A V2-A\n[1,] 290.8685 385.49921 670.97687 657613 750760.12 1171.1390 154.5628\n[2,] -104.9198 103.41382 71.41528 83481 81552.85 266.2424 705.2527\n[3,] 730.1430 214.93053 252.75406 890845 1183519.00 1196.0931 1183.1105\n[4,] -207.8978 -55.37944 -45.10131 75103 72457.33 227.9926 556.9189\n[5,] 273.6271 960.16290 341.20633 415791 501690.97 717.2498 929.9780\n V3-A V4-A V5-A V6-A V7-A V8-A\n[1,] 1346.4488525 1706.9260 1923.50940 898.2527 3162.55371 83596.5078\n[2,] 244.3218689 341.0508 381.15939 87.1600 151.68785 119.5544\n[3,] 2087.0092773 824.6352 1635.27258 1613.9069 4653.16260 176981.6094\n[4,] -0.8137281 205.4732 18.12125 179.6371 -69.50061 -132.4348\n[5,] 1358.4512939 788.6506 1208.81006 1156.7040 3118.42627 104951.2578\n V9-A V10-A V11-A V12-A V13-A V14-A\n[1,] 32506.7617 27161.5137 6236.072754 2220.303223 2023.39966 753.589355\n[2,] -79.7691 -109.1783 -73.991196 114.375542 -11.53453 124.986206\n[3,] 69236.4297 57626.8984 13175.838867 4534.874023 3434.38989 1995.172363\n[4,] 129.2739 231.8918 -5.473321 8.792875 -24.62049 -8.212234\n[5,] 42090.0781 34104.3164 7620.552734 3103.544189 2426.43359 650.836304\n V15-A V16-A FSC-H FSC-A SSC-B-H SSC-B-A B1-A\n[1,] 510.9540 228.34962 1055905 1217097.50 716733 815959.06 606.6683\n[2,] -207.3494 -28.96272 79696 83439.11 104575 103132.83 195.2795\n[3,] 1321.8030 615.05560 1092481 1453969.38 757351 982038.31 2010.5110\n[4,] -133.7503 -34.32619 64760 60415.23 67955 66806.13 -146.8936\n[5,] 290.2892 473.32599 1038362 1184479.00 425296 522873.12 1015.5981\n B2-A B3-A B4-A B5-A B6-A B7-A\n[1,] 416.98294 4172.4712 192400.0938 93929.9375 54236.3320 19342.6445\n[2,] 333.25662 332.1675 -230.9639 196.7810 292.8945 -187.2845\n[3,] 2150.21826 10106.9551 437801.5625 212176.1562 124294.3594 45068.3008\n[4,] -34.90987 165.7988 675.0156 136.3076 482.8665 133.0948\n[5,] 639.77527 6034.0200 244022.6094 118871.4609 68616.9688 24067.7949\n B8-A B9-A B10-A B11-A B12-A B13-A\n[1,] 10507.24219 9498.1270 4465.50928 1668.048096 2199.9475 1581.7345\n[2,] 70.90886 -334.3563 188.05545 -663.359619 -163.2331 27.9856\n[3,] 24289.59180 22500.1914 10624.99219 4684.497559 3471.7749 2727.3904\n[4,] 432.28091 246.8794 -94.44906 2.905877 106.8489 283.3633\n[5,] 14182.12793 13019.7100 5577.33984 2753.355957 1279.3009 1423.0276\n B14-A R1-A R2-A R3-A R4-A R5-A\n[1,] 1487.56860 147.1335 129.867630 35.90353 267.23999 49.79849\n[2,] 205.82298 -142.9224 66.516052 113.63218 -94.41375 98.13978\n[3,] 2371.95850 -128.3749 -105.482544 726.48547 18.87000 95.47879\n[4,] 33.24665 127.5455 122.607941 37.83584 -82.87500 -343.83768\n[5,] 1565.72742 -266.4482 -3.350622 -178.39566 -117.10875 -100.10384\n R6-A R7-A R8-A\n[1,] -732.7097 42.83144 248.56728\n[2,] 143.4497 -263.28741 -85.83299\n[3,] -194.4526 -84.08820 -301.46066\n[4,] 82.3745 60.27896 -94.38461\n[5,] -182.0066 184.36417 186.17207\n\n\nThis is much more workable, especially on a small laptop screen. We can see that there are names for each column corresponding to detector/fluorophore/metal depending on the .fcs file we are accessing. Lets retrieve these column names using the colnames() function.\n\nColumnNames <- colnames(MFI_Matrix)\nColumnNames\n\n $P1N $P2N $P3N $P4N $P5N $P6N $P7N $P8N \n \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \"UV7-A\" \n $P9N $P10N $P11N $P12N $P13N $P14N $P15N $P16N \n \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \"UV14-A\" \"UV15-A\" \n $P17N $P18N $P19N $P20N $P21N $P22N $P23N $P24N \n \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \"V3-A\" \"V4-A\" \"V5-A\" \n $P25N $P26N $P27N $P28N $P29N $P30N $P31N $P32N \n \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \n $P33N $P34N $P35N $P36N $P37N $P38N $P39N $P40N \n \"V14-A\" \"V15-A\" \"V16-A\" \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \n $P41N $P42N $P43N $P44N $P45N $P46N $P47N $P48N \n \"B2-A\" \"B3-A\" \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \n $P49N $P50N $P51N $P52N $P53N $P54N $P55N $P56N \n \"B10-A\" \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n $P57N $P58N $P59N $P60N $P61N \n \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\nSomething interesting occurred when this occurred, we can see in addition to the detector names directly above each a “$P#N” pattern appear, with # standing for increasing numbers. If we recall, we saw something similar in the first output column when we first ran read.FCS().\n\nLets break out the str() and class() functions from last week and see what we can find out about why this is occuring.\n\nstr(ColumnNames)\n\n Named chr [1:61] \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" ...\n - attr(*, \"names\")= chr [1:61] \"$P1N\" \"$P2N\" \"$P3N\" \"$P4N\" ...\n\n\nIn this case we can see that we don’t just have a vector (list) similar to what we saw with Fluorophores object last week, because instead of a chr [1:61] we get back a Named chr [1:61] designation. What we see is that in this case, each value has a corresponding index name as well. (ex. $P1N, $P2N, etc.) Let’s double check with class() function.\n\nclass(ColumnNames)\n\n[1] \"character\"\n\n\nWe can see that everything is character, but it doesn’t inform us that each index was named. This is one of the reasons it is best when trying to see what type of an object something is, to use multiple functions, to avoid missing some important details.\nIf we were trying to remove the names, being left with just the values (similar to what we saw with the vector-style list last week), we could use the unname() function:\n\nunname(ColumnNames)\n\n [1] \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \n [8] \"UV7-A\" \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \n[15] \"UV14-A\" \"UV15-A\" \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \n[22] \"V3-A\" \"V4-A\" \"V5-A\" \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \n[29] \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \"V14-A\" \"V15-A\" \"V16-A\" \n[36] \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \"B2-A\" \"B3-A\" \n[43] \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \"B10-A\" \n[50] \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n[57] \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\n\n\nLet’s return to the right sidebar to continue our exploration, by clicking on the dropdown arrow for exprs in the side-bar\n\nThe output is less user-friendly than what we saw when clicking on the little grid. If we scroll down far enough, we get down as far as [,61], which corresponds to the total number of columns.\n\nIn base R, column order can be defined by placing the corresponding column index number after a comma “,”. So for this case, the first column would be designated would be [,1] while the last column would be designated [,61].\n\nMFI_Matrix[,1]\n\n [1] 38823 39780 267292 128101 255221 79210 196643 83855 109315 26128\n [11] 114423 120001 71831 70551 197021 239994 252611 223012 152780 171822\n [21] 172611 168464 191503 253015 73885 82221 176641 128533 4117 191632\n [31] 191229 58093 141776 265894 55593 227555 233212 248578 95165 171934\n [41] 1360 251847 195764 147503 118723 1060 90033 253553 268268 74610\n [51] 23531 150119 226391 201568 179264 79944 196686 252667 117309 3903\n [61] 77690 195142 229873 254472 179943 236618 68193 87154 28541 78622\n [71] 155664 50115 40866 70753 260118 12033 96149 20740 37461 73998\n [81] 231939 192329 88649 197664 86006 142486 159539 251298 104864 164090\n [91] 102380 218968 145182 239323 261272 118979 17202 194277 229284 258723\n\n\n\nMFI_Matrix[,61]\n\n [1] 248.567276 -85.832993 -301.460663 -94.384613 186.172073 -461.407745\n [7] 843.507080 277.516113 -106.166855 281.633545 195.927261 818.865723\n [13] 734.996460 209.356476 206.442596 279.859894 518.165222 56.947498\n [19] 285.751007 857.126343 -94.384613 -213.030518 62.585236 138.409653\n [25] 118.012444 328.255768 -61.635056 185.285233 464.384979 5.637739\n [31] -66.385956 31.229273 1198.241211 185.475266 873.279419 457.607025\n [37] -73.353951 37.880539 729.168640 221.772171 -169.512238 348.272888\n [43] -338.391022 845.534119 -4.434176 620.024597 610.269409 -193.900208\n [49] 230.830566 -23.754517 607.102112 14.949510 -34.333195 -169.132172\n [55] -96.158287 220.631958 125.297165 -15.202891 -126.057304 193.393448\n [61] 90.203819 -277.706146 590.505615 911.096619 -92.230873 347.259369\n [67] 135.559113 369.430267 -62.015125 -180.597672 -146.517868 810.440796\n [73] 134.038818 -165.268097 727.711731 -88.746880 62.901962 203.275330\n [79] 436.196289 -242.676147 -40.857769 222.278946 -170.272385 525.513245\n [85] -41.491222 176.670258 201.501648 175.530045 329.839386 474.140167\n [91] -48.142490 -174.833252 46.052090 357.584656 -26.541714 191.493088\n [97] 211.320190 124.790398 -113.324883 343.268616\n\n\nWhat would happen if used a column index number that didn’t exist? Let’s check.\n\nMFI_Matrix[,350]\n\nError in `MFI_Matrix[, 350]`:\n! subscript out of bounds\n\n\nWe get back an error message telling us the subscript is out of bounds.\nSo if columns are specified by a number after the comma (ex. [,1]), how are rows specified? In R, rows would be specified by a number before the comma [1,]\n\nMFI_Matrix[1,]\n\n Time UV1-A UV2-A UV3-A UV4-A \n 38823.00000 37.79983 -184.48000 353.87714 1106.22998 \n UV5-A UV6-A UV7-A UV8-A UV9-A \n 1145.18140 2130.21899 4376.34277 3246.79517 32050.65039 \n UV10-A UV11-A UV12-A UV13-A UV14-A \n 8123.26367 1992.57849 1070.33228 956.43573 290.86853 \n UV15-A UV16-A SSC-H SSC-A V1-A \n 385.49921 670.97687 657613.00000 750760.12500 1171.13904 \n V2-A V3-A V4-A V5-A V6-A \n 154.56281 1346.44885 1706.92603 1923.50940 898.25269 \n V7-A V8-A V9-A V10-A V11-A \n 3162.55371 83596.50781 32506.76172 27161.51367 6236.07275 \n V12-A V13-A V14-A V15-A V16-A \n 2220.30322 2023.39966 753.58936 510.95404 228.34962 \n FSC-H FSC-A SSC-B-H SSC-B-A B1-A \n1055905.00000 1217097.50000 716733.00000 815959.06250 606.66833 \n B2-A B3-A B4-A B5-A B6-A \n 416.98294 4172.47119 192400.09375 93929.93750 54236.33203 \n B7-A B8-A B9-A B10-A B11-A \n 19342.64453 10507.24219 9498.12695 4465.50928 1668.04810 \n B12-A B13-A B14-A R1-A R2-A \n 2199.94751 1581.73450 1487.56860 147.13348 129.86763 \n R3-A R4-A R5-A R6-A R7-A \n 35.90353 267.23999 49.79849 -732.70966 42.83144 \n R8-A \n 248.56728 \n\n\nAnd while not the focus of today, we could retrieve individual values from a matrix by specifying both a row and a column index number. So for example, if we wanted the MFI value for the UV1-A detector for the first acquired cell (knowing that UV1-A is the 2nd column):\n\nMFI_Matrix[1,2]\n\n UV1-A \n37.79983 \n\n\nFrom our exploration, this looks to be all the information contained within the “exprs” slot, so let’s back up and check on the next slot.\n\n\n\n\nparameters\nAs we look at the next slot in the flowFrame object, we can see that parameters looks like it is going to be another more complex object, as it is showing up as an AnnotatedDataFrame object (defined by the Biobase R package, and itself contains 4 slots).\n\n\nHaving carved our way this far into the heart of an .fcs file, we are not about to call it quits now, so CHARGE my fellow cytometrist!!! Click that drop-down arrow!\n\nHaving survived our charge into the unknown, the four parameter slots appear to be “varMetadata”, “data”, “dimLabels” and “._classVersion_”.\n\n\nvarMetadata\nFortunately for us, both “varMetadata” and “data” at least appear to be table-like objects of a type known as a “data.frame”, so lets click on the grid to open in our editor window.\nIn the case of varMetadata, we seem to have retrieved a column of metadata names.\n\nThese look reminiscent of what we saw at the top of the read.FCS() column outputs previously\n\n\n\ndata\nClicking on the grid for parameters’s data slot will end opening the actual content that was displayed.\n\nLet’s try to retrieve the data contained within this slot and save it as it’s own variable/object within our R session. First, we need to open flowFrame object, then use @ to get inside its parameters slot. Since parameters is also a complex object (AnnotatedDataFrame specifically), we will need to use another @ to get inside its data slot:\n\nParameterData <- flowFrame@parameters@data\n\nhead(ParameterData, 10)\n\n name desc range minRange maxRange\n$P1 Time <NA> 272140 0.00000 272139\n$P2 UV1-A <NA> 4194304 -111.00000 4194303\n$P3 UV2-A <NA> 4194304 -111.00000 4194303\n$P4 UV3-A <NA> 4194304 -111.00000 4194303\n$P5 UV4-A <NA> 4194304 -111.00000 4194303\n$P6 UV5-A <NA> 4194304 -111.00000 4194303\n$P7 UV6-A <NA> 4194304 -111.00000 4194303\n$P8 UV7-A <NA> 4194304 -26.34649 4194303\n$P9 UV8-A <NA> 4194304 -111.00000 4194303\n$P10 UV9-A <NA> 4194304 0.00000 4194303\n\n\nAnd similarly, we could access with the Bioconductor helper function parameters(), but we would need to specify the accessor for data outside the parenthesis.\n\nParameterData_Alternate <- parameters(flowFrame)@data\n\nIf we ran the str() function, we get the following insight into ParameterData’s object type\n\nstr(ParameterData)\n\n'data.frame': 61 obs. of 5 variables:\n $ name : 'AsIs' Named chr \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" ...\n ..- attr(*, \"names\")= chr [1:61] \"$P1N\" \"$P2N\" \"$P3N\" \"$P4N\" ...\n $ desc : 'AsIs' Named chr NA NA NA NA ...\n ..- attr(*, \"names\")= chr [1:61] NA NA NA NA ...\n $ range : num 272140 4194304 4194304 4194304 4194304 ...\n $ minRange: num 0 -111 -111 -111 -111 ...\n $ maxRange: num 272139 4194303 4194303 4194303 4194303 ...\n\n\nWe can see this class of object is a “data.frame”. This is one of the more common object types in R, and we will be seeing these extensively throughout the course. We see that each of the columns appears to be designated by a $ followed by the column name, and then type of column (numeric, character, etc).\n\nIf we are trying to see these columns in R, we notice that data.frame is not like the previous S4 class objets we interacted with, as the @ symbol after doesn’t bring up any suggestions\n\nParameterData@\n\nBy contrast, adding the $ we saw when using the str() function does retrieve the underlying information\n\nParameterData$\n\n\nAs you become more familiar with R, remembering to check what kind of object you are working with, and how to access the contents will with practice become more familiar to you.\nSimilar to what we saw with a matrix, we can subset a data.frame based on the column or row index using square brackets [].\n\nParameterData[,1]\n\n $P1N $P2N $P3N $P4N $P5N $P6N $P7N $P8N \n \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \"UV7-A\" \n $P9N $P10N $P11N $P12N $P13N $P14N $P15N $P16N \n \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \"UV14-A\" \"UV15-A\" \n $P17N $P18N $P19N $P20N $P21N $P22N $P23N $P24N \n \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \"V3-A\" \"V4-A\" \"V5-A\" \n $P25N $P26N $P27N $P28N $P29N $P30N $P31N $P32N \n \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \n $P33N $P34N $P35N $P36N $P37N $P38N $P39N $P40N \n \"V14-A\" \"V15-A\" \"V16-A\" \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \n $P41N $P42N $P43N $P44N $P45N $P46N $P47N $P48N \n \"B2-A\" \"B3-A\" \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \n $P49N $P50N $P51N $P52N $P53N $P54N $P55N $P56N \n \"B10-A\" \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n $P57N $P58N $P59N $P60N $P61N \n \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\nThe individual detectors or fluorophore appear under “name”. For now, based on what we know, the $P# appears to be some sort of name being used as an internal consistent reference to the respective.\n“desc” is appearing empty for this raw spectral fcs file, but if you were to checked an unmixed file, this would be occupied the marker/ligand name assigned to it during the experiment setup.\n“range”, “minRange” and “maxRange” are beyond the scope of today, but are used by both instrument manufacturers and software vendors when setting appropiate scaling for a plot. For the actual details, see the Flow Cytometry Standard documentation.\nHaving exhausted our options under parameters “varMetadata” and “data” slots, let’s continue to the next slot.\n\n\ndimLabels\n\nIn this case, not much is returned. Yey!\n\nflowFrame@parameters@dimLabels\n\n[1] \"rowNames\" \"columnNames\"\n\n\n\n\nclassVersion\nContinuing on to the last slot “.__classVersion__”\n\nflowFrame@parameters@.__classVersion__\n\nAnnotatedDataFrame \n \"1.1.0\" \n\n\nAlso mercifully short, both of these seem to be more involved in defining the S4 class object, and don’t contain anything we need to retrieve today.\n\n\n\n\nDescription\nAt this point, we have explored both “exprs” and “parameter” slots for the flowFrame object we created. Let’s tackle the final slot, named description.\n\nWhen doing so, a very large list is opened within the Positron variables window. While we could scroll through it, it might be easier to retrieve certain number of rows via the console to make interpreting this more structured.\n\nTo retrieve the list itself, we would need to access the description slot of the flowFrame object. Since it is a slot, we will need to use the @ accessor.\n\n\nDescriptionList <- flowFrame@description\n\n\nDescriptionList \n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n$`$CYT`\n[1] \"Aurora\"\n\n$`$CYTOLIB_VERSION`\n[1] \"2.22.0\"\n\n$`$CYTSN`\n[1] \"V0333\"\n\n$`$DATATYPE`\n[1] \"F\"\n\n$`$DATE`\n[1] \"04-Aug-2025\"\n\n$`$ENDANALYSIS`\n[1] \"0\"\n\n$`$ENDDATA`\n[1] \"57711\"\n\n$`$ENDSTEXT`\n[1] \"0\"\n\n$`$ETIM`\n[1] \"13:55:57.02\"\n\n$`$FIL`\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$`$INST`\n[1] \"UMBC\"\n\n$`$MODE`\n[1] \"L\"\n\n$`$NEXTDATA`\n[1] \"0\"\n\n$`$OP`\n[1] \"David Rach\"\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"\n\n$ORIGINALGUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"\n\n$THRESHOLD\n[1] \"(FSC,50000)\"\n\n$TUBENAME\n[1] \"05\"\n\n$USERSETTINGNAME\n[1] \"DTR_CellCounts\"\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n\nThe returned list is a little too large to reasonably explore. We can attempt to subset using the head() function as shown below\n\nhead(DescriptionList, 5)\n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n\nAlternatively, it might be better to subset based on position index\n\nDescriptionList[1:10]\n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n$`$CYT`\n[1] \"Aurora\"\n\n$`$CYTOLIB_VERSION`\n[1] \"2.22.0\"\n\n$`$CYTSN`\n[1] \"V0333\"\n\n$`$DATATYPE`\n[1] \"F\"\n\n$`$DATE`\n[1] \"04-Aug-2025\"\n\n\nAnd just as we saw for exprs and parameters, there is also a Bioconductor helper keyword() function to access this same information directly from the flowFrame.\n\nDescriptionList_Alternate <- keyword(flowFrame)\n\nIf we run the class() function, we can see that DescriptionList is an actual “list”.\n\nclass(DescriptionList)\n\n[1] \"list\"\n\n\nThis is in contrast to the vectors we have previously generated. While these are also list like, they are what are known as as atomic list, which contain values that are all either characters, numerics or logicals.\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nclass(Fluorophores)\n\n[1] \"character\"\n\n\n\nPanelAntibodyCounts <- c(5, 12, 19, 26, 34, 46, 51)\nclass(PanelAntibodyCounts)\n\n[1] \"numeric\"\n\n\n\nSpecimenIndexToKeep <- c(TRUE, TRUE, FALSE, TRUE)\nclass(SpecimenIndexToKeep)\n\n[1] \"logical\"\n\n\nA list on the other hand is not restricted to contain objects composed entirely of a certain atomic type. For example, I could include the three previous vectors into a list using the list() function.\n\nMyListofVectors <- list(Fluorophores, PanelAntibodyCounts, SpecimenIndexToKeep)\nstr(MyListofVectors)\n\nList of 3\n $ : chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n $ : num [1:7] 5 12 19 26 34 46 51\n $ : logi [1:4] TRUE TRUE FALSE TRUE\n\n\nWe can see that with the Description/Keyword list we retrieved from our flowFrame shares a somewhat similar format.\n\nstr(DescriptionList[1:10])\n\nList of 10\n $ $BEGINANALYSIS : chr \"0\"\n $ $BEGINDATA : chr \"33312\"\n $ $BEGINSTEXT : chr \"0\"\n $ $BTIM : chr \"13:55:29.85\"\n $ $BYTEORD : chr \"4,3,2,1\"\n $ $CYT : chr \"Aurora\"\n $ $CYTOLIB_VERSION: chr \"2.22.0\"\n $ $CYTSN : chr \"V0333\"\n $ $DATATYPE : chr \"F\"\n $ $DATE : chr \"04-Aug-2025\"\n\n\nBut in this case, there are also names present ($BEGINANALYSIS, $BEGINDATA, etc). What if we had tried to provide names to our List of Vectors? Would the format match?\nWhen we assigned a name to each of the vectors (by providing an equal to = ), we get the same kind of structure format to what we see in Description.\n\nMyNamedListofVectors <- list(FluorophoresNamed=Fluorophores,\n PanelAntibodyCountsNamed=PanelAntibodyCounts,\n SpecimenIndexToKeepNamed=SpecimenIndexToKeep)\n\nstr(MyNamedListofVectors)\n\nList of 3\n $ FluorophoresNamed : chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n $ PanelAntibodyCountsNamed: num [1:7] 5 12 19 26 34 46 51\n $ SpecimenIndexToKeepNamed: logi [1:4] TRUE TRUE FALSE TRUE\n\n\nWe could then subsequently be able to isolate items from that list using the $ operator.\n\nMyNamedListofVectors$\n\n\nAlternatively, we could also access by list index position\n\nMyNamedListofVectors[1]\n\n$FluorophoresNamed\n[1] \"BV421\" \"FITC\" \"PE\" \"APC\" \n\n\nRemembering back to the original output from read.FCS() we remember that it mentioned 599 keywords being in the description slot, so now we know that this is what was being referenced.", + "objectID": "course/01_InstallingRPackages/index.html#set-up", + "href": "course/01_InstallingRPackages/index.html#set-up", + "title": "01 - Installing R Packages", + "section": "Set Up", + "text": "Set Up\nAlright, with the background out of the way, let’s get started!\n\n\n\n\n\n\nImportant\n\n\n\nPlease make sure to sync your forked version of the CytometryInR repository, and 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.\n\n\n\n\n\n\n\n\nWarning\n\n\n\nPlease remember to always copy over the new material from your local CytometryInR folder to a separate Project Folder that you created and named (ex. “Week_01” or “MyLearningFolder”, etc.). This will ensure any edits you make to the files do not affect your ability to bring in next week’s materials to the CytometryInR folder\n\n\n\n\nAfter pulling the new data and code locally, open CytometryInR, open the course folder, and open the 01_InstallingRPackages folder. From here, copy the index.qmd file to your own working Project Folder (ex. Week_01) where you can work on it without causing any conflicts. Then return to Positron and open up your working project folder (ex. Week_01).\n\n\n\nNext up, within Positron, let’s make sure to select R as the coding language being used for this session.\n\n\n\nNow that R is running within Positron, the console (lower portion of the screenn) is now able to run (ie. execute) any R code that is sent to it.", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "01 - Installing R Packages" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#early-metadata", - "href": "course/03_InsideFCSFile/index.html#early-metadata", - "title": "03 - Inside an FCS File", - "section": "Early Metadata", - "text": "Early Metadata\nWithin the initial portion, we are getting back metadata keywords related to where and how the particular file was acquired. Keywords of potential interest include:\n\n\n\n\n\n\nStart Time\n\n\n\nWhat time was the .fcs file acquired\n\n\n\n\nDescriptionList$`$BTIM`\n\n[1] \"13:55:29.85\"\n\n\n\n\n\n\n\n\n\nCytometer\n\n\n\nWhat type of cytometer was the .fcs file acquired on\n\n\n\n\nDescriptionList$`$CYT`\n\n[1] \"Aurora\"\n\n\n\n\n\n\n\n\n\n\n\nCytometer Serial Number\n\n\n\nManufacturer Serial Number of the Cytometer\n\n\n\n\nDescriptionList$`$CYTSN`\n\n[1] \"V0333\"\n\n\n\n\n\n\n\n\n\nFCS File Acquisition Date\n\n\n\nWhat was the date of acquisition\n\n\n\n\nDescriptionList$`$DATE`\n\n[1] \"04-Aug-2025\"\n\n\n\n\n\n\n\n\n\n\n\nAcquisition End Time\n\n\n\nWhat time was acquisition stopped\n\n\n\n\nDescriptionList$`$ETIM`\n\n[1] \"13:55:57.02\"\n\n\n\n\n\n\n\n\n\nFile Name\n\n\n\nName of the .fcs file\n\n\n\n\nDescriptionList$`$FIL`\n\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\n\n\n\n\n\n\n\n\n\nOperator\n\n\n\nWho acquired the .fcs file\n\n\n\n\nDescriptionList$`$OP`\n\n[1] \"David Rach\"", + "objectID": "course/01_InstallingRPackages/index.html#checking-for-loaded-packages", + "href": "course/01_InstallingRPackages/index.html#checking-for-loaded-packages", + "title": "01 - Installing R Packages", + "section": "Checking for Loaded Packages", + "text": "Checking for Loaded Packages\nFor the contents (ie. the functions) of an R package to be available for your computer to use, they must first be activated (ie. loaded) into your local environment. We will first learn how to check what R packages are currently active.\n\n\n\nAccessing Help Documentation\nWithin your own index.qmd (or a new .qmd file that you created), type out/copy-paste the following sessionInfo() function:\n\nsessionInfo()\n\n\n\nIf you hover over the line of code within Positron, you will glimpse the help file for the particular function you are hovering over.\n\n\n\nIn this case, we can see the help documentation corresponding for sessionInfo(). Beyond hovering over the function, this can also be accessed by adding a ? directly in front of the function, and then running that line of code.\n\n?sessionInfo()\n\n\n\n\nWhen executed, the function’s help file documentation will open up within the Help tab in the secondary side bar on the right-side of the screen. Glancing at the top of the page we can see the name of the package that contains the sessionInfo() function ({utils}). Scrolling down the help page past all the documentation, we can see a link to the index page.\n\n\n\nAfter clicking, the Help tab switches from viewing the documentation for the sessionInfo() function, to showing all the functions within the utils package. Most R packages contain help documentation, so this process can be adapted to find out additional information about what a function does, and what arguments are needed to produce customized outputs.\n\n\n\n\n\nsessionInfo()\nWithin your .qmd file, let’s go ahead and run the following code-block:\n\nsessionInfo()\n\nR version 4.5.3 (2026-03-11)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] htmlwidgets_1.6.4 BiocManager_1.30.27 compiler_4.5.3 \n [4] fastmap_1.2.0 cli_3.6.5 tools_4.5.3 \n [7] htmltools_0.5.9 otel_0.2.0 yaml_2.3.12 \n[10] rmarkdown_2.30 knitr_1.51 jsonlite_2.0.0 \n[13] xfun_0.56 digest_0.6.39 rlang_1.1.7 \n[16] evaluate_1.0.5 \n\n\n\n\nThe outputs that get returned by sessionInfo() will vary a bit depending on your computer’s operating system, and the version of R you have installed.\nFor today, let’s focus on the last two elements of the output:\n\n\n\nThe R software itself is made up of several base R packages, that are loaded automatically. These contain everything you need to read, write and run R code on your computer. You can see these packages are the stats, graphics, grDevices, utils, datasets, methods and base packages.\nAs we install additional R packages and load them using the library() function throughout this session, sporadically re-run sessionInfo() to see how this list of R packages changes.", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "01 - Installing R Packages" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#detector-values", - "href": "course/03_InsideFCSFile/index.html#detector-values", - "title": "03 - Inside an FCS File", - "section": "Detector Values", - "text": "Detector Values\nThe next major stretch of keywords encode parameter values associated with the individual detectors for at the time of acquisition.\n\nDetectors <- DescriptionList[20:384]\nDetectors\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"\n\n\nFortunately for all involved, there is a consistently repeating pattern for the keywords corresponding to each detector. We can see that here for $P7B, $P7E, $P7N, $P7R, $P7TYPE, $P7V\n\nWhen referencing to the Flow Cytometry Standard documentation, here are what the particular keyword letters mean:\n\n\n\n\n\n\nB\n\n\n\nNumber of bits reserved for parameter number n\n\n\n\n\nDescriptionList$`$P7B`\n\n[1] \"32\"\n\n\n\n\n\n\n\n\n\nE\n\n\n\nAmplification type for parameter n. \n\n\n\n\nDescriptionList$`$P7E`\n\n[1] \"0,0\"\n\n\n\n\n\n\n\n\n\n\n\nN\n\n\n\nShort Name for parameter n. \n\n\n\n\nDescriptionList$`$P7N`\n\n[1] \"UV6-A\"\n\n\n\n\n\n\n\n\n\nR\n\n\n\nRange for parameter number n. \n\n\n\n\nDescriptionList$`$P7R`\n\n[1] \"4194304\"\n\n\n\n\n\n\n\n\n\n\n\nTYPE\n\n\n\nDetector type for parameter n. \n\n\n\n\nDescriptionList$`$P7TYPE`\n\n[1] \"Raw_Fluorescence\"\n\n\n\n\n\n\n\n\n\nV\n\n\n\nDetector voltage for parameter n. \n\n\n\n\nDescriptionList$`$P7V`\n\n[1] \"506\"\n\n\n\n\n\nWhile not immediately obvious, understanding what these keywords encoded has proven useful for our core. In our case, we have built an automated InstrumentQC dashboard for all the instruments at our core.\n\n\n\nBy extracting out from our daily QC bead .fcs files the stored N (Detector Name) and V (Gain/Voltage) values for all the individual detectors, it allows us to plot Levey-Jennings Plots for our individual instruments, giving us usually around a months warning before an individual laser begins to fail. This helps with scheduling the Field-Service Engineer visit before it starts impacting the actual data.\n\n\n\nWhile most of the detectors keywords are similar (only changing there individual name and voltage) there are a couple exceptions.\nFor the FSC/SSC parameters, instead of Raw_Fluorescence value for Type, we see the corresponding Scatter value get return. This in term is what is used by various commercial softwares to show those axis as linear instead of biexponential when selected.\n\n\n\nThis is similarly the case for the Time parameter, where in addition to Type being set to Time, the range also appears different to Raw/Scatters value.", + "objectID": "course/01_InstallingRPackages/index.html#installing-from-cran", + "href": "course/01_InstallingRPackages/index.html#installing-from-cran", + "title": "01 - Installing R Packages", + "section": "Installing from CRAN", + "text": "Installing from CRAN\nWe will start by installing R packages that are part of the CRAN repository. This is the main R package repository, being part of the broader R software project. In the context of this course, R packages that work primarily with general data structure (rows, columns, matrices, etc.) or visualizations will predominantly be found within this repository.\nThese include the tidyverse packages. These packages have collectively made R easier to use by smoothing out some of the rough edges of base R, which is why R has seen major growth within the last decade. We will be installing several of these R packages today.\n\n\n\ndplyr\nOur first R package we will install during this session is the dplyr package. Since it is hosted on the CRAN repository, to install it, we will need to use the CRAN-specific installation function install.packages().\n\n?install.packages()\n\n\n\n\nFor the install.packages() function, we place within the () the name of the R package from CRAN that we wish to install.\n\ninstall.packages(\"dplyr\")\n\n\n\n\n\n\n\n\n\nTip\n\n\n\nA usual struggle point for beginners is that install.packages() requires ” ” to be placed around the package name. Forgetting them results in the error that we see below.\n\n\n\ninstall.packages(dplyr)\n\nError:\n! object 'dplyr' not found\n\n\n\n\n\ninstall.packages(\"dplyr\")\n\nGo ahead and click on “Run Cell” next to your code-block, to install the dplyr R package.\n\n\nWhen a package starts to install, you will see your console start to display text resembling that seen in the image below (varying a bit depending on your computers operating system).\n\n\n\nWithin this opening scrawl, you will see the location on your computer the R package is being installed to, as well as the file location for the R package being retrieved on CRAN.\nIf the package is successfully located, your computer will proceed to first download, then unpack (ie. unzip) it, before attempting to install to the target folder.\n\n\n\nThe final steps of the installation process involved various steps to verify everything was copied successfully, the help documentation assembled, and that the R package is capable of being loaded. If this is the case, you will see the “Done” line appear, as well as a mention where the original downloaded source package files has been stashed (usually a temp folder).\n\n\n\n\nAttaching packages via library()\nIf an R package has been installed successfully, we are now able to load it (ie. make it’s functions available) to our local environment using the library() function.\n\n?library()\n\n\n\nUnlike install.packages(), where we needed “” around the package name, the library() function does not require “” around the package name. Let’s go ahead and load in dplyr, making its respective functions to our local environment.\n\nlibrary(dplyr)\n\n\nAttaching package: 'dplyr'\n\n\nThe following objects are masked from 'package:stats':\n\n filter, lag\n\n\nThe following objects are masked from 'package:base':\n\n intersect, setdiff, setequal, union\n\n\n\n\nFrom the output, we can see that dplyr has been attached. There are also a couple functions within dplyr that have identical names to functions within the stats and base packages. To avoid confusion, these 6 functions are masked, which is why we get the additional messages.\nWith dplyr now loaded via the library() call, let’s check sessionInfo() to see what has changed.\n\nsessionInfo()\n\nR version 4.5.3 (2026-03-11)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] dplyr_1.2.0 BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 \n [4] tidyselect_1.2.1 xfun_0.56 magrittr_2.0.4 \n [7] glue_1.8.0 tibble_3.3.1 knitr_1.51 \n[10] pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 \n[13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 \n[16] vctrs_0.7.1 compiler_4.5.3 tools_4.5.3 \n[19] evaluate_1.0.5 pillar_1.11.1 yaml_2.3.12 \n[22] otel_0.2.0 BiocManager_1.30.27 rlang_1.1.7 \n[25] jsonlite_2.0.0 htmlwidgets_1.6.4 \n\n\n\n\nSimilar to what was seen for the base R packages, dplyr is now attached. This means we should theoretically now have access to all its functions. We can verify this by seeing if we can look up the dplyr packages select() function and it’s respective help page.\n\n?select\n\n\n\n\nSince its parent package has been attached to our local environment (via the library() call), we can see dplyr functions appear as suggestions as we begin to type.\nBy contrast, is we check for the ggplot() function from the ggplot2 package (which we haven’t yet installed or attached via library()), no suggestions will pop up.\n\n?ggplot\n\nNo documentation for 'ggplot' in specified packages and libraries:\nyou could try '??ggplot'\n\n\n\n\nBeyond individual functions, some R packages also have help landing pages, that can be similarly accessed by adding a ? in front of the package name:\n\n\n\n\n\nUnattaching\nSo far, we have installed an R package, and then attached it (via library()). How would we reverse these steps?\nWell, to unload it from the local environment, there are a couple options. You could of course simply shut down Positron. The local environment only exist in context of when you open and close the session, which closing the program will do. All previously loaded R packages will be unattached, which is why when you start a new session you will need to load in all packages you plan on using via library().\nAlternatively, although less used, you could detach() it via your console:\n\ndetach(\"package:dplyr\", unload=TRUE)\n\n\nsessionInfo()\n\nR version 4.5.3 (2026-03-11)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 \n [4] tidyselect_1.2.1 xfun_0.56 magrittr_2.0.4 \n [7] glue_1.8.0 tibble_3.3.1 knitr_1.51 \n[10] pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 \n[13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 \n[16] vctrs_0.7.1 compiler_4.5.3 tools_4.5.3 \n[19] evaluate_1.0.5 pillar_1.11.1 yaml_2.3.12 \n[22] otel_0.2.0 BiocManager_1.30.27 rlang_1.1.7 \n[25] jsonlite_2.0.0 htmlwidgets_1.6.4 \n\n\n\n\nLooking at the sessionInfo() output, dplyr is no longer attached to the local environment. Consequently, if we try to once again look for the documentation, no information will be retrieved.\n\n?dplyr\n\nNo documentation for 'dplyr' in specified packages and libraries:\nyou could try '??dplyr'\n\n\n\n\nThere is a workaround however, if we want to access functions from an unloaded R package. We can specify the R package’s name, followed by two :, and then the function name. The :: conveys the context to your computer that the package is present, but may not be attached.\n\n?dplyr::select()\n\nThis particular use case can be useful if we want to run a particular function, but not load in all a packages functions (which may have identical function names to other R packages we are using and cause some conflicts).\n\n\n\n\nRemoving Packages\nJust as we can install an R package, we can also uninstall an R package (although doing so is rare, most often when encountering package dependency conflict). To do so, we would use the remove.packages() function.\n\n?remove.packages()\n\n\nremove.packages(\"dplyr\")\n\nThis results in the package being removed entirely from our computer. We would then need to reinstall it if needed in the future.\n\n\n\n\nCommon Issues\nAs previously mentioned, CRAN is the main repository for R packages. But what if we tried to install an R package that is only found on Bioconductor or via GitHub using the install.packages() function?\nTo see what occurs, let’s try installing the PeacoQC package (which is found on Bioconductor).\n\ninstall.packages(\"PeacoQC\")\n\nInstalling package into '/home/david/R/x86_64-pc-linux-gnu-library/4.5'\n(as 'lib' is unspecified)\n\n\nWarning: package 'PeacoQC' is not available for this version of R\n\nA version of this package for your version of R might be available elsewhere,\nsee the ideas at\nhttps://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages\n\n\n\n\nAs you can see, the initial warning message suggest that PeacoQC is not available for your version of R. When I first started trying to learn R on my own during COVID, this particular message was the bane of my existence and I couldn’t figure out what was going on.\nThis is just a default warning message, that would apply for both a package having a version mismatch, but also shown when trying to install packages that are not found on CRAN.", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "01 - Installing R Packages" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#middle-metadata", - "href": "course/03_InsideFCSFile/index.html#middle-metadata", - "title": "03 - Inside an FCS File", - "section": "Middle Metadata", - "text": "Middle Metadata\nOnce we are out of the detector keywords, we find the last of the $Metadata associated keywords.\n\nDetectors <- DescriptionList[385:398]\nDetectors\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\nAmong those of potential interest\n\n\n\n\n\n\nProj\n\n\n\nOften corresponding to the experiment file name\n\n\n\n\nDescriptionList$`$PROJ`\n\n[1] \"CellCounts4L_AB_05\"\n\n\n\n\n\n\n\n\n\nSpillover\n\n\n\nWhere the internal spillover matrix is stored (we will revisit during compensation)\n\n\n\n\nDescriptionList$`$SPILLOVER`\n\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n\n\n\n\n\n\n\n\nTOT\n\n\n\nTotal events (in this case my downsampled 100 cells)\n\n\n\n\nDescriptionList$`$TOT`\n\n[1] \"100\"\n\n\n\n\n\n\n\n\n\nVolume\n\n\n\nVolume amount acquired during acquisition.\n\n\n\n\nDescriptionList$`$VOL`\n\n[1] \"30.31\"\n\n\n\n\n\n\n\n\n\nSoftware\n\n\n\nSoftware used and version\n\n\n\n\nDescriptionList$CREATOR\n\n[1] \"SpectroFlo 3.3.0\"\n\n\n\nYou will notice at this point, the keyword names including a “$” symbol have stopped, so tick marks are no longer required (except when there is a space in the name). The only $ remaining is being used as a selector for a particular item in the list.\n\nDetectors <- DescriptionList[390:398]\nDetectors\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\n\n\n\n\n\n\nFILENAME\n\n\n\nBasically the full file.path to the .fcs file of interest.\n\n\n\n\nDescriptionList$FILENAME\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n\n\n\n\n\n\n\n\nGROUPNAME\n\n\n\nThe Name assigned to the acquisition Group.\n\n\n\n\nDescriptionList$GROUPNAME\n\n[1] \"ND050\"", + "objectID": "course/01_InstallingRPackages/index.html#installing-from-bioconductor", + "href": "course/01_InstallingRPackages/index.html#installing-from-bioconductor", + "title": "01 - Installing R Packages", + "section": "Installing from Bioconductor", + "text": "Installing from Bioconductor\nBioconductor is the second R package repository we will be working with throughout the course. While it contains far fewer packages than CRAN, it contains packages that are primarily used by the biomedical sciences. Following this link you can find it’s current flow and mass cytometry R packages.\nBioconductor R packages differ from CRAN R packages in a couple of ways. Bioconductor has different standards for acceptance than CRAN. They usually contain interoperable object-types, put more effort into documentation and continous testing to ensure that the R package remains functional across operating systems.\n\n\nTo install an R package that is located on Bioconductor, we first need to install the BiocManager package from CRAN. This package will allow us to install Bioconductor packages from their respective repository.\n\ninstall.packages(\"BiocManager\")\n\n\n\nOnce BiocManager is installed, we can attach it to our local environment using the library() function\n\nlibrary(BiocManager)\n\n\n\nWhen loaded, you will see an output showing the current Bioconductor and R versions.\nWe can then use BiocManager’s install() function to go back and install PeacoQC().\n\n\n\n\n\n\nTip\n\n\n\nAs always, don’t forget the “” when running an install() command.\n\n\n\n?install()\n\n\ninstall(\"PeacoQC\")\n\n\n\nWe see a similar opening sequence of installation steps as what we saw when installing the dplyr package from CRAN. However, in this case, several package dependencies (rjson, GlobalOptions, etc.) are present. Consequently, you can see these packages are also being downloaded from their respective repositories (either CRAN or Bioconductor), then unzipped and assembled before PeacoQC undergoes installation.\n\n\n\n\n\n\nNote\n\n\n\nBehind the scenes, within an R package, what package dependencies need to be installed are specified through the Description and Namespace files. If a package name is removed from these files, it will not be installed during the installation process\n\n\n\n\n\nWithin the scrawl of installation outputs, we can see individual dependencies undergoing installation similar to what we saw with dplyr, with a “Done (packagename)” being printed upon successful installation.\n\n\n\nThis process continues for each dependency being installed.\n\n\n\nAnd finally, once all the dependencies are installed, PeacoQC starts to install.\n\n\n\nOccasionally, during installation, you will see a pop-up windown like this one in the console. This let’s you know that some of the package dependencies have newer updated versions that are available to download. We are prompted to select between updating all, some or none. You will need to specify via the console how you want to proceed, by typing and entering one of the suggested options [a/s/n].\n\n\n\nAlternatively you may encounter a pop-up that resembles this one. Unlike the a/s/n output, we would need to provide a number for our intended choice. In this case, I went ahead and skipped all updates by typing 3 into the console, then hitting enter.\n\n\n\nGenerally, it’s okay to update if you have the time. Updates generally consist of minor improvements or bug fixes, that shouldn’t cause major issues. If you are short on time, you can go ahead and select skip the update by entering the value (n) for the none option.\n\n\n\nWith PeacoQC has been installed, we can load it via the library() call\n\n\n\n\n\n\nTip\n\n\n\nRemeber, library() doesn’t require ” ”\n\n\n\nlibrary(PeacoQC)\n\n\n\nAnd we can check to see if it has been attached to the local environment\n\nsessionInfo()\n\nR version 4.5.3 (2026-03-11)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27 BiocStyle_2.38.0 \n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.3 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.3 parallel_4.5.3 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.3 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] htmlwidgets_1.6.4 IRanges_2.44.0 clue_0.3-66 \n[49] cluster_2.1.8.2 pkgconfig_2.0.3 pillar_1.11.1 \n[52] gtable_0.3.6 data.table_1.18.2.1 glue_1.8.0 \n[55] xfun_0.56 tibble_3.3.1 tidyselect_1.2.1 \n[58] knitr_1.51 farver_2.1.2 rjson_0.2.23 \n[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.3 \n[64] S7_0.2.1 \n\n\n\n\nAs you may have noticed, the section of loaded via namespace (but not attached) packages has grown larger. These packages are dependencies for the attached packages (dplyr, BiocManager and PeacoQC). Since the functions within these dependencies are only used selectively by the attached packages, they do not need to be active within the local environment.\n\n\n\nTo see what packages are installed (but not yet loaded), we can use the installed.packages() function to return a list of R packages for your computer.\n\ninstalled.packages()", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "01 - Installing R Packages" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#laser-metadata", - "href": "course/03_InsideFCSFile/index.html#laser-metadata", - "title": "03 - Inside an FCS File", - "section": "Laser Metadata", - "text": "Laser Metadata\nNext up, there is a small stretch of keywords containing the values associated with the individual lasers as far as delays and area scaling factors for a particular day (also useful when plotted).\n\nDetectors <- DescriptionList[399:410]\nDetectors\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"", + "objectID": "course/01_InstallingRPackages/index.html#install-from-github", + "href": "course/01_InstallingRPackages/index.html#install-from-github", + "title": "01 - Installing R Packages", + "section": "Install from GitHub", + "text": "Install from GitHub\nIn addition to the CRAN and Bioconductor repositories, individual R packages can also be found on GitHub hosted on their respective developers GitHub accounts. Newer packages that are still being worked on (often in the process of submission to CRAN or Bioconductor) can be found here, as well as those where the author decided not to bother with a review process, and just made the packages immediately available, warts and all.\n\n\nWhile many gems of R packages can be found on GitHub, there are also a bunch of R packages that due to deprecation since when they were published and released have stopped working. This is often the case for R packages that are not maintained, which is why it’s useful to check the commits and issues pages to see when the last contribution occurred. We will take a closer look at how to do so later on.\n\n\nTo install packages from GitHub, you will need the remotes package, which can be found on CRAN.\n\n\n\n\n\n\nSpot Check #1\n\n\n\nTo install a package from CRAN, what function would you use? Click on the code-fold arrow below to reveal the answer.\n\n\n\n\nCode\ninstall.packages(\"remotes\")\n\n\n\n\nWith the remotes package now installed, we can attach it to our local environment.\n\n\n\n\n\n\nSpot Check #2\n\n\n\nWhat function would be used to do so?\n\n\n\n\nCode\nlibrary(remotes)\n\n\n\n\nAnd finally, we can use the install_github() function to download R packages from the invidual developers GitHub account.\n\n\n\n\n\n\nSpot Check #3\n\n\n\nHow would you look up the help documentation for this function?\n\n\n\n\nCode\n# Either by hovering over it within Positron or via\n\n?install_github()\n\n\n\n\nWe will be installing a small R package flowSpectrum for this example. It’s one of the packages created by Christopher Hall, whose small series of Flow Cytometry Data Analysis in R tutorials were immensely useful when I was first getting started learning R. flowSpectrum can be used to generate spectrum-style plots for spectral flow cytometry data.\n\n\n\nTo install an R package from GitHub, we first need the GitHub username (so hally166 in this case), which is followed by a “/”, and then the name of the package repository (so flowSpectrum in this case). Our code should consequently be:\n\ninstall_github(\"hally166/flowSpectrum\")\n\n\n\nWhen installing from GitHub, the opening installation scrawl will look different. Unlike R packages from CRAN or Bioconductor, which are usually shipped in an assembled binary format, R packages from GitHub start off as source code. So the first steps shown in the scrawl are the process of converting them to binary before proceeding.\nThis process of building R packages from source code is one of the reasons we needed to install Rtools (for Windows users) or Xcode Developer Tools (for MacOS) for this course. We will look at this topic in greater depth later in the course when we talk about creating R packages.", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "01 - Installing R Packages" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#display", - "href": "course/03_InsideFCSFile/index.html#display", - "title": "03 - Inside an FCS File", - "section": "Display", - "text": "Display\nThen there is a stretch matching whether a particular detector needs to be displayed as linear (in the case of time and scatter) or as log (for individual detectors).\n\nDetectors <- DescriptionList[412:472]\nDetectors\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"\n\n\nAnd a few final keywords with threshold, window scaling and other user selected settings.\n\nDetectors <- DescriptionList[473:476]\nDetectors\n\n$THRESHOLD\n[1] \"(FSC,50000)\"\n\n$TUBENAME\n[1] \"05\"\n\n$USERSETTINGNAME\n[1] \"DTR_CellCounts\"\n\n$`WINDOW EXTENSION`\n[1] \"3\"", + "objectID": "course/01_InstallingRPackages/index.html#troubleshooting-install-errors", + "href": "course/01_InstallingRPackages/index.html#troubleshooting-install-errors", + "title": "01 - Installing R Packages", + "section": "Troubleshooting Install Errors", + "text": "Troubleshooting Install Errors\nWe have now installed three R packages, dplyr, PeacoQC, and flowSpectrum. In my case, I did not encounter any errors during the installation. However, sometimes a package installation will fail due to an error encountered during the installation process. This can be due to a number of reasons, ranging from a missing dependency, or an update that caused a conflict. While these can occur for CRAN or Bioconductor packages, they are more frequently seen for GitHub packages where the Description/Namespace files may not have been fully updated yet to install all the required dependencies.\nWhen encountering an error, start of by first reading through the message to see if you can parse any useful information about what package failed to install, and if it list the missing dependency packages name. The later was the case in the error message example shown below.\n\n\n\nIf you encounter an installation error this week, please take screenshots of the error message and post them to this Discussion. This will help us troubleshoot your installation, as well as provide additional examples of installation errors that will be used to update this section in the future.", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "01 - Installing R Packages" ] }, { - "objectID": "course/03_InsideFCSFile/index.html#flowcore-parameters", - "href": "course/03_InsideFCSFile/index.html#flowcore-parameters", - "title": "03 - Inside an FCS File", - "section": "flowCore Parameters", - "text": "flowCore Parameters\nDepending on the arguments selected during read.FCS(), we might also encounter additional keywords that are added in by flowCore. For example, we do not see these keywords when “transformation” is set to FALSE.\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = FALSE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot\n\n\n\nNoChange <- keyword(flowCoreCheck)\nDetectors <- NoChange [476:500]\nDetectors\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n\nBy contrast, if we had set “transformation” to TRUE:\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = TRUE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n599 keywords are stored in the 'description' slot\n\n\n\nYesChange <- keyword(flowCoreCheck)\nDetectors <- YesChange [476:500]\nDetectors\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n$transformation\n[1] \"applied\"\n\n$`flowCore_$P1Rmax`\n[1] \"272140\"\n\n$`flowCore_$P1Rmin`\n[1] \"0\"\n\n$`flowCore_$P2Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P2Rmin`\n[1] \"-111\"\n\n$`flowCore_$P3Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P3Rmin`\n[1] \"-111\"\n\n$`flowCore_$P4Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P4Rmin`\n[1] \"-111\"\n\n$`flowCore_$P5Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P5Rmin`\n[1] \"-111\"\n\n$`flowCore_$P6Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P6Rmin`\n[1] \"-111\"\n\n$`flowCore_$P7Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P7Rmin`\n[1] \"-111\"\n\n$`flowCore_$P8Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P8Rmin`\n[1] \"-26.3464946746826\"\n\n$`flowCore_$P9Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P9Rmin`\n[1] \"-111\"\n\n$`flowCore_$P10Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P10Rmin`\n[1] \"0\"\n\n$`flowCore_$P11Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P11Rmin`\n[1] \"-111\"\n\n$`flowCore_$P12Rmax`\n[1] \"4194304\"\n\n\n\n\nFor some flow cytometry R packages, you will notice when opening their exported .fcs outputs in commercial software that these flowCore keywords have ended up integrated. It is likely somewhere in the package code the author forgot to add set transformation to FALSE, which is why we are seeing these flowCore keywords after the fact.", + "objectID": "course/01_InstallingRPackages/index.html#installing-specific-package-versions", + "href": "course/01_InstallingRPackages/index.html#installing-specific-package-versions", + "title": "01 - Installing R Packages", + "section": "Installing Specific-Package Versions", + "text": "Installing Specific-Package Versions\nWhile we may be tempted to think of R packages as static, they change quite often, as their develipers add new features, fix bugs, etc. To help keep track of these changes (essential for reproducibility and replicability), R packages have version numbers.\nWhen we run sessionInfo(), we can see an example of this, with the version number appearing after the package name.\n\nsessionInfo()\n\nR version 4.5.3 (2026-03-11)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27 BiocStyle_2.38.0 \n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.3 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.3 parallel_4.5.3 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.3 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] htmlwidgets_1.6.4 IRanges_2.44.0 clue_0.3-66 \n[49] cluster_2.1.8.2 pkgconfig_2.0.3 pillar_1.11.1 \n[52] gtable_0.3.6 data.table_1.18.2.1 glue_1.8.0 \n[55] xfun_0.56 tibble_3.3.1 tidyselect_1.2.1 \n[58] knitr_1.51 farver_2.1.2 rjson_0.2.23 \n[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.3 \n[64] S7_0.2.1 \n\n\n\n\nAlternatively, we can retrieve the same information for the individual packages via the packageVersion() function\n\npackageVersion(\"PeacoQC\")\n\n[1] '1.20.0'\n\n\n\n\nAs well as from the citation() function.\n\ncitation(\"PeacoQC\")\n\nTo cite package 'PeacoQC' in publications use:\n\n Emmaneel A (2025). _PeacoQC: Peak-based selection of high quality\n cytometry data_. doi:10.18129/B9.bioc.PeacoQC\n <https://doi.org/10.18129/B9.bioc.PeacoQC>, R package version 1.20.0,\n <https://bioconductor.org/packages/PeacoQC>.\n\nA BibTeX entry for LaTeX users is\n\n @Manual{,\n title = {PeacoQC: Peak-based selection of high quality cytometry data},\n author = {Annelies Emmaneel},\n year = {2025},\n note = {R package version 1.20.0},\n url = {https://bioconductor.org/packages/PeacoQC},\n doi = {10.18129/B9.bioc.PeacoQC},\n }\n\n\n\n\nHow does a version number work? Lets say we have the following version number: 1.20.0\nThe first number of the version (1. in this case) denotes major changes, primarily those where after the version change the package may not be compatible with the code used in the prior version. As a consequence, this number changes rarely.\nThe second number (.20. in this case) is the minor version. Minor changes typically consist of new features that are added, that don’t affect the overall package function. These will change more frequently, especially for Bioconductor packages with fixed release cycles.\nThe final number (.0 in this case) is often used to denote small changes occuring within a minor release period, often bug-fixes or fixing typos within the documentation.\n\n\nWe may in the future need to install specific package versions (but wont be doing so today). As expected, which repository contains the R package influences how we would go about doing this.\nFor CRAN packages, we can use the remotes packages install_version() function. This allows us to provide the version number, and designate the repository location (the CRAN url in this case).\n\nremotes::install_version(\"ggplot2\", version = \"3.5.2\", repos = \"https://cloud.r-project.org\")\n\nFor GitHub-based R packages, the package versioning schema is not as strict as that of CRAN or Bioconductor. Typically, changes in R packagaes are put out by their developers as releases. When trying to install a particular release, we can add an additional argument to the install_github() function, specifying the release version’s tag number. For example:\n\nremotes::install_github(\"DavidRach/Luciernaga\", ref = \"v0.99.7\")\n\nAlternatively, if the developer doesn’t implement releases, you can provide the hash number of a particular commit.\n\nremotes::install_github(\"DavidRach/Luciernaga\", ref = \"8d1d694\")", "crumbs": [ "About", "Intro to R", - "03 - Inside a .FCS file" + "01 - Installing R Packages" ] }, { - "objectID": "course/02_FilePaths/index.html", - "href": "course/02_FilePaths/index.html", - "title": "02 - File Paths", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nWelcome to the second week of Cytometry in R! This week we will learn about file.path, namely, how to communicate to our computer (and R) where various files are stored.", + "objectID": "course/01_InstallingRPackages/index.html#documentation-and-websites", + "href": "course/01_InstallingRPackages/index.html#documentation-and-websites", + "title": "01 - Installing R Packages", + "section": "Documentation and Websites", + "text": "Documentation and Websites\nWe have already seen a couple ways to access the help documentation contained within an R package via Positron. Beyond internal documentation, R packages often have external websites that contain additional walk-through articles (ie. vignettes) to better document how to use the package.\nFor CRAN-based packages, we can start off by searching for the package name. So, in the case of dplyr:\n\n\n\nTwo main suggestions pop up. One is the package’s CRAN page. Unfortunately, this one is not particularly user-friendly, although some text-based vignettes are accessible.\n\n\n\nBecause of this, many CRAN-based R packages (especially those part of the tidyverse) use pkgdown-generated websites hosted via a GitHub page (similar to the one used by this course. The second option on the search is dplyr’s pkgdown-style website\n\n\n\nWe can usually find the list of functions under the Reference tab, with the more extensive documentation vignettes being found under the Articles tab.\n\n\n\nGitHub-based packages will vary depending on their individual developers, but often will also use pkgdown-style websites. These often appear as links on the right-hand side, or within the repository’s ReadMe.\n\n\n\nFor Bioconductor-based packages, on the package’s page we can typically find the already rendered vignette articles, usually as either html or pdf files. For example, with PeacoQC:\n\n\n\nAdditionally, package vignettes can also be reached via the packages help index page. These will usually appear under User guides, package vignettes, and other documentation.", "crumbs": [ "About", "Intro to R", - "02 - File Paths" + "01 - Installing R Packages" ] }, { - "objectID": "course/02_FilePaths/index.html#set-up", - "href": "course/02_FilePaths/index.html#set-up", - "title": "02 - File Paths", + "objectID": "course/01_InstallingRPackages/slides.html#set-up", + "href": "course/01_InstallingRPackages/slides.html#set-up", + "title": "01 - Installing R Packages", "section": "Set Up", - "text": "Set Up\nBefore we begin, let’s make sure you get the data needed for today transferred to your local computer, and then get the .fcs files copied over from there to your own working project folder. This is the process you will repeat each week throughout the course.\n\nNew Repository\nFirst off, login to your GitHub account. Once there, you will select the options to create a new repository (similar to what you did during Using GitHub)\n\n\n\nFor this week, let’s set this new repository up as a private repository, and call it Week2. This will keep things consistent with the file.paths we will be showing in the examples.\n\n\n\nOnce the new repository has been created, copy the URL.\n\n\n\nNext, open up Positron, set the interpreter to use R, and then select the option to bring in a “New Folder from Git”.\n\n\n\nPaste in your new repository’s url. Additionally, if you want to match file.paths shown in the examples, set your storage location to your local Documents folder (please note the start of the file.path will look differently depending on whether you are on Windows, MacOS, or Linux).\n\n\n\nYour new repository will then be imported from GitHub. Once this is done, create two subfolders (data and images) and a new .qmd file (naming it filepaths.qmd).\n\n\n\n\n\nSync\nWith this done, return to GitHub and open your forked version of the CytometryInR course folder. If you haven’t yet done so, click on sync to bring in this week’s code and datasets.\n\n\n\nReturning to Positron, you will need to switch Project Folders, switching from Week2 over to CytometryInR.\n\n\n\n\n\nPull\nOnce CytometryInR project folder has opened, you will need to pull in the new data from GitHub to your local computer.\n\n\n\n\n\nCopy Files to Week2\nOnce this is done, you will see within the course folder, containing this weeks folder (02_FilePaths). Within it there is a data folder with .fcs files. To avoid causing conflicts when bringing in next week’s materials, you will want to manually copy over these .fcs files (via your File Explorer) to the data folder within your “Week2” Project Folder.\n\n\n\n\n\nCommit and Push\nWhen you reopen your Week2 project folder in Positron, you should now be able to see the .fcs files within the data folder. Next, from the action bar on the far left, select the Source Control tab. Stage all the changes (as was done in Using Git), and write a short commit message.\n\n\n\nWith these files now being tracked by version control, push (ie. send) your changes to GitHub so that they are remotely backed up.\n\n\n\nAnd with this setup complete, you are now ready to proceed. Remember, run code and write notes in your working project folder (Week2 or otherwise named) to avoid conflicts next week in the CytometryInR folder when you are trying to bring in the Week #3 code and datasets.", - "crumbs": [ - "About", - "Intro to R", - "02 - File Paths" - ] + "text": "Set Up\nAlright, with the background out of the way, let’s get started!\n\n\n\n\n\n\n\nImportant\n\n\nPlease make sure to sync your forked version of the CytometryInR repository, and 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.\n\n\n\n\n\n\n\n\n\n\n\nWarning\n\n\nPlease remember to always copy over the new material from your local CytometryInR folder to a separate Project Folder that you created and named (ex. “Week_01” or “MyLearningFolder”, etc.). This will ensure any edits you make to the files do not affect your ability to bring in next week’s materials to the CytometryInR folder" }, { - "objectID": "course/02_FilePaths/index.html#working-directory", - "href": "course/02_FilePaths/index.html#working-directory", - "title": "02 - File Paths", - "section": "Working Directory", - "text": "Working Directory\nNow that we are back in our Week2 folder, let’s start by seeing our current location similarly to how our computer perceives it.\nWe will use getwd() function (ie. get working directory) to return the location of the folder we are currently inside of. For example, when getwd() is run within my Week2 project folder, I see the following location\n\ngetwd()\n\n\nThis returns a file path. The final location (Week2 in this case) is the Working Directory. Your computer when working in R will be descern other locations in relation to this directory.", - "crumbs": [ - "About", - "Intro to R", - "02 - File Paths" - ] + "objectID": "course/01_InstallingRPackages/slides.html#checking-for-loaded-packages", + "href": "course/01_InstallingRPackages/slides.html#checking-for-loaded-packages", + "title": "01 - Installing R Packages", + "section": "Checking for Loaded Packages", + "text": "Checking for Loaded Packages\n\n\n\n\n\n\n\n\n.\n\n\nFor the contents (ie. the functions) of an R package to be available for your computer to use, they must first be activated (ie. loaded) into your local environment. We will first learn how to check what R packages are currently active." }, { - "objectID": "course/02_FilePaths/index.html#directories", - "href": "course/02_FilePaths/index.html#directories", - "title": "02 - File Paths", - "section": "Directories", - "text": "Directories\nWithin this working directory, we have a variety of project folders and files related to the course. We can see the folders that are present using the list.dirs() function.\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)\n\n\nWithin this list.dirs() function, we are specifying two arguments with which we will be working with later today, full.names and recursive. For now, lets set their arguments to FALSE, which means they conditions they implement are inactive (turned off).\n\n\nThe path argument is currently set to “.”, which is a stand-in for the present directory. In R, if an argument is not specified directly, it is inferred based on an order of expected arguments. Thus, if not present, we could still get the same output as seen before.\n\nlist.dirs(full.names=FALSE, recursive=FALSE)\n\n\n\n\nWithin Positron, in addition to visible folders, we also have hidden folders (denoted by the “.” in front of the folder name when using list.dirs()). In the case of one of our course website folders, we can see a “.quarto” folder shown in a lighter gray . The “.git” folder we saw from list.dirs() is typically hidden when viewing from Positron.\n\nIn the case of Week2, the two not-hidden folders we created are listed. We will see how to navigate these in a second.", + "objectID": "course/01_InstallingRPackages/slides.html#installing-from-cran", + "href": "course/01_InstallingRPackages/slides.html#installing-from-cran", + "title": "01 - Installing R Packages", + "section": "Installing from CRAN", + "text": "Installing from CRAN\n\n\n\n\n\n\n\n\n.\n\n\nWe will start by installing R packages that are part of the CRAN repository. This is the main R package repository, being part of the broader R software project. In the context of this course, R packages that work primarily with general data structure (rows, columns, matrices, etc.) or visualizations will predominantly be found within this repository.\nThese include the tidyverse packages. These packages have collectively made R easier to use by smoothing out some of the rough edges of base R, which is why R has seen major growth within the last decade. We will be installing several of these R packages today." + }, + { + "objectID": "course/01_InstallingRPackages/slides.html#installing-from-bioconductor", + "href": "course/01_InstallingRPackages/slides.html#installing-from-bioconductor", + "title": "01 - Installing R Packages", + "section": "Installing from Bioconductor", + "text": "Installing from Bioconductor\n\n\n\n\n\n\n\n\n.\n\n\nBioconductor is the second R package repository we will be working with throughout the course. While it contains far fewer packages than CRAN, it contains packages that are primarily used by the biomedical sciences. Following this link you can find it’s current flow and mass cytometry R packages.\nBioconductor R packages differ from CRAN R packages in a couple of ways. Bioconductor has different standards for acceptance than CRAN. They usually contain interoperable object-types, put more effort into documentation and continous testing to ensure that the R package remains functional across operating systems." + }, + { + "objectID": "course/01_InstallingRPackages/slides.html#install-from-github", + "href": "course/01_InstallingRPackages/slides.html#install-from-github", + "title": "01 - Installing R Packages", + "section": "Install from GitHub", + "text": "Install from GitHub\n\n\n\n\n\n\n\n\n.\n\n\nIn addition to the CRAN and Bioconductor repositories, individual R packages can also be found on GitHub hosted on their respective developers GitHub accounts. Newer packages that are still being worked on (often in the process of submission to CRAN or Bioconductor) can be found here, as well as those where the author decided not to bother with a review process, and just made the packages immediately available, warts and all." + }, + { + "objectID": "course/01_InstallingRPackages/slides.html#troubleshooting-install-errors", + "href": "course/01_InstallingRPackages/slides.html#troubleshooting-install-errors", + "title": "01 - Installing R Packages", + "section": "Troubleshooting Install Errors", + "text": "Troubleshooting Install Errors\n\n\n\n\n\n\n\n\n.\n\n\nWe have now installed three R packages, dplyr, PeacoQC, and flowSpectrum. In my case, I did not encounter any errors during the installation. However, sometimes a package installation will fail due to an error encountered during the installation process. This can be due to a number of reasons, ranging from a missing dependency, or an update that caused a conflict. While these can occur for CRAN or Bioconductor packages, they are more frequently seen for GitHub packages where the Description/Namespace files may not have been fully updated yet to install all the required dependencies.\nWhen encountering an error, start of by first reading through the message to see if you can parse any useful information about what package failed to install, and if it list the missing dependency packages name. The later was the case in the error message example shown below." + }, + { + "objectID": "course/01_InstallingRPackages/slides.html#installing-specific-package-versions", + "href": "course/01_InstallingRPackages/slides.html#installing-specific-package-versions", + "title": "01 - Installing R Packages", + "section": "Installing Specific-Package Versions", + "text": "Installing Specific-Package Versions\n\n\n\n\n\n\n\n\n.\n\n\nWhile we may be tempted to think of R packages as static, they change quite often, as their develipers add new features, fix bugs, etc. To help keep track of these changes (essential for reproducibility and replicability), R packages have version numbers.\nWhen we run sessionInfo(), we can see an example of this, with the version number appearing after the package name.\n\n\n\n\n\n\n\nsessionInfo()\n\nR version 4.5.3 (2026-03-11)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27\n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.3 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.3 parallel_4.5.3 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.3 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] IRanges_2.44.0 clue_0.3-66 cluster_2.1.8.2 \n[49] pkgconfig_2.0.3 pillar_1.11.1 gtable_0.3.6 \n[52] data.table_1.18.2.1 glue_1.8.0 xfun_0.56 \n[55] tibble_3.3.1 tidyselect_1.2.1 knitr_1.51 \n[58] farver_2.1.2 rjson_0.2.23 htmltools_0.5.9 \n[61] rmarkdown_2.30 compiler_4.5.3 S7_0.2.1" + }, + { + "objectID": "course/01_InstallingRPackages/slides.html#documentation-and-websites", + "href": "course/01_InstallingRPackages/slides.html#documentation-and-websites", + "title": "01 - Installing R Packages", + "section": "Documentation and Websites", + "text": "Documentation and Websites\n\n\n\n\n\n\n\n\n.\n\n\nWe have already seen a couple ways to access the help documentation contained within an R package via Positron. Beyond internal documentation, R packages often have external websites that contain additional walk-through articles (ie. vignettes) to better document how to use the package.\nFor CRAN-based packages, we can start off by searching for the package name. So, in the case of dplyr" + }, + { + "objectID": "course/00_WorkstationSetup/Windows.html", + "href": "course/00_WorkstationSetup/Windows.html", + "title": "Installing Software on Windows", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shots slides, click here\nThis is the software installation walkthrough for those whose computers are running Windows. Based on our pre-course interest form, you make up the majority of course participants." + }, + { + "objectID": "course/00_WorkstationSetup/Windows.html#installing-r", + "href": "course/00_WorkstationSetup/Windows.html#installing-r", + "title": "Installing Software on Windows", + "section": "Installing R", + "text": "Installing R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nYou will then select your Operating System, in this case, Windows.\n\n\n\nAnd go ahead and select the Install R for the first time link.\n\n\n\nNext, you will select the download the current version option at the top of the page.\n\n\n\nThe popup window will then ask where you want to save the installer (.exe) file. We generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nAfter the download is complete, double click on the installer’s .exe file. This will open a popup asking you to select your preferred language.\n\n\n\nYou will then be prompted to acccept the software license (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\nOn Windows, R will normally save it’s software folder under Program Files.\n\n\n\nNext, please accept the defaults.\n\n\n\n\n\n\n\n\n\n\n\n\nWith the defaults accepted, the installation will commence. Feel free to go have a coffee/tea/beverage-of-your choice break while you wait.\n\n\n\nAnd if all goes well, the installation will complete without any issues." + }, + { + "objectID": "course/00_WorkstationSetup/Windows.html#installing-rtools", + "href": "course/00_WorkstationSetup/Windows.html#installing-rtools", + "title": "Installing Software on Windows", + "section": "Installing RTools", + "text": "Installing RTools\nWe will now work on installing Rtools. This software is needed when building R packages from source, which we will need throughout the course for R packages hosted on GitHub.\nTo get started, we will return to the R installation page we visited previously and instead click on the Rtools option.\n\n\n\nNext, select the most recent version of Rtools to Download.\n\n\n\nYou will then select for your architecture. For the vast majority of Windows users, your computer will likely be be using a x86 chip architecture, so you would select the Rtools45 installer option.\nIf your computer however uses the ARM chip architecture, you would select the 64-bit ARM Rtools45 installer instead. If you are unsure, see the following.\n\n\n\nNext, you will select the location to save the Rtools installer to. We generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nOnce downloaded, double click on the .exe to launch the Rtools installer.\n\n\n\nSimilar to what we did when installing R, go ahead and keep the defaults.\n\n\n\nAnd click install to proceed with the installation.\n\n\n\nAnd wait while the installation wraps up.\n\n\n\nIf all goes well, you should see the following installation success page." + }, + { + "objectID": "course/00_WorkstationSetup/Windows.html#installing-git", + "href": "course/00_WorkstationSetup/Windows.html#installing-git", + "title": "Installing Software on Windows", + "section": "Installing Git", + "text": "Installing Git\nGit is a version control software widely used among software developers and bioinformaticians. We will use it extensively throughout the course, both locally on our computers (to keep track of changes to our files), as well as in combination with GitHub(to maintain online backups of our files).\nWe will first navigate to the website and select the download from Windows option.\n\n\n\n\n\n\n\n\n\nWe will then proceed and select install 64-bit Git for Windows Setup option\n\n\n\n\n\n\n\nAs was the case with our installation of R and Rtools, a pop-up will appear asking for a location to save the installer to.\nOnce downloaded, double-click and proceed with the installation.\nYou will be asked to accept the Git License (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\nThen you will be asked to select the folder to save to software to (usually your Programs folder)\n\n\n\nAt this point, the Git installer will ask a series of increasingly niche questions. It is best to just accept all the default options, to avoid wandering too far down a “What is Vim?!?” rabbit-hole.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHaving made it through all the niche customization screens, we finally reach the install button.\n\n\n\nWe then can wait for the install to complete.\n\n\n\nAnd success, we have now installed Git." + }, + { + "objectID": "course/00_WorkstationSetup/Windows.html#installing-positron", + "href": "course/00_WorkstationSetup/Windows.html#installing-positron", + "title": "Installing Software on Windows", + "section": "Installing Positron", + "text": "Installing Positron\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\nWith the license accepted, you will be able to select your operating system. In this case, we will select Windows, specifally the user level install.\n\n\n\nPlease note, if you are using a Windows computer with an ARM based chip (like is the case with Snapdragons), you will need to download the installed from the Positron’s GitHub Release Page, as they are still testing some features.\n\n\nYou will then be prompted to select the location you want to save the installer to. We will generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nOnce the download is complete, double click on the installer, and again accept the license agreement.\n\n\n\nGenerally, Positron will be store its software folder under Program Files.\n\n\n\nNext up, accept the default options for the following screens\n\n\n\n\n\n\nAnd finally, click Install.\n\n\n\n \n\nIf all goes well, you should then see the installation success page." + }, + { + "objectID": "course/00_WorkstationSetup/index.html", + "href": "course/00_WorkstationSetup/index.html", + "title": "Workstation Setup", + "section": "", + "text": "In the previous section, we first set up your GitHub account. Then we modified your GitHub profile and added a README section. Finally, we forked the CytometryInR repository so that you can easily retrieve the new course materials each week.\nIt is now time to install the required software on your computer, which will get your work-station set up with everything needed for this course. Depending on your computers operating system, the installation requirements may differ a bit. In general, you will need to install the following software:\nR website : The programming language we will be using throughout the course.\nPositron : The integrated development environment (IDE) in which we will open, modify and run our code.\nGit : The version control software that will allow us to track changes to our files.\nAdditionally, Windows users will need to install:\nRTools : Used to build R packages from source code.\nYou can find the operating system specific installation walkthroughs below. Once you have completed your specific walkthrough, return to this page and proceed to the next section.\nPlease note: For those using university or company administered computers, please be aware that you may not have the necessary permissions to install these directly, and may need to reach out to your IT department to help get the software installed and running correctly.\nIf you are using your own computer, congratulations, you are your system administrator, and should already have the necessary permissions.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Workstation Setup" ] }, { - "objectID": "course/02_FilePaths/index.html#variables", - "href": "course/02_FilePaths/index.html#variables", - "title": "02 - File Paths", - "section": "Variables", - "text": "Variables\nBefore exploring file paths, we need to have some basic R code knowledge that we can use to work with them. Within R, we have the ability to assign particular values (be they character strings, numbers or logicals) to objects (ie. variables) that can be used when called upon later.\nFor example:\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\nIn this case, the variable name is what the assignment arrow (“<-”) is pointing at. In this case, WhatDayDidIWriteThis\n\n\nWhen we run this, we create a variable, that will appear within the right-sidebar.\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\n\n\n\nThese variables can subsequently be retrieved by printing (ie. running) the name of the variable\n\nWhatDayDidIWriteThis \n\n[1] \"Saturday\"\n\n\n\n\nYou can create variables with almost any name you can think of\n\nTopSecretMeetingDay <- \"Saturday\"\n\n\n\nWith a few exceptions. R doesn’t play well with spaces:\n\nTop Secret Meeting Day <- \"Saturday\"\n\nError in parse(text = input): <text>:1:5: unexpected symbol\n1: Top Secret\n ^\n\n\n\n\nBut does play well with underscores:\n\nTop_Secret_Meeting_Day <- \"Saturday\"\n\n\n\nThe above (with individual words separated by _) is collectively known as snake case. The alternate way to help delineate variable names is “camelCase”, with first letter of each word being capitalized (seen in the previous example).\n\n\n\n\nTopSecretMeetingDay\n\n[1] \"Saturday\"\n\n\n\n\nYou can overwrite a Variable name by assigning a different value to it:\n\nTopSecretMeetingDay <- \"Monday\"\n\n\nTopSecretMeetingDay\n\n[1] \"Monday\"\n\n\n\n\nYou can also remove individual variables via the rm function\n\nrm(Top_Secret_Meeting_Day)\n\n\n\nOr if trying to remove all, via the right sidebar\n\n\n\nIn the prior case, we are creating a variable that is a “string” of character values, due to our use of “” around the word. We can see this when we use the str() function.\n\nFluorophores <- \"FITC\"\nstr(Fluorophores)\n\n chr \"FITC\"\n\n\nThe “chr” in front denotating that Fluorophores contains a character string.\n\n\nThis could also be retrieved using the class() function.\n\nclass(Fluorophores)\n\n[1] \"character\"\n\n\n\n\nAlternatively, we could assign a numeric value to a variable\n\nFluorophores <- 29\nstr(Fluorophores)\n\n num 29\n\n\nWhich returns “num”, ie. numeric.\n\n\nWe can also specify a logical (ie. True or FALSE) to a particular object\n\nIsPerCPCy5AGoodFluorophore <- FALSE\nstr(IsPerCPCy5AGoodFluorophore)\n\n logi FALSE\n\n\nWhich returns logi in front, denoting this variable contains a logical value.\n\n\nLast week, when we were installing dplyr, the reason that installation failed was install.packages() expects a character string. However, when we left off the ““, it looked within our local environments created variables for the dplyr variable, couldn’t find it, and thus failed.\nWe could of course, have assigned a character value to a variable name, and then used that variable name, which would have worked.\n\nPackageToInstall <- \"dplyr\"\n\ninstall.packages(PackageToInstall)", + "objectID": "course/00_WorkstationSetup/index.html#windows", + "href": "course/00_WorkstationSetup/index.html#windows", + "title": "Workstation Setup", + "section": "Windows", + "text": "Windows\n\nInstallation walkthrough for Windows", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Workstation Setup" ] }, { - "objectID": "course/02_FilePaths/index.html#indexing", - "href": "course/02_FilePaths/index.html#indexing", - "title": "02 - File Paths", - "section": "Indexing", - "text": "Indexing\nNot all variables contain single objects.\nFor example, we can modify Fluorophores and add additional entries:\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nstr(Fluorophores)\n\n chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n\n\nThe c stands for concatenate. It concatenates the objects into a larger object, known as a vector.\nIn this case, you notice in addition to the specification the values are characters, we get a [1:4], denoting four objects are present.\n\n\nWe can similarly retrieve this information using the length() function\n\nlength(Fluorophores)\n\n[1] 4\n\n\n\n\nWhen multiple objects are present, we can specify them individidually by providing their index number within square brackets [].\n\nFluorophores[1]\n\n[1] \"BV421\"\n\n\n\n\n\nFluorophores[3]\n\n[1] \"PE\"\n\n\n\n\nOr specify in sequence using a colon (:)\n\nFluorophores[3:4]\n\n[1] \"PE\" \"APC\"\n\n\n\n\nOr if not adjacent, reusing c within the square brackets\n\nFluorophores[c(1,4)]\n\n[1] \"BV421\" \"APC\" \n\n\n\n\nWe will revisit these concepts throughout the course, with what we have covered today, this will help us create file.paths and select fcs files that we want to work with via index number.", + "objectID": "course/00_WorkstationSetup/index.html#macos", + "href": "course/00_WorkstationSetup/index.html#macos", + "title": "Workstation Setup", + "section": "MacOS", + "text": "MacOS\n\nInstallation walkthrough for MacOS", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Workstation Setup" ] }, { - "objectID": "course/02_FilePaths/index.html#listing-files", - "href": "course/02_FilePaths/index.html#listing-files", - "title": "02 - File Paths", - "section": "Listing Files", - "text": "Listing Files\nAfter this detour into variables and indexing, let’s return our focus to how to use these in context of file paths. Working from within our Week2 project folder, let’s see what directories (folders) are present\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)\n\n\n\n\nWe can also list any files that are present within our working directory using the list.files() function.\n\nlist.files()\n\n\nIn this case, in addition to our filepaths.qmd file, we can see the LICENSE and README files created when we set up the repository.\n\n\nWe can also specify a particular folder we want to show items present within by changing the path argument. For example, if we wanted to see the contents of the “data” folder\n\nlist.files(path=\"data\", full.names=FALSE, recursive=FALSE)\n\n\nWhich in this case returns the fcs files we copied over at the start of this lesson.\n\n\nIn this case, there are no folders under “data”. Let’s go ahead and create a new one, calling it target.", + "objectID": "course/00_WorkstationSetup/index.html#linux-debian", + "href": "course/00_WorkstationSetup/index.html#linux-debian", + "title": "Workstation Setup", + "section": "Linux (Debian)", + "text": "Linux (Debian)\n\nInstallation walkthrough for Linux", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Workstation Setup" ] }, { - "objectID": "course/02_FilePaths/index.html#creating-directories", - "href": "course/02_FilePaths/index.html#creating-directories", - "title": "02 - File Paths", - "section": "Creating directories", - "text": "Creating directories\nAlternatively, we can also create a folder via R using the dir.create() function. Since we want it within data, we would modify the path accordingly\n\nNewFolderLocation <- file.path(\"data\", \"target2\")\n\ndir.create(path=NewFolderLocation)\n\n\n\n\nBefore continuing, let’s copy the first two .fcs files into both target and target2.\n\n\n\nGiven our working directory is set the top-level of the Week2 project folder, we can’t just check inside nested target folders directly. If we attempt to:\n\nlist.files(path=\"target\", full.names=FALSE, recursive=FALSE)\n\ncharacter(0)\n\n\n\n\nNo files are returned (ie, character(0)), since from our computers perspective, “target” doesn’t exist within the active working directory.\n\nfile.exists(\"target\")\n\n[1] FALSE\n\n\n\n\nOn the other hand, within it’s view, it knows that the data folder exist\n\nfile.exists(\"data\")\n\n\nSo here we encounter the first challenge when communicating to our computer where to search for and find files. We need to provide a file.path that incorporates the path of folders between where the computer is currently at (ie. the working directory) and the target file itself.", + "objectID": "course/00_WorkstationSetup/MacOS.html", + "href": "course/00_WorkstationSetup/MacOS.html", + "title": "Installing Software on MacOS", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nThis is the software installation walkthrough for those whose computers are running MacOS. Based on our pre-course interest form, you make up a solid proportion of the course participants." + }, + { + "objectID": "course/00_WorkstationSetup/MacOS.html#installing-r", + "href": "course/00_WorkstationSetup/MacOS.html#installing-r", + "title": "Installing Software on MacOS", + "section": "Installing R", + "text": "Installing R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nYou will then select your Operating System, in this case, macOS\n\n\n\nNext, you will need to select the appropiate download based on your computers architecture. On newer Macs (containing M1+ chips) this would the arm64 option on the center left of the screen. For the older Intel (pre-2020) Macs, you would select the x86_64 option. If you are unsure, check your About This Mac tab\n\n\n\nAfter the download has completed, launch the installer\n\n\n\nProceed through the Read Me\n\n\n\nYou will then be prompted to acccept the software license (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\n\n\n\nNext, you will need to navigate through several pages, keeping the defaults.\n\n\n\nAnd with any luck, you should see that the installation was successful." + }, + { + "objectID": "course/00_WorkstationSetup/MacOS.html#xcode-command-line-tools", + "href": "course/00_WorkstationSetup/MacOS.html#xcode-command-line-tools", + "title": "Installing Software on MacOS", + "section": "Xcode Command Line Tools", + "text": "Xcode Command Line Tools\nDepending on your version of macOS, you may or may not already have Git installed on your computer. The reason is that it comes bundled within the Xcode Command Line Tools.\nIf this is not your first foray into coding, you may have previously seen an installation pop-up along the lines of “XYZ requires command line developer tools. Would you like to install the tools now?” when installing an IDE (like Positron, Rstudio or Visual Studio Code).\n\n\n\nSince these command line developer tools contain both Git, and also the equivalent of Rtools for Windows, we will need to install them for this course. To get started, first open your terminal.\n\n\n\nNext run the following code:\n\nxcode-select --install\n\n\n\n\nYou will then have the pop-up asking whether you want to install the command line tools (which contain Git). Select Install.\n\n\n\nYou will then be asked to accept the license\n\n\n\nYour installation will then proceed\n\n\n\nAnd if all goes well, the software will finish installing.\n\n\n\nAfter you complete Positron installation (next section), if you check the version control tab on the action bar on the far left side of the screen, you should see the following if Git was installed correctly.\n\n\n\nAlternatively, if you see this, you will need to reattempt the installation." + }, + { + "objectID": "course/00_WorkstationSetup/MacOS.html#install-positron", + "href": "course/00_WorkstationSetup/MacOS.html#install-positron", + "title": "Installing Software on MacOS", + "section": "Install Positron", + "text": "Install Positron\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\nWith the license accepted, you will be able to select your operating system and the relevant installer depending on whether you are on an M1+ (ARM) or older Intel (x86) Mac.\n\n\nOnce the Download completes, proceed to install the package as you normally would for any other program." + }, + { + "objectID": "course/00_Quarto/index.html", + "href": "course/00_Quarto/index.html", + "title": "Introduction to Quarto", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Quarto" ] }, { - "objectID": "course/02_FilePaths/index.html#file-paths", - "href": "course/02_FilePaths/index.html#file-paths", - "title": "02 - File Paths", - "section": "File Paths", - "text": "File Paths\nOne way we can do this is through a file.path argument. We could potentially provide this by adding either a / or a  into the path argument, depending on your computers operating system.\n\nlist.files(path=\"data/target\", full.names=FALSE, recursive=FALSE)\n\n\n\nWhile this works in your particular context, if you are sharing the code with others who have a different operating system, these hard-coded “/” or “\" will cause the code for them to error out at these particular steps.\n\nFor that reason, it is better to assemble a file.path using the file.path() function. This function takes into account the operating system, removing your need to have to worry about this particular computing nuance, and write code that is reproducible and replicable for everyone.\n\nFolderLocation <- file.path(\"data\", \"target\")\nFolderLocation\n\n[1] \"data/target\"\n\n\n\nlist.files(path=FolderLocation, full.names=FALSE, recursive=FALSE)\n\n\n\n\nWe can also append additional locations to existing file paths, by including the variable name within the file.path() we are creating.\n\nFolderLocation <- \"data\"\nScreenshotFolder <- file.path(FolderLocation, \"target\")\nScreenshotFolder\n\n[1] \"data/target\"\n\n\n\nlist.files(path=ScreenshotFolder, full.names=FALSE, recursive=FALSE)\n\n\n\n\nAdditionally, list.files() has the ability to filter for files that contain a particular character string. This can be useful is we are searching for “.fcs” or “.csv” files, but also for files that contain a particular word. In the case of the ScreenshotFolders\n\nlist.files(path=ScreenshotFolder, pattern=\"ND050\", full.names=FALSE, recursive=FALSE)\n\n\nYou will notice, the index numbers are in the context of what is filtered, not all the folder contents.", + "objectID": "course/00_Quarto/index.html#renderpreview", + "href": "course/00_Quarto/index.html#renderpreview", + "title": "Introduction to Quarto", + "section": "Render/Preview", + "text": "Render/Preview\nThe preview button, at the upper-left end of the Editor, is used to render/knit a quarto document. This triggers the process by which code-chunks are run, and then the outputs are cobbled together into the file format type designated by the YAML header.\n\n\n\n\nHTML\nIn this case, the YAML header’s format argument is set to html. After clicking preview, we can see the various rendering steps appear in the console below. Since no errors occured, the html document was formed succesfully and appears as a file in the left side-bar. Additional, a preview of the document appears in the View tab of the right side-bar, allowing for quick visual inspection.\n\n\n\nAlternatively, we can render a document via the terminal, by entering “quarto render”, followed by the name of the document.\n\n\n\nThis results similar process as what we saw with the preview button\n\n\n\nWe can also open the .html document via our File Explorer, which will open it within our web browser.\n\n\n\nQuarto documents can be rendered (previewed) in other formats besides html. These include pdf, Word documents (docx), and slides (revealjs). This is set by the format argument within the YAML header.\n\n\nPDF\nBy switching the format argument from html to pdf, we can render the document as a pdf\n\n\n\nWe can see the pdf is now listed in the list of files, with a preview shown on the right side-bar.\n\n\n\n\n\nDocx\nWe can also generate Word documents (.docx) as well.\n\n\n\nIn this case, we can see that a Word document file was created, but nothing appears in the View tab. This is because the format is not yet supported for the View tab. We can however open and view the Word document via our File explorer.\n\n\n\nWhich shows a Word Document style output.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Quarto" ] }, { - "objectID": "course/02_FilePaths/index.html#selecting-for-patterns", - "href": "course/02_FilePaths/index.html#selecting-for-patterns", - "title": "02 - File Paths", - "section": "Selecting for Patterns", - "text": "Selecting for Patterns\nIf we currently listed the files within data, we get a return that looks like this:\n\nlist.files(\"data\", full.names=FALSE, recursive=FALSE)\n\n\n\n\nAs you can see, we are getting back both folders and individual .fcs files. We could consequently change the pattern to provide a character string that will only return the .fcs files. We will go ahead and assign this list to a variable named files, for later retrieval.\n\nfiles <- list.files(\"data\", pattern=\".fcs\", full.names=FALSE, recursive=FALSE)\nfiles\n\n\n\n\nOne of the R packages we will be using througout the course is the stringr package. It contains two functions that can be useful when identifying more complicated character strings. In this case, if we run the str_detect() function to identify which of the .fcs files within the files variable contains the “INF” character string, we get a vector of logical (ie. True or FALSE) outputs corresponding to each file.\n\n# install.packages(\"stringr\") # CRAN\nlibrary(stringr)\n\n\nstr_detect(files, \"INF\")\n\n\n\n\nSimilar to how we indexed the Fluorophore list (ex. Fluorophore[1:2]) which returned a subset, we can similarly use this logical vector to subset files that returned as TRUE for containing the pattern “INF”\n\nfiles[str_detect(files, \"INF\")]\n\n\n\n\nLet’s go ahead and save these subsetted file names to a new variable, called Infants.\n\nInfants <- files[str_detect(files, \"INF\")]", + "objectID": "course/00_Quarto/index.html#yaml", + "href": "course/00_Quarto/index.html#yaml", + "title": "Introduction to Quarto", + "section": "YAML", + "text": "YAML\nWe can additionally provide additional custom inputs to the YAML header. A couple examples include providing the document author and date.\n\n\n\nWhich we can see are updated after we preview/render.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Quarto" ] }, { - "objectID": "course/02_FilePaths/index.html#conditionals", - "href": "course/02_FilePaths/index.html#conditionals", - "title": "02 - File Paths", - "section": "Conditionals", - "text": "Conditionals\nOne useful thing is that within R, we can set conditions on whether something is carried out. The most typical conditional you will encounter are the “If” statements. They typically take a form that resembles the following.\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n\n\nIn this case of the above, if the variable within the () is equal to true, the code within the {} will be executed.\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n[1] \"Take a break\"\n\n\n\n\nBy contrast, when the variable within the () is equal to false, the code within the {} will not be executed.\n\nNeedCoffee <- FALSE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n\n\nThese “If” statements will trigger as long as the specified condition within the () is TRUE. For a different example:\n\nRowNumber <- 299\n2 + RowNumber > 300\n\n[1] TRUE\n\n\n\nif (2 + RowNumber > 3){\n print(\"Stop Iterating\")\n}\n\n[1] \"Stop Iterating\"\n\n\n\n\nWhen you add an ! in front a conditional, it flips the expected outcome.\n\nItsRaining <- TRUE\n\nif (ItsRaining){print(\"Bring an Umbrella\")}\n\n[1] \"Bring an Umbrella\"\n\n\n\n!ItsRaining\n\n[1] FALSE\n\n\n\nif (!ItsRaining){print(\"Bring an Umbrella\")}\n\n\nItsRaining <- TRUE\n\nif (!ItsRaining){print(\"Bring Sunglasses\")}\n\n\n\nWe will explore more complicated conditionals throughout the course, but for now, let’s implement a couple simple ones in the context of copying over the .fcs files in Infants over to a new target3 folder.", + "objectID": "course/00_Quarto/index.html#table-of-contents", + "href": "course/00_Quarto/index.html#table-of-contents", + "title": "Introduction to Quarto", + "section": "Table of Contents", + "text": "Table of Contents\nIn the previous section, we saw that we could provide headings and subheadings to our .qmd file by placing a # at the start of a line in the text portion of the document. A subheading was designated by a ##, with additional hierarchy being designated by appending an additional #.\n\n\n\nWe can use the heading information to generate a table of contents for our document. To do this, we add a toc argument to the yaml header, and set it to TRUE. After rendering, it appears on the upper-right side of the document.\n\n\n\nNotice, that the subheaders do not appear currently within the TOC.\n\n\n\nWe can fix this by setting a toc-expand argument in the YAML to true.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Quarto" ] }, { - "objectID": "course/02_FilePaths/index.html#conditionals-in-practice", - "href": "course/02_FilePaths/index.html#conditionals-in-practice", - "title": "02 - File Paths", - "section": "Conditionals in practice", - "text": "Conditionals in practice\nFirst off, let’s write a conditional to check if there is a target3 folder within data.\n\nfiles_present <- list.files(\"data\", full.names=FALSE, recursive=FALSE)\nfiles_present\n\n\n\n\n\nFolderTarget3 <- file.path(\"data\", \"target3\")\ndir.exists(FolderTarget3)\n\n\n\n\nWe can write a conditional to create a folder if one does not yet exist.\n\nif (!dir.exists(FolderTarget3)){\n dir.create(FolderTarget3)\n}", + "objectID": "course/00_Quarto/index.html#code-chunk-arguments", + "href": "course/00_Quarto/index.html#code-chunk-arguments", + "title": "Introduction to Quarto", + "section": "Code Chunk Arguments", + "text": "Code Chunk Arguments\nAs we briefly touched on in the last section, code-chunks can be modified by including arguments, which affect whether a particular code chunk gets evaluated. In that example, we included a “#| eval: FALSE” to the install commands since we did not want them to be re-run subsequently. We will take a closer look at the other arguments in this section.\n\nEval\nThe code-chunk argument, “Eval”, is used to determine when a code-chunk get’s evaluated. When set to true (or by default if no eval argument is included), the code-chunks contents will be run/executed, and the output will appear. We can see this in the html output, as below the code block, we get back the address of my working directory.\n\n\n\nWhen we switch the Eval argument to FALSE, and then render the document, we can see that the code block remains, but we do not get any output for the code contained within.\nIn every-day practice, we will “use eval: FALSE” arguments when we want to keep the code for later use, but want to manually run the code contained within ourselves.\n\n\n\n\n\nEcho\nThe code-block argument “echo” dictates whether the code within the code-block is displayed within the document. So in the case when “echo: true”, we get both the code displayed, as well as the output that gets returned by the code.\n\n\n\nBy contrast, when “echo: FALSE”, we do not have the code displayed, but do get the output of that code being run.\nIn daily-practice, “echo: FALSE” gets often used when generating plots that we want to include in the report, without the code that generated them being displayed.\n\n\n\n\n\nInclude\nThe next code-chunk argument is include. Unlike echo, which focuses on whether the code is displayed, but still returns the output, include dictates behavior of both the code-block and it’s output. Unlike eval however, it will still run the code, which allows it to be available for the next code-chunk that might need it. When we set “include: false”, no trace of that code-chunk is present in the document. This is useful when making reports where we do not want to include the code used to generate a particular figure.\n\n\n\nBy contrast, when we set “include: true”, the code block and it’s output is once again included within the rendered document.\n\n\n\n\n\nCode-Fold\nOne of my favorites is “code-fold”. When we set it as “code-fold: show”, it displays the code, but provides a drop-down arrow that can be closed to compress the code.\n\n\n\nIn contrast, if we want to make the code-available for those that are interested, but not directly visible, we can set as “code-fold: true”\n\n\n\n\n\nWarnings\nWithin R, when code is executed, in addition to returning the output, R is capable of returning warnings (when something is not as expected, but not sufficient to elicit an error with a complete stop) or a message (text output that gets displayed, often telling about progress). While these are useful when running code yourself, it can be annoying when generating a report and the 2nd page is a bunch of warning text being displayed.\nFor example, when the R package ggcyto is loaded via the library call, it will automatically load several other packages, which typically results in these messages being outputted:\n\n\n\nWe can therefore set that code-chunk’s warning/message arguments to FALSE, therefore silencing the message outputs that would otherwise clutter up our report.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Quarto" ] }, { - "objectID": "course/02_FilePaths/index.html#copying-files", - "href": "course/02_FilePaths/index.html#copying-files", - "title": "02 - File Paths", - "section": "Copying Files", - "text": "Copying Files\nTo copy files to another folder location, we use the file.copy() function. It has two arguments that we will be working with, from being the .fcs files, and to being the folder location we wish to transfer them to. If we tried using them as we currently have them:\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)\n\n\n\n\nThe reason for this error is we are only working with a partial file path, as viewed from our Working directory. In this case, what is needed is the full file.path, so the file.path should also include the upstream folders from your current working directory.\n\ngetwd()\n\n\n\n\nIn this case, we can update the .fcs files location by switching the full.names argument within list.files() from FALSE, to TRUE.\n\nfiles_present <- list.files(\"data\", full.names=TRUE, recursive=FALSE)\nfiles_present\n\n\nAnd filter for those containing “INF” again\n\nInfants <- files_present[str_detect(files_present, \"INF\")]\n\nAnd then try again:\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)", + "objectID": "course/00_Quarto/index.html#text-styles", + "href": "course/00_Quarto/index.html#text-styles", + "title": "Introduction to Quarto", + "section": "Text Styles", + "text": "Text Styles\nQuarto primarily uses Markdown for text styling. Consequently, markdown arguments can be used within the text to change how various text appears.\n\n\n\nFor a regular text, This single asterisk on each side of a word will italicize.\n\n\n\nWhen the number of asterisk is doubled, This word is bolded.\n\n\n\nWhen three asterisk are used, both are applied.\n\n\n\nFor an underscore, the word of interest is surrounded by square brackets “[]”, with “{.underline}” adjacent.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Quarto" ] }, { - "objectID": "course/02_FilePaths/index.html#removing-files.", - "href": "course/02_FilePaths/index.html#removing-files.", - "title": "02 - File Paths", - "section": "Removing files.", - "text": "Removing files.\nJust like we can add files via R, we can also remove them. However, when we remove them via this route, they are removed permanently, not sent to the recycle bin. We will revisit how later on in the course after you have gained additional experience with file.paths.\n\n?unlink()", + "objectID": "course/00_Quarto/index.html#hyperlinks", + "href": "course/00_Quarto/index.html#hyperlinks", + "title": "Introduction to Quarto", + "section": "Hyperlinks", + "text": "Hyperlinks\nYou can link to a website by surrounding word of interest in [] and placing the url within () adjacent to it.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Quarto" ] }, { - "objectID": "course/02_FilePaths/index.html#basename", - "href": "course/02_FilePaths/index.html#basename", - "title": "02 - File Paths", - "section": "Basename", - "text": "Basename\nIf we look at Infants with the full.names=TRUE, we see the additional pathing folder has been added, allowing us to successfully copy over the files.\n\nInfants\n\n\n\n\nIf we were trying to retrieve just the local file names from the full.names, we could do so with basename() function. We will use this in combination with additional arguments later in the course\n\nbasename(Infants)", + "objectID": "course/00_Quarto/index.html#images", + "href": "course/00_Quarto/index.html#images", + "title": "Introduction to Quarto", + "section": "Images", + "text": "Images\nYou can place images by adding the following, as long as the file.path to the image is correctly formatted. In my case, this is why I include images folders within my folders to simplify the copy and paste.", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Quarto" ] }, { - "objectID": "course/02_FilePaths/index.html#recursive", - "href": "course/02_FilePaths/index.html#recursive", - "title": "02 - File Paths", - "section": "Recursive", - "text": "Recursive\nAnd finally that we have created additional nested folders and populated them with fcs files, let’s see what setting list.files() recursive argument to TRUE\n\nall_files_present <- list.files(full.names=TRUE, recursive=TRUE)\nall_files_present \n\n\n\n\nIn this case, all files in all folders within the working directory are shown. This can be useful when exploring folder contents, but if there are a lot of files present within the folder, it will take a while to return the list.", + "objectID": "course/00_Positron/index.html", + "href": "course/00_Positron/index.html", + "title": "Using Positron", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Positron" ] }, { - "objectID": "course/02_FilePaths/index.html#saving-changes-to-version-control", - "href": "course/02_FilePaths/index.html#saving-changes-to-version-control", - "title": "02 - File Paths", - "section": "Saving changes to Version Control", - "text": "Saving changes to Version Control\nAnd as is good practice, to maintain version control, let’s stage all the files and folders we created today within the Week2 Project Folder, write a commit message, and send these files back to GitHub until they are needed again next time.", + "objectID": "course/00_Positron/index.html#console", + "href": "course/00_Positron/index.html#console", + "title": "Using Positron", + "section": "Console", + "text": "Console\nAt the bottom of the sceen, you will first see the Console Tab. This is the tab where your lines of code when executed (run) will appear, as well as any messages, warnings or errors that get returned. On the right side of the console, you can find several buttons, among them restart R and delete session (for when you need a fresh start), and clear console (which keeps all previously run outputs and objects, but clears away the displayed text within the console).", "crumbs": [ "About", - "Intro to R", - "02 - File Paths" + "Getting Started", + "00 - Positron" ] }, { - "objectID": "course/02_FilePaths/slides.html#set-up", - "href": "course/02_FilePaths/slides.html#set-up", - "title": "02 - File Paths", - "section": "Set Up", - "text": "Set Up\n\n\n\n\n\n\n\n\n.\n\n\nBefore we begin, let’s make sure you get the data needed for today transferred to your local computer, and then get the .fcs files copied over from there to your own working project folder. This is the process you will repeat each week throughout the course." - }, - { - "objectID": "course/02_FilePaths/slides.html#working-directory", - "href": "course/02_FilePaths/slides.html#working-directory", - "title": "02 - File Paths", - "section": "Working Directory", - "text": "Working Directory\n\n\n\n\n\n\n\n\n.\n\n\nNow that we are back in our Week2 folder, let’s start by seeing our current location similarly to how our computer perceives it.\nWe will use getwd() function (ie. get working directory) to return the location of the folder we are currently inside of. For example, when getwd() is run within my Week2 project folder, I see the following location" + "objectID": "course/00_Positron/index.html#terminal", + "href": "course/00_Positron/index.html#terminal", + "title": "Using Positron", + "section": "Terminal", + "text": "Terminal\nRight next to the Console tab is your Terminal tab. While the console tab is primarily used to run R code within Positron, the terminal is the interface where code containing system commands directed at at your computer is entered. We will use this less frequently, primarily in two context: 1) rendering Quarto documents, and 2) commiting changes to version control. Among the buttons on the right-side of the terminal to make note of are the + button to add a new terminal, and the trash/garbage can button to kill (stop) the terminal.\n\n\n\nThe other tabs (Problems, Output, Ports, Debug Console) are used less frequently. I usually will Problems and Debug when something goes wrong with the code, as various warning and error messages will end up being displayed there.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/02_FilePaths/slides.html#directories", - "href": "course/02_FilePaths/slides.html#directories", - "title": "02 - File Paths", - "section": "Directories", - "text": "Directories\n\n\n\n\n\n\n\n\n.\n\n\nWithin this working directory, we have a variety of project folders and files related to the course. We can see the folders that are present using the list.dirs() function.\n\n\n\n\n\n\n\n\n\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)" + "objectID": "course/00_Positron/index.html#help", + "href": "course/00_Positron/index.html#help", + "title": "Using Positron", + "section": "Help", + "text": "Help\nWhen trying to evaluate how a particular function is working in R, you can hover over it and positron will open up the documentation for that particular function if available, alternatively, you can enter ?theParticularFunctionsName in the console and hit enter to similarly view what is occuring.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/02_FilePaths/slides.html#variables", - "href": "course/02_FilePaths/slides.html#variables", - "title": "02 - File Paths", + "objectID": "course/00_Positron/index.html#variables", + "href": "course/00_Positron/index.html#variables", + "title": "Using Positron", "section": "Variables", - "text": "Variables\n\n\n\n\n\n\n\n\n.\n\n\nBefore exploring file paths, we need to have some basic R code knowledge that we can use to work with them. Within R, we have the ability to assign particular values (be they character strings, numbers or logicals) to objects (ie. variables) that can be used when called upon later.\nFor example:\n\n\n\n\n\n\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\n\n\n\n\n\n\n\n\n\n.\n\n\nIn this case, the variable name is what the assignment arrow (“<-”) is pointing at. In this case, WhatDayDidIWriteThis" + "text": "Variables\nOn the upper-portion of the Secondary Side Bar, we can find the Session window, containing the Variables tab. As you run (execute) lines of code, and different variables, objects and functions are created, these become visible under the variables tab on the upper right.\n\n\n\nFor some types of objects (generally data.frames and other matrix-like objects), you can click on their listing under variables to expand to see additional details about the object (column names, etc.) as well as view a larger version which will appear within the Editor window.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/02_FilePaths/slides.html#indexing", - "href": "course/02_FilePaths/slides.html#indexing", - "title": "02 - File Paths", - "section": "Indexing", - "text": "Indexing\n\n\n\n\n\n\n\n\n.\n\n\nNot all variables contain single objects.\nFor example, we can modify Fluorophores and add additional entries:\n\n\n\n\n\n\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nstr(Fluorophores)\n\n chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n\n\n\n\n\n\n\n\n\n\n\n.\n\n\nThe c stands for concatenate. It concatenates the objects into a larger object, known as a vector.\nIn this case, you notice in addition to the specification the values are characters, we get a [1:4], denoting four objects are present." + "objectID": "course/00_Positron/index.html#plots", + "href": "course/00_Positron/index.html#plots", + "title": "Using Positron", + "section": "Plots", + "text": "Plots\nSimilarly, any generated Plots or Documents will appear within the Secondary Side Bar, either under Plots (bottom) or Viewer (top) tabs.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/02_FilePaths/slides.html#listing-files", - "href": "course/02_FilePaths/slides.html#listing-files", - "title": "02 - File Paths", - "section": "Listing Files", - "text": "Listing Files\n\n\n\n\n\n\n\n\n.\n\n\nAfter this detour into variables and indexing, let’s return our focus to how to use these in context of file paths. Working from within our Week2 project folder, let’s see what directories (folders) are present\n\n\n\n\n\n\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)" + "objectID": "course/00_Positron/index.html#view", + "href": "course/00_Positron/index.html#view", + "title": "Using Positron", + "section": "View", + "text": "View\nOn the upper bar multiple tabs can be found, which we will explore in due time. Most useful to point out is the View tab. If you accidentally close your console, session or plots window, and are trying to get them to reapper, you would need to reselect them from this tab.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/02_FilePaths/slides.html#creating-directories", - "href": "course/02_FilePaths/slides.html#creating-directories", - "title": "02 - File Paths", - "section": "Creating directories", - "text": "Creating directories\n\n\n\n\n\n\n\n\n.\n\n\nAlternatively, we can also create a folder via R using the dir.create() function. Since we want it within data, we would modify the path accordingly\n\n\n\n\n\n\n\nNewFolderLocation <- file.path(\"data\", \"target2\")\n\ndir.create(path=NewFolderLocation)" + "objectID": "course/00_Positron/index.html#pages", + "href": "course/00_Positron/index.html#pages", + "title": "Using Positron", + "section": "Pages", + "text": "Pages\nThe pages tab and the left-side bar show you everything that is currently within your project folder, including all the folders, and files. Once version control with Git is initiated, new files are relected showing up as green text and a dot, while modified tracked files are reflected by light brown text and a dot.\n\n\n\nThe dropdown arrows can be used to open and close specific folders to allow for better organization. There is also a scrollbar on the right-side of the side-bar to scroll through the entire folders contents.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/02_FilePaths/slides.html#file-paths", - "href": "course/02_FilePaths/slides.html#file-paths", - "title": "02 - File Paths", - "section": "File Paths", - "text": "File Paths\n\n\n\n\n\n\n\n\n.\n\n\nOne way we can do this is through a file.path argument. We could potentially provide this by adding either a “/” or a “\" into the path argument, depending on your computers operating system.\n\n\n\n\n\n\n\nlist.files(path=\"data/target\", full.names=FALSE, recursive=FALSE)" + "objectID": "course/00_Positron/index.html#search", + "href": "course/00_Positron/index.html#search", + "title": "Using Positron", + "section": "Search", + "text": "Search\nThe search tab on the left side bar is something that I use routinely.\n\n\n\nIt can help locate code that you had been working on, but have since forgotten where it is at. Here is an example of finding the files where I had used a function that needed modifying within a local project folder’s files.\n\n\n\nSimilarly, if you need to replace a particular character string with another, the replace with field below can help simplify the task without having to track down and change 20 lines across 5 files.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/02_FilePaths/slides.html#selecting-for-patterns", - "href": "course/02_FilePaths/slides.html#selecting-for-patterns", - "title": "02 - File Paths", - "section": "Selecting for Patterns", - "text": "Selecting for Patterns\n\n\n\n\n\n\n\n\n.\n\n\nIf we currently listed the files within data, we get a return that looks like this:\n\n\n\n\n\n\n\nlist.files(\"data\", full.names=FALSE, recursive=FALSE)" + "objectID": "course/00_Positron/index.html#extensions", + "href": "course/00_Positron/index.html#extensions", + "title": "Using Positron", + "section": "Extensions", + "text": "Extensions\nOn the far-left side we can find the Activity bar, which contains several tabs. Which tab you have selected will then dictate the contents of your left side-bar.\nOccupying the left side bar are several tabs. One of these is Extensions, which shows “Plugins” (or the VScode equivalent) that extend the functionality of Positron further. The ones you have installed may vary, but the main ones in context of this course are Air (provides color and highlights syntax for R code to make interpretation easier) as well as Quarto (for rendering the various document types).", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/02_FilePaths/slides.html#conditionals", - "href": "course/02_FilePaths/slides.html#conditionals", - "title": "02 - File Paths", - "section": "Conditionals", - "text": "Conditionals\n\n\n\n\n\n\n\n\n.\n\n\nOne useful thing is that within R, we can set conditions on whether something is carried out. The most typical conditional you will encounter are the “If” statements. They typically take a form that resembles the following.\n\n\n\n\n\n\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}" + "objectID": "course/00_Positron/index.html#git", + "href": "course/00_Positron/index.html#git", + "title": "Using Positron", + "section": "Git", + "text": "Git\nThe Git tab on the left side bar is where once version control is initiated for the project folder, we can see changes that have occurred to the individual files since the last commit. These changes can be added to a new commit by clicking on the + sign. This will be covered more extensively in the next section\n\n\n\nSimilarly, if you want to discard a change that has occured, the circular arrow will revert to the last commited version. Selecting and pressing the delete button will similarly work.\n\n\n\nSelecting the … options will highlight all the various git functions, some of which we will cover more extensively in the next section and throughout the course.", + "crumbs": [ + "About", + "Getting Started", + "00 - Positron" + ] }, { - "objectID": "course/02_FilePaths/slides.html#conditionals-in-practice", - "href": "course/02_FilePaths/slides.html#conditionals-in-practice", - "title": "02 - File Paths", - "section": "Conditionals in practice", - "text": "Conditionals in practice\n\n\n\n\n\n\n\n\n.\n\n\nFirst off, let’s write a conditional to check if there is a target3 folder within data.\n\n\n\n\n\n\n\nfiles_present <- list.files(\"data\", full.names=FALSE, recursive=FALSE)\nfiles_present" + "objectID": "course/00_Homeworks/index.html", + "href": "course/00_Homeworks/index.html", + "title": "Getting Help", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "crumbs": [ + "About", + "Getting Started", + "00 - Getting Help" + ] }, { - "objectID": "course/02_FilePaths/slides.html#copying-files", - "href": "course/02_FilePaths/slides.html#copying-files", - "title": "02 - File Paths", - "section": "Copying Files", - "text": "Copying Files\n\n\n\n\n\n\n\n\n.\n\n\nTo copy files to another folder location, we use the file.copy() function. It has two arguments that we will be working with, from being the .fcs files, and to being the folder location we wish to transfer them to. If we tried using them as we currently have them:\n\n\n\n\n\n\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)" + "objectID": "course/00_Homeworks/index.html#discussions-forum", + "href": "course/00_Homeworks/index.html#discussions-forum", + "title": "Getting Help", + "section": "Discussions Forum", + "text": "Discussions Forum\nOn the course’s GitHub repository, we have opened up a Discussions page that we plan to use as a community forum. We hope that it will serve multiple functions, from providing a better sense of community for the online participants, to facilitating asking and receiving help on something that is not clear, provide feedback about something that it not working out, as well as a place to celebrate and show off your coding wins.\n\nTo keep the Discussions forum semi-organized, we have set up several categories, please select the appropiate category when opening a new discussion!\n\n\n\nCode of Conduct\n\nWe ask that all course participants read and adhere to the spirit of our Code of Conduct. We are all human, at different points in our learning journeys, so what may be obvious to you at your point of your learning journey may have necessarily be obvious to someone just getting started. This course is our giving back to those in the community, but is on a voluntary basis in addition to our regular workload. While we try to reply quickly, sometimes our cell sorters fully melt down sending everything into chaos. We will reply when we can.\n\n\n\n\nAnnouncements\n\nWhen we send out an email to all participants, we will also repost it as an announcement. This ensures that even if you are not on our mailing list, you will still be able to have access to important information and course updates.\n\n\n\n\n\n\n\nGeneral\n\nThis section category can be used for any discussions that you think are worth having, that don’t fall under any of the other category. Good examples are continuing a discussion that was held during one of the livestreams; wanting to discuss and dive further into a given week’s topic; or bringing in additional resources that you found useful to understandingn something that didn’t click initially. This space is for the community to shape as they see best.\n\n\n\n\n\n\n\nIdeas\n\nHave an idea for a new topic or a way to improve the course? We would love to hear them. Provide as many details, and ideally, an example, and if it is doable, we will try to implement them.\n\n\n\n\n\n\n\nIntroductions\n\nOnline courses can be odd in terms of replicating in-person dynamics. Fortunately, we have gathered the largest cohort of “cytometrist with no-to-little flow experience trying to learn R at the same time” that the world has ever seen, so best to take advantage of this while we can. Treat this section as if we had just met at a conference, tell us about yourself, what brings you here, and what you want to hopefully be able to do after the course ends.", + "crumbs": [ + "About", + "Getting Started", + "00 - Getting Help" + ] }, { - "objectID": "course/02_FilePaths/slides.html#removing-files.", - "href": "course/02_FilePaths/slides.html#removing-files.", - "title": "02 - File Paths", - "section": "Removing files.", - "text": "Removing files.\n\n\n\n\n\n\n\n\n.\n\n\nJust like we can add files via R, we can also remove them. However, when we remove them via this route, they are removed permanently, not sent to the recycle bin. We will revisit how later on in the course after you have gained additional experience with file.paths.\n\n\n\n\n\n\n\n?unlink()" + "objectID": "course/00_Homeworks/index.html#polls", + "href": "course/00_Homeworks/index.html#polls", + "title": "Getting Help", + "section": "Polls", + "text": "Polls\n\nOccasionally, we will need to gather community feedback on what is working and what is not working. We will sporadically post Polls for this purpose.\n\n\n\n\n\n\nQ&A\n\nThe Questions and Answers (Q&A) section is where you go if something is not clear, not working, and you are trying to troubleshoot your way through it. First thing before posting, search! to see if someone has already asked the question. If you don’t find anything, go ahead and open a new discussion.\nSince we are not at your computer, and don’t have your dataset, when troubleshooting it is best to include a minimal reproducible example of the issuen you are encountering, slimming down the number of files needed to be transferred, and generalizing down the code so that other course participants and instructors can follow along. If this is not doable, or if the problem requires added context (and larger files), create a new repository on your GitHub, make it public, and share the links to it in your post. The goal would be to download the folder and be able to replicate the issue that you are encountering.\n\n\n\n\n\n\n\n\n\n\nShow and Tell\n\nWhere Q&A section is for getting help on code that is frustratingly not working, Show and Tell is where to go and celebrate when you finally get things to work. Share your wins, show us the extra pretty graphs, bizarre autofluorescence signatures, or odd outputs that just make you laugh.", + "crumbs": [ + "About", + "Getting Started", + "00 - Getting Help" + ] }, { - "objectID": "course/02_FilePaths/slides.html#basename", - "href": "course/02_FilePaths/slides.html#basename", - "title": "02 - File Paths", - "section": "Basename", - "text": "Basename\n\n\n\n\n\n\n\n\n.\n\n\nIf we look at Infants with the full.names=TRUE, we see the additional pathing folder has been added, allowing us to successfully copy over the files.\n\n\n\n\n\n\n\nInfants" + "objectID": "course/00_Homeworks/index.html#issues", + "href": "course/00_Homeworks/index.html#issues", + "title": "Getting Help", + "section": "Issues", + "text": "Issues\nMost of the time, if you are having trouble getting you code to run, you should first stop after some initial troubleshooting should be to open a new Discussion under the Q&A category. Here you will be able to get both community and instructor help and suggestions to hopefully resolve whatever is going on.\n\nThe Issues page is primarily meant for course-specific problems that require the course instructor intervention to fix. For example, we release a new week of material, and while it runs fine for both Windows and Linux, the code fails to run for all MacOS users. While you may be able to find workarounds on your own, it’s ultimately our responsibility to help provide a solution so that everyone can move forward. This is the situation where opening an Issue is appropiate.\n\n\n\nSimilarly, if our code contains a wrong argument, is returning a deprecation warning, etc. open an issue to let us know. While we may not be able to fix something that is not directly related to our code, we can redirect it to the package maintainers so that they can fix the issue.\nAnd likewise, if you find multiple typos in the documentation, you can open an issue and propose carrying out a pull-request to fix them.", + "crumbs": [ + "About", + "Getting Started", + "00 - Getting Help" + ] }, { - "objectID": "course/02_FilePaths/slides.html#recursive", - "href": "course/02_FilePaths/slides.html#recursive", - "title": "02 - File Paths", - "section": "Recursive", - "text": "Recursive\n\n\n\n\n\n\n\n\n.\n\n\nAnd finally that we have created additional nested folders and populated them with fcs files, let’s see what setting list.files() recursive argument to TRUE\n\n\n\n\n\n\n\nall_files_present <- list.files(full.names=TRUE, recursive=TRUE)\nall_files_present" + "objectID": "course/00_Homeworks/index.html#submitting-take-home-problems", + "href": "course/00_Homeworks/index.html#submitting-take-home-problems", + "title": "Getting Help", + "section": "Submitting Take-Home Problems", + "text": "Submitting Take-Home Problems\nEach week, during the course, we introduce and cover the main concepts for the particular concept. Our goal is to provide you with the necessary code and enough code to be able to get the jist. However, to become comfortable and be able to apply what you have learned, you will need to explore beyond our examples, try it with your own datasets, encounter things that don’t work, and troubleshoot your way through them. It’s this cycle of venturing into the unknown that develops strong coding skills that are needed to overcome any barrier you encounter. The goal of the take-home questions is to provide some less curated problems that will take a little longer to answer to help get you started on your own exploration of the topic.\nAs previously mentioned, these take-home problems are completely optional. If you are in the middle of solving them and want to seek feedback from then community and course instructors, open a Discussion under the general category is the way to go.\nHowever, if you have completed them, and want course instructor feedback, you can submit them to us in the form of a pull-request to the CytometryInR repo’s homework branch. We will take a look, offer constructive suggestions, and when ready merge the solution. This will also result in GitHub listing you as a contributor to the course.\nWe will outline the basic steps of how to set up and open a pull-request, to help simplify the process.\n\nSync your Fork\nFirst off, make sure to Sync your fork of the Cytometry in R project. That makes sure that all the commits present are up-to-date and simplifies the process of having the pull-request being merged.\n\n\n\n\n\n\n\n\n\n\n\nPull to Local\nHaving Synced your branch on GitHub, return to your computer, open the CytometryInR repository and pull in the changes locally.\n\n\n\n\nCreate own Folder under Homeworks\nUnder the course folder, you will find folders for each week. Within these folders find the homework folder. This will appear empty except for a README file with ionstructions. It is within this folder you will need to create your own folder.\nTo ensure there are no conflicts on the pull-request merge, please use your GitHub username as the folder name.\n\n\n\nOnce you have your folder inside homework, go ahead and copy anything you are turning in from their respective working project folders. Remember, the goal is minimal reproducible example is the goal. Rendered Quarto Documents are preferred, but we will also accept scripts and small data files and images. a README.MD file with anything you want me to know,\n\n\n\n\n\n\n\n\nSign off Commit\nNow that everything is present, Sign Off and Commit the change.\n\n\n\n\n\nPush Branch to GitHub.\nProceed to push the branch to GitHub.\n\n\n\n\n\nRe-sync if necessary\nIf additional changes have occured to the parent CytometryInR repository, go ahead and update your branch. As long as your edits occurred within your folder inside homework folders, they should still be able to merge.\n\n\n\n\n\n\n\n\nOpen a pull-request\nTo start a pull request, click to see how your commit is ahead by\n\n\n\nNext, switch from the parent CytometryInR main branch (used for the website and course) to the homework branch for that respective week (used for the take-home problems).\n\n\n\nOnce this is done, select Pull request\n\n\n\nMake sure to triple check it’s bound for the homeworks branch. If you see that it is not capable of merging, verify that your commit only contains files within your respective homework username folder. Fill in the required fields of the pull request.\n\n\n\nAnd when ready, create the pull request.\n\n\n\n\nWait for Feedback\nOn our end, once you have created a pull request, we will review your work, offer constructive suggestions, etc. If I ask for revisions, all you would need to do is update your files, commit again on your side of the local forked repository.\n\n\n\n\n\nFinal Review and Merge\nIf all is good, we will merge the pull request and your solution to the take-home problems will now be available on the homework branch.\n\n\n\n\n\nAfter course\nAfter the course completes, we will merge homework branch with the main branch, making the community solutions to the take-home problems additional coding examples that can be used by others following along after the course concludes.", + "crumbs": [ + "About", + "Getting Started", + "00 - Getting Help" + ] }, { - "objectID": "course/02_FilePaths/slides.html#saving-changes-to-version-control", - "href": "course/02_FilePaths/slides.html#saving-changes-to-version-control", - "title": "02 - File Paths", - "section": "Saving changes to Version Control", - "text": "Saving changes to Version Control\n\n\n\n\n\n\n\n\n.\n\n\nAnd as is good practice, to maintain version control, let’s stage all the files and folders we created today within the Week2 Project Folder, write a commit message, and send these files back to GitHub until they are needed again next time." + "objectID": "course/00_GitHub/index.html", + "href": "course/00_GitHub/index.html", + "title": "Using GitHub", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] }, { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#checking-for-loaded-packages", - "href": "course/01_InstallingRPackages/slides_inperson.html#checking-for-loaded-packages", - "title": "01 - Installing R Packages", - "section": "Checking for Loaded Packages", - "text": "Checking for Loaded Packages\n\n\n\n\n\n\n\n\n.\n\n\nFor the contents (ie. the functions) of an R package to be available for your computer to use, they must first be activated (ie. loaded) into your local environment. We will first learn how to check what R packages are currently active." + "objectID": "course/00_GitHub/index.html#creating-an-account", + "href": "course/00_GitHub/index.html#creating-an-account", + "title": "Using GitHub", + "section": "Creating an Account", + "text": "Creating an Account\nWe will first navigate to the GitHub homepage. If you haven’t previously created an account, click on the button to sign up for an account.\n\n\n\nOn the sign-up page, you will fill in various details needed to create an account. Please remember that GitHub usernames are visible to others. Additionally, if you end up sharing code with others as part of a manuscript, or use GitHub to create a personal portfolio website in the future, your username will appear as part of the URL.\nFor example, in my case, my user name is DavidRach, so my GitHub profile ends up as: https://github.com/DavidRach. For our course, the core’s GitHub user name is UMGCCCFCSR, so the github profile ends up as https://github.com/UMGCCCFCSR, while the course website ends up as https://umgcccfcsr.github.io/CytometryInR/\n\n\n\nOnce you have entered your new account information, you will need your account creation by entering the code sent to the email address that you provided.\n\n\n\nOnce account creation has been confirmed, please proceed to login to GitHub for the first time.", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] }, { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#installing-from-cran", - "href": "course/01_InstallingRPackages/slides_inperson.html#installing-from-cran", - "title": "01 - Installing R Packages", - "section": "Installing from CRAN", - "text": "Installing from CRAN\n\n\n\n\n\n\n\n\n.\n\n\nWe will start by installing R packages that are part of the CRAN repository. This is the main R package repository, being part of the broader R software project. In the context of this course, R packages that work primarily with general data structure (rows, columns, matrices, etc.) or visualizations will predominantly be found within this repository.\nThese include the tidyverse packages. These packages have collectively made R easier to use by smoothing out some of the rough edges of base R, which is why R has seen major growth within the last decade. We will be installing several of these R packages today." + "objectID": "course/00_GitHub/index.html#github-profile", + "href": "course/00_GitHub/index.html#github-profile", + "title": "Using GitHub", + "section": "GitHub Profile", + "text": "GitHub Profile\nUpon creating a brand new account, your GitHub homepage will initially look rather empty, and can be intimidating to navigate for the first time.\nFor now, on the upper right, go ahead and click on the default profile picture icon…\n\n\n\nAnd then select Profile…\n\n\n\nYou are now on your public GitHub profile page. For a newly created account, it will look something like this:\n\n\n\nFor a more established account, this page will look a little different, and can be customized to highlight various projects that you are working on.\nFor this course, we will have you set up a basic GitHub profile page for now, although you are free to customize and personalize it as much as you may want to in the future!\nTo start, first select the edit profile button on the left below the default profile icon.\n\n\n\nYou can then proceed to fill in any details that you feel are relevant and are comfortable sharing.\n\n\n\nWith the quick access details filled in, it is now time to navigate to the Settings tab. You will return to the previous menu dropdown on the upper right, and instead of selecting Profile, click on the Settings option.\n\n\n\nYou should now end up within your Public Profile Settings page.\nFeel free to edit the default profile picture, and any other fields that you feel are relevant. Once done, continue to scroll down the page past ORCID ID.\n\n\n\nWhen you reach Contributions and Activity, go ahead and select the option to include private repositories in the activity summary graphic. Then scroll down and click save. You will now be returned to your GitHub profile page.\n\n\n\nAt the top of the profile, you will see a “Your contributions” calendar graph. For a new account, it will look like this:\n\n\n\nIf you are just starting out, this chart will be mostly empty, but will fill in as you work on projects, see here as an example.\nEvery time you save your code (ie. make a commit), the activity will be reflected in this chart. By clicking the option in settings, code made within a private repository will remain private, but will count toward your contribution chart. As you progress through the course, this will provide a nice visual reminder of the progress you have made, and the obstacles that you have overcome.", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] }, { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#installing-from-bioconductor", - "href": "course/01_InstallingRPackages/slides_inperson.html#installing-from-bioconductor", - "title": "01 - Installing R Packages", - "section": "Installing from Bioconductor", - "text": "Installing from Bioconductor\n\n\n\n\n\n\n\n\n.\n\n\nBioconductor is the second R package repository we will be working with throughout the course. While it contains far fewer packages than CRAN, it contains packages that are primarily used by the biomedical sciences. Following this link you can find it’s current flow and mass cytometry R packages.\nBioconductor R packages differ from CRAN R packages in a couple of ways. Bioconductor has different standards for acceptance than CRAN. They usually contain interoperable object-types, put more effort into documentation and continous testing to ensure that the R package remains functional across operating systems." + "objectID": "course/00_GitHub/index.html#github-readme", + "href": "course/00_GitHub/index.html#github-readme", + "title": "Using GitHub", + "section": "GitHub ReadMe", + "text": "GitHub ReadMe\nWith this done, we modify your GitHub profile by adding one customized element, a ReadMe page. This will be used for a couple projects during the course, and can be personalized further in the future.\nTo create a ReadMe page for your profile, we will navigate to the upper right of the screen and click on the + sign.\n\n\n\nWe will then select the Create New Repository option.\n\n\n\nYou will next create a repository (folder), naming it exactly the same as your username. This will be recognized by GitHub as being a special type of repository corresponding to the ReadMe section of your profile.\nFor options, leave the visibility as Public, and Add README set to On. And proceed to Create Repository.\n\n\n\nHaving created the repository (folder), you will see it has been populated by a few default files. For now, you will be editing the README.md file. On a new repository, the easiest way to access it is by clicking the green option on the right side of your screen.\n\n\n\nWith the README.md file now opened, you will be able to see generic filler text that is suggested by GitHub.\nFor this course, I will ask you to add a couple elements for now. You are free to return and further personalize it later if you wish to do so.\n\n\n\nThe type of file that we are working with is a Markdown file, which can allow for a bunch of customizations which we will cover throughout the course.\nFor now, please add and customize the following questions:\nCytometry In R\nLocation: Baltimore, Maryland, USA\nMy Favorite Fluorophore/Metal-Isotope: Spark Blue 550\nPrevious Coding Experience: Repeatedly Calling IT\nWhat I Hope to Get From This Course: A faster way to match FlowSOM clusters to their likely cell type.\n\n\n\nNext, to save you will select the green “Commit changes” button. We will cover the meaning of “Commit” more in-depth during the Git section.\nFor now, write a short summary of the change you made to the file in the “Commit message”, and any additional details within the “Extended description” field. When ready, click the green “Commit changes” button.\n\n\n\nYou will now be able to see the updated README.md file, as you can see in our example below. To make additional edits, you would select the pencil icon on the right-center side of the screen.\n\n\n\nNext, navigate back to your profile page (by clicking on either your username or the Overview option on the tabs).\nYou will see that the README file contents are now displayed on the upper portion of your GitHub profile. Feel free to circle back and customize this further to your liking.\nIn this last example, we created your first repository (folder). Since this is public, it is now shown below the README section of the profile under your repositories. You can also see that your commits made in the process of making the changes are now shown both in the Contributions graph, and under the Contributor Activity summary at the bottom of the page.", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] }, { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#install-from-github", - "href": "course/01_InstallingRPackages/slides_inperson.html#install-from-github", - "title": "01 - Installing R Packages", - "section": "Install from GitHub", - "text": "Install from GitHub\n\n\n\n\n\n\n\n\n.\n\n\nIn addition to the CRAN and Bioconductor repositories, individual R packages can also be found on GitHub hosted on their respective developers GitHub accounts. Newer packages that are still being worked on (often in the process of submission to CRAN or Bioconductor) can be found here, as well as those where the author decided not to bother with a review process, and just made the packages immediately available, warts and all." + "objectID": "course/00_GitHub/index.html#github-repository", + "href": "course/00_GitHub/index.html#github-repository", + "title": "Using GitHub", + "section": "GitHub Repository", + "text": "GitHub Repository\nHaving set up your GitHub profile, it now is time to make sure you have access to our course materials. We will have you navigate to our course’s GitHub profile\nOn the profile page, you will be able to see our version of the README, our repositories, and the Contributions graph and Contribution activity sections.\nPlease click on the CytometryInR to navigate to its repository (folder)\n\n\n\nOn this page, you will see several elements that you will be circling back to throughout the course.\nFor our course, we will be extentsively ussing the Discussions page as a community forum. If you have any questions, are looking for feedback, or want to show off something that you worked on, this is the place for it. This will also help make sure\n\n\n\nThe Issues tab is where you will need to go to open an Issue if you encounter a bug (or major documentation typo), so that I can cicle back and correct them when I have the chance.\n\n\n\nTo submit the optional take-home problems, you would turn in these problems by going to the Pull Request tab, and initiating a pull request between your forked version of the project and our “homework” branch (more details on this later).\n\n\n\nOptionally, you can “Star” a repository. This is basically the GitHub equivalent of liking a project. In our case, we will often star a repository since it will be saved under the Stars tab of our profile, which makes finding it again significantly easier a few weeks later after forgetting the repository name.\n\n\n\nTo see projects that you have starred, you can select the Stars option from the same dropdown you used to get to Settings.\n\n\n\nOr from your GitHub profile, you can see these under Stars tab.", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] }, { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#troubleshooting-install-errors", - "href": "course/01_InstallingRPackages/slides_inperson.html#troubleshooting-install-errors", - "title": "01 - Installing R Packages", - "section": "Troubleshooting Install Errors", - "text": "Troubleshooting Install Errors\n\n\n\n\n\n\n\n\n.\n\n\nWe have now installed three R packages, dplyr, PeacoQC, and flowSpectrum. In my case, I did not encounter any errors during the installation. However, sometimes a package installation will fail due to an error encountered during the installation process. This can be due to a number of reasons, ranging from a missing dependency, or an update that caused a conflict. While these can occur for CRAN or Bioconductor packages, they are more frequently seen for GitHub packages where the Description/Namespace files may not have been fully updated yet to install all the required dependencies.\nWhen encountering an error, start of by first reading through the message to see if you can parse any useful information about what package failed to install, and if it list the missing dependency packages name. The later was the case in the error message example shown below." + "objectID": "course/00_GitHub/index.html#forking-cytometryinr", + "href": "course/00_GitHub/index.html#forking-cytometryinr", + "title": "Using GitHub", + "section": "Forking CytometryInR", + "text": "Forking CytometryInR\nBefore we go further, we will need you to make your own copy of the course repository (ie. fork it). This will allow you to quickly retrieve all the new materials and code corrections by simply rereshing (ie. syncing) your forked version with our upstream parent branch once a week.\n\n\nTo fork the course repository, you will select the “Fork repository” option on the upper-center portion of your screen.\n\n\n\nBy “Fork-ing” a repository, you are basically copying the contents from that repository to a newly created repository on your own GitHub. Forked projects are still linked to the original (parent) fork, and can retrieve any updates via syncing, as well as return changes via a pull request.\nFor this course, when you create the fork, keep the existing repository name (“CytometryInR”). Importantly, select the copy main branch option. This will ensure you only get the code and data needed for the course copied over, and don’t end up with your entire hard-drive filled will website elements, or other people’s solutions to the take-home problems.\n\n\n\nOnce you have created the fork, you will see your copy of the forked repository under your own username. Seeing as you have just now forked the project, you will see the notification that you are up to date with the existing version of the CytometryInR course repository.\nAs we go through the course, and new material is released each week on Sunday at 2200 EST (Monday 0300 GMT+0), you will see this changed to behind the main branch by a number of commits, and have the option to sync in the changes to your fork to gain access to that week’s material.\n\n\n\nIf you remember, previously under your GitHub profile, the Repositories tab only contained the repository corresponding to your ReadMe section.\n\n\n\nYou should however now be able to see your fork of the CytometryInR repository. As you add project specific repositories throughout the course, they will also appear here.", + "crumbs": [ + "About", + "Getting Started", + "00 - GitHub" + ] }, { - "objectID": "course/01_InstallingRPackages/slides_inperson.html#documentation-and-websites", - "href": "course/01_InstallingRPackages/slides_inperson.html#documentation-and-websites", - "title": "01 - Installing R Packages", - "section": "Documentation and Websites", - "text": "Documentation and Websites\n\n\n\n\n\n\n\n\n.\n\n\nWe have already seen a couple ways to access the help documentation contained within an R package via Positron. Beyond internal documentation, R packages often have external websites that contain additional walk-through articles (ie. vignettes) to better document how to use the package.\nFor CRAN-based packages, we can start off by searching for the package name. So, in the case of dplyr" + "objectID": "course/00_Git/index.html", + "href": "course/00_Git/index.html", + "title": "Version Control with Git", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] }, { - "objectID": "course/00_WorkstationSetup/MacOSSlides.html#installing-r", - "href": "course/00_WorkstationSetup/MacOSSlides.html#installing-r", - "title": "Installing Software on MacOS", - "section": "Installing R", - "text": "Installing R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." + "objectID": "course/00_Git/index.html#new-folder-from-template", + "href": "course/00_Git/index.html#new-folder-from-template", + "title": "Version Control with Git", + "section": "New Folder from Template", + "text": "New Folder from Template\nSince Positron can use multiple programming languages, when we select “New Folder from Template” we will be asked what kind of folder template we want to use. Since we are working in R, we will select the “R Project” option.\n\n\n\nWe will next be asked to name the new project folder and a storage location.\nOne thing I would like to remind everyone who is just starting to code is that it is best to avoid using special characters (ex. @ $ # ^ ! ; : ,) in any folder or file name. This is because when coding, these can be misinterpreted as commands.\nWhile spaces are generally okay, it is often to best stick to to stick to hyphens (-), underscores (_). We will explore naming conventions in more depth at a later time.\n\n\n\nAnother useful thing to know when getting started with version control, it is best to save your files within your local computer, avoid using OneDrive or other cloud storage options for the time reason. The reason behind is that permissions to write/save to the cloud locations can sometimes be quite finicky, and some autosave/indexing behaviors can cause issues. akes things easier to save or modify without running into permission issues. For most of our course examples, we will be saving our Project Folders under the Documents Folder.\nHaving named our new Project Folder, and designated a storage location, go ahead and check the Initialize Git Repository option. This will indicate to version control to monitor content and changes to files within this folder.\n\n\n\nThe next setup screen will verify which version of R you wish to use. Since we are just getting started, your most recent version of R (usually system) should work. We will also leave the “renv” (reproducible environment setup) option unchecked for the time being (we will revisit the concept later in the course).\n\n\n\nAnd if all goes well, we should see the “New Folder Created” popup.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] }, { - "objectID": "course/00_WorkstationSetup/MacOSSlides.html#xcode-command-line-tools", - "href": "course/00_WorkstationSetup/MacOSSlides.html#xcode-command-line-tools", - "title": "Installing Software on MacOS", - "section": "Xcode Command Line Tools", - "text": "Xcode Command Line Tools\n\n\n\n\n\n\n\n\n.\n\n\nDepending on your version of macOS, you may or may not already have Git installed on your computer. The reason is that it comes bundled within the Xcode Command Line Tools.\nIf this is not your first foray into coding, you may have previously seen an installation pop-up along the lines of “XYZ requires command line developer tools. Would you like to install the tools now?” when installing an IDE (like Positron, Rstudio or Visual Studio Code)." + "objectID": "course/00_Git/index.html#creating-subfolders", + "href": "course/00_Git/index.html#creating-subfolders", + "title": "Version Control with Git", + "section": "Creating SubFolders", + "text": "Creating SubFolders\nOnce your new project folder has opened, you should be seeing the main layout elements that we briefly covered in the Positron walk-through.\nFor this section, we will primarily be focused on what is happening within the primary side bar on the left, where changes to the individual files within the folder since the last save/commit will be reflected by colored text.\nFor my own projects, there are some elements of organization that I go ahead and add for each new folder. These include both a data and an images subfolders to help keep things a little more organized.\nTo create these folders, we would click on the respective add folder (+) button on the side bar. Files and Folders can be clicked and dragged within the primary side bar to move things to new folder locations.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] }, { - "objectID": "course/00_WorkstationSetup/MacOSSlides.html#install-positron", - "href": "course/00_WorkstationSetup/MacOSSlides.html#install-positron", - "title": "Installing Software on MacOS", - "section": "Install Positron", - "text": "Install Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." + "objectID": "course/00_Git/index.html#creating-files", + "href": "course/00_Git/index.html#creating-files", + "title": "Version Control with Git", + "section": "Creating Files", + "text": "Creating Files\nIn context of this course, we will primarily be working with two types of files when coding:\n\nR Scripts: These files end in .R. These contain only code (with occasional # comment line). These are often used for self-contained code that once we get them working we rarely need to modify.\nQuarto Markdowns: These files end in .qmd. They contain a .yaml header, followed by a mix of regular written text (often explanations or other documentation), and sections (ie. chunks) that contain code. These are used when we are still getting the code to work, when we need to modify inputs frequently, or simply when we need to document what and why we are doing something to make life easier for our future-self two months from now.\n\n\n\nIn this example, I will go ahead and select the new file icon\n\n\n\nThenn I will name the file, and designate it as a Quarto Markdown file by adding the .qmd at the end of the name to denote the file type.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] }, { - "objectID": "course/00_WorkstationSetup/LinuxSlides.html#debian-based-distros", - "href": "course/00_WorkstationSetup/LinuxSlides.html#debian-based-distros", - "title": "Installing Software on Linux", - "section": "Debian-based Distros", - "text": "Debian-based Distros\nInstalling R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." + "objectID": "course/00_Git/index.html#qmd-files", + "href": "course/00_Git/index.html#qmd-files", + "title": "Version Control with Git", + "section": "QMD Files", + "text": "QMD Files\nOnce this is done, we can now see we have a new .qmd file (“Example.qmd” in this case).\n\nYAML\nAs previously mentioned, the start of a Quarto Markdown file containg a YAML code chunk that is used to set formatting choices (we will explore this in-depth during the next section)\nWhat designates the location of the YAML block are three hyphens at the start, and three hyphens at the end. For this example, we will also provide a “title:” and “format:” field for the time being (see additional options here).\n\n\n\n\n\nText\nWith a basic YAML formatting block now in place, we can build out other elements of our Quarto Markdown document. Unless otherwise specified, everything else in the document is assumed to be text, so I will go ahead and provide an initial text description of what I am trying to do.\n\n\n\n\n\nCode-Chunks\nHaving provided some initial text for documentation, we can then add code-block chunks to start writing some code.\nThe easiest way to do do this is to click the respective option on the upper-right of the Editor screen. Since Positron can handle multiple programming languages, so the chunk is inserted, we will need to select the language we use to be used within the code chunk (R in this case).\n\n\n\nYou will notice, that the inserted code block starts off with three backticks (`) and then “{r}”. The end of the code block is denoted by an additional three backticks.\nWe can also add new code blocks by simply typing these elements into the location we want to place a code chunk (as long as we are careful to add 3 backticks also at the end).\n\n\n\n\n\n\n\n\nRunning Code\nNow that we have two code-chunks written, we can write lines of code within them. For this example, I will use two beginner friendly functions, print(“Hello”), which will print the contents contained between the ” ” to the console, and getwd() which will return the location of the folder you are working within (ie. the working directory).\nTo run/execute these lines of code, we have a couple options. We can click on the Run Cell option that appears on the upper-left side of the code chunk. Additionally, it has a companion option that will run all code chunks above it.\n\n\n\nWhen a code block is successfully run, you will see within the console (lower bottom of the screen) the line of code be run, with any returned outputs appear directly after.\n\n\n\nAn alternative to clicking the Run Cell button is to click on the line of code you are interested in running, then press (Ctrl + Enter)/(Command + Enter). This will execute the line of code that you have clicked on. This can be useful in scenarios where you want to run a specific line, and not the entire code-chunk.\n\n\n\nUsing this approach, you can see the location (ie. file path) of the current working directory was returned to the Console.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] }, { - "objectID": "course/00_WorkstationSetup/LinuxSlides.html#installing-git", - "href": "course/00_WorkstationSetup/LinuxSlides.html#installing-git", - "title": "Installing Software on Linux", - "section": "Installing Git", - "text": "Installing Git\n\n# sudo apt install git" + "objectID": "course/00_Git/index.html#local-version-control", + "href": "course/00_Git/index.html#local-version-control", + "title": "Version Control with Git", + "section": "Local Version Control", + "text": "Local Version Control\nHaving introduced the main elements of a Quarto Markdown file, let’s turn our attention to the tab within the editor showing our newly created .qmd file.\nWe can see there is a solid circle next to the file name, and it is appearing as green. The circle denotes unsaved changes, which we can correct by clicking on the Save Button to save the changes to our file.\n\n\n\n\nUntracked\nIf we turn our attention to the left primary sidebar, we can see that within our GitPractie folder there are three files, our Example.qmd, and the default README.md and .gitignore files. These all show up in green text with U’s to the right of the file names.\nThis denotes that the version control tracking software Git is currently considering them as “Untracked” files. While saving the document via the Save button means we will still have our changes when we reopen Positron, we won’t have any history of changes that we can use to revert back to the way all the files appeared at this exact point in time should something go wrong.\nWe will next go the address bar on the very far left, and select the Git tab.\n\n\n\nOn the Git tab, we can see that each of the three files are shown underneath a “Changes” drop-down. This contains the files that have undergone changes since the last commit. In our case, since we haven’t updated the save-state yet, this last commit would be the initial creation of the project folder.\n\n\n\nTo have version control track these individual files going forward, we can do so in two separate ways. We can add them individually by clicking the + symbol next to the individual names.\n\n\n\n\n\nStaged\nThis will result in the files being moved to the “Staged” dropdown. This denotes files being tracked with the intention of being recorded as the next save-state or waypoint (ie. a commit).\n\n\n\n\n\nCommit\nTo create a new commit (save-state or waypoint), once we have the files we want to track staged, we will write a commit message, and then press commit.\nA commit message is a brief description of the changes that have occurred to the files between this commit and the previous one. Make this short description informative enough that if you need to revert back in the future, you can quickly identify the commit you need to fall back to (more about this later).\n\n\n\nIf this your first time using version control, you will likely encounter the following pop-up asking that you provide a user.name and user.email. This is used to designate the author of the changes.If you get this popup, go ahead and select “Open Git Log”\n\n\n\n\n\nUserName and UserEmail\nThe Output tab at the bottom of the screen will open, showing the messages that led to the popup.\nThe important part to note is the commands that will be needed to provide your user name and email to the computer for authoring the commit. Typically, your email will be the same one you used for your GitHub account.\n\n\n\nFrom the displayed message, go ahead and copy\n“git config –global user.email”you@example.com””\nThen click on the adjacent terminal tab. You will paste the command in, but do not hit enter just yet.\nWindows users, please note, depending on your settings, if trying to paste from the keyboard into the terminal, you may need to press “Ctrl + Shift + V” instead of the usual “Ctrl + V”.\n\n\n\nWith the command now pasted (or typed), use your keyboard arrows to navigate to the email portion, and replace the generic email with your email address used for your GitHub account.\nMake sure that the quotation marks (“) around the email address remain present, as they help the computer identify where your email address starts and ends. Once satisfied that your email address is correct, press enter.\n\n\n\nNext up, repeat the process, this time copying over the command needed to set your user name to the terminal. Repeat the editing process to provide your name between the “” marks. Then press enter.\n\n\n\n\n\n\n\n\nFirst Commit\nNow that your user.name and email address have been provided, Git should be able to provide an author to the commit message. Reattempt to press commit button.\nIf this is successful, you will see your initial commit appear on the bottom half of the left primary side bar, under the Graph dropdown. Congrats! Your files are now being tracked by version control.\n\n\n\nIf you hover with your mouse arrow just over the commit, you can see the longer commit message and additional details appear.\nIf you click on the commit tab, a new display will open in the editor, displaying the changes that occured in that commit compared to the previous one. In this case, since we added everything since the previous commit, nothing appears on the left side, while the entire documents contents appear highlighted in green on the right.\nGreen highlighting is used to show additions, while red highlighting is used to show deletions.\n\n\n\nHaving completed this initial commit, for this example, let’s imitate a typical workflow and make some additional changes to the file before we make a second commit. Within text portions of the .qmd file, use of # denotes a section header in markdown, so let’s add a header for Introduction and click save.\n\n\n\n\n\nModified\nWithin the left primary sidebar, we can see that the Git tracking has updated. Examples.qmd is visible once again. However, becuase it is now a tracked file, instead of showing up with the “U/Untracked” green highlight, it now appears as a brownish-red with a “M/Modified”.\nLet’s make an additional change to the .qmd file by adding another section (# Setup) and a code block with a commented out line (denoted by the # at the line start), before pressing Save.\n\n\n\nIf we were now to click on the Example.qmd file in the left primary sidebar, it will open the same kind of tracking display we saw previously. This time, we can see changes since our last commit. These appear as the green highlights along the scroll-bar, corresponding to the # Introduction and # Setup headers that we have added in since the last commit.\n\n\n\nFor a larger document, we can scroll down to see the various highlighted regions.\n\n\n\nWe could now repeat the steps showed above, staging the file, writing a commit message, and commiting again by clicking on the designated buttons.\nAn important question is how often should we commit, vs. just hit save? Well… it depends :D Let’s think about this in context of a video game. If you made commits at regular intervals throughout the day (or more frequently when doing something particularly risky), you are more likely to be close enough to a particular commit (waypoint/save-state) that you can quickly revert back to without loosing any progress. Alternatively, if your last commit was last week, you will not have any intermediate versions to fall back to.\n\n\nCommit via Terminal\nHaving demonstrated how to commit changes to Git via the left primary side-bar, for this second commit, let’s do it the alternate way via the terminal (tab on the panel at the bottom of your screen).\n\n\n\nAfter clicking on the terminal tab, click on blinking command line.\nThe command to stage a file is “git add”, followed by the name of the file you want to stage.\nIn this case, you would enter “git add Example.qmd” and press Enter. \n\n\nYou will see after pressing enter a new blank terminal line appear. If you glance at the left-sidebar, you can see that Example.qmd now appears under the Staged Changes dropdown.\n\n\n\nNext up, let’s write the git commit via the terminal. In this case, the command would be “git commit -m” (-m denoting message). The commit text is then surrounded by “” marks.\nFor example: “git commit -m”Added section headers to my QMD file””\nPress enter to save the commit.\n\n\n\nAnd you should see your second commit now appear in the left primary sidebar underneath the graphs dropdown.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] }, { - "objectID": "course/00_WorkstationSetup/LinuxSlides.html#installing-positron", - "href": "course/00_WorkstationSetup/LinuxSlides.html#installing-positron", - "title": "Installing Software on Linux", - "section": "Installing Positron", - "text": "Installing Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will need to install Positron. It will be the integrated development environment (IDE) we will be using for the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." + "objectID": "course/00_Git/index.html#remote-version-control", + "href": "course/00_Git/index.html#remote-version-control", + "title": "Version Control with Git", + "section": "Remote Version Control", + "text": "Remote Version Control\n\nCopying Project Folder to GitHub\nWhile having local version control in place is helpful when you need to revert back after encountering issues, where Git shines is the ability to pass your changes to your online GitHub repository.\nNot only does this allow you to switch between computers, but should something disastrous happen to your main computer, you still have all your hard work backed up and readily assessible.\nFor this subsection, first, double check that Positron is still connected to your GitHub account by checking the user tab on the bottom-left. If not, repeat the connection setup.\n\n\n\nSince our project was created using the “New Folder from Template” option, it currently only exist locally. What we want to do next is to copy it to our GitHub account, creating a new repository in the process.\nTo do this, we will first need to install the usethis R package. Within your console, you would run the following line of code:\n\ninstall.packages(\"usethis\")\n\nDepending on what R packages you already have installed on your computer, you may get a prompt asking if you want to update/install additional dependencies. Go ahead and type the number corresponding to Update All, and press enter.\nThe package and all it’s dependencies should then install. If an error message appears, read through it, and follow provided instructions. Go to Discussions if need help.\n\n\nOnce the usethis package is installed, we need to activate it within R by calling it with the library command. This makes all the tools (ie. functions) within an R package available for use within Positron.\nIn your console, you would type:\n\nlibrary(usethis)\n\n\n\n\nWith library called, you now have access to the functions (tools) within the usethis R package. One of these is the use_github() function.\nIn Positron, if you hover over a function, it will pull up the associated help file which will provide you information about the arguments the function expects to receive, and what they do.\nFor use_github(), the main thing to remember for now is since this is a personal project being used for testing, we don’t necessarily want to share it with the entire world, so we should set the “private” argument equal to TRUE when creating a new repository.\n\n\n\nTaking this information that we have now gathered, we can now within our Quarto Markdown create a code chunk, write out the line of code calling the function, and providing the Private=TRUE argument within the ().\nWithin a code chunk, adding a # in front of a line of code, will comment it out, resulting in that line of code not being run. Since we have already installed the usethis package, and we don’t want to reinstall it every single time, let’s go ahead and comment out that line. Go ahead and press Enter.\n\n\n\nWe will see a message pop-up in the console. In this case, we had not saved before pressing enter, so there are uncommitted changes within the folder. The pop-up is asking whether you want to save these as well before sending the Folder to GitHub.\nIn this case I will chose to ignore the uncommitted changes by entering 3 (for Definitely) in the console and hitting enter on my keyboard.\n\n\n\nThe usethis R package will then execute the series of git commands that are needed to set up a GitHub repository (ie. the messages being displayed in the console window), and when finished will open a pop-up asking whether you want to see your new repository in your default Web Browser. I will go ahead and select yes in this case.\n\n\n\nAfter the browser opens, you can see that the elements I had staged and committed within Positron are now present within the GitHub repository. Since I had only staged Example.qmd, it is the only file that was backed up. We can also see the commit history online by clicking on the commit clock.\n\n\n\nAs we would expect, we only see our two commit messages. One important thing to note is the commit hash numbers, that denote a particular commit. If we decided to revert/fall back to a prior commit in the future, this would be the number we would need to provide to Git to return to that previous commit/save-state\n\n\n\nSimilarly, on GitHub, we have an option to Browse a Repository at a particular point in time. This will be quite useful later in the future when troubleshooting what major changes occurred between versions of an R package.\n\n\n\n\n\nCode Chunk Arguments\nHaving successfully connected our local Project Folder to a remote GitHub repository, let’s return to Positron.\nBefore continuing, if we left the code chunk that created the GitHub repository as is, every time we ran all code chunks in the document, it would try to recreate the GitHub repository. We don’t want this to happen, as the setup was a one-time operation.\nWhile we could add # in front of every line of code (or delete the code chunk entirely) it is often useful to have these set-up code chunks around to remind us what arguments we need to provide next time we need to a similar setup and are mind blanking on what to do.\nFortunately, Quarto allows us to set conditions on whether a chunk is run (ie. evaluated). We will discuss the conditiona arguments in more depth in the next section, but for now, we can modify the code chunk as follows.\nOn the next line after the {r}, we will add a hashtag (#), then a pipe (|), followed by a space. This is the setup for a code-chunk specific argument. We will then add “eval: FALSE”, which signals that the particular code-chunk should not be evaluated (ie, should not be run).\n\n\n\n\n\nREADME\nNow that we have connected our local Project Folder to GitHub, and have gotten a basic introduction to the “git add”, “git commit” arguments, let’s turn our focus to the other files currently listed as untracked by Git within our folder, the README.md and the .gitignore files.\nWhen setting up our GitHub account, we encounted an example of a README.md file. This file often provides a brief description of the project, and an outline of what the other files in the folder are for. As you may have gathered, even software developers are forgetful/under-caffenaited, and having notes to catch back up to speed is important.\n\n\n\n\n\n.gitignore\nWe additionally have a .gitignore file. Within a project, there are often some files that we will never want version control to track. These could be files that are too large for GitHub (ex. really large .fcs files), or files containing sensitive information (passwords, history, credentials, etc.).\nWhen the names of these file (or the file type shothand) are added to the .gitignore file, they are ignored by version control, and no longer appear on the primary left side bar.\n\n\n\nLet’s proceed and stage both the README.md and .gitignore file, so that changes to these files will be tracked. We can of course select both from the primary left side bar and write a short commit message.\n\n\n\n\n\n\nOr alternatively, if we want to stage all uncommitted files present in a single step, we could in the terminal use the “git add .”\nWe can then write our git commit using “git commit -m”.\nBoth approaches work, and you may switch between them based on preferrence.\n\n\n\nYou will notice after having committed, that if you look at the Graph dropdown on the bottom half of the primary left side-bar that something has changed.\nThere are now separate icons denoted as main and origin/main. These correspond to the last commit present locally (main), and the last commit on remote (ie. GitHub, origin/main).\nLocal is ahead since you just made the commit with the changes inactivating the code-chunk, and you have not passed these changes up to GitHub yet.\n\n\n\n\n\nPull\nBefore sending (ie. pushing up) our updated commit to GitHub, especially if you are working on a project from multiple computers (or as part of a team) to bring in (ie. pull down) any changes that might be on GitHub that are not present locally.\nThis ensures that everything is up to date, and you don’t end up with mismatched commits that are incompatible with each other and trigger an error message.\nTo pull in changes from GitHub, at the top of the primary left side-bar, you can select the … button to open a drop-down menu of Git options. You would then select “Pull”.\nAlternatively, you could do the same thing via the terminal by running the “git pull” command.\n\n\n\n\n\nPush\nIn our case, there was no new material present on our GitHub repository that were not already present locally, so all that is returned is the “Already up to date” message.\nWe are now good to proceed to push (ie. send) the updated commit up to our GitHub repository.\nWe can do this by either pressing the Sync changes button, or via the terminal entering the “git push” command.\n\n\n\nAnd now, if you glance down at left side-bar’s graph section, you will see that both the main and origin/main icons are now present for the most recent commit.\n\n\n\nIf we switch to our Web browser, we can see that this is also now the case for our GitHub repository that now also has the most recent changes.\n\n\n\n\n\nReverting to Prior Commit\nFor most daily-workflows, you will only need the git commands that we have introduced above (git add, commit, pull, push). The next two areas (reverting to a prior commit, and branches) are more specialized, and will be covered in greater depth later in the course. We are briefly covering them here. If you are at the point where your last remaining neuron has disconnected, and you feel you need to take a break from version control, feel free to skip to the next section and we will revisit these topics later in the course.\n\n–\nIn most cases, if your code stops working, you can identify the issue and fix it in the existing version, never needing to resort to reverting to a previous commit (save-state). The times you would need to revert would be if you deleted important files, or the new files are hopeless mess that is not worth trying to sort through. In those cases, reverting back might be better approach.\nTo imitate a falling back scenario, lets create and additional file, stage and commit it to end up a commit ahead of where we are currently at within the Project Folder.\n\n\n\nNow being one (or several) commits ahead, if we wanted to revert back, we would first need to identify the commit we want to revert back to and copy the commit hash number.\n\n\n\nThen, opening the terminal, we can enter “git reset” and paste the hash afterwards. We can then press enter.\n\n\n\nYou will notice our additional commit has been removed, although the newer files we were working on subsequent last commit are still present.\n\n\n\nIf however, we had wanted to return to the exact same state as the previous commit (removing all subsequent created files), we could do so by adding in the –hard argument. Before starting, save any newer files you want to keep in a completely different folder, because they will be permanently removed.\nThen, enter “git reset –hard thecommithashnumber” into the terminal, which would result in a “hard” return to the previous commits save-state. You may need to close and reopen Positron to see the changes reflected.\n\n\nBranches\nBranches are an useful Git feature that we will start using extensively later in the course. Branching allows you to create a parallel/carbon-copy of your existing repository, which you can then edit without affecting the main branch. This is particularly useful for projects that may get messy or drawn out. By isolating these edits to a parallel branch, if they don’t work, your main branch remains safe. Alternatively, if you like the changes that occurred in the branch, you can pull these changes from the branch back to main, bringing the timelines back together.\n\n\nWithin the terminal, entering “git branch” will show the existing branches. In this case, only main is present since we haven’t yet created a new branch.\n\n\n\nWe can create a new branch in the terminal by entering “git branch” followed by the name of our desired branch. In this case, we are creating a branch called Week1\n\n\n\nNow, when we check “git branch” again in the terminal, which returns the two branches, Week1 and main. The * is located next to main, indicating that we are currently within the main branch.\n\n\n\nBesides the terminal, we can also create a new branch via Positron. To do so, we first click on the Git tab in the Actions Bar.\nOnce the left-side bar displays the version control display, we can click on the … button (to the right of changes)to gain access to the Git options drop-down.\nFrom here, we click on Branch, and then select Create Branch.\n\n\n\nUsing Git branch, we saw that we were still within the main branch. In the terminal, we can switch over to the Week1 branch by using the “git checkout” command, followed by the branch we wish to switch to.\n\n\n\nThis results in us switching over to the Week1 branch.\n\n\n\nHaving switched (ie. checkout) to the Week 1 branch, let’s create the file BranchTest.qmd, which will exist within this branch, but not yet in the main branch.\n\n\n\nHaving created the file, let’s stage and then commit it. This will put the Week1 branch ahead of the main branch by a single commit.\n\n\n\nWith our changes staged and committed, if we look at the left side-bar’s graph section, our Week1 branch is now ahead of the origin/main branch by one commit.\n\n\n\nIf we were to check on GitHub, we can see that no new files are present on the main branch, but can see the notification listing recent changes to Week1 branch.\n\n\n\nUsing the drop-down, we can switch from displaying the main branch to the Week1 branch, where we can see the new file.\n\n\n\nIf we click the green compare and pull request button, we end up on this screen. This compares how the two branches are different from each other.\n\n\n\nWe will delve into branches again at a later point. For now, remember that by creating and prunning parallel branches, you can develop knowing that even if something goes wrong, your main branch remains safe.", + "crumbs": [ + "About", + "Getting Started", + "00 - Git" + ] }, { - "objectID": "course/00_WorkstationSetup/Linux.html", - "href": "course/00_WorkstationSetup/Linux.html", - "title": "Installing Software on Linux", + "objectID": "course/00_Floreada/index.html", + "href": "course/00_Floreada/index.html", + "title": "Using Floreada", "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nThis is the software installation walkthrough for those whose computers are running Linux. First off, welcome! Based on our pre-course interest form, there was a suprising number of you daily-drivers out there! However, a CytometryInR interest form is unlikely to be representative of the general population, so please stash all Year of the Linux desktop banners until further notice." + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "crumbs": [ + "About", + "Getting Started", + "00 - Floreada" + ] }, { - "objectID": "course/00_WorkstationSetup/Linux.html#debian-based-distros", - "href": "course/00_WorkstationSetup/Linux.html#debian-based-distros", - "title": "Installing Software on Linux", - "section": "Debian-based Distros", - "text": "Debian-based Distros\n\nInstalling R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nOnce this is done, select your Linux Distro (or one that shares your package managers format).\n\n\n\nOn the landing page, you will find a bunch of relevant installation information, which is worthwhile giving a read-through when you have time.\n\n\n\nThe process to successfully install R can be summarized as follows:\nUpdate apt/sources.list to include the CRAN repository (allowing access to R packages)\n\n\n\nSince we are running on Debian stable (Trixie), we would add the following line to sources.list\n\n\n\nSo in practice, open sources.list:\n\n\n\nPaste the line, and “Ctrl + O”; “Enter”; “Ctrl + X” to save the changes.\n\n\n\nNext, we will need to retrieve the keyID used to sign. This can be fetched from Ubuntu via the terminal.\n\n\n\n\n\n\nThen we need to export and write it\n\n\n\nWhich if successful, will display the public key.\n\n\n\nWith the above set up, we can proceed via our apt package manager to install both r-base and r-base-dev (which contains the equivalent of Rtools for Windows, or Xcode Command Line Tools for macOS).\n\n\n\n\n\n\n\n\n\nAnd if all goes well, R should now be installed." + "objectID": "course/00_Floreada/index.html#floreada", + "href": "course/00_Floreada/index.html#floreada", + "title": "Using Floreada", + "section": "Floreada", + "text": "Floreada\n\nLoading Dataset\nFirst, open your web browser and navigate to the website\nClick on Start to proceed to the next page.\n\n\n\n\n\n\nOnce that is done, select the File tab on the upper navigation bar. Then click on Open File(s).\n\n\n\n\n\n\n\nFrom there, select your .fcs files of interest, and click Open.\n\n\n\nThe .fcs files will now load in, and you should see a view similar to the one below. On the left side-bar, you have your gating options (Rectangle, Polygon, Range, Elipse, Quad, etc). Next to these on the right you have the FCS files that are loaded into the workspace. Then on the right, you have the visual display for your selected specimen.\n\n\n\n\n\nSwitching Axis Markers\nIf you left click on the axis name (SSC-H or FSC-H in this case), you will be able to select other markers by which to gate your specimen. For the provided example, we were using a raw spectral flow cytometry .fcs file, so the names of the detectors are present.\n\n\n\nFor now, I plan to start off by gating for singlets. I switch the y-axis to FSC-H, and then proceed to switch the x-axis to FSC-A.\n\n\n\n\n\nCreating Gates\nWith this done, I can now select the Poly gate tab on the upper left.\n\n\n\nThen manually click on the locations on the plot to add the individual gate nodes.\n\n\n\nTo complete the gate, I click back to the original node point. At this point, the popup will allow you to name the gate.\n\n\n\nTo adjust the polygon gate, you can click on a node and drag it to expand or contract in a particular direction\n\n\n\nTo move the entire gate, first click on a node to select the gate, then click in the center of the gate to adjust its location.\n\n\n\n\n\nAdditional Gates\nUnfortunately for those with the force-of-habit from using other softwares, double-clicking within the gate doesn’t do anything. To continue gating on the selected cells, you will need to click on the newly created gate name on the left. This will result in visualizing the isolated cells.\n\n\n\nOnce this is done, you can repeat the previous steps to change the axis markers and create a second gate. For this example, we went with a “Cells” gate to exclude debris from this particular sample.\n\n\n\nHaving created the “Cells” gate, we will be switching gating based on FSC and SSC to using the detector parameters.\nThe samples in this example were acquired to derive the cell counts and concentration of various cell populations within cryopreserved cord and peripheral blood mononuclear cells (CBMC and PBMC) specimens after thawing.\nThey were stained with CD19 BV421, CD45 PE, and CD14 APC on a 5-Laser Cytek Aurora, before unmixing, this would correspond respectively to V1, YG1/B4, R1/YG4 peaks respectively.\n\n\n\n\nScaling/Transformation\nWhen we switch the axis, we can see that the scaling/transformation is not ideal, as the staining and not-staining populations are scrunched up together in the center of the plot.\n\n\n\nTo change the scaling/transformation, we need to click directly on the axis.\n\n\n\nFrom there, when we click on the drop-down, we see the various transformation options. We will select Logicle, given we are working with spectral flow cytometry files.\n\n\n\nThis y-axis values are subsequently visualized with the logicle transformation applied, increasing our resolution between the positive and negative population.\n\n\n\nWe can then repeat this for the x-axis, adjusting the fine-tune options for the scaling as needed.\n\n\n\n\n\nNavigating Gating Hierarchy\nWith this done, let’s first draw a rectangle gate for the CD45+ (B4-A) cells.\n\n\n\nAnd then selecting that population by clicking on the gate name, let’s proceed and gate the CD19+ cells (V2-A).\n\n\n\nAs you can see, we now have the various gates present in the gating hierarchy for the respective .fcs file. To return to a previous gated population, we would click on the parent population above it.\n\n\n\nWe can subsequently add an additional gate at this gating level for the likely debris population (the threshold setting was suboptimal for this experimental run).\n\n\n\n\n\nCopying Gates\nThis was the process for gating for a single specimen. To copy gates over to the other specimens, we have two options. First, holding down your Ctrl (or equivalent) button, you can click on the individual gate names.\n\n\n\nFrom there, you can drag them down to the next specimen and apply them.\n\n\n\nAlternatively, you can drag down the highlighted gated to the Pipelines Tab, and apply to All Files. This will result in the gates being copied to all specimens in the experiment.\n\n\n\n\n\n\nAdjustments within Pipelines will carry over to all other respective unmodified specimens that share it’s gates.\n\n\n\nOnce this is done, I recommend cycling through the gates for each specimen, just to ensure that the gates were positioned correctly before saving the workspace.\n\n\n\n\n\nSaving Workspace\nWith everyone now “correctly” gated, we can proceed to save the workspace so that we can reopen it later from another browser.\nTo do this we open the File tab from the upper navigation bar, and select Save Workspace.\n\n\n\nFrom there we have a couple options, for now let’s select Floreada Workspace. Where it is saved at will depend on your individual browser settings, so watch for a popup.\n\n\n\nAlternatively (and crucially for the CytoML pipeline) we can also choose to save it as a FlowJo v10 .wsp file.\n\n\n\nIn both cases, you will end up with Workspace files that can be used later to access your created gates\n\n\n\n\n\nReopening Workspace\nTo reopen the Floreada workspace within the browser, reopen the website, and select the Open File(s) option.\n\n\n\nFrom there, select both the Floreada Workspace file as well as the .fcs files\n\n\n\nAt which point you will now be back to the point you last saved at.", + "crumbs": [ + "About", + "Getting Started", + "00 - Floreada" + ] }, { - "objectID": "course/00_WorkstationSetup/Linux.html#installing-git", - "href": "course/00_WorkstationSetup/Linux.html#installing-git", - "title": "Installing Software on Linux", - "section": "Installing Git", - "text": "Installing Git\n\n# sudo apt install git" + "objectID": "course/00_Floreada/index.html#cytoml", + "href": "course/00_Floreada/index.html#cytoml", + "title": "Using Floreada", + "section": "CytoML", + "text": "CytoML\nDue to a unknown formatting bug, the Floreada produced FlowJo v10 .wsp is not directly accessible by CytoML at the time of this course. However, the issue is resolved as soon as the file is opened the first time within FlowJo v10, regardless of whether you have a log in or not. Strange? Yes, but we will take the workaround.\nSo, for anyone on Windows or MacOS, download FlowJo v10. Once installed, open the software, and close the login popups. Once there, open the Floreada created FlowJo.wsp file. Since you haven’t logged in, it won’t show any events. But it will correct the formatting bug. Close the software, and return to R. Your Floreada sourced .WSP file should now be readable by CytoML.\nOdd? For sure. Fixable? Likely, I will set a reminder to work with the Floreada and CytoML devs to see if we can cut out the need for this workaround.", + "crumbs": [ + "About", + "Getting Started", + "00 - Floreada" + ] }, { - "objectID": "course/00_WorkstationSetup/Linux.html#installing-positron", - "href": "course/00_WorkstationSetup/Linux.html#installing-positron", - "title": "Installing Software on Linux", - "section": "Installing Positron", - "text": "Installing Positron\nFinally, you will need to install Positron. It will be the integrated development environment (IDE) we will be using for the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\n\n\n\nWith the license accepted, you will be able to select distribution and architecture.\n\n\n\nOnce the Download completes, proceed to install the .deb package as you would nornally. GUI example via Discover below.\n\n\n\nDepending on your configurations, you may be asked to exert your sudo powers.\n\n\n\nOnce this completes, you should now be able to launch the software for the first time." + "objectID": "course/00_BonusContent/index.html", + "href": "course/00_BonusContent/index.html", + "title": "Bonus Content", + "section": "", + "text": "This is a miscellaneous page to host walk-throughs of topics that come up via the Discussion Page. Rather than re-explain how to in the comments, I want to have a place to post short-walkthroughs to solve these issues, while avoiding incorporating it into the existing walk-throughs at this point in time. I hope you find it useful, and pardon the organized chaos of miscellaneous topics." }, { - "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-r", - "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-r", - "title": "Installing Software on Windows", - "section": "Installing R", - "text": "Installing R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." + "objectID": "course/00_BonusContent/index.html#windows-arm", + "href": "course/00_BonusContent/index.html#windows-arm", + "title": "Bonus Content", + "section": "Windows Arm", + "text": "Windows Arm\n\nPositron\nOn the main Positron installation page, only the installers for Windows Computers with x86 chips are currently shown. There is a beta (experimental) version of Positron for Windows ARM (ex. Snapdragons), but it needs to be installed from Positron’s GitHub releases page.\n\nPlease note, you should download the most recent version that is available to you, as they continue to update it and fix bugs. As of February 04, 2026, you would also need to install Quarto separately.\nTo install Quarto, first navigate to their website. Quarto for Windows ARM was implemented in 2023, so the regular installer should work.\n\nAlso, you would need a Python arm64 installation installed if you decide you want to venture into using Python at any point." }, { - "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-rtools", - "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-rtools", - "title": "Installing Software on Windows", - "section": "Installing RTools", - "text": "Installing RTools\n\n\n\n\n\n\n\n\n.\n\n\nWe will now work on installing Rtools. This software is needed when building R packages from source, which we will need throughout the course for R packages hosted on GitHub.\nTo get started, we will return to the R installation page we visited previously and instead click on the Rtools option." + "objectID": "course/00_BonusContent/index.html#visual-mode", + "href": "course/00_BonusContent/index.html#visual-mode", + "title": "Bonus Content", + "section": "Visual Mode", + "text": "Visual Mode\nWithin Positron, there exist a toggle button to switch between source and visual mode on Quarto documents. But what do you do when you can’t find it?\n\nTuns out…. Visual Mode is currently broken, so the developers removed it about two weeks ago.\nThe current way to switch to it is via right-click, then select edit visual mode.\n\nVice versa, once there, you can revert by right-clicking and selecting Edit Source Mode\n\nThe process of figuring what is going on highlights how to use a GitHub Discussion Page. This is Positrons when I searched for visual button. I then found that a similar question was asked 3 days ago that led me to the linked thread above." }, { - "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-git", - "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-git", - "title": "Installing Software on Windows", - "section": "Installing Git", - "text": "Installing Git\n\n\n\n\n\n\n\n\n.\n\n\nGit is a version control software widely used among software developers and bioinformaticians. We will use it extensively throughout the course, both locally on our computers (to keep track of changes to our files), as well as in combination with GitHub(to maintain online backups of our files).\nWe will first navigate to the website and select the download from Windows option." + "objectID": "course/00_BonusContent/index.html#not-detecting-git", + "href": "course/00_BonusContent/index.html#not-detecting-git", + "title": "Bonus Content", + "section": "Not Detecting Git", + "text": "Not Detecting Git\nIf you leave the “Initialize Git Repository” option unclicked when setting up a New Folder from Template, Git will not be active within your project folder.\n\nAs a result, when you try to use the usethis packages use_github(private=true) function, you will get an error that resembles the one below\n\nTo initiate a Git repository after the fact, you will need to go to the Version Control tab in the action bar, and select the option.\n\nThen, you will need to stage the files you want to work with, and commit them.\n\nuse_github(private=TRUE) should now be functional at that point. However, you can also choose to continue via Positron’s interface instead by selecting Publish.\n\nIt will then ask you whether you want to save it as either a Public or a Private repository.\n\nAnd if all goes well, you will see the “Successs” pop-up in the lower-right" }, { - "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-positron", - "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-positron", - "title": "Installing Software on Windows", - "section": "Installing Positron", - "text": "Installing Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." + "objectID": "course/00_BonusContent/PullConflicts/index.html", + "href": "course/00_BonusContent/PullConflicts/index.html", + "title": "Take-Home Problems - Pull Fix Resolution", + "section": "", + "text": "Background\nFor those who have turned in the homework to the Cytometry in R - homework branches, many report having encountered merge issues pulling in the next week’s data if the pull request hasn’t been resolved yet. Creating a parallel branch, and submitting homework from there to the homework branch might solve the issue? But we will need to test that out. For now, here are the steps we used to resolve the issue locally without needing to delete and re-download.\n\n\nGetting Started\nStart off checking your GitHub forked version of the CytometryInR, notice how many commits behind you are.\n\n\nIf you haven’t submitted the optional Take-Home problems via a pull-request, proceed to do so.\n\n\nThis was an example of the page you see when submitting the pull request. Upon submission, your branch may show merge conflicts due to difference in rendered docs. This is okay, we will resolve it on our end.\n\n\nWhat we will end up doing is ignore the changes and accept the current version. This issue is likely due to the weekly updating of the data resulting in new sidebar links. We will then mark these issues as resolved\n\nWe will then mark the issues as resolved.\n\n\nOn return to the homework, we will be able to merge the branch once again. We will likely make our suggestions at this point for this branch.\n\n\nHowever, after pull request has been merged, you will see your branch is way ahead (due to everyone elses homework commits). This is the area we will need to address via the new branch method.\n\n\nFor now, proceed to discard the changes (you don’t need the other participants homeworks cluttering your folder)\n\n\nYou will then appear as caught up with the main branch.\n\n\nOn return to Positron, attempt to pull\n\n\nHowever, since your homework commit is still present, you will receive a pop-up asking you to see the GitLog. If you scroll up the problem log, it will give you several options.\n\n\nYou will need to enter the following code into your terminal tab:\n\ngit config pull.rebase TRUE\n\n\n\nThis will result in a branched appearance, and the button asking you to sync the changes.\n\n\nUpon doing so you will have a restored status vs. the main cytometry in R project folder.\n\n\n\nTake Away\nWe have encountered a first growing pain for the course, in that the pull-request method we have been using still causes merge conflicts. We will be going to a homework branch to homework branch pull-request approach going forward, I will send out additional instructions on how to do so shortly.\nThanks for your patience!\nDavid\n\n\nAdditional Resources" }, { - "objectID": "course/00_Quarto/slides.html#renderpreview", - "href": "course/00_Quarto/slides.html#renderpreview", - "title": "Introduction to Quarto", - "section": "Render/Preview", - "text": "Render/Preview\n\n\n\n\n\n\n\n\n.\n\n\nThe preview button, at the upper-left end of the Editor, is used to render/knit a quarto document. This triggers the process by which code-chunks are run, and then the outputs are cobbled together into the file format type designated by the YAML header." + "objectID": "course/index.html", + "href": "course/index.html", + "title": "Cytometry in R", + "section": "", + "text": "Cytometry in R is a free virtual mini-course being organized by the Flow Cytometry Shared Resource Core at the University of Maryland’s Greenebaum Comprehensive Cancer Center. This course is a passion project arising from our desire to contribute back to the community.\nWe 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." }, { - "objectID": "course/00_Quarto/slides.html#yaml", - "href": "course/00_Quarto/slides.html#yaml", - "title": "Introduction to Quarto", - "section": "YAML", - "text": "YAML\n\n\n\n\n\n\n\n\n.\n\n\nWe can additionally provide additional custom inputs to the YAML header. A couple examples include providing the document author and date." + "objectID": "course/index.html#resources", + "href": "course/index.html#resources", + "title": "Cytometry in R", + "section": "Resources", + "text": "Resources\nCourse materials can be found here. The livestream recordings are available via YouTube" }, { - "objectID": "course/00_Quarto/slides.html#table-of-contents", - "href": "course/00_Quarto/slides.html#table-of-contents", - "title": "Introduction to Quarto", - "section": "Table of Contents", - "text": "Table of Contents\n\n\n\n\n\n\n\n\n.\n\n\nIn the previous section, we saw that we could provide headings and subheadings to our .qmd file by placing a # at the start of a line in the text portion of the document. A subheading was designated by a ##, with additional hierarchy being designated by appending an additional #." + "objectID": "course/index.html#in-person-baltimore", + "href": "course/index.html#in-person-baltimore", + "title": "Cytometry in R", + "section": "In-Person (Baltimore)", + "text": "In-Person (Baltimore)\nFor those joining us in person, the class is being offered on Thursday from 4-5 pm EST in Bressler Research Building Room 7-035. Monitors to plug your laptops in will be available on a first come, first served basis. These in-person sessions will not be recorded, but with the smaller class size you will have our undivided attention should you have any questions." }, { - "objectID": "course/00_Quarto/slides.html#code-chunk-arguments", - "href": "course/00_Quarto/slides.html#code-chunk-arguments", - "title": "Introduction to Quarto", - "section": "Code Chunk Arguments", - "text": "Code Chunk Arguments\n\n\n\n\n\n\n\n\n.\n\n\nAs we briefly touched on in the last section, code-chunks can be modified by including arguments, which affect whether a particular code chunk gets evaluated. In that example, we included a “#| eval: FALSE” to the install commands since we did not want them to be re-run subsequently. We will take a closer look at the other arguments in this section.\n\n\n\n\n\nEval\n\n\n\n\n\n\n\n\n.\n\n\nThe code-chunk argument, “Eval”, is used to determine when a code-chunk get’s evaluated. When set to true (or by default if no eval argument is included), the code-chunks contents will be run/executed, and the output will appear. We can see this in the html output, as below the code block, we get back the address of my working directory." + "objectID": "course/index.html#virtual-worldwide", + "href": "course/index.html#virtual-worldwide", + "title": "Cytometry in R", + "section": "Virtual (Worldwide)", + "text": "Virtual (Worldwide)\nFor those joining us virtually, we will have three separate livestreams throughout the week on YouTube. These will be offered on:\n\nTuesday 2200 EST (Wednesday 0300 GMT+0)\nWednesday 1600 EST (Wednesday 2100 GMT+0)\nThursday 1000 EST (Thursday 1500 GMT+0)\n\nAll three livestreams will be recorded and available on YouTube immediately afterwards." }, { - "objectID": "course/00_Quarto/slides.html#text-styles", - "href": "course/00_Quarto/slides.html#text-styles", - "title": "Introduction to Quarto", - "section": "Text Styles", - "text": "Text Styles\n\n\n\n\n\n\n\n\n.\n\n\nQuarto primarily uses Markdown for text styling. Consequently, markdown arguments can be used within the text to change how various text appears." + "objectID": "course/index.html#discussion-forum", + "href": "course/index.html#discussion-forum", + "title": "Cytometry in R", + "section": "Discussion Forum", + "text": "Discussion Forum\nWe will be using the Cytometry in R Discussions page as a community forum, and a place to ask questions, celebrate wins, and provide feedback. After creating a a GitHub account, pleae go introduce yourself." }, { - "objectID": "course/00_Quarto/slides.html#hyperlinks", - "href": "course/00_Quarto/slides.html#hyperlinks", - "title": "Introduction to Quarto", - "section": "Hyperlinks", - "text": "Hyperlinks\n\n\n\n\n\n\n\n\n.\n\n\nYou can link to a website by surrounding word of interest in [] and placing the url within () adjacent to it." + "objectID": "ExistingResources.html", + "href": "ExistingResources.html", + "title": "Existing Resources", + "section": "", + "text": "We are not the first “Cytometry in R” course, nor will we be the last. This page is linking to the already existant online Cytometry in R resources that we have encountered and benefited from during our own learning journey. May they prove useful to you as you progress your way through yours!\n\n\n\nChristopher Hall - Flow Cytometry Data Analysis in R\nCytometry-R-Scripts: R scripts to help with your flow cytometry analysis\nR_flowcytometry_course: The files and presentation from the Cytometry Core Facility flow cytometry data analysis course in R\n\nInstallation and Loading Data\n(1) Flow Cytometry Data Analysis in R - Installation and Loading Data\n\n\n\n\nCompensation, Cleaning, Transformation, Visualization\n(2) Flow Cytometry Data Analysis in R: compensation, cleaning, transformation, visualization\n\n\n\n\nGating with flowWorkspace\n(3) Flow Cytometry Data Analysis in R: gating with flowWorkspace\n\n\n\n\nVisualization\n(4) Flow Cytometry Data Analysis in R: Visualisation\n\n\n\n\n\n\n\nOzette Technologies - BioC 2023 Workshop\nWorkshop given at the Bioc2023 conference, authored by Arpan Neupane and Andrew McDavid.\nWorkshop: Reproducible and programmatic analysis of flow cytometry experiments with the cytoverse\n\n\n\n\n\n\nPritam Kumar Panda - Flow Cytometry Data Analysis & Visualization in R using CytoExploreR\nFlow-Cytometry-analysis-in-R\nCytoExploreR-Interactive-visualization\n\nComplete Guide\nFlow Cytometry Data Analysis & Visualization in R using CytoExploreR: Complete Guide\n\n\n\n\n\n\n\nBioinformatics DotCa - Introduction to Flow Cytometry in R\n\nIntroduction to Flow Cytometry in R\nIntroduction to Flow Cytometry in R\n\n\n\n\nExploring FCM Data in R\nExploring FCM Data in R\n\n\n\n\nProcessing and Quality Assurance of FCM Data\nProcessing and Quality Assurance of FCM Data\n\n\n\n\n1D Dynamic Gating\n1D Dynamic Gating\n\n\n\n\nClustering and Additional FCM Tools\nClustering and Additional FCM Tools\n\n\n\n\n\nTulika Rai - Learn Innovatively With Me\n\nflowAI Flow Cytometry Data Cleaning using R\nflowAI Flow Cytometry Data Cleaning using R: A Step-by-step Tutorial\n\n\n\n\ntSNE UMAP TRIMAP colorization or Transformation using R script\ntSNE UMAP TRIMAP colorization or Transformation using R script\n\n\n\n\n\n\n\nGivanna Putri - Introduction to Cytometry Data Analysis in R workshop\nACS 2021 Workshops - Introduction to Cytometry Data Analysis in R workshop\n\n\n\n\n\n\nTimothy Keyes -\n{tidytof}: Predicting Patient Outcomes from Single-cell Data using Tidy Data Principles\n\n\n\n\n\n\nRyan Duggan - Cytometry on Air\nCytometry on Air: Analyzing Flow Cytometry Data in R Presentation by TJ Chen and Greg Finak,\n\n\n\n\n\n\nGuillaume Beyrend - Learn Cytometry\nLearn Cytometry Originally appeared to have been paywalled, doesn’t currently appear to be the case.\n\n\n\n\nHong Qin - flow analysis in R\n\nFlow Analysis in R\nflow analysis in R, bio125, Spring 2015\n\n\n\n\nFlow Cytometer Data Analysis\nBIO233 demo, flow cytometer data analysis, simple example\n\n\n\n\n\n\n\nSwayam Prabha - Flow cytometry data analysis in R/Bioconductor\nLecture 15 : Flow cytometry data analysis in R/Bioconductor" }, { - "objectID": "course/00_Quarto/slides.html#images", - "href": "course/00_Quarto/slides.html#images", - "title": "Introduction to Quarto", - "section": "Images", - "text": "Images\n\n\n\n\n\n\n\n\n.\n\n\nYou can place images by adding the following, as long as the file.path to the image is correctly formatted. In my case, this is why I include images folders within my folders to simplify the copy and paste." + "objectID": "index.html", + "href": "index.html", + "title": "About", + "section": "", + "text": "Cytometry in R is a free weekly mini-course being offered both in-person and online by the Flow Cytometry Shared Resource staff at the University of Maryland Greenebaum Comprehensive Cancer Center. Its primary audience is for those with prior flow cytometry knowledge, who have limited previous experience with the programming language R. However, we welcome everyone regardless of their existing  flow cytometry  or coding experience.\nThis course is a passion project arising from our desire to contribute back to the community. We are excited that so many of you have chosen to sign up, and look forward to helping you get started on your own learning journeys.\nFor more information on topics-covered, please see our schedule. Course materials can be found here or via the Course tab in the navigation bar. The livestream recordings are available via YouTube\n\n\nAbout\n\n\nMotivation\nWhile many cytometry enthusiast express an interest in learning how to carry out flow cytometry analyses in R, they often do not know where to start. Additionally, many of the limited existing resources are focused towards users with intermediate bioinformatic skills, contributing to a greater barrier for entry for those just starting out. Our motivation in offering this mini-course tailored towards beginners is to make the learning journey smoother than the one we ourselves experienced.\n\nWhile designing the course, we kept the following concepts in mind:\n\nBeginning coders benefit both by having detailed examples that they can initially work through on their own time, as well as less defined problems that through troubleshooting enable the acquisition of the thought-process and skills needed for coding.\nSome topics will take individuals a longer time to fully grasp. Providing a format and resources that enable being able to revisit the material multiple times is incredibly helpful. Likewise, life is busy, and missing a workshop session is highly probable. If this happens, it shouldn’t make or break the ability of the individual to understanding the rest of the course.\nConsistency is key, and being able to apply what you are learning to your own datasets, files, and questions of interest helps achieve this.\n\n\n\n\n\nCourse Details\n\nEach week, the mini-course will cover a particular topic for an hour. This individual class is offered on multiple days, at different times, both in-person and online. We invite you to attend the one that best fits your schedule each week. If life gets busy and you can’t make regular day, the online livestream recordings will be available on YouTube.\n \n\nCourse Materials\n\nWe will release the course materials for the upcoming week on Monday 1700 EST (Monday 2200 GMT+0) via our course website and GitHub. These materials will normally be Quarto Markdown documents containing code, explanation, and other resources needed for that week. If you have your own data, you can use your own data! If you don’t have any data, we will make sure to provide some of our own available data for each lesson so that you can use it and be able to follow along.\nIn our commitment to open-source and open-science, all teaching materials are freely offered under a CC-BY-SA license, while all code examples are offered under the AGPL3-0 copyleft license.\n \n\n\nIn-Person (Baltimore)\n\nFor those who are local and attending in person, the class will be offered on Thursday from 4-5 pm EST in Bressler Research Building Conference Room 7-035 (around the corner from the Flow Core).\nIf you have your own laptop, feel free to bring it. If you don’t have a laptop, please reach out, the Flow Core has 6 laptops running Linux that we can lend out to participants for use during the session.\nFor those who arrive early, we will have a limited number of second screens with provided mouse and keyboard that you can plug a laptop into via HDMI cable to set up a larger workstation. For those arriving later, the room has enough space (and electrical plugs) for up to 20 people, but you will need to balance a laptop on your lap.\n \n\n\nOnline (Worldwide)\n\nFor those joining us virtually, we will have three separate livestreams throughout the week on YouTube. These will be offered on:\n\nTuesday 2200 EST (Wednesday 0300 GMT+0)\nWednesday 1600 EST (Wednesday 2100 GMT+0)\nThursday 1000 EST (Thursday 1500 GMT+0)\n\n \n\n\nRecordings\n\nAll three livestreams will be recorded and available on YouTube immediately afterwards. Our plan is to eventually circle back after the course and properly edit them (ie. less minutes of random background noise, highlighting the relevant lines of code, time-stamps, subtitles, translations, etc.) later on as time allows, so that they can serve as a more permanent resource.  \n\n\nDiscussion Forum\n\nWe will be using our GitHub Discussions page as a community forum. This will allow us to answer questions, and benefit from insights from others in the community. One advantage of having so many people signed up for the course is that if you have a question, someone else likely does as well, so go start a post and ask it!\n \n\n\nOptional Take-Home Problems\n\nEach week, we will offer optional take-home problems. These are intended to allow you to work with your own data on similar problems, but in a not-so-structured manner. Challenges that you and overcome during the process will help grow your problem solving and debugging skills, and help solidify concepts covered during the course.\nTo get feedback on these problems, you can reach out to the community on the Discussions page, or once far enough open a pull request to the homework branch and we will provide additional feedback.\n \n\n\nCost\nIs there a cost to participate? No, it’s absolutely free! Is there a catch? Yes, you learn R, and may wind up with strong feelings about flowframes vs. cytoframes. This is also our first year offering this course, so we will sporadically ask you to fill out a feedback forms to help us improve.\n\n \n\n\nComputing Requirements\n\nFor those attending online, you will need a computer with internet access. Operating system shouldn’t matter, as we will be offering code examples for Windows, Mac and Linux. As with all things flow-cytometry software, having a faster CPU with multiple cores, more RAM and greater storage space is generally helpful, but not a deal breaker.\n\nYou will need to be able to install the required software (R, Rtools, Positron, Quarto, and Git) as well as install and compile R packages from the CRAN and Bioconductor repositories (as well as a few GitHub-based R packages). Installation walkthroughs for each computer operating system can be found here.\nFor those using university or company administered computers, please be aware that you may not have the necessary permissions to install these directly, and may need to reach out to your IT department to help get these initial requirements set up. If you are using your own computer, congratulations, you are your system administrator, and should already have the necessary permissions.\n\nFor those attending in-person, we have set up a pop-up computer lab in the conference room. For those who arrive early, we have a limited number of second screens with provided mouse and keyboard that you can plug a laptop into via HDMI cable to set up a workstation. For those arriving later, the room has enough space (and electrical plugs) for 20 people, but you will need to balance a laptop on your lap. If you have your own laptop, feel free to bring it. If you don’t have a laptop, the flow core has 6 loaner laptops running Linux that we can let participants use for that session.\n\n\n\n\nLicense\nIn our commitment to open-science and open-source, all teaching materials are freely offered under a CC-BY-SA license, while all code examples are offered under the AGPL3-0 copyleft license." }, { - "objectID": "course/00_Positron/slides.html#console", - "href": "course/00_Positron/slides.html#console", - "title": "Using Positron", - "section": "Console", - "text": "Console\n\n\n\n\n\n\n\n\n.\n\n\nAt the bottom of the sceen, you will first see the Console Tab. This is the tab where your lines of code when executed (run) will appear, as well as any messages, warnings or errors that get returned. On the right side of the console, you can find several buttons, among them restart R and delete session (for when you need a fresh start), and clear console (which keeps all previously run outputs and objects, but clears away the displayed text within the console)." + "objectID": "Schedule.html", + "href": "Schedule.html", + "title": "Cytometry in R", + "section": "", + "text": "Cytometry in R: A Course for Beginners\nCytometry in R is a free virtual mini-course being organized by the Flow Cytometry Shared Resource core at the University of Maryland’s Greenebaum Comprehensive Cancer Center. This course is a passion project arising from our desire to contribute back to the community. We are excited that you have chosen to take part and look forward to helping you get started on your own learning journey.\nCourse materials can be found here or via the Course tab in the navigation bar. The livestream recordings are available via YouTube\n\n\n\nPre-Course Walkthroughs\n\nWeek 0: January 26, 2026 In these pre-course walk-throughs, we ensure that everyone creates a GitHub account, and has their computer properly set up with the required software (including R, Positron, and Git). We then start to build individual participants familiarity with the software infrastructure that they will be using throughout the rest of the course.\n \n\n\nInstalling R Packages\n\nWeek 1: February 2, 2026 During this first session, we learn how to install R packages from the various repositories (CRAN, Bioconductor, GitHub), and how to troubleshoot the more typical errors that occur during this process.\n \n\n\nFile Paths\n\nWeek 2: February 9, 2026 For this second session, we focus on how to programmatically tell your computer where to locate your experimental files, introducing the concept of file paths. We explore how the various operating systems (Linux, MacOS, Windows) specify their respective folders and files, and how to identify where you are currently within the directory. Our goal by the end of this session is to have walked you through how to figure out where an .fcs file of interest is stored, and convey to your computer where you want it copied/moved to, without encountering the common pitfalls.\n \n\n\nInside an .FCS file\n\nWeek 3: February 16, 2026 In the course of this third session we will slice into an .FCS file and find out what the individual components that make it up are. In the process, we will cover the concepts of main data structures within R (vectors, matrices, data.frames, list) and how to identify what we are working with. Additionally, we will explore how various cytometry softwares store their metadata variables under various keywords that can be useful to know about.\n \n\n\nIntroduction to the Tidyverse\n\nWeek 4: February 23, 2026 Within this fourth session, we explore how the various tidyverse packages can be utilized to reorganize rows and columns of data in ways that are useful for data analysis. We will primarily work with the MFI expression data we isolated from within the .fcs file in the previous session, identifying and isolating events that meet certain criterias. We introduce the concepts behind “tidy” data and how it can improve our workflows.\n \n\n\nGating Sets\n\nWeek 5: March 2, 2026 As part of this fifth session, we learn about the two main flow cytometry infrastructure packages in R we will be working with during the course, flowcore and flowWorkspace. Throughout the session, we will compare how they differ in naming, memory usage, and accessing .fcs file metadata. We additionally explore how to add keywords to their respective metadata for use in filtering specimens of interest from the larger set of .fcs files.\n \n\n\nVisualizing with ggplot2\n\nWeek 6: March 9, 2026 During this session we provide an introduction to the ggplot2 package. We will take the datasets we have collected from the previous sessions and see how in varying in different arguments at the respective plot layers we can produce and customize many different forms of plots, focusing on both cytometry and statistics plots. We close out providing links to additional helpful resources and highlight the TidyTuesday project.\n \n\n\nApplying Transformations and Compensation\n\nWeek 7: March 16, 2026 For this seventh session, we take a closer look at the raw values of the data within our .fcs files, and explore the various ways to transform (ie. scale) flow cytometry data in R to better visualize “positive” and “negative populations”. In the process, we visualize the differences resulting from applying different transformations commonly used by commercial software. Similarly, we learn how to apply and visualize compensation in context of conventional flow cytometry files.\n \n\n\nManual and Automated Gating\n\nWeek 8: March 23, 2026 Within this session, we explore various ways to implement gating for flow cytometry files in R. We will explore manual approaches utilizing flowGate, as well as automated options with openCyto 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.\n \n\n\nConference Break 1\nNo class week of March 30, 2026. If you are attending the ABRF conference, track me down at the Complex Data Analysis in Flow Cytometry: Navigating the Landscape talk on Monday, March 30th at 4:30 PM.\n \n\n\nIt’s Raining Functions!\n\nWeek 9: April 6, 2026 In the course of this ninth session, we tackle one of the harder but most useful concepts to learn for a beginner, namely functions. 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 package.\n \n\n\nDownsampling and Concatenation\n\nWeek 10: April 13, 2026 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.\n \n\n\nRetrieving data for Statistics\n\nWeek 11: April 20, 2026 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.\n \n\n\nSpectral Signatures\n\nWeek 12: April 27, 2026 As part of this session, we will explore how to extract fluorescent signatures from our raw spectral flow cytometry reference controls. Building on prior concepts, we will learn to isolate median signatures from positive and negative gates, and how to derrive and plot normalized signatures. We also introduce plotly package and it’s interactive plotting features, before showcasing various packages attempts at facilitating signature retrieval.\n \n\n\nSimilarities and Hotspots\n\nWeek 13: May 4, 2026 During this session, we will utilize the spectral signature matrix isolated from raw spectral flow cytometry controls and evaluate different ways of evaluating how similar different fluorescent signatures are to each other. In the process, we will gain better understanding of the metrics behind similarity (cosine), panel complexity (kappa), and unmixing-dependent spreading (collinearity).\n \n\n\nUnmixing in R\n\nWeek 14: May 11, 2026 In the course of this session, we will attempt a reach goal of many, namely carry out unmixing of raw .fcs files using the spectral signatures we have isolated from our unmixing controls, and write to new .fcs files. After evaluating the necessary internals, we will explore how various current cytometry R packages have implemented their own unmixing functions, and the various limitations that each approach has encountered.\n \n\n\nCleaning Algorithms\n\nWeek 15: May 18, 2026 In the span of this session, we will directly compare how various Bioconductor data cleanup algorithms (namely PeacoQC, FlowAI, FlowCut, and FlowClean) tackle distinguishing and removing bad quality events. We will see how they perform with previously identified good quality and horrific quality .fcs files. We will whether the implemented algorithmic decisions made sense, and how to customize them within our workflows to achieve our own desired goals.\n \n\n\nClustering Algorithms\n\nWeek 16: May 25, 2026 As part of this session, we venture away from supervised and semi-supervised analyses to explore unsupervised clustering approaches, namely FlowSOM and Phenograph. We will compare outcomes depending markers included, transformations applied, and panel used to gain a greater familiarity with how they work. We wrap up by investigating ways to visualize marker expression of cells ending up in each cluster, and how to backgate them to our manual gates.\n \n\n\nNormalization: Batch Effect or Real Biology\n\nWeek 17: June 1, 2026 During this session, we will dive into evaluating the performance of two commonly used normalization algorithms, CytoNorm and CyCombine. We will utilize our ggplot2 and functional programming toolkits to create a customized workflow to visualize the differences for our respective cell populations before and after normalization, to better evaluate how the respective parameter choices can affect the process.\n \n\n\nConference Break 2\nNo class week of June 8, 2026. If you are attending the Cyto conference, track me down at my talks (Open-Source automation on June 7, 10:30-11:30AM at Grand Ballroom; and Semi-supervised pipeline on June 9, 10:30-11:45AM atRoom 2DEF) or poster (grab some Cytometry in R course hex stickers!)\n \n\n\nDimensionality Visualization\n\nWeek 18: June 15, 2026 For this session, we explore how dimensionality visualization algorithms perform tSNE and UMAP in R using our raw and unmixed samples. In the process, we will explore how markers included, number of cells, and presence of bad quality events can impact the final visualizations. Finally, we will provide an overview of how to link to Python to additionally run PaCMAP and PHATE visualizations for use in R.\n \n\n\nAnnotating Unsupervised Clusters\n\nWeek 19: June 22, 2026 In the course of this session, we explore ways to scale our efficiency in figuring out what an unsupervised cluster of cells may be, by employing several annotation packages. We explore how these work under the hood in their decision making process, and how to link them to reference data from external repositories for additional evaluation.\n \n\n\nThe Art of GitHub Diving\n\nWeek 20: June 29, 2026 Within this session, we delve into the art of investigating a new-to-you GitHub repository. We discuss the overall structure of R packages stored as source files within GitHub repositories, and how to leverage this knowledge when troubleshooting errors thrown by underdocumented R packages. We discuss how to modify identified functions, evaluate them, and process to submit helpful bug reports back to the original project to help fix the issue.\n \n\n\nXML Files All The Way Down\n\nWeek 21: July 6, 2026 Breaking news alert, most of the experiment templates and worksheet layouts we work with as cytometrist are .xml files. In this session, we learn some additional coding tools to allow us to work with these types of files to extract useful data. In this session, we test out our new problem solving abilities to retrieve data from SpectroFlo and Diva .xml files to monitor how our core’s flow cytometers behaved for various users last week.\n \n\n\nUtilizing Bioconductor packages\n\nWeek 22: July 13, 2026 Many of the R packages for Flow Cytometry we have utilized in this course were packages from the Bioconductor project. We take a look at what makes Bioconductor packages unique compared to packages found on GitHub and CRAN, explore some of their specific infrastructure types for flow cytometry data, and highlight some useful packages for downstream analysis that we haven’t had time to properly explore.\n \n\n\nBuilding your First R package\n\nWeek 23: July 20, 2026 For most of the course, we have been working with R packages that other individuals built and maintained. In this session, we leverage all your hard work from the rest of the course and corral the unwieldly arsenal of functions you wrote into your first R package for easier use. We will discuss the individual pieces of an R package, the importance of a well-setup namespace file, and how to generate help page manuals to refer future-you back to what your individual function arguments actually do.\n \n\n\nEveryone Get’s a Quarto Website\n\nWeek 24: July 27, 2026 In this session, we will extend the knowledge of .R and .qmd files you have gained from the course and extend them to create your own website using Quarto. We discuss the additional files that are required, how to customize and render the website locally, and finally set up Quarto Pub or GitHub Pages website that we are to access online.\n \n\n\nReproducibility and Replicability\n\nWeek 25: August 3, 2026 Throughout the course, we emphasized the importance of making your workspaces and code reproducible and replicable. But what do we mean by these terms, and are there best practices we could add to our existing workflow to do this more efficiently? We explore a couple community-led efforts within the cytometry space and troubleshoot their implementation into a previously published pipeline.\n \n\n\nConference Break 3\nNo class week of August 10, 2026. If you are attending the BioC conference, track me down at my talk/poster.\n \n\n\nOpen Source Licenses\n\nWeek 26: August 17, 2026 For this course, we have relied extensively on open-source software to create our own data analysis pipelines. In the process, you may have some recollection of the various license names. But what impact do all these different names have in the end? We take a brief deep-dive into the ecosystem of free and open-source licenses, and evaluate what their respective license terms mean for us as individual users of the code, as well as potential developers extending existing codebases.\n \n\n\nValidating Algorthmic Tools\n\nWeek 27: August 24, 2026 We will be the first to admit, new implementations of algorithms as R packages are awesome! We appreciate the effort that went into them and making them available to the community at large. But what is the best way of evaluating whether they behave as promised, or work for our dataset? During this session, we share tips and tricks to gain better understanding of how a new R package works, and things to watch out for when evaluating complicated algortithms. We wrap with walkthrough of how to generate simulated datasets with known distributions for use in testing.\n \n\n\nDatabases and Repositories\n\nWeek 28: August 31, 2026 During this session, we will learn how to identify and retrieve .fcs files from databases. While many of us are accustomed to working with large datasets of our own making, many of us are increasingly encountering larger-than-memory datasets, as well as files stored in large repositories. In this session, we will explore several database focused R packages, before investigating how to identify and retrieve .fcs files and associated metadata of interest from repositories, namely ImmPort (and maybe FlowRepository if it can be pinged that afternoon).\n \n\n\nAssembling Web Data\n\nWeek 29: September 7, 2026 In this session, we briefly delve into the concepts of web-scraping and APIs in general. We highlight useful packages, namely httr2 and rvest, and best practices implemented to allow respectful retrieval of useful data without crashing someone’s server like some AI startup bot. We finish by providing a list of additional useful resources for those interested in learning more.\n \n\n\nFuture Directions\n\nWeek 30: September 14, 2026 In this final of the planned sessions, we revisit our solutions to the challenge problems set out during the beginning of the course. We also discuss potential future topics to visit in the future, and any additional resources that proved helpful throughout the course.", + "crumbs": [ + "About", + "Cytometry Core" + ] }, { - "objectID": "course/00_Positron/slides.html#terminal", - "href": "course/00_Positron/slides.html#terminal", - "title": "Using Positron", - "section": "Terminal", - "text": "Terminal\n\n\n\n\n\n\n\n\n.\n\n\nRight next to the Console tab is your Terminal tab. While the console tab is primarily used to run R code within Positron, the terminal is the interface where code containing system commands directed at at your computer is entered. We will use this less frequently, primarily in two context: 1) rendering Quarto documents, and 2) commiting changes to version control. Among the buttons on the right-side of the terminal to make note of are the + button to add a new terminal, and the trash/garbage can button to kill (stop) the terminal." + "objectID": "PackageWalkthroughs.html#flowcore", + "href": "PackageWalkthroughs.html#flowcore", + "title": "Package Walkthroughs", + "section": "flowCore", + "text": "flowCore" }, { - "objectID": "course/00_Positron/slides.html#help", - "href": "course/00_Positron/slides.html#help", - "title": "Using Positron", - "section": "Help", - "text": "Help\n\n\n\n\n\n\n\n\n.\n\n\nWhen trying to evaluate how a particular function is working in R, you can hover over it and positron will open up the documentation for that particular function if available, alternatively, you can enter ?theParticularFunctionsName in the console and hit enter to similarly view what is occuring." + "objectID": "PackageWalkthroughs.html#cytolib", + "href": "PackageWalkthroughs.html#cytolib", + "title": "Package Walkthroughs", + "section": "cytolib", + "text": "cytolib" }, { - "objectID": "course/00_Positron/slides.html#variables", - "href": "course/00_Positron/slides.html#variables", - "title": "Using Positron", - "section": "Variables", - "text": "Variables\n\n\n\n\n\n\n\n\n.\n\n\nOn the upper-portion of the Secondary Side Bar, we can find the Session window, containing the Variables tab. As you run (execute) lines of code, and different variables, objects and functions are created, these become visible under the variables tab on the upper right." + "objectID": "PackageWalkthroughs.html#flowworkspace", + "href": "PackageWalkthroughs.html#flowworkspace", + "title": "Package Walkthroughs", + "section": "flowWorkspace", + "text": "flowWorkspace" }, { - "objectID": "course/00_Positron/slides.html#plots", - "href": "course/00_Positron/slides.html#plots", - "title": "Using Positron", - "section": "Plots", - "text": "Plots\n\n\n\n\n\n\n\n\n.\n\n\nSimilarly, any generated Plots or Documents will appear within the Secondary Side Bar, either under Plots (bottom) or Viewer (top) tabs." + "objectID": "PackageWalkthroughs.html#ncdfflow", + "href": "PackageWalkthroughs.html#ncdfflow", + "title": "Package Walkthroughs", + "section": "ncdfFlow", + "text": "ncdfFlow" }, { - "objectID": "course/00_Positron/slides.html#view", - "href": "course/00_Positron/slides.html#view", - "title": "Using Positron", - "section": "View", - "text": "View\n\n\n\n\n\n\n\n\n.\n\n\nOn the upper bar multiple tabs can be found, which we will explore in due time. Most useful to point out is the View tab. If you accidentally close your console, session or plots window, and are trying to get them to reapper, you would need to reselect them from this tab." + "objectID": "PackageWalkthroughs.html#flowviz", + "href": "PackageWalkthroughs.html#flowviz", + "title": "Package Walkthroughs", + "section": "flowViz", + "text": "flowViz" }, { - "objectID": "course/00_Positron/slides.html#pages", - "href": "course/00_Positron/slides.html#pages", - "title": "Using Positron", - "section": "Pages", - "text": "Pages\n\n\n\n\n\n\n\n\n.\n\n\nThe pages tab and the left-side bar show you everything that is currently within your project folder, including all the folders, and files. Once version control with Git is initiated, new files are relected showing up as green text and a dot, while modified tracked files are reflected by light brown text and a dot." + "objectID": "PackageWalkthroughs.html#flowsom", + "href": "PackageWalkthroughs.html#flowsom", + "title": "Package Walkthroughs", + "section": "FlowSOM", + "text": "FlowSOM" }, { - "objectID": "course/00_Positron/slides.html#search", - "href": "course/00_Positron/slides.html#search", - "title": "Using Positron", - "section": "Search", - "text": "Search\n\n\n\n\n\n\n\n\n.\n\n\nThe search tab on the left side bar is something that I use routinely." + "objectID": "PackageWalkthroughs.html#ggcyto", + "href": "PackageWalkthroughs.html#ggcyto", + "title": "Package Walkthroughs", + "section": "ggcyto", + "text": "ggcyto" }, { - "objectID": "course/00_Positron/slides.html#extensions", - "href": "course/00_Positron/slides.html#extensions", - "title": "Using Positron", - "section": "Extensions", - "text": "Extensions\n\n\n\n\n\n\n\n\n.\n\n\nOn the far-left side we can find the Activity bar, which contains several tabs. Which tab you have selected will then dictate the contents of your left side-bar.\nOccupying the left side bar are several tabs. One of these is Extensions, which shows “Plugins” (or the VScode equivalent) that extend the functionality of Positron further. The ones you have installed may vary, but the main ones in context of this course are Air (provides color and highlights syntax for R code to make interpretation easier) as well as Quarto (for rendering the various document types)." + "objectID": "PackageWalkthroughs.html#opencyto", + "href": "PackageWalkthroughs.html#opencyto", + "title": "Package Walkthroughs", + "section": "openCyto", + "text": "openCyto" }, { - "objectID": "course/00_Positron/slides.html#git", - "href": "course/00_Positron/slides.html#git", - "title": "Using Positron", - "section": "Git", - "text": "Git\n\n\n\n\n\n\n\n\n.\n\n\nThe Git tab on the left side bar is where once version control is initiated for the project folder, we can see changes that have occurred to the individual files since the last commit. These changes can be added to a new commit by clicking on the + sign. This will be covered more extensively in the next section" + "objectID": "PackageWalkthroughs.html#quantiseqr", + "href": "PackageWalkthroughs.html#quantiseqr", + "title": "Package Walkthroughs", + "section": "quantiseqr", + "text": "quantiseqr" }, { - "objectID": "course/00_Homeworks/slides.html#discussions-forum", - "href": "course/00_Homeworks/slides.html#discussions-forum", - "title": "Getting Help", - "section": "Discussions Forum", - "text": "Discussions Forum\n\n\n\n\n\n\n\n\n.\n\n\nOn the course’s GitHub repository, we have opened up a Discussions page that we plan to use as a community forum. We hope that it will serve multiple functions, from providing a better sense of community for the online participants, to facilitating asking and receiving help on something that is not clear, provide feedback about something that it not working out, as well as a place to celebrate and show off your coding wins." + "objectID": "PackageWalkthroughs.html#flowstats", + "href": "PackageWalkthroughs.html#flowstats", + "title": "Package Walkthroughs", + "section": "flowStats", + "text": "flowStats" }, { - "objectID": "course/00_Homeworks/slides.html#polls", - "href": "course/00_Homeworks/slides.html#polls", - "title": "Getting Help", - "section": "Polls", - "text": "Polls\n\n\n\n\n\n\n\n\n\n.\n\n\nOccasionally, we will need to gather community feedback on what is working and what is not working. We will sporadically post Polls for this purpose." + "objectID": "PackageWalkthroughs.html#cytoml", + "href": "PackageWalkthroughs.html#cytoml", + "title": "Package Walkthroughs", + "section": "CytoML", + "text": "CytoML" }, { - "objectID": "course/00_Homeworks/slides.html#issues", - "href": "course/00_Homeworks/slides.html#issues", - "title": "Getting Help", - "section": "Issues", - "text": "Issues" - }, - { - "objectID": "course/00_Homeworks/slides.html#submitting-take-home-problems", - "href": "course/00_Homeworks/slides.html#submitting-take-home-problems", - "title": "Getting Help", - "section": "Submitting Take-Home Problems", - "text": "Submitting Take-Home Problems\n\n\n\n\n\n\n\n\n.\n\n\nEach week, during the course, we introduce and cover the main concepts for the particular concept. Our goal is to provide you with the necessary code and enough code to be able to get the jist. However, to become comfortable and be able to apply what you have learned, you will need to explore beyond our examples, try it with your own datasets, encounter things that don’t work, and troubleshoot your way through them. It’s this cycle of venturing into the unknown that develops strong coding skills that are needed to overcome any barrier you encounter. The goal of the take-home questions is to provide some less curated problems that will take a little longer to answer to help get you started on your own exploration of the topic." - }, - { - "objectID": "course/00_GitHub/slides.html#creating-an-account", - "href": "course/00_GitHub/slides.html#creating-an-account", - "title": "Using GitHub", - "section": "Creating an Account", - "text": "Creating an Account\n\n\n\n\n\n\n\n\n.\n\n\nWe will first navigate to the GitHub homepage. If you haven’t previously created an account, click on the button to sign up for an account." - }, - { - "objectID": "course/00_GitHub/slides.html#github-profile", - "href": "course/00_GitHub/slides.html#github-profile", - "title": "Using GitHub", - "section": "GitHub Profile", - "text": "GitHub Profile\n\n\n\n\n\n\n\n\n.\n\n\nUpon creating a brand new account, your GitHub homepage will initially look rather empty, and can be intimidating to navigate for the first time.\nFor now, on the upper right, go ahead and click on the default profile picture icon…" - }, - { - "objectID": "course/00_GitHub/slides.html#github-readme", - "href": "course/00_GitHub/slides.html#github-readme", - "title": "Using GitHub", - "section": "GitHub ReadMe", - "text": "GitHub ReadMe\n\n\n\n\n\n\n\n\n.\n\n\nWith this done, we modify your GitHub profile by adding one customized element, a ReadMe page. This will be used for a couple projects during the course, and can be personalized further in the future.\nTo create a ReadMe page for your profile, we will navigate to the upper right of the screen and click on the + sign." - }, - { - "objectID": "course/00_GitHub/slides.html#github-repository", - "href": "course/00_GitHub/slides.html#github-repository", - "title": "Using GitHub", - "section": "GitHub Repository", - "text": "GitHub Repository\n\n\n\n\n\n\n\n\n.\n\n\nHaving set up your GitHub profile, it now is time to make sure you have access to our course materials. We will have you navigate to our course’s GitHub profile\nOn the profile page, you will be able to see our version of the README, our repositories, and the Contributions graph and Contribution activity sections.\nPlease click on the CytometryInR to navigate to its repository (folder)" - }, - { - "objectID": "course/00_GitHub/slides.html#forking-cytometryinr", - "href": "course/00_GitHub/slides.html#forking-cytometryinr", - "title": "Using GitHub", - "section": "Forking CytometryInR", - "text": "Forking CytometryInR\n\n\n\n\n\n\n\n\n.\n\n\nBefore we go further, we will need you to make your own copy of the course repository (ie. fork it). This will allow you to quickly retrieve all the new materials and code corrections by simply rereshing (ie. syncing) your forked version with our upstream parent branch once a week." - }, - { - "objectID": "course/00_Git/slides.html#new-folder-from-template", - "href": "course/00_Git/slides.html#new-folder-from-template", - "title": "Version Control with Git", - "section": "New Folder from Template", - "text": "New Folder from Template\n\n\n\n\n\n\n\n\n.\n\n\nSince Positron can use multiple programming languages, when we select “New Folder from Template” we will be asked what kind of folder template we want to use. Since we are working in R, we will select the “R Project” option." - }, - { - "objectID": "course/00_Git/slides.html#creating-subfolders", - "href": "course/00_Git/slides.html#creating-subfolders", - "title": "Version Control with Git", - "section": "Creating SubFolders", - "text": "Creating SubFolders\n\n\n\n\n\n\n\n\n.\n\n\nOnce your new project folder has opened, you should be seeing the main layout elements that we briefly covered in the Positron walk-through.\nFor this section, we will primarily be focused on what is happening within the primary side bar on the left, where changes to the individual files within the folder since the last save/commit will be reflected by colored text.\nFor my own projects, there are some elements of organization that I go ahead and add for each new folder. These include both a data and an images subfolders to help keep things a little more organized.\nTo create these folders, we would click on the respective add folder (+) button on the side bar. Files and Folders can be clicked and dragged within the primary side bar to move things to new folder locations." - }, - { - "objectID": "course/00_Git/slides.html#creating-files", - "href": "course/00_Git/slides.html#creating-files", - "title": "Version Control with Git", - "section": "Creating Files", - "text": "Creating Files\n\n\n\n\n\n\n\n\n.\n\n\nIn context of this course, we will primarily be working with two types of files when coding:\n\nR Scripts: These files end in .R. These contain only code (with occasional # comment line). These are often used for self-contained code that once we get them working we rarely need to modify.\nQuarto Markdowns: These files end in .qmd. They contain a .yaml header, followed by a mix of regular written text (often explanations or other documentation), and sections (ie. chunks) that contain code. These are used when we are still getting the code to work, when we need to modify inputs frequently, or simply when we need to document what and why we are doing something to make life easier for our future-self two months from now." - }, - { - "objectID": "course/00_Git/slides.html#qmd-files", - "href": "course/00_Git/slides.html#qmd-files", - "title": "Version Control with Git", - "section": "QMD Files", - "text": "QMD Files\n\n\n\n\n\n\n\n\n.\n\n\nOnce this is done, we can now see we have a new .qmd file (“Example.qmd” in this case).\n\n\n\n\n\nYAML\n\n\n\n\n\n\n\n\n.\n\n\nAs previously mentioned, the start of a Quarto Markdown file containg a YAML code chunk that is used to set formatting choices (we will explore this in-depth during the next section)\nWhat designates the location of the YAML block are three hyphens at the start, and three hyphens at the end. For this example, we will also provide a “title:” and “format:” field for the time being (see additional options here)." - }, - { - "objectID": "course/00_Git/slides.html#local-version-control", - "href": "course/00_Git/slides.html#local-version-control", - "title": "Version Control with Git", - "section": "Local Version Control", - "text": "Local Version Control\n\n\n\n\n\n\n\n\n.\n\n\nHaving introduced the main elements of a Quarto Markdown file, let’s turn our attention to the tab within the editor showing our newly created .qmd file.\nWe can see there is a solid circle next to the file name, and it is appearing as green. The circle denotes unsaved changes, which we can correct by clicking on the Save Button to save the changes to our file." - }, - { - "objectID": "course/00_Git/slides.html#remote-version-control", - "href": "course/00_Git/slides.html#remote-version-control", - "title": "Version Control with Git", - "section": "Remote Version Control", - "text": "Remote Version Control\nCopying Project Folder to GitHub\n\n\n\n\n\n\n\n\n.\n\n\nWhile having local version control in place is helpful when you need to revert back after encountering issues, where Git shines is the ability to pass your changes to your online GitHub repository.\nNot only does this allow you to switch between computers, but should something disastrous happen to your main computer, you still have all your hard work backed up and readily assessible.\nFor this subsection, first, double check that Positron is still connected to your GitHub account by checking the user tab on the bottom-left. If not, repeat the connection setup." - }, - { - "objectID": "course/00_Floreada/slides.html#floreada", - "href": "course/00_Floreada/slides.html#floreada", - "title": "Using Floreada", - "section": "Floreada", - "text": "Floreada\nLoading Dataset\n\n\n\n\n\n\n\n\n.\n\n\nFirst, open your web browser and navigate to the website\nClick on Start to proceed to the next page." - }, - { - "objectID": "course/00_Floreada/slides.html#cytoml", - "href": "course/00_Floreada/slides.html#cytoml", - "title": "Using Floreada", - "section": "CytoML", - "text": "CytoML\n\n\n\n\n\n\n\n\n.\n\n\nDue to a unknown formatting bug, the Floreada produced FlowJo v10 .wsp is not directly accessible by CytoML at the time of this course. However, the issue is resolved as soon as the file is opened the first time within FlowJo v10, regardless of whether you have a log in or not. Strange? Yes, but we will take the workaround.\nSo, for anyone on Windows or MacOS, download FlowJo v10. Once installed, open the software, and close the login popups. Once there, open the Floreada created FlowJo.wsp file. Since you haven’t logged in, it won’t show any events. But it will correct the formatting bug. Close the software, and return to R. Your Floreada sourced .WSP file should now be readable by CytoML.\nOdd? For sure. Fixable? Likely, I will set a reminder to work with the Floreada and CytoML devs to see if we can cut out the need for this workaround." - }, - { - "objectID": "course/00_BonusContent/PullConflicts/UpdatedPullRequest.html", - "href": "course/00_BonusContent/PullConflicts/UpdatedPullRequest.html", - "title": "Updated Pull Request Protocol", - "section": "", - "text": "Background\nDue to an encountered issue pulling in new updates for CytometryInR when you have an optional take-home problem still waiting to be reviewed, we will be modifying the protocol for submitting a pull request. You will first create a local homework branch, and submit from your branch to our homework branch. That should hopefully prevent any incoming changes from main to main from becoming conflicted.\n\n\nGetting Started\nThe first step is to open Positron, and navigate through the dropdown options to the Create a Branch option\n\n\nAnd provide a name (since the homework was for Week 02, we set it as Week 02)\n\n\nNext, select the option to Publish the Branch\n\n\nFrom here, importantly, select the option to make it a branch of YOUR forked CytometryInR version (since you don’t have permissions for the main course repository)\n\n\nAt this point, your new branch will have been created. You can check by entering the following code in the terminal, and verifying the * is next to the Week02 branch\n\ngit branch\n\n\n\nOnce you have confirmed you are in your homework branch, go ahead and transfer in all the files you will be submitting for the optional take-home problems\n\n\nAnd once done, make a commit as you would normally\n\n\nAs you can see, you will now be ahead of the main branch by one commit. Go ahead and sync your branch to GitHub so the contents are available remotely for use in the pull-request.\n\n\nOnce synced, you will notice that your branch is now up to date with the remote (cloud) icon. Next, proceed to checkout to the main branch, either via the dropdown or via the terminal using\n\ngit checkout main\n\n\n\nReturning to GitHub, you will see that your homework branch has received the incoming changes. You are now safe to sync your fork to bring in changes from the main course CytometryInR repository.\n\n\nAnd confirm yes.\n\n\nReturning to Positron, once verified you are in your main branch, proceed to pull in changes\n\n\nIf you switch between branches, you will notice you have both the new changes to main, as well as your week specific side branch co-existing peacefully.\n\n\nYou are then safe to make a pullrequest from your homework branch, to our homework branch, without running into risk of an additional commit from our end (or delay in reviewing) causing issues.\n\n\n\n\nAdditional Resources\nThis method should hopefully avoid the previously encountered issues. Apologies once again to those who encountered the issue! Still learning how to use some of these aspects of Version control in a GitHub context." - }, - { - "objectID": "course/00_BonusContent/Immport/images/index.html", - "href": "course/00_BonusContent/Immport/images/index.html", - "title": "ImmPort - Downloading Datasets", - "section": "", - "text": "To download data from the ImmPort Shared Data Repository, first navigate to the website\n\nFor help setting up Aspera Connect, see the following help documentation" - }, - { - "objectID": "PackageWalkthroughs.html#flowcore", - "href": "PackageWalkthroughs.html#flowcore", - "title": "Package Walkthroughs", - "section": "flowCore", - "text": "flowCore" - }, - { - "objectID": "PackageWalkthroughs.html#cytolib", - "href": "PackageWalkthroughs.html#cytolib", - "title": "Package Walkthroughs", - "section": "cytolib", - "text": "cytolib" - }, - { - "objectID": "PackageWalkthroughs.html#flowworkspace", - "href": "PackageWalkthroughs.html#flowworkspace", - "title": "Package Walkthroughs", - "section": "flowWorkspace", - "text": "flowWorkspace" - }, - { - "objectID": "PackageWalkthroughs.html#ncdfflow", - "href": "PackageWalkthroughs.html#ncdfflow", - "title": "Package Walkthroughs", - "section": "ncdfFlow", - "text": "ncdfFlow" - }, - { - "objectID": "PackageWalkthroughs.html#flowviz", - "href": "PackageWalkthroughs.html#flowviz", - "title": "Package Walkthroughs", - "section": "flowViz", - "text": "flowViz" - }, - { - "objectID": "PackageWalkthroughs.html#flowsom", - "href": "PackageWalkthroughs.html#flowsom", - "title": "Package Walkthroughs", - "section": "FlowSOM", - "text": "FlowSOM" - }, - { - "objectID": "PackageWalkthroughs.html#ggcyto", - "href": "PackageWalkthroughs.html#ggcyto", - "title": "Package Walkthroughs", - "section": "ggcyto", - "text": "ggcyto" - }, - { - "objectID": "PackageWalkthroughs.html#opencyto", - "href": "PackageWalkthroughs.html#opencyto", - "title": "Package Walkthroughs", - "section": "openCyto", - "text": "openCyto" - }, - { - "objectID": "PackageWalkthroughs.html#quantiseqr", - "href": "PackageWalkthroughs.html#quantiseqr", - "title": "Package Walkthroughs", - "section": "quantiseqr", - "text": "quantiseqr" - }, - { - "objectID": "PackageWalkthroughs.html#flowstats", - "href": "PackageWalkthroughs.html#flowstats", - "title": "Package Walkthroughs", - "section": "flowStats", - "text": "flowStats" - }, - { - "objectID": "PackageWalkthroughs.html#cytoml", - "href": "PackageWalkthroughs.html#cytoml", - "title": "Package Walkthroughs", - "section": "CytoML", - "text": "CytoML" - }, - { - "objectID": "PackageWalkthroughs.html#catalyst", - "href": "PackageWalkthroughs.html#catalyst", - "title": "Package Walkthroughs", - "section": "CATALYST", - "text": "CATALYST" + "objectID": "PackageWalkthroughs.html#catalyst", + "href": "PackageWalkthroughs.html#catalyst", + "title": "Package Walkthroughs", + "section": "CATALYST", + "text": "CATALYST" }, { "objectID": "PackageWalkthroughs.html#flowai", @@ -1631,1160 +1702,1137 @@ "text": "flowMagic" }, { - "objectID": "Schedule.html", - "href": "Schedule.html", - "title": "Cytometry in R", + "objectID": "course/00_BonusContent/Immport/images/index.html", + "href": "course/00_BonusContent/Immport/images/index.html", + "title": "ImmPort - Downloading Datasets", "section": "", - "text": "Cytometry in R: A Course for Beginners\nCytometry in R is a free virtual mini-course being organized by the Flow Cytometry Shared Resource core at the University of Maryland’s Greenebaum Comprehensive Cancer Center. This course is a passion project arising from our desire to contribute back to the community. We are excited that you have chosen to take part and look forward to helping you get started on your own learning journey.\nCourse materials can be found here or via the Course tab in the navigation bar. The livestream recordings are available via YouTube\n\n\n\nPre-Course Walkthroughs\n\nWeek 0: January 26, 2026 In these pre-course walk-throughs, we ensure that everyone creates a GitHub account, and has their computer properly set up with the required software (including R, Positron, and Git). We then start to build individual participants familiarity with the software infrastructure that they will be using throughout the rest of the course.\n \n\n\nInstalling R Packages\n\nWeek 1: February 2, 2026 During this first session, we learn how to install R packages from the various repositories (CRAN, Bioconductor, GitHub), and how to troubleshoot the more typical errors that occur during this process.\n \n\n\nFile Paths\n\nWeek 2: February 9, 2026 For this second session, we focus on how to programmatically tell your computer where to locate your experimental files, introducing the concept of file paths. We explore how the various operating systems (Linux, MacOS, Windows) specify their respective folders and files, and how to identify where you are currently within the directory. Our goal by the end of this session is to have walked you through how to figure out where an .fcs file of interest is stored, and convey to your computer where you want it copied/moved to, without encountering the common pitfalls.\n \n\n\nInside an .FCS file\n\nWeek 3: February 16, 2026 In the course of this third session we will slice into an .FCS file and find out what the individual components that make it up are. In the process, we will cover the concepts of main data structures within R (vectors, matrices, data.frames, list) and how to identify what we are working with. Additionally, we will explore how various cytometry softwares store their metadata variables under various keywords that can be useful to know about.\n \n\n\nIntroduction to the Tidyverse\n\nWeek 4: February 23, 2026 Within this fourth session, we explore how the various tidyverse packages can be utilized to reorganize rows and columns of data in ways that are useful for data analysis. We will primarily work with the MFI expression data we isolated from within the .fcs file in the previous session, identifying and isolating events that meet certain criterias. We introduce the concepts behind “tidy” data and how it can improve our workflows.\n \n\n\nGating Sets\n\nWeek 5: March 2, 2026 As part of this fifth session, we learn about the two main flow cytometry infrastructure packages in R we will be working with during the course, flowcore and flowWorkspace. Throughout the session, we will compare how they differ in naming, memory usage, and accessing .fcs file metadata. We additionally explore how to add keywords to their respective metadata for use in filtering specimens of interest from the larger set of .fcs files.\n \n\n\nVisualizing with ggplot2\n\nWeek 6: March 9, 2026 During this session we provide an introduction to the ggplot2 package. We will take the datasets we have collected from the previous sessions and see how in varying in different arguments at the respective plot layers we can produce and customize many different forms of plots, focusing on both cytometry and statistics plots. We close out providing links to additional helpful resources and highlight the TidyTuesday project.\n \n\n\nApplying Transformations and Compensation\n\nWeek 7: March 16, 2026 For this seventh session, we take a closer look at the raw values of the data within our .fcs files, and explore the various ways to transform (ie. scale) flow cytometry data in R to better visualize “positive” and “negative populations”. In the process, we visualize the differences resulting from applying different transformations commonly used by commercial software. Similarly, we learn how to apply and visualize compensation in context of conventional flow cytometry files.\n \n\n\nManual and Automated Gating\n\nWeek 8: March 23, 2026 Within this session, we explore various ways to implement gating for flow cytometry files in R. We will explore manual approaches utilizing flowGate, as well as automated options with openCyto 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.\n \n\n\nConference Break 1\nNo class week of March 30, 2026. If you are attending the ABRF conference, track me down at the Complex Data Analysis in Flow Cytometry: Navigating the Landscape talk on Monday, March 30th at 4:30 PM.\n \n\n\nIt’s Raining Functions!\n\nWeek 9: April 6, 2026 In the course of this ninth session, we tackle one of the harder but most useful concepts to learn for a beginner, namely functions. 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 package.\n \n\n\nDownsampling and Concatenation\n\nWeek 10: April 13, 2026 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.\n \n\n\nRetrieving data for Statistics\n\nWeek 11: April 20, 2026 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.\n \n\n\nSpectral Signatures\n\nWeek 12: April 27, 2026 As part of this session, we will explore how to extract fluorescent signatures from our raw spectral flow cytometry reference controls. Building on prior concepts, we will learn to isolate median signatures from positive and negative gates, and how to derrive and plot normalized signatures. We also introduce plotly package and it’s interactive plotting features, before showcasing various packages attempts at facilitating signature retrieval.\n \n\n\nSimilarities and Hotspots\n\nWeek 13: May 4, 2026 During this session, we will utilize the spectral signature matrix isolated from raw spectral flow cytometry controls and evaluate different ways of evaluating how similar different fluorescent signatures are to each other. In the process, we will gain better understanding of the metrics behind similarity (cosine), panel complexity (kappa), and unmixing-dependent spreading (collinearity).\n \n\n\nUnmixing in R\n\nWeek 14: May 11, 2026 In the course of this session, we will attempt a reach goal of many, namely carry out unmixing of raw .fcs files using the spectral signatures we have isolated from our unmixing controls, and write to new .fcs files. After evaluating the necessary internals, we will explore how various current cytometry R packages have implemented their own unmixing functions, and the various limitations that each approach has encountered.\n \n\n\nCleaning Algorithms\n\nWeek 15: May 18, 2026 In the span of this session, we will directly compare how various Bioconductor data cleanup algorithms (namely PeacoQC, FlowAI, FlowCut, and FlowClean) tackle distinguishing and removing bad quality events. We will see how they perform with previously identified good quality and horrific quality .fcs files. We will whether the implemented algorithmic decisions made sense, and how to customize them within our workflows to achieve our own desired goals.\n \n\n\nClustering Algorithms\n\nWeek 16: May 25, 2026 As part of this session, we venture away from supervised and semi-supervised analyses to explore unsupervised clustering approaches, namely FlowSOM and Phenograph. We will compare outcomes depending markers included, transformations applied, and panel used to gain a greater familiarity with how they work. We wrap up by investigating ways to visualize marker expression of cells ending up in each cluster, and how to backgate them to our manual gates.\n \n\n\nNormalization: Batch Effect or Real Biology\n\nWeek 17: June 1, 2026 During this session, we will dive into evaluating the performance of two commonly used normalization algorithms, CytoNorm and CyCombine. We will utilize our ggplot2 and functional programming toolkits to create a customized workflow to visualize the differences for our respective cell populations before and after normalization, to better evaluate how the respective parameter choices can affect the process.\n \n\n\nConference Break 2\nNo class week of June 8, 2026. If you are attending the Cyto conference, track me down at my talks (Open-Source automation on June 7, 10:30-11:30AM at Grand Ballroom; and Semi-supervised pipeline on June 9, 10:30-11:45AM atRoom 2DEF) or poster (grab some Cytometry in R course hex stickers!)\n \n\n\nDimensionality Visualization\n\nWeek 18: June 15, 2026 For this session, we explore how dimensionality visualization algorithms perform tSNE and UMAP in R using our raw and unmixed samples. In the process, we will explore how markers included, number of cells, and presence of bad quality events can impact the final visualizations. Finally, we will provide an overview of how to link to Python to additionally run PaCMAP and PHATE visualizations for use in R.\n \n\n\nAnnotating Unsupervised Clusters\n\nWeek 19: June 22, 2026 In the course of this session, we explore ways to scale our efficiency in figuring out what an unsupervised cluster of cells may be, by employing several annotation packages. We explore how these work under the hood in their decision making process, and how to link them to reference data from external repositories for additional evaluation.\n \n\n\nThe Art of GitHub Diving\n\nWeek 20: June 29, 2026 Within this session, we delve into the art of investigating a new-to-you GitHub repository. We discuss the overall structure of R packages stored as source files within GitHub repositories, and how to leverage this knowledge when troubleshooting errors thrown by underdocumented R packages. We discuss how to modify identified functions, evaluate them, and process to submit helpful bug reports back to the original project to help fix the issue.\n \n\n\nXML Files All The Way Down\n\nWeek 21: July 6, 2026 Breaking news alert, most of the experiment templates and worksheet layouts we work with as cytometrist are .xml files. In this session, we learn some additional coding tools to allow us to work with these types of files to extract useful data. In this session, we test out our new problem solving abilities to retrieve data from SpectroFlo and Diva .xml files to monitor how our core’s flow cytometers behaved for various users last week.\n \n\n\nUtilizing Bioconductor packages\n\nWeek 22: July 13, 2026 Many of the R packages for Flow Cytometry we have utilized in this course were packages from the Bioconductor project. We take a look at what makes Bioconductor packages unique compared to packages found on GitHub and CRAN, explore some of their specific infrastructure types for flow cytometry data, and highlight some useful packages for downstream analysis that we haven’t had time to properly explore.\n \n\n\nBuilding your First R package\n\nWeek 23: July 20, 2026 For most of the course, we have been working with R packages that other individuals built and maintained. In this session, we leverage all your hard work from the rest of the course and corral the unwieldly arsenal of functions you wrote into your first R package for easier use. We will discuss the individual pieces of an R package, the importance of a well-setup namespace file, and how to generate help page manuals to refer future-you back to what your individual function arguments actually do.\n \n\n\nEveryone Get’s a Quarto Website\n\nWeek 24: July 27, 2026 In this session, we will extend the knowledge of .R and .qmd files you have gained from the course and extend them to create your own website using Quarto. We discuss the additional files that are required, how to customize and render the website locally, and finally set up Quarto Pub or GitHub Pages website that we are to access online.\n \n\n\nReproducibility and Replicability\n\nWeek 25: August 3, 2026 Throughout the course, we emphasized the importance of making your workspaces and code reproducible and replicable. But what do we mean by these terms, and are there best practices we could add to our existing workflow to do this more efficiently? We explore a couple community-led efforts within the cytometry space and troubleshoot their implementation into a previously published pipeline.\n \n\n\nConference Break 3\nNo class week of August 10, 2026. If you are attending the BioC conference, track me down at my talk/poster.\n \n\n\nOpen Source Licenses\n\nWeek 26: August 17, 2026 For this course, we have relied extensively on open-source software to create our own data analysis pipelines. In the process, you may have some recollection of the various license names. But what impact do all these different names have in the end? We take a brief deep-dive into the ecosystem of free and open-source licenses, and evaluate what their respective license terms mean for us as individual users of the code, as well as potential developers extending existing codebases.\n \n\n\nValidating Algorthmic Tools\n\nWeek 27: August 24, 2026 We will be the first to admit, new implementations of algorithms as R packages are awesome! We appreciate the effort that went into them and making them available to the community at large. But what is the best way of evaluating whether they behave as promised, or work for our dataset? During this session, we share tips and tricks to gain better understanding of how a new R package works, and things to watch out for when evaluating complicated algortithms. We wrap with walkthrough of how to generate simulated datasets with known distributions for use in testing.\n \n\n\nDatabases and Repositories\n\nWeek 28: August 31, 2026 During this session, we will learn how to identify and retrieve .fcs files from databases. While many of us are accustomed to working with large datasets of our own making, many of us are increasingly encountering larger-than-memory datasets, as well as files stored in large repositories. In this session, we will explore several database focused R packages, before investigating how to identify and retrieve .fcs files and associated metadata of interest from repositories, namely ImmPort (and maybe FlowRepository if it can be pinged that afternoon).\n \n\n\nAssembling Web Data\n\nWeek 29: September 7, 2026 In this session, we briefly delve into the concepts of web-scraping and APIs in general. We highlight useful packages, namely httr2 and rvest, and best practices implemented to allow respectful retrieval of useful data without crashing someone’s server like some AI startup bot. We finish by providing a list of additional useful resources for those interested in learning more.\n \n\n\nFuture Directions\n\nWeek 30: September 14, 2026 In this final of the planned sessions, we revisit our solutions to the challenge problems set out during the beginning of the course. We also discuss potential future topics to visit in the future, and any additional resources that proved helpful throughout the course.", - "crumbs": [ - "About", - "Cytometry Core" - ] + "text": "To download data from the ImmPort Shared Data Repository, first navigate to the website\n\nFor help setting up Aspera Connect, see the following help documentation" }, { - "objectID": "index.html", - "href": "index.html", - "title": "About", + "objectID": "course/00_BonusContent/PullConflicts/UpdatedPullRequest.html", + "href": "course/00_BonusContent/PullConflicts/UpdatedPullRequest.html", + "title": "Updated Pull Request Protocol", "section": "", - "text": "Cytometry in R is a free weekly mini-course being offered both in-person and online by the Flow Cytometry Shared Resource staff at the University of Maryland Greenebaum Comprehensive Cancer Center. Its primary audience is for those with prior flow cytometry knowledge, who have limited previous experience with the programming language R. However, we welcome everyone regardless of their existing  flow cytometry  or coding experience.\nThis course is a passion project arising from our desire to contribute back to the community. We are excited that so many of you have chosen to sign up, and look forward to helping you get started on your own learning journeys.\nFor more information on topics-covered, please see our schedule. Course materials can be found here or via the Course tab in the navigation bar. The livestream recordings are available via YouTube\n\n\nAbout\n\n\nMotivation\nWhile many cytometry enthusiast express an interest in learning how to carry out flow cytometry analyses in R, they often do not know where to start. Additionally, many of the limited existing resources are focused towards users with intermediate bioinformatic skills, contributing to a greater barrier for entry for those just starting out. Our motivation in offering this mini-course tailored towards beginners is to make the learning journey smoother than the one we ourselves experienced.\n\nWhile designing the course, we kept the following concepts in mind:\n\nBeginning coders benefit both by having detailed examples that they can initially work through on their own time, as well as less defined problems that through troubleshooting enable the acquisition of the thought-process and skills needed for coding.\nSome topics will take individuals a longer time to fully grasp. Providing a format and resources that enable being able to revisit the material multiple times is incredibly helpful. Likewise, life is busy, and missing a workshop session is highly probable. If this happens, it shouldn’t make or break the ability of the individual to understanding the rest of the course.\nConsistency is key, and being able to apply what you are learning to your own datasets, files, and questions of interest helps achieve this.\n\n\n\n\n\nCourse Details\n\nEach week, the mini-course will cover a particular topic for an hour. This individual class is offered on multiple days, at different times, both in-person and online. We invite you to attend the one that best fits your schedule each week. If life gets busy and you can’t make regular day, the online livestream recordings will be available on YouTube.\n \n\nCourse Materials\n\nWe will release the course materials for the upcoming week on Monday 1700 EST (Monday 2200 GMT+0) via our course website and GitHub. These materials will normally be Quarto Markdown documents containing code, explanation, and other resources needed for that week. If you have your own data, you can use your own data! If you don’t have any data, we will make sure to provide some of our own available data for each lesson so that you can use it and be able to follow along.\nIn our commitment to open-source and open-science, all teaching materials are freely offered under a CC-BY-SA license, while all code examples are offered under the AGPL3-0 copyleft license.\n \n\n\nIn-Person (Baltimore)\n\nFor those who are local and attending in person, the class will be offered on Thursday from 4-5 pm EST in Bressler Research Building Conference Room 7-035 (around the corner from the Flow Core).\nIf you have your own laptop, feel free to bring it. If you don’t have a laptop, please reach out, the Flow Core has 6 laptops running Linux that we can lend out to participants for use during the session.\nFor those who arrive early, we will have a limited number of second screens with provided mouse and keyboard that you can plug a laptop into via HDMI cable to set up a larger workstation. For those arriving later, the room has enough space (and electrical plugs) for up to 20 people, but you will need to balance a laptop on your lap.\n \n\n\nOnline (Worldwide)\n\nFor those joining us virtually, we will have three separate livestreams throughout the week on YouTube. These will be offered on:\n\nTuesday 2200 EST (Wednesday 0300 GMT+0)\nWednesday 1600 EST (Wednesday 2100 GMT+0)\nThursday 1000 EST (Thursday 1500 GMT+0)\n\n \n\n\nRecordings\n\nAll three livestreams will be recorded and available on YouTube immediately afterwards. Our plan is to eventually circle back after the course and properly edit them (ie. less minutes of random background noise, highlighting the relevant lines of code, time-stamps, subtitles, translations, etc.) later on as time allows, so that they can serve as a more permanent resource.  \n\n\nDiscussion Forum\n\nWe will be using our GitHub Discussions page as a community forum. This will allow us to answer questions, and benefit from insights from others in the community. One advantage of having so many people signed up for the course is that if you have a question, someone else likely does as well, so go start a post and ask it!\n \n\n\nOptional Take-Home Problems\n\nEach week, we will offer optional take-home problems. These are intended to allow you to work with your own data on similar problems, but in a not-so-structured manner. Challenges that you and overcome during the process will help grow your problem solving and debugging skills, and help solidify concepts covered during the course.\nTo get feedback on these problems, you can reach out to the community on the Discussions page, or once far enough open a pull request to the homework branch and we will provide additional feedback.\n \n\n\nCost\nIs there a cost to participate? No, it’s absolutely free! Is there a catch? Yes, you learn R, and may wind up with strong feelings about flowframes vs. cytoframes. This is also our first year offering this course, so we will sporadically ask you to fill out a feedback forms to help us improve.\n\n \n\n\nComputing Requirements\n\nFor those attending online, you will need a computer with internet access. Operating system shouldn’t matter, as we will be offering code examples for Windows, Mac and Linux. As with all things flow-cytometry software, having a faster CPU with multiple cores, more RAM and greater storage space is generally helpful, but not a deal breaker.\n\nYou will need to be able to install the required software (R, Rtools, Positron, Quarto, and Git) as well as install and compile R packages from the CRAN and Bioconductor repositories (as well as a few GitHub-based R packages). Installation walkthroughs for each computer operating system can be found here.\nFor those using university or company administered computers, please be aware that you may not have the necessary permissions to install these directly, and may need to reach out to your IT department to help get these initial requirements set up. If you are using your own computer, congratulations, you are your system administrator, and should already have the necessary permissions.\n\nFor those attending in-person, we have set up a pop-up computer lab in the conference room. For those who arrive early, we have a limited number of second screens with provided mouse and keyboard that you can plug a laptop into via HDMI cable to set up a workstation. For those arriving later, the room has enough space (and electrical plugs) for 20 people, but you will need to balance a laptop on your lap. If you have your own laptop, feel free to bring it. If you don’t have a laptop, the flow core has 6 loaner laptops running Linux that we can let participants use for that session.\n\n\n\n\nLicense\nIn our commitment to open-science and open-source, all teaching materials are freely offered under a CC-BY-SA license, while all code examples are offered under the AGPL3-0 copyleft license." + "text": "Background\nDue to an encountered issue pulling in new updates for CytometryInR when you have an optional take-home problem still waiting to be reviewed, we will be modifying the protocol for submitting a pull request. You will first create a local homework branch, and submit from your branch to our homework branch. That should hopefully prevent any incoming changes from main to main from becoming conflicted.\n\n\nGetting Started\nThe first step is to open Positron, and navigate through the dropdown options to the Create a Branch option\n\n\nAnd provide a name (since the homework was for Week 02, we set it as Week 02)\n\n\nNext, select the option to Publish the Branch\n\n\nFrom here, importantly, select the option to make it a branch of YOUR forked CytometryInR version (since you don’t have permissions for the main course repository)\n\n\nAt this point, your new branch will have been created. You can check by entering the following code in the terminal, and verifying the * is next to the Week02 branch\n\ngit branch\n\n\n\nOnce you have confirmed you are in your homework branch, go ahead and transfer in all the files you will be submitting for the optional take-home problems\n\n\nAnd once done, make a commit as you would normally\n\n\nAs you can see, you will now be ahead of the main branch by one commit. Go ahead and sync your branch to GitHub so the contents are available remotely for use in the pull-request.\n\n\nOnce synced, you will notice that your branch is now up to date with the remote (cloud) icon. Next, proceed to checkout to the main branch, either via the dropdown or via the terminal using\n\ngit checkout main\n\n\n\nReturning to GitHub, you will see that your homework branch has received the incoming changes. You are now safe to sync your fork to bring in changes from the main course CytometryInR repository.\n\n\nAnd confirm yes.\n\n\nReturning to Positron, once verified you are in your main branch, proceed to pull in changes\n\n\nIf you switch between branches, you will notice you have both the new changes to main, as well as your week specific side branch co-existing peacefully.\n\n\nYou are then safe to make a pullrequest from your homework branch, to our homework branch, without running into risk of an additional commit from our end (or delay in reviewing) causing issues.\n\n\n\n\nAdditional Resources\nThis method should hopefully avoid the previously encountered issues. Apologies once again to those who encountered the issue! Still learning how to use some of these aspects of Version control in a GitHub context." }, { - "objectID": "ExistingResources.html", - "href": "ExistingResources.html", - "title": "Existing Resources", - "section": "", - "text": "We are not the first “Cytometry in R” course, nor will we be the last. This page is linking to the already existant online Cytometry in R resources that we have encountered and benefited from during our own learning journey. May they prove useful to you as you progress your way through yours!\n\n\n\nChristopher Hall - Flow Cytometry Data Analysis in R\nCytometry-R-Scripts: R scripts to help with your flow cytometry analysis\nR_flowcytometry_course: The files and presentation from the Cytometry Core Facility flow cytometry data analysis course in R\n\nInstallation and Loading Data\n(1) Flow Cytometry Data Analysis in R - Installation and Loading Data\n\n\n\n\nCompensation, Cleaning, Transformation, Visualization\n(2) Flow Cytometry Data Analysis in R: compensation, cleaning, transformation, visualization\n\n\n\n\nGating with flowWorkspace\n(3) Flow Cytometry Data Analysis in R: gating with flowWorkspace\n\n\n\n\nVisualization\n(4) Flow Cytometry Data Analysis in R: Visualisation\n\n\n\n\n\n\n\nOzette Technologies - BioC 2023 Workshop\nWorkshop given at the Bioc2023 conference, authored by Arpan Neupane and Andrew McDavid.\nWorkshop: Reproducible and programmatic analysis of flow cytometry experiments with the cytoverse\n\n\n\n\n\n\nPritam Kumar Panda - Flow Cytometry Data Analysis & Visualization in R using CytoExploreR\nFlow-Cytometry-analysis-in-R\nCytoExploreR-Interactive-visualization\n\nComplete Guide\nFlow Cytometry Data Analysis & Visualization in R using CytoExploreR: Complete Guide\n\n\n\n\n\n\n\nBioinformatics DotCa - Introduction to Flow Cytometry in R\n\nIntroduction to Flow Cytometry in R\nIntroduction to Flow Cytometry in R\n\n\n\n\nExploring FCM Data in R\nExploring FCM Data in R\n\n\n\n\nProcessing and Quality Assurance of FCM Data\nProcessing and Quality Assurance of FCM Data\n\n\n\n\n1D Dynamic Gating\n1D Dynamic Gating\n\n\n\n\nClustering and Additional FCM Tools\nClustering and Additional FCM Tools\n\n\n\n\n\nTulika Rai - Learn Innovatively With Me\n\nflowAI Flow Cytometry Data Cleaning using R\nflowAI Flow Cytometry Data Cleaning using R: A Step-by-step Tutorial\n\n\n\n\ntSNE UMAP TRIMAP colorization or Transformation using R script\ntSNE UMAP TRIMAP colorization or Transformation using R script\n\n\n\n\n\n\n\nGivanna Putri - Introduction to Cytometry Data Analysis in R workshop\nACS 2021 Workshops - Introduction to Cytometry Data Analysis in R workshop\n\n\n\n\n\n\nTimothy Keyes -\n{tidytof}: Predicting Patient Outcomes from Single-cell Data using Tidy Data Principles\n\n\n\n\n\n\nRyan Duggan - Cytometry on Air\nCytometry on Air: Analyzing Flow Cytometry Data in R Presentation by TJ Chen and Greg Finak,\n\n\n\n\n\n\nGuillaume Beyrend - Learn Cytometry\nLearn Cytometry Originally appeared to have been paywalled, doesn’t currently appear to be the case.\n\n\n\n\nHong Qin - flow analysis in R\n\nFlow Analysis in R\nflow analysis in R, bio125, Spring 2015\n\n\n\n\nFlow Cytometer Data Analysis\nBIO233 demo, flow cytometer data analysis, simple example\n\n\n\n\n\n\n\nSwayam Prabha - Flow cytometry data analysis in R/Bioconductor\nLecture 15 : Flow cytometry data analysis in R/Bioconductor" + "objectID": "course/00_Floreada/slides.html#floreada", + "href": "course/00_Floreada/slides.html#floreada", + "title": "Using Floreada", + "section": "Floreada", + "text": "Floreada\nLoading Dataset\n\n\n\n\n\n\n\n\n.\n\n\nFirst, open your web browser and navigate to the website\nClick on Start to proceed to the next page." }, { - "objectID": "course/index.html", - "href": "course/index.html", - "title": "Cytometry in R", - "section": "", - "text": "Cytometry in R is a free virtual mini-course being organized by the Flow Cytometry Shared Resource Core at the University of Maryland’s Greenebaum Comprehensive Cancer Center. This course is a passion project arising from our desire to contribute back to the community.\nWe 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." + "objectID": "course/00_Floreada/slides.html#cytoml", + "href": "course/00_Floreada/slides.html#cytoml", + "title": "Using Floreada", + "section": "CytoML", + "text": "CytoML\n\n\n\n\n\n\n\n\n.\n\n\nDue to a unknown formatting bug, the Floreada produced FlowJo v10 .wsp is not directly accessible by CytoML at the time of this course. However, the issue is resolved as soon as the file is opened the first time within FlowJo v10, regardless of whether you have a log in or not. Strange? Yes, but we will take the workaround.\nSo, for anyone on Windows or MacOS, download FlowJo v10. Once installed, open the software, and close the login popups. Once there, open the Floreada created FlowJo.wsp file. Since you haven’t logged in, it won’t show any events. But it will correct the formatting bug. Close the software, and return to R. Your Floreada sourced .WSP file should now be readable by CytoML.\nOdd? For sure. Fixable? Likely, I will set a reminder to work with the Floreada and CytoML devs to see if we can cut out the need for this workaround." }, { - "objectID": "course/index.html#resources", - "href": "course/index.html#resources", - "title": "Cytometry in R", - "section": "Resources", - "text": "Resources\nCourse materials can be found here. The livestream recordings are available via YouTube" + "objectID": "course/00_Git/slides.html#new-folder-from-template", + "href": "course/00_Git/slides.html#new-folder-from-template", + "title": "Version Control with Git", + "section": "New Folder from Template", + "text": "New Folder from Template\n\n\n\n\n\n\n\n\n.\n\n\nSince Positron can use multiple programming languages, when we select “New Folder from Template” we will be asked what kind of folder template we want to use. Since we are working in R, we will select the “R Project” option." }, { - "objectID": "course/index.html#in-person-baltimore", - "href": "course/index.html#in-person-baltimore", - "title": "Cytometry in R", - "section": "In-Person (Baltimore)", - "text": "In-Person (Baltimore)\nFor those joining us in person, the class is being offered on Thursday from 4-5 pm EST in Bressler Research Building Room 7-035. Monitors to plug your laptops in will be available on a first come, first served basis. These in-person sessions will not be recorded, but with the smaller class size you will have our undivided attention should you have any questions." + "objectID": "course/00_Git/slides.html#creating-subfolders", + "href": "course/00_Git/slides.html#creating-subfolders", + "title": "Version Control with Git", + "section": "Creating SubFolders", + "text": "Creating SubFolders\n\n\n\n\n\n\n\n\n.\n\n\nOnce your new project folder has opened, you should be seeing the main layout elements that we briefly covered in the Positron walk-through.\nFor this section, we will primarily be focused on what is happening within the primary side bar on the left, where changes to the individual files within the folder since the last save/commit will be reflected by colored text.\nFor my own projects, there are some elements of organization that I go ahead and add for each new folder. These include both a data and an images subfolders to help keep things a little more organized.\nTo create these folders, we would click on the respective add folder (+) button on the side bar. Files and Folders can be clicked and dragged within the primary side bar to move things to new folder locations." }, { - "objectID": "course/index.html#virtual-worldwide", - "href": "course/index.html#virtual-worldwide", - "title": "Cytometry in R", - "section": "Virtual (Worldwide)", - "text": "Virtual (Worldwide)\nFor those joining us virtually, we will have three separate livestreams throughout the week on YouTube. These will be offered on:\n\nTuesday 2200 EST (Wednesday 0300 GMT+0)\nWednesday 1600 EST (Wednesday 2100 GMT+0)\nThursday 1000 EST (Thursday 1500 GMT+0)\n\nAll three livestreams will be recorded and available on YouTube immediately afterwards." - }, - { - "objectID": "course/index.html#discussion-forum", - "href": "course/index.html#discussion-forum", - "title": "Cytometry in R", - "section": "Discussion Forum", - "text": "Discussion Forum\nWe will be using the Cytometry in R Discussions page as a community forum, and a place to ask questions, celebrate wins, and provide feedback. After creating a a GitHub account, pleae go introduce yourself." - }, - { - "objectID": "course/00_BonusContent/PullConflicts/index.html", - "href": "course/00_BonusContent/PullConflicts/index.html", - "title": "Take-Home Problems - Pull Fix Resolution", - "section": "", - "text": "Background\nFor those who have turned in the homework to the Cytometry in R - homework branches, many report having encountered merge issues pulling in the next week’s data if the pull request hasn’t been resolved yet. Creating a parallel branch, and submitting homework from there to the homework branch might solve the issue? But we will need to test that out. For now, here are the steps we used to resolve the issue locally without needing to delete and re-download.\n\n\nGetting Started\nStart off checking your GitHub forked version of the CytometryInR, notice how many commits behind you are.\n\n\nIf you haven’t submitted the optional Take-Home problems via a pull-request, proceed to do so.\n\n\nThis was an example of the page you see when submitting the pull request. Upon submission, your branch may show merge conflicts due to difference in rendered docs. This is okay, we will resolve it on our end.\n\n\nWhat we will end up doing is ignore the changes and accept the current version. This issue is likely due to the weekly updating of the data resulting in new sidebar links. We will then mark these issues as resolved\n\nWe will then mark the issues as resolved.\n\n\nOn return to the homework, we will be able to merge the branch once again. We will likely make our suggestions at this point for this branch.\n\n\nHowever, after pull request has been merged, you will see your branch is way ahead (due to everyone elses homework commits). This is the area we will need to address via the new branch method.\n\n\nFor now, proceed to discard the changes (you don’t need the other participants homeworks cluttering your folder)\n\n\nYou will then appear as caught up with the main branch.\n\n\nOn return to Positron, attempt to pull\n\n\nHowever, since your homework commit is still present, you will receive a pop-up asking you to see the GitLog. If you scroll up the problem log, it will give you several options.\n\n\nYou will need to enter the following code into your terminal tab:\n\ngit config pull.rebase TRUE\n\n\n\nThis will result in a branched appearance, and the button asking you to sync the changes.\n\n\nUpon doing so you will have a restored status vs. the main cytometry in R project folder.\n\n\n\nTake Away\nWe have encountered a first growing pain for the course, in that the pull-request method we have been using still causes merge conflicts. We will be going to a homework branch to homework branch pull-request approach going forward, I will send out additional instructions on how to do so shortly.\nThanks for your patience!\nDavid\n\n\nAdditional Resources" - }, - { - "objectID": "course/00_BonusContent/index.html", - "href": "course/00_BonusContent/index.html", - "title": "Bonus Content", - "section": "", - "text": "This is a miscellaneous page to host walk-throughs of topics that come up via the Discussion Page. Rather than re-explain how to in the comments, I want to have a place to post short-walkthroughs to solve these issues, while avoiding incorporating it into the existing walk-throughs at this point in time. I hope you find it useful, and pardon the organized chaos of miscellaneous topics." - }, - { - "objectID": "course/00_BonusContent/index.html#windows-arm", - "href": "course/00_BonusContent/index.html#windows-arm", - "title": "Bonus Content", - "section": "Windows Arm", - "text": "Windows Arm\n\nPositron\nOn the main Positron installation page, only the installers for Windows Computers with x86 chips are currently shown. There is a beta (experimental) version of Positron for Windows ARM (ex. Snapdragons), but it needs to be installed from Positron’s GitHub releases page.\n\nPlease note, you should download the most recent version that is available to you, as they continue to update it and fix bugs. As of February 04, 2026, you would also need to install Quarto separately.\nTo install Quarto, first navigate to their website. Quarto for Windows ARM was implemented in 2023, so the regular installer should work.\n\nAlso, you would need a Python arm64 installation installed if you decide you want to venture into using Python at any point." - }, - { - "objectID": "course/00_BonusContent/index.html#visual-mode", - "href": "course/00_BonusContent/index.html#visual-mode", - "title": "Bonus Content", - "section": "Visual Mode", - "text": "Visual Mode\nWithin Positron, there exist a toggle button to switch between source and visual mode on Quarto documents. But what do you do when you can’t find it?\n\nTuns out…. Visual Mode is currently broken, so the developers removed it about two weeks ago.\nThe current way to switch to it is via right-click, then select edit visual mode.\n\nVice versa, once there, you can revert by right-clicking and selecting Edit Source Mode\n\nThe process of figuring what is going on highlights how to use a GitHub Discussion Page. This is Positrons when I searched for visual button. I then found that a similar question was asked 3 days ago that led me to the linked thread above." - }, - { - "objectID": "course/00_BonusContent/index.html#not-detecting-git", - "href": "course/00_BonusContent/index.html#not-detecting-git", - "title": "Bonus Content", - "section": "Not Detecting Git", - "text": "Not Detecting Git\nIf you leave the “Initialize Git Repository” option unclicked when setting up a New Folder from Template, Git will not be active within your project folder.\n\nAs a result, when you try to use the usethis packages use_github(private=true) function, you will get an error that resembles the one below\n\nTo initiate a Git repository after the fact, you will need to go to the Version Control tab in the action bar, and select the option.\n\nThen, you will need to stage the files you want to work with, and commit them.\n\nuse_github(private=TRUE) should now be functional at that point. However, you can also choose to continue via Positron’s interface instead by selecting Publish.\n\nIt will then ask you whether you want to save it as either a Public or a Private repository.\n\nAnd if all goes well, you will see the “Successs” pop-up in the lower-right" - }, - { - "objectID": "course/00_Floreada/index.html", - "href": "course/00_Floreada/index.html", - "title": "Using Floreada", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - Floreada" - ] - }, - { - "objectID": "course/00_Floreada/index.html#floreada", - "href": "course/00_Floreada/index.html#floreada", - "title": "Using Floreada", - "section": "Floreada", - "text": "Floreada\n\nLoading Dataset\nFirst, open your web browser and navigate to the website\nClick on Start to proceed to the next page.\n\n\n\n\n\n\nOnce that is done, select the File tab on the upper navigation bar. Then click on Open File(s).\n\n\n\n\n\n\n\nFrom there, select your .fcs files of interest, and click Open.\n\n\n\nThe .fcs files will now load in, and you should see a view similar to the one below. On the left side-bar, you have your gating options (Rectangle, Polygon, Range, Elipse, Quad, etc). Next to these on the right you have the FCS files that are loaded into the workspace. Then on the right, you have the visual display for your selected specimen.\n\n\n\n\n\nSwitching Axis Markers\nIf you left click on the axis name (SSC-H or FSC-H in this case), you will be able to select other markers by which to gate your specimen. For the provided example, we were using a raw spectral flow cytometry .fcs file, so the names of the detectors are present.\n\n\n\nFor now, I plan to start off by gating for singlets. I switch the y-axis to FSC-H, and then proceed to switch the x-axis to FSC-A.\n\n\n\n\n\nCreating Gates\nWith this done, I can now select the Poly gate tab on the upper left.\n\n\n\nThen manually click on the locations on the plot to add the individual gate nodes.\n\n\n\nTo complete the gate, I click back to the original node point. At this point, the popup will allow you to name the gate.\n\n\n\nTo adjust the polygon gate, you can click on a node and drag it to expand or contract in a particular direction\n\n\n\nTo move the entire gate, first click on a node to select the gate, then click in the center of the gate to adjust its location.\n\n\n\n\n\nAdditional Gates\nUnfortunately for those with the force-of-habit from using other softwares, double-clicking within the gate doesn’t do anything. To continue gating on the selected cells, you will need to click on the newly created gate name on the left. This will result in visualizing the isolated cells.\n\n\n\nOnce this is done, you can repeat the previous steps to change the axis markers and create a second gate. For this example, we went with a “Cells” gate to exclude debris from this particular sample.\n\n\n\nHaving created the “Cells” gate, we will be switching gating based on FSC and SSC to using the detector parameters.\nThe samples in this example were acquired to derive the cell counts and concentration of various cell populations within cryopreserved cord and peripheral blood mononuclear cells (CBMC and PBMC) specimens after thawing.\nThey were stained with CD19 BV421, CD45 PE, and CD14 APC on a 5-Laser Cytek Aurora, before unmixing, this would correspond respectively to V1, YG1/B4, R1/YG4 peaks respectively.\n\n\n\n\nScaling/Transformation\nWhen we switch the axis, we can see that the scaling/transformation is not ideal, as the staining and not-staining populations are scrunched up together in the center of the plot.\n\n\n\nTo change the scaling/transformation, we need to click directly on the axis.\n\n\n\nFrom there, when we click on the drop-down, we see the various transformation options. We will select Logicle, given we are working with spectral flow cytometry files.\n\n\n\nThis y-axis values are subsequently visualized with the logicle transformation applied, increasing our resolution between the positive and negative population.\n\n\n\nWe can then repeat this for the x-axis, adjusting the fine-tune options for the scaling as needed.\n\n\n\n\n\nNavigating Gating Hierarchy\nWith this done, let’s first draw a rectangle gate for the CD45+ (B4-A) cells.\n\n\n\nAnd then selecting that population by clicking on the gate name, let’s proceed and gate the CD19+ cells (V2-A).\n\n\n\nAs you can see, we now have the various gates present in the gating hierarchy for the respective .fcs file. To return to a previous gated population, we would click on the parent population above it.\n\n\n\nWe can subsequently add an additional gate at this gating level for the likely debris population (the threshold setting was suboptimal for this experimental run).\n\n\n\n\n\nCopying Gates\nThis was the process for gating for a single specimen. To copy gates over to the other specimens, we have two options. First, holding down your Ctrl (or equivalent) button, you can click on the individual gate names.\n\n\n\nFrom there, you can drag them down to the next specimen and apply them.\n\n\n\nAlternatively, you can drag down the highlighted gated to the Pipelines Tab, and apply to All Files. This will result in the gates being copied to all specimens in the experiment.\n\n\n\n\n\n\nAdjustments within Pipelines will carry over to all other respective unmodified specimens that share it’s gates.\n\n\n\nOnce this is done, I recommend cycling through the gates for each specimen, just to ensure that the gates were positioned correctly before saving the workspace.\n\n\n\n\n\nSaving Workspace\nWith everyone now “correctly” gated, we can proceed to save the workspace so that we can reopen it later from another browser.\nTo do this we open the File tab from the upper navigation bar, and select Save Workspace.\n\n\n\nFrom there we have a couple options, for now let’s select Floreada Workspace. Where it is saved at will depend on your individual browser settings, so watch for a popup.\n\n\n\nAlternatively (and crucially for the CytoML pipeline) we can also choose to save it as a FlowJo v10 .wsp file.\n\n\n\nIn both cases, you will end up with Workspace files that can be used later to access your created gates\n\n\n\n\n\nReopening Workspace\nTo reopen the Floreada workspace within the browser, reopen the website, and select the Open File(s) option.\n\n\n\nFrom there, select both the Floreada Workspace file as well as the .fcs files\n\n\n\nAt which point you will now be back to the point you last saved at.", - "crumbs": [ - "About", - "Getting Started", - "00 - Floreada" - ] - }, - { - "objectID": "course/00_Floreada/index.html#cytoml", - "href": "course/00_Floreada/index.html#cytoml", - "title": "Using Floreada", - "section": "CytoML", - "text": "CytoML\nDue to a unknown formatting bug, the Floreada produced FlowJo v10 .wsp is not directly accessible by CytoML at the time of this course. However, the issue is resolved as soon as the file is opened the first time within FlowJo v10, regardless of whether you have a log in or not. Strange? Yes, but we will take the workaround.\nSo, for anyone on Windows or MacOS, download FlowJo v10. Once installed, open the software, and close the login popups. Once there, open the Floreada created FlowJo.wsp file. Since you haven’t logged in, it won’t show any events. But it will correct the formatting bug. Close the software, and return to R. Your Floreada sourced .WSP file should now be readable by CytoML.\nOdd? For sure. Fixable? Likely, I will set a reminder to work with the Floreada and CytoML devs to see if we can cut out the need for this workaround.", - "crumbs": [ - "About", - "Getting Started", - "00 - Floreada" - ] - }, - { - "objectID": "course/00_Git/index.html", - "href": "course/00_Git/index.html", - "title": "Version Control with Git", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] - }, - { - "objectID": "course/00_Git/index.html#new-folder-from-template", - "href": "course/00_Git/index.html#new-folder-from-template", - "title": "Version Control with Git", - "section": "New Folder from Template", - "text": "New Folder from Template\nSince Positron can use multiple programming languages, when we select “New Folder from Template” we will be asked what kind of folder template we want to use. Since we are working in R, we will select the “R Project” option.\n\n\n\nWe will next be asked to name the new project folder and a storage location.\nOne thing I would like to remind everyone who is just starting to code is that it is best to avoid using special characters (ex. @ $ # ^ ! ; : ,) in any folder or file name. This is because when coding, these can be misinterpreted as commands.\nWhile spaces are generally okay, it is often to best stick to to stick to hyphens (-), underscores (_). We will explore naming conventions in more depth at a later time.\n\n\n\nAnother useful thing to know when getting started with version control, it is best to save your files within your local computer, avoid using OneDrive or other cloud storage options for the time reason. The reason behind is that permissions to write/save to the cloud locations can sometimes be quite finicky, and some autosave/indexing behaviors can cause issues. akes things easier to save or modify without running into permission issues. For most of our course examples, we will be saving our Project Folders under the Documents Folder.\nHaving named our new Project Folder, and designated a storage location, go ahead and check the Initialize Git Repository option. This will indicate to version control to monitor content and changes to files within this folder.\n\n\n\nThe next setup screen will verify which version of R you wish to use. Since we are just getting started, your most recent version of R (usually system) should work. We will also leave the “renv” (reproducible environment setup) option unchecked for the time being (we will revisit the concept later in the course).\n\n\n\nAnd if all goes well, we should see the “New Folder Created” popup.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] - }, - { - "objectID": "course/00_Git/index.html#creating-subfolders", - "href": "course/00_Git/index.html#creating-subfolders", - "title": "Version Control with Git", - "section": "Creating SubFolders", - "text": "Creating SubFolders\nOnce your new project folder has opened, you should be seeing the main layout elements that we briefly covered in the Positron walk-through.\nFor this section, we will primarily be focused on what is happening within the primary side bar on the left, where changes to the individual files within the folder since the last save/commit will be reflected by colored text.\nFor my own projects, there are some elements of organization that I go ahead and add for each new folder. These include both a data and an images subfolders to help keep things a little more organized.\nTo create these folders, we would click on the respective add folder (+) button on the side bar. Files and Folders can be clicked and dragged within the primary side bar to move things to new folder locations.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] - }, - { - "objectID": "course/00_Git/index.html#creating-files", - "href": "course/00_Git/index.html#creating-files", + "objectID": "course/00_Git/slides.html#creating-files", + "href": "course/00_Git/slides.html#creating-files", "title": "Version Control with Git", "section": "Creating Files", - "text": "Creating Files\nIn context of this course, we will primarily be working with two types of files when coding:\n\nR Scripts: These files end in .R. These contain only code (with occasional # comment line). These are often used for self-contained code that once we get them working we rarely need to modify.\nQuarto Markdowns: These files end in .qmd. They contain a .yaml header, followed by a mix of regular written text (often explanations or other documentation), and sections (ie. chunks) that contain code. These are used when we are still getting the code to work, when we need to modify inputs frequently, or simply when we need to document what and why we are doing something to make life easier for our future-self two months from now.\n\n\n\nIn this example, I will go ahead and select the new file icon\n\n\n\nThenn I will name the file, and designate it as a Quarto Markdown file by adding the .qmd at the end of the name to denote the file type.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] + "text": "Creating Files\n\n\n\n\n\n\n\n\n.\n\n\nIn context of this course, we will primarily be working with two types of files when coding:\n\nR Scripts: These files end in .R. These contain only code (with occasional # comment line). These are often used for self-contained code that once we get them working we rarely need to modify.\nQuarto Markdowns: These files end in .qmd. They contain a .yaml header, followed by a mix of regular written text (often explanations or other documentation), and sections (ie. chunks) that contain code. These are used when we are still getting the code to work, when we need to modify inputs frequently, or simply when we need to document what and why we are doing something to make life easier for our future-self two months from now." }, { - "objectID": "course/00_Git/index.html#qmd-files", - "href": "course/00_Git/index.html#qmd-files", + "objectID": "course/00_Git/slides.html#qmd-files", + "href": "course/00_Git/slides.html#qmd-files", "title": "Version Control with Git", "section": "QMD Files", - "text": "QMD Files\nOnce this is done, we can now see we have a new .qmd file (“Example.qmd” in this case).\n\nYAML\nAs previously mentioned, the start of a Quarto Markdown file containg a YAML code chunk that is used to set formatting choices (we will explore this in-depth during the next section)\nWhat designates the location of the YAML block are three hyphens at the start, and three hyphens at the end. For this example, we will also provide a “title:” and “format:” field for the time being (see additional options here).\n\n\n\n\n\nText\nWith a basic YAML formatting block now in place, we can build out other elements of our Quarto Markdown document. Unless otherwise specified, everything else in the document is assumed to be text, so I will go ahead and provide an initial text description of what I am trying to do.\n\n\n\n\n\nCode-Chunks\nHaving provided some initial text for documentation, we can then add code-block chunks to start writing some code.\nThe easiest way to do do this is to click the respective option on the upper-right of the Editor screen. Since Positron can handle multiple programming languages, so the chunk is inserted, we will need to select the language we use to be used within the code chunk (R in this case).\n\n\n\nYou will notice, that the inserted code block starts off with three backticks (`) and then “{r}”. The end of the code block is denoted by an additional three backticks.\nWe can also add new code blocks by simply typing these elements into the location we want to place a code chunk (as long as we are careful to add 3 backticks also at the end).\n\n\n\n\n\n\n\n\nRunning Code\nNow that we have two code-chunks written, we can write lines of code within them. For this example, I will use two beginner friendly functions, print(“Hello”), which will print the contents contained between the ” ” to the console, and getwd() which will return the location of the folder you are working within (ie. the working directory).\nTo run/execute these lines of code, we have a couple options. We can click on the Run Cell option that appears on the upper-left side of the code chunk. Additionally, it has a companion option that will run all code chunks above it.\n\n\n\nWhen a code block is successfully run, you will see within the console (lower bottom of the screen) the line of code be run, with any returned outputs appear directly after.\n\n\n\nAn alternative to clicking the Run Cell button is to click on the line of code you are interested in running, then press (Ctrl + Enter)/(Command + Enter). This will execute the line of code that you have clicked on. This can be useful in scenarios where you want to run a specific line, and not the entire code-chunk.\n\n\n\nUsing this approach, you can see the location (ie. file path) of the current working directory was returned to the Console.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] + "text": "QMD Files\n\n\n\n\n\n\n\n\n.\n\n\nOnce this is done, we can now see we have a new .qmd file (“Example.qmd” in this case).\n\n\n\n\n\nYAML\n\n\n\n\n\n\n\n\n.\n\n\nAs previously mentioned, the start of a Quarto Markdown file containg a YAML code chunk that is used to set formatting choices (we will explore this in-depth during the next section)\nWhat designates the location of the YAML block are three hyphens at the start, and three hyphens at the end. For this example, we will also provide a “title:” and “format:” field for the time being (see additional options here)." }, { - "objectID": "course/00_Git/index.html#local-version-control", - "href": "course/00_Git/index.html#local-version-control", + "objectID": "course/00_Git/slides.html#local-version-control", + "href": "course/00_Git/slides.html#local-version-control", "title": "Version Control with Git", "section": "Local Version Control", - "text": "Local Version Control\nHaving introduced the main elements of a Quarto Markdown file, let’s turn our attention to the tab within the editor showing our newly created .qmd file.\nWe can see there is a solid circle next to the file name, and it is appearing as green. The circle denotes unsaved changes, which we can correct by clicking on the Save Button to save the changes to our file.\n\n\n\n\nUntracked\nIf we turn our attention to the left primary sidebar, we can see that within our GitPractie folder there are three files, our Example.qmd, and the default README.md and .gitignore files. These all show up in green text with U’s to the right of the file names.\nThis denotes that the version control tracking software Git is currently considering them as “Untracked” files. While saving the document via the Save button means we will still have our changes when we reopen Positron, we won’t have any history of changes that we can use to revert back to the way all the files appeared at this exact point in time should something go wrong.\nWe will next go the address bar on the very far left, and select the Git tab.\n\n\n\nOn the Git tab, we can see that each of the three files are shown underneath a “Changes” drop-down. This contains the files that have undergone changes since the last commit. In our case, since we haven’t updated the save-state yet, this last commit would be the initial creation of the project folder.\n\n\n\nTo have version control track these individual files going forward, we can do so in two separate ways. We can add them individually by clicking the + symbol next to the individual names.\n\n\n\n\n\nStaged\nThis will result in the files being moved to the “Staged” dropdown. This denotes files being tracked with the intention of being recorded as the next save-state or waypoint (ie. a commit).\n\n\n\n\n\nCommit\nTo create a new commit (save-state or waypoint), once we have the files we want to track staged, we will write a commit message, and then press commit.\nA commit message is a brief description of the changes that have occurred to the files between this commit and the previous one. Make this short description informative enough that if you need to revert back in the future, you can quickly identify the commit you need to fall back to (more about this later).\n\n\n\nIf this your first time using version control, you will likely encounter the following pop-up asking that you provide a user.name and user.email. This is used to designate the author of the changes.If you get this popup, go ahead and select “Open Git Log”\n\n\n\n\n\nUserName and UserEmail\nThe Output tab at the bottom of the screen will open, showing the messages that led to the popup.\nThe important part to note is the commands that will be needed to provide your user name and email to the computer for authoring the commit. Typically, your email will be the same one you used for your GitHub account.\n\n\n\nFrom the displayed message, go ahead and copy\n“git config –global user.email”you@example.com””\nThen click on the adjacent terminal tab. You will paste the command in, but do not hit enter just yet.\nWindows users, please note, depending on your settings, if trying to paste from the keyboard into the terminal, you may need to press “Ctrl + Shift + V” instead of the usual “Ctrl + V”.\n\n\n\nWith the command now pasted (or typed), use your keyboard arrows to navigate to the email portion, and replace the generic email with your email address used for your GitHub account.\nMake sure that the quotation marks (“) around the email address remain present, as they help the computer identify where your email address starts and ends. Once satisfied that your email address is correct, press enter.\n\n\n\nNext up, repeat the process, this time copying over the command needed to set your user name to the terminal. Repeat the editing process to provide your name between the “” marks. Then press enter.\n\n\n\n\n\n\n\n\nFirst Commit\nNow that your user.name and email address have been provided, Git should be able to provide an author to the commit message. Reattempt to press commit button.\nIf this is successful, you will see your initial commit appear on the bottom half of the left primary side bar, under the Graph dropdown. Congrats! Your files are now being tracked by version control.\n\n\n\nIf you hover with your mouse arrow just over the commit, you can see the longer commit message and additional details appear.\nIf you click on the commit tab, a new display will open in the editor, displaying the changes that occured in that commit compared to the previous one. In this case, since we added everything since the previous commit, nothing appears on the left side, while the entire documents contents appear highlighted in green on the right.\nGreen highlighting is used to show additions, while red highlighting is used to show deletions.\n\n\n\nHaving completed this initial commit, for this example, let’s imitate a typical workflow and make some additional changes to the file before we make a second commit. Within text portions of the .qmd file, use of # denotes a section header in markdown, so let’s add a header for Introduction and click save.\n\n\n\n\n\nModified\nWithin the left primary sidebar, we can see that the Git tracking has updated. Examples.qmd is visible once again. However, becuase it is now a tracked file, instead of showing up with the “U/Untracked” green highlight, it now appears as a brownish-red with a “M/Modified”.\nLet’s make an additional change to the .qmd file by adding another section (# Setup) and a code block with a commented out line (denoted by the # at the line start), before pressing Save.\n\n\n\nIf we were now to click on the Example.qmd file in the left primary sidebar, it will open the same kind of tracking display we saw previously. This time, we can see changes since our last commit. These appear as the green highlights along the scroll-bar, corresponding to the # Introduction and # Setup headers that we have added in since the last commit.\n\n\n\nFor a larger document, we can scroll down to see the various highlighted regions.\n\n\n\nWe could now repeat the steps showed above, staging the file, writing a commit message, and commiting again by clicking on the designated buttons.\nAn important question is how often should we commit, vs. just hit save? Well… it depends :D Let’s think about this in context of a video game. If you made commits at regular intervals throughout the day (or more frequently when doing something particularly risky), you are more likely to be close enough to a particular commit (waypoint/save-state) that you can quickly revert back to without loosing any progress. Alternatively, if your last commit was last week, you will not have any intermediate versions to fall back to.\n\n\nCommit via Terminal\nHaving demonstrated how to commit changes to Git via the left primary side-bar, for this second commit, let’s do it the alternate way via the terminal (tab on the panel at the bottom of your screen).\n\n\n\nAfter clicking on the terminal tab, click on blinking command line.\nThe command to stage a file is “git add”, followed by the name of the file you want to stage.\nIn this case, you would enter “git add Example.qmd” and press Enter. \n\n\nYou will see after pressing enter a new blank terminal line appear. If you glance at the left-sidebar, you can see that Example.qmd now appears under the Staged Changes dropdown.\n\n\n\nNext up, let’s write the git commit via the terminal. In this case, the command would be “git commit -m” (-m denoting message). The commit text is then surrounded by “” marks.\nFor example: “git commit -m”Added section headers to my QMD file””\nPress enter to save the commit.\n\n\n\nAnd you should see your second commit now appear in the left primary sidebar underneath the graphs dropdown.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] + "text": "Local Version Control\n\n\n\n\n\n\n\n\n.\n\n\nHaving introduced the main elements of a Quarto Markdown file, let’s turn our attention to the tab within the editor showing our newly created .qmd file.\nWe can see there is a solid circle next to the file name, and it is appearing as green. The circle denotes unsaved changes, which we can correct by clicking on the Save Button to save the changes to our file." }, { - "objectID": "course/00_Git/index.html#remote-version-control", - "href": "course/00_Git/index.html#remote-version-control", + "objectID": "course/00_Git/slides.html#remote-version-control", + "href": "course/00_Git/slides.html#remote-version-control", "title": "Version Control with Git", "section": "Remote Version Control", - "text": "Remote Version Control\n\nCopying Project Folder to GitHub\nWhile having local version control in place is helpful when you need to revert back after encountering issues, where Git shines is the ability to pass your changes to your online GitHub repository.\nNot only does this allow you to switch between computers, but should something disastrous happen to your main computer, you still have all your hard work backed up and readily assessible.\nFor this subsection, first, double check that Positron is still connected to your GitHub account by checking the user tab on the bottom-left. If not, repeat the connection setup.\n\n\n\nSince our project was created using the “New Folder from Template” option, it currently only exist locally. What we want to do next is to copy it to our GitHub account, creating a new repository in the process.\nTo do this, we will first need to install the usethis R package. Within your console, you would run the following line of code:\n\ninstall.packages(\"usethis\")\n\nDepending on what R packages you already have installed on your computer, you may get a prompt asking if you want to update/install additional dependencies. Go ahead and type the number corresponding to Update All, and press enter.\nThe package and all it’s dependencies should then install. If an error message appears, read through it, and follow provided instructions. Go to Discussions if need help.\n\n\nOnce the usethis package is installed, we need to activate it within R by calling it with the library command. This makes all the tools (ie. functions) within an R package available for use within Positron.\nIn your console, you would type:\n\nlibrary(usethis)\n\n\n\n\nWith library called, you now have access to the functions (tools) within the usethis R package. One of these is the use_github() function.\nIn Positron, if you hover over a function, it will pull up the associated help file which will provide you information about the arguments the function expects to receive, and what they do.\nFor use_github(), the main thing to remember for now is since this is a personal project being used for testing, we don’t necessarily want to share it with the entire world, so we should set the “private” argument equal to TRUE when creating a new repository.\n\n\n\nTaking this information that we have now gathered, we can now within our Quarto Markdown create a code chunk, write out the line of code calling the function, and providing the Private=TRUE argument within the ().\nWithin a code chunk, adding a # in front of a line of code, will comment it out, resulting in that line of code not being run. Since we have already installed the usethis package, and we don’t want to reinstall it every single time, let’s go ahead and comment out that line. Go ahead and press Enter.\n\n\n\nWe will see a message pop-up in the console. In this case, we had not saved before pressing enter, so there are uncommitted changes within the folder. The pop-up is asking whether you want to save these as well before sending the Folder to GitHub.\nIn this case I will chose to ignore the uncommitted changes by entering 3 (for Definitely) in the console and hitting enter on my keyboard.\n\n\n\nThe usethis R package will then execute the series of git commands that are needed to set up a GitHub repository (ie. the messages being displayed in the console window), and when finished will open a pop-up asking whether you want to see your new repository in your default Web Browser. I will go ahead and select yes in this case.\n\n\n\nAfter the browser opens, you can see that the elements I had staged and committed within Positron are now present within the GitHub repository. Since I had only staged Example.qmd, it is the only file that was backed up. We can also see the commit history online by clicking on the commit clock.\n\n\n\nAs we would expect, we only see our two commit messages. One important thing to note is the commit hash numbers, that denote a particular commit. If we decided to revert/fall back to a prior commit in the future, this would be the number we would need to provide to Git to return to that previous commit/save-state\n\n\n\nSimilarly, on GitHub, we have an option to Browse a Repository at a particular point in time. This will be quite useful later in the future when troubleshooting what major changes occurred between versions of an R package.\n\n\n\n\n\nCode Chunk Arguments\nHaving successfully connected our local Project Folder to a remote GitHub repository, let’s return to Positron.\nBefore continuing, if we left the code chunk that created the GitHub repository as is, every time we ran all code chunks in the document, it would try to recreate the GitHub repository. We don’t want this to happen, as the setup was a one-time operation.\nWhile we could add # in front of every line of code (or delete the code chunk entirely) it is often useful to have these set-up code chunks around to remind us what arguments we need to provide next time we need to a similar setup and are mind blanking on what to do.\nFortunately, Quarto allows us to set conditions on whether a chunk is run (ie. evaluated). We will discuss the conditiona arguments in more depth in the next section, but for now, we can modify the code chunk as follows.\nOn the next line after the {r}, we will add a hashtag (#), then a pipe (|), followed by a space. This is the setup for a code-chunk specific argument. We will then add “eval: FALSE”, which signals that the particular code-chunk should not be evaluated (ie, should not be run).\n\n\n\n\n\nREADME\nNow that we have connected our local Project Folder to GitHub, and have gotten a basic introduction to the “git add”, “git commit” arguments, let’s turn our focus to the other files currently listed as untracked by Git within our folder, the README.md and the .gitignore files.\nWhen setting up our GitHub account, we encounted an example of a README.md file. This file often provides a brief description of the project, and an outline of what the other files in the folder are for. As you may have gathered, even software developers are forgetful/under-caffenaited, and having notes to catch back up to speed is important.\n\n\n\n\n\n.gitignore\nWe additionally have a .gitignore file. Within a project, there are often some files that we will never want version control to track. These could be files that are too large for GitHub (ex. really large .fcs files), or files containing sensitive information (passwords, history, credentials, etc.).\nWhen the names of these file (or the file type shothand) are added to the .gitignore file, they are ignored by version control, and no longer appear on the primary left side bar.\n\n\n\nLet’s proceed and stage both the README.md and .gitignore file, so that changes to these files will be tracked. We can of course select both from the primary left side bar and write a short commit message.\n\n\n\n\n\n\nOr alternatively, if we want to stage all uncommitted files present in a single step, we could in the terminal use the “git add .”\nWe can then write our git commit using “git commit -m”.\nBoth approaches work, and you may switch between them based on preferrence.\n\n\n\nYou will notice after having committed, that if you look at the Graph dropdown on the bottom half of the primary left side-bar that something has changed.\nThere are now separate icons denoted as main and origin/main. These correspond to the last commit present locally (main), and the last commit on remote (ie. GitHub, origin/main).\nLocal is ahead since you just made the commit with the changes inactivating the code-chunk, and you have not passed these changes up to GitHub yet.\n\n\n\n\n\nPull\nBefore sending (ie. pushing up) our updated commit to GitHub, especially if you are working on a project from multiple computers (or as part of a team) to bring in (ie. pull down) any changes that might be on GitHub that are not present locally.\nThis ensures that everything is up to date, and you don’t end up with mismatched commits that are incompatible with each other and trigger an error message.\nTo pull in changes from GitHub, at the top of the primary left side-bar, you can select the … button to open a drop-down menu of Git options. You would then select “Pull”.\nAlternatively, you could do the same thing via the terminal by running the “git pull” command.\n\n\n\n\n\nPush\nIn our case, there was no new material present on our GitHub repository that were not already present locally, so all that is returned is the “Already up to date” message.\nWe are now good to proceed to push (ie. send) the updated commit up to our GitHub repository.\nWe can do this by either pressing the Sync changes button, or via the terminal entering the “git push” command.\n\n\n\nAnd now, if you glance down at left side-bar’s graph section, you will see that both the main and origin/main icons are now present for the most recent commit.\n\n\n\nIf we switch to our Web browser, we can see that this is also now the case for our GitHub repository that now also has the most recent changes.\n\n\n\n\n\nReverting to Prior Commit\nFor most daily-workflows, you will only need the git commands that we have introduced above (git add, commit, pull, push). The next two areas (reverting to a prior commit, and branches) are more specialized, and will be covered in greater depth later in the course. We are briefly covering them here. If you are at the point where your last remaining neuron has disconnected, and you feel you need to take a break from version control, feel free to skip to the next section and we will revisit these topics later in the course.\n\n–\nIn most cases, if your code stops working, you can identify the issue and fix it in the existing version, never needing to resort to reverting to a previous commit (save-state). The times you would need to revert would be if you deleted important files, or the new files are hopeless mess that is not worth trying to sort through. In those cases, reverting back might be better approach.\nTo imitate a falling back scenario, lets create and additional file, stage and commit it to end up a commit ahead of where we are currently at within the Project Folder.\n\n\n\nNow being one (or several) commits ahead, if we wanted to revert back, we would first need to identify the commit we want to revert back to and copy the commit hash number.\n\n\n\nThen, opening the terminal, we can enter “git reset” and paste the hash afterwards. We can then press enter.\n\n\n\nYou will notice our additional commit has been removed, although the newer files we were working on subsequent last commit are still present.\n\n\n\nIf however, we had wanted to return to the exact same state as the previous commit (removing all subsequent created files), we could do so by adding in the –hard argument. Before starting, save any newer files you want to keep in a completely different folder, because they will be permanently removed.\nThen, enter “git reset –hard thecommithashnumber” into the terminal, which would result in a “hard” return to the previous commits save-state. You may need to close and reopen Positron to see the changes reflected.\n\n\nBranches\nBranches are an useful Git feature that we will start using extensively later in the course. Branching allows you to create a parallel/carbon-copy of your existing repository, which you can then edit without affecting the main branch. This is particularly useful for projects that may get messy or drawn out. By isolating these edits to a parallel branch, if they don’t work, your main branch remains safe. Alternatively, if you like the changes that occurred in the branch, you can pull these changes from the branch back to main, bringing the timelines back together.\n\n\nWithin the terminal, entering “git branch” will show the existing branches. In this case, only main is present since we haven’t yet created a new branch.\n\n\n\nWe can create a new branch in the terminal by entering “git branch” followed by the name of our desired branch. In this case, we are creating a branch called Week1\n\n\n\nNow, when we check “git branch” again in the terminal, which returns the two branches, Week1 and main. The * is located next to main, indicating that we are currently within the main branch.\n\n\n\nBesides the terminal, we can also create a new branch via Positron. To do so, we first click on the Git tab in the Actions Bar.\nOnce the left-side bar displays the version control display, we can click on the … button (to the right of changes)to gain access to the Git options drop-down.\nFrom here, we click on Branch, and then select Create Branch.\n\n\n\nUsing Git branch, we saw that we were still within the main branch. In the terminal, we can switch over to the Week1 branch by using the “git checkout” command, followed by the branch we wish to switch to.\n\n\n\nThis results in us switching over to the Week1 branch.\n\n\n\nHaving switched (ie. checkout) to the Week 1 branch, let’s create the file BranchTest.qmd, which will exist within this branch, but not yet in the main branch.\n\n\n\nHaving created the file, let’s stage and then commit it. This will put the Week1 branch ahead of the main branch by a single commit.\n\n\n\nWith our changes staged and committed, if we look at the left side-bar’s graph section, our Week1 branch is now ahead of the origin/main branch by one commit.\n\n\n\nIf we were to check on GitHub, we can see that no new files are present on the main branch, but can see the notification listing recent changes to Week1 branch.\n\n\n\nUsing the drop-down, we can switch from displaying the main branch to the Week1 branch, where we can see the new file.\n\n\n\nIf we click the green compare and pull request button, we end up on this screen. This compares how the two branches are different from each other.\n\n\n\nWe will delve into branches again at a later point. For now, remember that by creating and prunning parallel branches, you can develop knowing that even if something goes wrong, your main branch remains safe.", - "crumbs": [ - "About", - "Getting Started", - "00 - Git" - ] - }, - { - "objectID": "course/00_GitHub/index.html", - "href": "course/00_GitHub/index.html", - "title": "Using GitHub", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] + "text": "Remote Version Control\nCopying Project Folder to GitHub\n\n\n\n\n\n\n\n\n.\n\n\nWhile having local version control in place is helpful when you need to revert back after encountering issues, where Git shines is the ability to pass your changes to your online GitHub repository.\nNot only does this allow you to switch between computers, but should something disastrous happen to your main computer, you still have all your hard work backed up and readily assessible.\nFor this subsection, first, double check that Positron is still connected to your GitHub account by checking the user tab on the bottom-left. If not, repeat the connection setup." }, { - "objectID": "course/00_GitHub/index.html#creating-an-account", - "href": "course/00_GitHub/index.html#creating-an-account", + "objectID": "course/00_GitHub/slides.html#creating-an-account", + "href": "course/00_GitHub/slides.html#creating-an-account", "title": "Using GitHub", "section": "Creating an Account", - "text": "Creating an Account\nWe will first navigate to the GitHub homepage. If you haven’t previously created an account, click on the button to sign up for an account.\n\n\n\nOn the sign-up page, you will fill in various details needed to create an account. Please remember that GitHub usernames are visible to others. Additionally, if you end up sharing code with others as part of a manuscript, or use GitHub to create a personal portfolio website in the future, your username will appear as part of the URL.\nFor example, in my case, my user name is DavidRach, so my GitHub profile ends up as: https://github.com/DavidRach. For our course, the core’s GitHub user name is UMGCCCFCSR, so the github profile ends up as https://github.com/UMGCCCFCSR, while the course website ends up as https://umgcccfcsr.github.io/CytometryInR/\n\n\n\nOnce you have entered your new account information, you will need your account creation by entering the code sent to the email address that you provided.\n\n\n\nOnce account creation has been confirmed, please proceed to login to GitHub for the first time.", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] + "text": "Creating an Account\n\n\n\n\n\n\n\n\n.\n\n\nWe will first navigate to the GitHub homepage. If you haven’t previously created an account, click on the button to sign up for an account." }, { - "objectID": "course/00_GitHub/index.html#github-profile", - "href": "course/00_GitHub/index.html#github-profile", + "objectID": "course/00_GitHub/slides.html#github-profile", + "href": "course/00_GitHub/slides.html#github-profile", "title": "Using GitHub", "section": "GitHub Profile", - "text": "GitHub Profile\nUpon creating a brand new account, your GitHub homepage will initially look rather empty, and can be intimidating to navigate for the first time.\nFor now, on the upper right, go ahead and click on the default profile picture icon…\n\n\n\nAnd then select Profile…\n\n\n\nYou are now on your public GitHub profile page. For a newly created account, it will look something like this:\n\n\n\nFor a more established account, this page will look a little different, and can be customized to highlight various projects that you are working on.\nFor this course, we will have you set up a basic GitHub profile page for now, although you are free to customize and personalize it as much as you may want to in the future!\nTo start, first select the edit profile button on the left below the default profile icon.\n\n\n\nYou can then proceed to fill in any details that you feel are relevant and are comfortable sharing.\n\n\n\nWith the quick access details filled in, it is now time to navigate to the Settings tab. You will return to the previous menu dropdown on the upper right, and instead of selecting Profile, click on the Settings option.\n\n\n\nYou should now end up within your Public Profile Settings page.\nFeel free to edit the default profile picture, and any other fields that you feel are relevant. Once done, continue to scroll down the page past ORCID ID.\n\n\n\nWhen you reach Contributions and Activity, go ahead and select the option to include private repositories in the activity summary graphic. Then scroll down and click save. You will now be returned to your GitHub profile page.\n\n\n\nAt the top of the profile, you will see a “Your contributions” calendar graph. For a new account, it will look like this:\n\n\n\nIf you are just starting out, this chart will be mostly empty, but will fill in as you work on projects, see here as an example.\nEvery time you save your code (ie. make a commit), the activity will be reflected in this chart. By clicking the option in settings, code made within a private repository will remain private, but will count toward your contribution chart. As you progress through the course, this will provide a nice visual reminder of the progress you have made, and the obstacles that you have overcome.", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] + "text": "GitHub Profile\n\n\n\n\n\n\n\n\n.\n\n\nUpon creating a brand new account, your GitHub homepage will initially look rather empty, and can be intimidating to navigate for the first time.\nFor now, on the upper right, go ahead and click on the default profile picture icon…" }, { - "objectID": "course/00_GitHub/index.html#github-readme", - "href": "course/00_GitHub/index.html#github-readme", + "objectID": "course/00_GitHub/slides.html#github-readme", + "href": "course/00_GitHub/slides.html#github-readme", "title": "Using GitHub", "section": "GitHub ReadMe", - "text": "GitHub ReadMe\nWith this done, we modify your GitHub profile by adding one customized element, a ReadMe page. This will be used for a couple projects during the course, and can be personalized further in the future.\nTo create a ReadMe page for your profile, we will navigate to the upper right of the screen and click on the + sign.\n\n\n\nWe will then select the Create New Repository option.\n\n\n\nYou will next create a repository (folder), naming it exactly the same as your username. This will be recognized by GitHub as being a special type of repository corresponding to the ReadMe section of your profile.\nFor options, leave the visibility as Public, and Add README set to On. And proceed to Create Repository.\n\n\n\nHaving created the repository (folder), you will see it has been populated by a few default files. For now, you will be editing the README.md file. On a new repository, the easiest way to access it is by clicking the green option on the right side of your screen.\n\n\n\nWith the README.md file now opened, you will be able to see generic filler text that is suggested by GitHub.\nFor this course, I will ask you to add a couple elements for now. You are free to return and further personalize it later if you wish to do so.\n\n\n\nThe type of file that we are working with is a Markdown file, which can allow for a bunch of customizations which we will cover throughout the course.\nFor now, please add and customize the following questions:\nCytometry In R\nLocation: Baltimore, Maryland, USA\nMy Favorite Fluorophore/Metal-Isotope: Spark Blue 550\nPrevious Coding Experience: Repeatedly Calling IT\nWhat I Hope to Get From This Course: A faster way to match FlowSOM clusters to their likely cell type.\n\n\n\nNext, to save you will select the green “Commit changes” button. We will cover the meaning of “Commit” more in-depth during the Git section.\nFor now, write a short summary of the change you made to the file in the “Commit message”, and any additional details within the “Extended description” field. When ready, click the green “Commit changes” button.\n\n\n\nYou will now be able to see the updated README.md file, as you can see in our example below. To make additional edits, you would select the pencil icon on the right-center side of the screen.\n\n\n\nNext, navigate back to your profile page (by clicking on either your username or the Overview option on the tabs).\nYou will see that the README file contents are now displayed on the upper portion of your GitHub profile. Feel free to circle back and customize this further to your liking.\nIn this last example, we created your first repository (folder). Since this is public, it is now shown below the README section of the profile under your repositories. You can also see that your commits made in the process of making the changes are now shown both in the Contributions graph, and under the Contributor Activity summary at the bottom of the page.", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] + "text": "GitHub ReadMe\n\n\n\n\n\n\n\n\n.\n\n\nWith this done, we modify your GitHub profile by adding one customized element, a ReadMe page. This will be used for a couple projects during the course, and can be personalized further in the future.\nTo create a ReadMe page for your profile, we will navigate to the upper right of the screen and click on the + sign." }, { - "objectID": "course/00_GitHub/index.html#github-repository", - "href": "course/00_GitHub/index.html#github-repository", + "objectID": "course/00_GitHub/slides.html#github-repository", + "href": "course/00_GitHub/slides.html#github-repository", "title": "Using GitHub", "section": "GitHub Repository", - "text": "GitHub Repository\nHaving set up your GitHub profile, it now is time to make sure you have access to our course materials. We will have you navigate to our course’s GitHub profile\nOn the profile page, you will be able to see our version of the README, our repositories, and the Contributions graph and Contribution activity sections.\nPlease click on the CytometryInR to navigate to its repository (folder)\n\n\n\nOn this page, you will see several elements that you will be circling back to throughout the course.\nFor our course, we will be extentsively ussing the Discussions page as a community forum. If you have any questions, are looking for feedback, or want to show off something that you worked on, this is the place for it. This will also help make sure\n\n\n\nThe Issues tab is where you will need to go to open an Issue if you encounter a bug (or major documentation typo), so that I can cicle back and correct them when I have the chance.\n\n\n\nTo submit the optional take-home problems, you would turn in these problems by going to the Pull Request tab, and initiating a pull request between your forked version of the project and our “homework” branch (more details on this later).\n\n\n\nOptionally, you can “Star” a repository. This is basically the GitHub equivalent of liking a project. In our case, we will often star a repository since it will be saved under the Stars tab of our profile, which makes finding it again significantly easier a few weeks later after forgetting the repository name.\n\n\n\nTo see projects that you have starred, you can select the Stars option from the same dropdown you used to get to Settings.\n\n\n\nOr from your GitHub profile, you can see these under Stars tab.", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] + "text": "GitHub Repository\n\n\n\n\n\n\n\n\n.\n\n\nHaving set up your GitHub profile, it now is time to make sure you have access to our course materials. We will have you navigate to our course’s GitHub profile\nOn the profile page, you will be able to see our version of the README, our repositories, and the Contributions graph and Contribution activity sections.\nPlease click on the CytometryInR to navigate to its repository (folder)" }, { - "objectID": "course/00_GitHub/index.html#forking-cytometryinr", - "href": "course/00_GitHub/index.html#forking-cytometryinr", + "objectID": "course/00_GitHub/slides.html#forking-cytometryinr", + "href": "course/00_GitHub/slides.html#forking-cytometryinr", "title": "Using GitHub", "section": "Forking CytometryInR", - "text": "Forking CytometryInR\nBefore we go further, we will need you to make your own copy of the course repository (ie. fork it). This will allow you to quickly retrieve all the new materials and code corrections by simply rereshing (ie. syncing) your forked version with our upstream parent branch once a week.\n\n\nTo fork the course repository, you will select the “Fork repository” option on the upper-center portion of your screen.\n\n\n\nBy “Fork-ing” a repository, you are basically copying the contents from that repository to a newly created repository on your own GitHub. Forked projects are still linked to the original (parent) fork, and can retrieve any updates via syncing, as well as return changes via a pull request.\nFor this course, when you create the fork, keep the existing repository name (“CytometryInR”). Importantly, select the copy main branch option. This will ensure you only get the code and data needed for the course copied over, and don’t end up with your entire hard-drive filled will website elements, or other people’s solutions to the take-home problems.\n\n\n\nOnce you have created the fork, you will see your copy of the forked repository under your own username. Seeing as you have just now forked the project, you will see the notification that you are up to date with the existing version of the CytometryInR course repository.\nAs we go through the course, and new material is released each week on Sunday at 2200 EST (Monday 0300 GMT+0), you will see this changed to behind the main branch by a number of commits, and have the option to sync in the changes to your fork to gain access to that week’s material.\n\n\n\nIf you remember, previously under your GitHub profile, the Repositories tab only contained the repository corresponding to your ReadMe section.\n\n\n\nYou should however now be able to see your fork of the CytometryInR repository. As you add project specific repositories throughout the course, they will also appear here.", - "crumbs": [ - "About", - "Getting Started", - "00 - GitHub" - ] + "text": "Forking CytometryInR\n\n\n\n\n\n\n\n\n.\n\n\nBefore we go further, we will need you to make your own copy of the course repository (ie. fork it). This will allow you to quickly retrieve all the new materials and code corrections by simply rereshing (ie. syncing) your forked version with our upstream parent branch once a week." }, { - "objectID": "course/00_Homeworks/index.html", - "href": "course/00_Homeworks/index.html", + "objectID": "course/00_Homeworks/slides.html#discussions-forum", + "href": "course/00_Homeworks/slides.html#discussions-forum", "title": "Getting Help", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - Getting Help" - ] + "section": "Discussions Forum", + "text": "Discussions Forum\n\n\n\n\n\n\n\n\n.\n\n\nOn the course’s GitHub repository, we have opened up a Discussions page that we plan to use as a community forum. We hope that it will serve multiple functions, from providing a better sense of community for the online participants, to facilitating asking and receiving help on something that is not clear, provide feedback about something that it not working out, as well as a place to celebrate and show off your coding wins." }, { - "objectID": "course/00_Homeworks/index.html#discussions-forum", - "href": "course/00_Homeworks/index.html#discussions-forum", + "objectID": "course/00_Homeworks/slides.html#polls", + "href": "course/00_Homeworks/slides.html#polls", "title": "Getting Help", - "section": "Discussions Forum", - "text": "Discussions Forum\nOn the course’s GitHub repository, we have opened up a Discussions page that we plan to use as a community forum. We hope that it will serve multiple functions, from providing a better sense of community for the online participants, to facilitating asking and receiving help on something that is not clear, provide feedback about something that it not working out, as well as a place to celebrate and show off your coding wins.\n\nTo keep the Discussions forum semi-organized, we have set up several categories, please select the appropiate category when opening a new discussion!\n\n\n\nCode of Conduct\n\nWe ask that all course participants read and adhere to the spirit of our Code of Conduct. We are all human, at different points in our learning journeys, so what may be obvious to you at your point of your learning journey may have necessarily be obvious to someone just getting started. This course is our giving back to those in the community, but is on a voluntary basis in addition to our regular workload. While we try to reply quickly, sometimes our cell sorters fully melt down sending everything into chaos. We will reply when we can.\n\n\n\n\nAnnouncements\n\nWhen we send out an email to all participants, we will also repost it as an announcement. This ensures that even if you are not on our mailing list, you will still be able to have access to important information and course updates.\n\n\n\n\n\n\n\nGeneral\n\nThis section category can be used for any discussions that you think are worth having, that don’t fall under any of the other category. Good examples are continuing a discussion that was held during one of the livestreams; wanting to discuss and dive further into a given week’s topic; or bringing in additional resources that you found useful to understandingn something that didn’t click initially. This space is for the community to shape as they see best.\n\n\n\n\n\n\n\nIdeas\n\nHave an idea for a new topic or a way to improve the course? We would love to hear them. Provide as many details, and ideally, an example, and if it is doable, we will try to implement them.\n\n\n\n\n\n\n\nIntroductions\n\nOnline courses can be odd in terms of replicating in-person dynamics. Fortunately, we have gathered the largest cohort of “cytometrist with no-to-little flow experience trying to learn R at the same time” that the world has ever seen, so best to take advantage of this while we can. Treat this section as if we had just met at a conference, tell us about yourself, what brings you here, and what you want to hopefully be able to do after the course ends.", - "crumbs": [ - "About", - "Getting Started", - "00 - Getting Help" - ] + "section": "Polls", + "text": "Polls\n\n\n\n\n\n\n\n\n\n.\n\n\nOccasionally, we will need to gather community feedback on what is working and what is not working. We will sporadically post Polls for this purpose." + }, + { + "objectID": "course/00_Homeworks/slides.html#issues", + "href": "course/00_Homeworks/slides.html#issues", + "title": "Getting Help", + "section": "Issues", + "text": "Issues" + }, + { + "objectID": "course/00_Homeworks/slides.html#submitting-take-home-problems", + "href": "course/00_Homeworks/slides.html#submitting-take-home-problems", + "title": "Getting Help", + "section": "Submitting Take-Home Problems", + "text": "Submitting Take-Home Problems\n\n\n\n\n\n\n\n\n.\n\n\nEach week, during the course, we introduce and cover the main concepts for the particular concept. Our goal is to provide you with the necessary code and enough code to be able to get the jist. However, to become comfortable and be able to apply what you have learned, you will need to explore beyond our examples, try it with your own datasets, encounter things that don’t work, and troubleshoot your way through them. It’s this cycle of venturing into the unknown that develops strong coding skills that are needed to overcome any barrier you encounter. The goal of the take-home questions is to provide some less curated problems that will take a little longer to answer to help get you started on your own exploration of the topic." + }, + { + "objectID": "course/00_Positron/slides.html#console", + "href": "course/00_Positron/slides.html#console", + "title": "Using Positron", + "section": "Console", + "text": "Console\n\n\n\n\n\n\n\n\n.\n\n\nAt the bottom of the sceen, you will first see the Console Tab. This is the tab where your lines of code when executed (run) will appear, as well as any messages, warnings or errors that get returned. On the right side of the console, you can find several buttons, among them restart R and delete session (for when you need a fresh start), and clear console (which keeps all previously run outputs and objects, but clears away the displayed text within the console)." + }, + { + "objectID": "course/00_Positron/slides.html#terminal", + "href": "course/00_Positron/slides.html#terminal", + "title": "Using Positron", + "section": "Terminal", + "text": "Terminal\n\n\n\n\n\n\n\n\n.\n\n\nRight next to the Console tab is your Terminal tab. While the console tab is primarily used to run R code within Positron, the terminal is the interface where code containing system commands directed at at your computer is entered. We will use this less frequently, primarily in two context: 1) rendering Quarto documents, and 2) commiting changes to version control. Among the buttons on the right-side of the terminal to make note of are the + button to add a new terminal, and the trash/garbage can button to kill (stop) the terminal." + }, + { + "objectID": "course/00_Positron/slides.html#help", + "href": "course/00_Positron/slides.html#help", + "title": "Using Positron", + "section": "Help", + "text": "Help\n\n\n\n\n\n\n\n\n.\n\n\nWhen trying to evaluate how a particular function is working in R, you can hover over it and positron will open up the documentation for that particular function if available, alternatively, you can enter ?theParticularFunctionsName in the console and hit enter to similarly view what is occuring." + }, + { + "objectID": "course/00_Positron/slides.html#variables", + "href": "course/00_Positron/slides.html#variables", + "title": "Using Positron", + "section": "Variables", + "text": "Variables\n\n\n\n\n\n\n\n\n.\n\n\nOn the upper-portion of the Secondary Side Bar, we can find the Session window, containing the Variables tab. As you run (execute) lines of code, and different variables, objects and functions are created, these become visible under the variables tab on the upper right." + }, + { + "objectID": "course/00_Positron/slides.html#plots", + "href": "course/00_Positron/slides.html#plots", + "title": "Using Positron", + "section": "Plots", + "text": "Plots\n\n\n\n\n\n\n\n\n.\n\n\nSimilarly, any generated Plots or Documents will appear within the Secondary Side Bar, either under Plots (bottom) or Viewer (top) tabs." + }, + { + "objectID": "course/00_Positron/slides.html#view", + "href": "course/00_Positron/slides.html#view", + "title": "Using Positron", + "section": "View", + "text": "View\n\n\n\n\n\n\n\n\n.\n\n\nOn the upper bar multiple tabs can be found, which we will explore in due time. Most useful to point out is the View tab. If you accidentally close your console, session or plots window, and are trying to get them to reapper, you would need to reselect them from this tab." + }, + { + "objectID": "course/00_Positron/slides.html#pages", + "href": "course/00_Positron/slides.html#pages", + "title": "Using Positron", + "section": "Pages", + "text": "Pages\n\n\n\n\n\n\n\n\n.\n\n\nThe pages tab and the left-side bar show you everything that is currently within your project folder, including all the folders, and files. Once version control with Git is initiated, new files are relected showing up as green text and a dot, while modified tracked files are reflected by light brown text and a dot." + }, + { + "objectID": "course/00_Positron/slides.html#search", + "href": "course/00_Positron/slides.html#search", + "title": "Using Positron", + "section": "Search", + "text": "Search\n\n\n\n\n\n\n\n\n.\n\n\nThe search tab on the left side bar is something that I use routinely." + }, + { + "objectID": "course/00_Positron/slides.html#extensions", + "href": "course/00_Positron/slides.html#extensions", + "title": "Using Positron", + "section": "Extensions", + "text": "Extensions\n\n\n\n\n\n\n\n\n.\n\n\nOn the far-left side we can find the Activity bar, which contains several tabs. Which tab you have selected will then dictate the contents of your left side-bar.\nOccupying the left side bar are several tabs. One of these is Extensions, which shows “Plugins” (or the VScode equivalent) that extend the functionality of Positron further. The ones you have installed may vary, but the main ones in context of this course are Air (provides color and highlights syntax for R code to make interpretation easier) as well as Quarto (for rendering the various document types)." + }, + { + "objectID": "course/00_Positron/slides.html#git", + "href": "course/00_Positron/slides.html#git", + "title": "Using Positron", + "section": "Git", + "text": "Git\n\n\n\n\n\n\n\n\n.\n\n\nThe Git tab on the left side bar is where once version control is initiated for the project folder, we can see changes that have occurred to the individual files since the last commit. These changes can be added to a new commit by clicking on the + sign. This will be covered more extensively in the next section" + }, + { + "objectID": "course/00_Quarto/slides.html#renderpreview", + "href": "course/00_Quarto/slides.html#renderpreview", + "title": "Introduction to Quarto", + "section": "Render/Preview", + "text": "Render/Preview\n\n\n\n\n\n\n\n\n.\n\n\nThe preview button, at the upper-left end of the Editor, is used to render/knit a quarto document. This triggers the process by which code-chunks are run, and then the outputs are cobbled together into the file format type designated by the YAML header." + }, + { + "objectID": "course/00_Quarto/slides.html#yaml", + "href": "course/00_Quarto/slides.html#yaml", + "title": "Introduction to Quarto", + "section": "YAML", + "text": "YAML\n\n\n\n\n\n\n\n\n.\n\n\nWe can additionally provide additional custom inputs to the YAML header. A couple examples include providing the document author and date." + }, + { + "objectID": "course/00_Quarto/slides.html#table-of-contents", + "href": "course/00_Quarto/slides.html#table-of-contents", + "title": "Introduction to Quarto", + "section": "Table of Contents", + "text": "Table of Contents\n\n\n\n\n\n\n\n\n.\n\n\nIn the previous section, we saw that we could provide headings and subheadings to our .qmd file by placing a # at the start of a line in the text portion of the document. A subheading was designated by a ##, with additional hierarchy being designated by appending an additional #." + }, + { + "objectID": "course/00_Quarto/slides.html#code-chunk-arguments", + "href": "course/00_Quarto/slides.html#code-chunk-arguments", + "title": "Introduction to Quarto", + "section": "Code Chunk Arguments", + "text": "Code Chunk Arguments\n\n\n\n\n\n\n\n\n.\n\n\nAs we briefly touched on in the last section, code-chunks can be modified by including arguments, which affect whether a particular code chunk gets evaluated. In that example, we included a “#| eval: FALSE” to the install commands since we did not want them to be re-run subsequently. We will take a closer look at the other arguments in this section.\n\n\n\n\n\nEval\n\n\n\n\n\n\n\n\n.\n\n\nThe code-chunk argument, “Eval”, is used to determine when a code-chunk get’s evaluated. When set to true (or by default if no eval argument is included), the code-chunks contents will be run/executed, and the output will appear. We can see this in the html output, as below the code block, we get back the address of my working directory." + }, + { + "objectID": "course/00_Quarto/slides.html#text-styles", + "href": "course/00_Quarto/slides.html#text-styles", + "title": "Introduction to Quarto", + "section": "Text Styles", + "text": "Text Styles\n\n\n\n\n\n\n\n\n.\n\n\nQuarto primarily uses Markdown for text styling. Consequently, markdown arguments can be used within the text to change how various text appears." + }, + { + "objectID": "course/00_Quarto/slides.html#hyperlinks", + "href": "course/00_Quarto/slides.html#hyperlinks", + "title": "Introduction to Quarto", + "section": "Hyperlinks", + "text": "Hyperlinks\n\n\n\n\n\n\n\n\n.\n\n\nYou can link to a website by surrounding word of interest in [] and placing the url within () adjacent to it." + }, + { + "objectID": "course/00_Quarto/slides.html#images", + "href": "course/00_Quarto/slides.html#images", + "title": "Introduction to Quarto", + "section": "Images", + "text": "Images\n\n\n\n\n\n\n\n\n.\n\n\nYou can place images by adding the following, as long as the file.path to the image is correctly formatted. In my case, this is why I include images folders within my folders to simplify the copy and paste." + }, + { + "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-r", + "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-r", + "title": "Installing Software on Windows", + "section": "Installing R", + "text": "Installing R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." + }, + { + "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-rtools", + "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-rtools", + "title": "Installing Software on Windows", + "section": "Installing RTools", + "text": "Installing RTools\n\n\n\n\n\n\n\n\n.\n\n\nWe will now work on installing Rtools. This software is needed when building R packages from source, which we will need throughout the course for R packages hosted on GitHub.\nTo get started, we will return to the R installation page we visited previously and instead click on the Rtools option." + }, + { + "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-git", + "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-git", + "title": "Installing Software on Windows", + "section": "Installing Git", + "text": "Installing Git\n\n\n\n\n\n\n\n\n.\n\n\nGit is a version control software widely used among software developers and bioinformaticians. We will use it extensively throughout the course, both locally on our computers (to keep track of changes to our files), as well as in combination with GitHub(to maintain online backups of our files).\nWe will first navigate to the website and select the download from Windows option." + }, + { + "objectID": "course/00_WorkstationSetup/WindowsSlides.html#installing-positron", + "href": "course/00_WorkstationSetup/WindowsSlides.html#installing-positron", + "title": "Installing Software on Windows", + "section": "Installing Positron", + "text": "Installing Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." + }, + { + "objectID": "course/00_WorkstationSetup/Linux.html", + "href": "course/00_WorkstationSetup/Linux.html", + "title": "Installing Software on Linux", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nThis is the software installation walkthrough for those whose computers are running Linux. First off, welcome! Based on our pre-course interest form, there was a suprising number of you daily-drivers out there! However, a CytometryInR interest form is unlikely to be representative of the general population, so please stash all Year of the Linux desktop banners until further notice." + }, + { + "objectID": "course/00_WorkstationSetup/Linux.html#debian-based-distros", + "href": "course/00_WorkstationSetup/Linux.html#debian-based-distros", + "title": "Installing Software on Linux", + "section": "Debian-based Distros", + "text": "Debian-based Distros\n\nInstalling R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nOnce this is done, select your Linux Distro (or one that shares your package managers format).\n\n\n\nOn the landing page, you will find a bunch of relevant installation information, which is worthwhile giving a read-through when you have time.\n\n\n\nThe process to successfully install R can be summarized as follows:\nUpdate apt/sources.list to include the CRAN repository (allowing access to R packages)\n\n\n\nSince we are running on Debian stable (Trixie), we would add the following line to sources.list\n\n\n\nSo in practice, open sources.list:\n\n\n\nPaste the line, and “Ctrl + O”; “Enter”; “Ctrl + X” to save the changes.\n\n\n\nNext, we will need to retrieve the keyID used to sign. This can be fetched from Ubuntu via the terminal.\n\n\n\n\n\n\nThen we need to export and write it\n\n\n\nWhich if successful, will display the public key.\n\n\n\nWith the above set up, we can proceed via our apt package manager to install both r-base and r-base-dev (which contains the equivalent of Rtools for Windows, or Xcode Command Line Tools for macOS).\n\n\n\n\n\n\n\n\n\nAnd if all goes well, R should now be installed." + }, + { + "objectID": "course/00_WorkstationSetup/Linux.html#installing-git", + "href": "course/00_WorkstationSetup/Linux.html#installing-git", + "title": "Installing Software on Linux", + "section": "Installing Git", + "text": "Installing Git\n\n# sudo apt install git" + }, + { + "objectID": "course/00_WorkstationSetup/Linux.html#installing-positron", + "href": "course/00_WorkstationSetup/Linux.html#installing-positron", + "title": "Installing Software on Linux", + "section": "Installing Positron", + "text": "Installing Positron\nFinally, you will need to install Positron. It will be the integrated development environment (IDE) we will be using for the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\n\n\n\nWith the license accepted, you will be able to select distribution and architecture.\n\n\n\nOnce the Download completes, proceed to install the .deb package as you would nornally. GUI example via Discover below.\n\n\n\nDepending on your configurations, you may be asked to exert your sudo powers.\n\n\n\nOnce this completes, you should now be able to launch the software for the first time." + }, + { + "objectID": "course/00_WorkstationSetup/LinuxSlides.html#debian-based-distros", + "href": "course/00_WorkstationSetup/LinuxSlides.html#debian-based-distros", + "title": "Installing Software on Linux", + "section": "Debian-based Distros", + "text": "Debian-based Distros\nInstalling R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." + }, + { + "objectID": "course/00_WorkstationSetup/LinuxSlides.html#installing-git", + "href": "course/00_WorkstationSetup/LinuxSlides.html#installing-git", + "title": "Installing Software on Linux", + "section": "Installing Git", + "text": "Installing Git\n\n# sudo apt install git" + }, + { + "objectID": "course/00_WorkstationSetup/LinuxSlides.html#installing-positron", + "href": "course/00_WorkstationSetup/LinuxSlides.html#installing-positron", + "title": "Installing Software on Linux", + "section": "Installing Positron", + "text": "Installing Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will need to install Positron. It will be the integrated development environment (IDE) we will be using for the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." + }, + { + "objectID": "course/00_WorkstationSetup/MacOSSlides.html#installing-r", + "href": "course/00_WorkstationSetup/MacOSSlides.html#installing-r", + "title": "Installing Software on MacOS", + "section": "Installing R", + "text": "Installing R\n\n\n\n\n\n\n\n\n.\n\n\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page." + }, + { + "objectID": "course/00_WorkstationSetup/MacOSSlides.html#xcode-command-line-tools", + "href": "course/00_WorkstationSetup/MacOSSlides.html#xcode-command-line-tools", + "title": "Installing Software on MacOS", + "section": "Xcode Command Line Tools", + "text": "Xcode Command Line Tools\n\n\n\n\n\n\n\n\n.\n\n\nDepending on your version of macOS, you may or may not already have Git installed on your computer. The reason is that it comes bundled within the Xcode Command Line Tools.\nIf this is not your first foray into coding, you may have previously seen an installation pop-up along the lines of “XYZ requires command line developer tools. Would you like to install the tools now?” when installing an IDE (like Positron, Rstudio or Visual Studio Code)." + }, + { + "objectID": "course/00_WorkstationSetup/MacOSSlides.html#install-positron", + "href": "course/00_WorkstationSetup/MacOSSlides.html#install-positron", + "title": "Installing Software on MacOS", + "section": "Install Positron", + "text": "Install Positron\n\n\n\n\n\n\n\n\n.\n\n\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right." + }, + { + "objectID": "course/01_InstallingRPackages/slides_inperson.html#checking-for-loaded-packages", + "href": "course/01_InstallingRPackages/slides_inperson.html#checking-for-loaded-packages", + "title": "01 - Installing R Packages", + "section": "Checking for Loaded Packages", + "text": "Checking for Loaded Packages\n\n\n\n\n\n\n\n\n.\n\n\nFor the contents (ie. the functions) of an R package to be available for your computer to use, they must first be activated (ie. loaded) into your local environment. We will first learn how to check what R packages are currently active." + }, + { + "objectID": "course/01_InstallingRPackages/slides_inperson.html#installing-from-cran", + "href": "course/01_InstallingRPackages/slides_inperson.html#installing-from-cran", + "title": "01 - Installing R Packages", + "section": "Installing from CRAN", + "text": "Installing from CRAN\n\n\n\n\n\n\n\n\n.\n\n\nWe will start by installing R packages that are part of the CRAN repository. This is the main R package repository, being part of the broader R software project. In the context of this course, R packages that work primarily with general data structure (rows, columns, matrices, etc.) or visualizations will predominantly be found within this repository.\nThese include the tidyverse packages. These packages have collectively made R easier to use by smoothing out some of the rough edges of base R, which is why R has seen major growth within the last decade. We will be installing several of these R packages today." + }, + { + "objectID": "course/01_InstallingRPackages/slides_inperson.html#installing-from-bioconductor", + "href": "course/01_InstallingRPackages/slides_inperson.html#installing-from-bioconductor", + "title": "01 - Installing R Packages", + "section": "Installing from Bioconductor", + "text": "Installing from Bioconductor\n\n\n\n\n\n\n\n\n.\n\n\nBioconductor is the second R package repository we will be working with throughout the course. While it contains far fewer packages than CRAN, it contains packages that are primarily used by the biomedical sciences. Following this link you can find it’s current flow and mass cytometry R packages.\nBioconductor R packages differ from CRAN R packages in a couple of ways. Bioconductor has different standards for acceptance than CRAN. They usually contain interoperable object-types, put more effort into documentation and continous testing to ensure that the R package remains functional across operating systems." + }, + { + "objectID": "course/01_InstallingRPackages/slides_inperson.html#install-from-github", + "href": "course/01_InstallingRPackages/slides_inperson.html#install-from-github", + "title": "01 - Installing R Packages", + "section": "Install from GitHub", + "text": "Install from GitHub\n\n\n\n\n\n\n\n\n.\n\n\nIn addition to the CRAN and Bioconductor repositories, individual R packages can also be found on GitHub hosted on their respective developers GitHub accounts. Newer packages that are still being worked on (often in the process of submission to CRAN or Bioconductor) can be found here, as well as those where the author decided not to bother with a review process, and just made the packages immediately available, warts and all." + }, + { + "objectID": "course/01_InstallingRPackages/slides_inperson.html#troubleshooting-install-errors", + "href": "course/01_InstallingRPackages/slides_inperson.html#troubleshooting-install-errors", + "title": "01 - Installing R Packages", + "section": "Troubleshooting Install Errors", + "text": "Troubleshooting Install Errors\n\n\n\n\n\n\n\n\n.\n\n\nWe have now installed three R packages, dplyr, PeacoQC, and flowSpectrum. In my case, I did not encounter any errors during the installation. However, sometimes a package installation will fail due to an error encountered during the installation process. This can be due to a number of reasons, ranging from a missing dependency, or an update that caused a conflict. While these can occur for CRAN or Bioconductor packages, they are more frequently seen for GitHub packages where the Description/Namespace files may not have been fully updated yet to install all the required dependencies.\nWhen encountering an error, start of by first reading through the message to see if you can parse any useful information about what package failed to install, and if it list the missing dependency packages name. The later was the case in the error message example shown below." + }, + { + "objectID": "course/01_InstallingRPackages/slides_inperson.html#documentation-and-websites", + "href": "course/01_InstallingRPackages/slides_inperson.html#documentation-and-websites", + "title": "01 - Installing R Packages", + "section": "Documentation and Websites", + "text": "Documentation and Websites\n\n\n\n\n\n\n\n\n.\n\n\nWe have already seen a couple ways to access the help documentation contained within an R package via Positron. Beyond internal documentation, R packages often have external websites that contain additional walk-through articles (ie. vignettes) to better document how to use the package.\nFor CRAN-based packages, we can start off by searching for the package name. So, in the case of dplyr" + }, + { + "objectID": "course/02_FilePaths/slides.html#set-up", + "href": "course/02_FilePaths/slides.html#set-up", + "title": "02 - File Paths", + "section": "Set Up", + "text": "Set Up\n\n\n\n\n\n\n\n\n.\n\n\nBefore we begin, let’s make sure you get the data needed for today transferred to your local computer, and then get the .fcs files copied over from there to your own working project folder. This is the process you will repeat each week throughout the course." + }, + { + "objectID": "course/02_FilePaths/slides.html#working-directory", + "href": "course/02_FilePaths/slides.html#working-directory", + "title": "02 - File Paths", + "section": "Working Directory", + "text": "Working Directory\n\n\n\n\n\n\n\n\n.\n\n\nNow that we are back in our Week2 folder, let’s start by seeing our current location similarly to how our computer perceives it.\nWe will use getwd() function (ie. get working directory) to return the location of the folder we are currently inside of. For example, when getwd() is run within my Week2 project folder, I see the following location" + }, + { + "objectID": "course/02_FilePaths/slides.html#directories", + "href": "course/02_FilePaths/slides.html#directories", + "title": "02 - File Paths", + "section": "Directories", + "text": "Directories\n\n\n\n\n\n\n\n\n.\n\n\nWithin this working directory, we have a variety of project folders and files related to the course. We can see the folders that are present using the list.dirs() function.\n\n\n\n\n\n\n\n\n\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)" + }, + { + "objectID": "course/02_FilePaths/slides.html#variables", + "href": "course/02_FilePaths/slides.html#variables", + "title": "02 - File Paths", + "section": "Variables", + "text": "Variables\n\n\n\n\n\n\n\n\n.\n\n\nBefore exploring file paths, we need to have some basic R code knowledge that we can use to work with them. Within R, we have the ability to assign particular values (be they character strings, numbers or logicals) to objects (ie. variables) that can be used when called upon later.\nFor example:\n\n\n\n\n\n\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\n\n\n\n\n\n\n\n\n\n.\n\n\nIn this case, the variable name is what the assignment arrow (“<-”) is pointing at. In this case, WhatDayDidIWriteThis" }, { - "objectID": "course/00_Homeworks/index.html#polls", - "href": "course/00_Homeworks/index.html#polls", - "title": "Getting Help", - "section": "Polls", - "text": "Polls\n\nOccasionally, we will need to gather community feedback on what is working and what is not working. We will sporadically post Polls for this purpose.\n\n\n\n\n\n\nQ&A\n\nThe Questions and Answers (Q&A) section is where you go if something is not clear, not working, and you are trying to troubleshoot your way through it. First thing before posting, search! to see if someone has already asked the question. If you don’t find anything, go ahead and open a new discussion.\nSince we are not at your computer, and don’t have your dataset, when troubleshooting it is best to include a minimal reproducible example of the issuen you are encountering, slimming down the number of files needed to be transferred, and generalizing down the code so that other course participants and instructors can follow along. If this is not doable, or if the problem requires added context (and larger files), create a new repository on your GitHub, make it public, and share the links to it in your post. The goal would be to download the folder and be able to replicate the issue that you are encountering.\n\n\n\n\n\n\n\n\n\n\nShow and Tell\n\nWhere Q&A section is for getting help on code that is frustratingly not working, Show and Tell is where to go and celebrate when you finally get things to work. Share your wins, show us the extra pretty graphs, bizarre autofluorescence signatures, or odd outputs that just make you laugh.", - "crumbs": [ - "About", - "Getting Started", - "00 - Getting Help" - ] + "objectID": "course/02_FilePaths/slides.html#indexing", + "href": "course/02_FilePaths/slides.html#indexing", + "title": "02 - File Paths", + "section": "Indexing", + "text": "Indexing\n\n\n\n\n\n\n\n\n.\n\n\nNot all variables contain single objects.\nFor example, we can modify Fluorophores and add additional entries:\n\n\n\n\n\n\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nstr(Fluorophores)\n\n chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n\n\n\n\n\n\n\n\n\n\n\n.\n\n\nThe c stands for concatenate. It concatenates the objects into a larger object, known as a vector.\nIn this case, you notice in addition to the specification the values are characters, we get a [1:4], denoting four objects are present." }, { - "objectID": "course/00_Homeworks/index.html#issues", - "href": "course/00_Homeworks/index.html#issues", - "title": "Getting Help", - "section": "Issues", - "text": "Issues\nMost of the time, if you are having trouble getting you code to run, you should first stop after some initial troubleshooting should be to open a new Discussion under the Q&A category. Here you will be able to get both community and instructor help and suggestions to hopefully resolve whatever is going on.\n\nThe Issues page is primarily meant for course-specific problems that require the course instructor intervention to fix. For example, we release a new week of material, and while it runs fine for both Windows and Linux, the code fails to run for all MacOS users. While you may be able to find workarounds on your own, it’s ultimately our responsibility to help provide a solution so that everyone can move forward. This is the situation where opening an Issue is appropiate.\n\n\n\nSimilarly, if our code contains a wrong argument, is returning a deprecation warning, etc. open an issue to let us know. While we may not be able to fix something that is not directly related to our code, we can redirect it to the package maintainers so that they can fix the issue.\nAnd likewise, if you find multiple typos in the documentation, you can open an issue and propose carrying out a pull-request to fix them.", - "crumbs": [ - "About", - "Getting Started", - "00 - Getting Help" - ] + "objectID": "course/02_FilePaths/slides.html#listing-files", + "href": "course/02_FilePaths/slides.html#listing-files", + "title": "02 - File Paths", + "section": "Listing Files", + "text": "Listing Files\n\n\n\n\n\n\n\n\n.\n\n\nAfter this detour into variables and indexing, let’s return our focus to how to use these in context of file paths. Working from within our Week2 project folder, let’s see what directories (folders) are present\n\n\n\n\n\n\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)" }, { - "objectID": "course/00_Homeworks/index.html#submitting-take-home-problems", - "href": "course/00_Homeworks/index.html#submitting-take-home-problems", - "title": "Getting Help", - "section": "Submitting Take-Home Problems", - "text": "Submitting Take-Home Problems\nEach week, during the course, we introduce and cover the main concepts for the particular concept. Our goal is to provide you with the necessary code and enough code to be able to get the jist. However, to become comfortable and be able to apply what you have learned, you will need to explore beyond our examples, try it with your own datasets, encounter things that don’t work, and troubleshoot your way through them. It’s this cycle of venturing into the unknown that develops strong coding skills that are needed to overcome any barrier you encounter. The goal of the take-home questions is to provide some less curated problems that will take a little longer to answer to help get you started on your own exploration of the topic.\nAs previously mentioned, these take-home problems are completely optional. If you are in the middle of solving them and want to seek feedback from then community and course instructors, open a Discussion under the general category is the way to go.\nHowever, if you have completed them, and want course instructor feedback, you can submit them to us in the form of a pull-request to the CytometryInR repo’s homework branch. We will take a look, offer constructive suggestions, and when ready merge the solution. This will also result in GitHub listing you as a contributor to the course.\nWe will outline the basic steps of how to set up and open a pull-request, to help simplify the process.\n\nSync your Fork\nFirst off, make sure to Sync your fork of the Cytometry in R project. That makes sure that all the commits present are up-to-date and simplifies the process of having the pull-request being merged.\n\n\n\n\n\n\n\n\n\n\n\nPull to Local\nHaving Synced your branch on GitHub, return to your computer, open the CytometryInR repository and pull in the changes locally.\n\n\n\n\nCreate own Folder under Homeworks\nUnder the course folder, you will find folders for each week. Within these folders find the homework folder. This will appear empty except for a README file with ionstructions. It is within this folder you will need to create your own folder.\nTo ensure there are no conflicts on the pull-request merge, please use your GitHub username as the folder name.\n\n\n\nOnce you have your folder inside homework, go ahead and copy anything you are turning in from their respective working project folders. Remember, the goal is minimal reproducible example is the goal. Rendered Quarto Documents are preferred, but we will also accept scripts and small data files and images. a README.MD file with anything you want me to know,\n\n\n\n\n\n\n\n\nSign off Commit\nNow that everything is present, Sign Off and Commit the change.\n\n\n\n\n\nPush Branch to GitHub.\nProceed to push the branch to GitHub.\n\n\n\n\n\nRe-sync if necessary\nIf additional changes have occured to the parent CytometryInR repository, go ahead and update your branch. As long as your edits occurred within your folder inside homework folders, they should still be able to merge.\n\n\n\n\n\n\n\n\nOpen a pull-request\nTo start a pull request, click to see how your commit is ahead by\n\n\n\nNext, switch from the parent CytometryInR main branch (used for the website and course) to the homework branch for that respective week (used for the take-home problems).\n\n\n\nOnce this is done, select Pull request\n\n\n\nMake sure to triple check it’s bound for the homeworks branch. If you see that it is not capable of merging, verify that your commit only contains files within your respective homework username folder. Fill in the required fields of the pull request.\n\n\n\nAnd when ready, create the pull request.\n\n\n\n\nWait for Feedback\nOn our end, once you have created a pull request, we will review your work, offer constructive suggestions, etc. If I ask for revisions, all you would need to do is update your files, commit again on your side of the local forked repository.\n\n\n\n\n\nFinal Review and Merge\nIf all is good, we will merge the pull request and your solution to the take-home problems will now be available on the homework branch.\n\n\n\n\n\nAfter course\nAfter the course completes, we will merge homework branch with the main branch, making the community solutions to the take-home problems additional coding examples that can be used by others following along after the course concludes.", - "crumbs": [ - "About", - "Getting Started", - "00 - Getting Help" - ] + "objectID": "course/02_FilePaths/slides.html#creating-directories", + "href": "course/02_FilePaths/slides.html#creating-directories", + "title": "02 - File Paths", + "section": "Creating directories", + "text": "Creating directories\n\n\n\n\n\n\n\n\n.\n\n\nAlternatively, we can also create a folder via R using the dir.create() function. Since we want it within data, we would modify the path accordingly\n\n\n\n\n\n\n\nNewFolderLocation <- file.path(\"data\", \"target2\")\n\ndir.create(path=NewFolderLocation)" }, { - "objectID": "course/00_Positron/index.html", - "href": "course/00_Positron/index.html", - "title": "Using Positron", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "objectID": "course/02_FilePaths/slides.html#file-paths", + "href": "course/02_FilePaths/slides.html#file-paths", + "title": "02 - File Paths", + "section": "File Paths", + "text": "File Paths\n\n\n\n\n\n\n\n\n.\n\n\nOne way we can do this is through a file.path argument. We could potentially provide this by adding either a “/” or a “\" into the path argument, depending on your computers operating system.\n\n\n\n\n\n\n\nlist.files(path=\"data/target\", full.names=FALSE, recursive=FALSE)" }, { - "objectID": "course/00_Positron/index.html#console", - "href": "course/00_Positron/index.html#console", - "title": "Using Positron", - "section": "Console", - "text": "Console\nAt the bottom of the sceen, you will first see the Console Tab. This is the tab where your lines of code when executed (run) will appear, as well as any messages, warnings or errors that get returned. On the right side of the console, you can find several buttons, among them restart R and delete session (for when you need a fresh start), and clear console (which keeps all previously run outputs and objects, but clears away the displayed text within the console).", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "objectID": "course/02_FilePaths/slides.html#selecting-for-patterns", + "href": "course/02_FilePaths/slides.html#selecting-for-patterns", + "title": "02 - File Paths", + "section": "Selecting for Patterns", + "text": "Selecting for Patterns\n\n\n\n\n\n\n\n\n.\n\n\nIf we currently listed the files within data, we get a return that looks like this:\n\n\n\n\n\n\n\nlist.files(\"data\", full.names=FALSE, recursive=FALSE)" }, { - "objectID": "course/00_Positron/index.html#terminal", - "href": "course/00_Positron/index.html#terminal", - "title": "Using Positron", - "section": "Terminal", - "text": "Terminal\nRight next to the Console tab is your Terminal tab. While the console tab is primarily used to run R code within Positron, the terminal is the interface where code containing system commands directed at at your computer is entered. We will use this less frequently, primarily in two context: 1) rendering Quarto documents, and 2) commiting changes to version control. Among the buttons on the right-side of the terminal to make note of are the + button to add a new terminal, and the trash/garbage can button to kill (stop) the terminal.\n\n\n\nThe other tabs (Problems, Output, Ports, Debug Console) are used less frequently. I usually will Problems and Debug when something goes wrong with the code, as various warning and error messages will end up being displayed there.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "objectID": "course/02_FilePaths/slides.html#conditionals", + "href": "course/02_FilePaths/slides.html#conditionals", + "title": "02 - File Paths", + "section": "Conditionals", + "text": "Conditionals\n\n\n\n\n\n\n\n\n.\n\n\nOne useful thing is that within R, we can set conditions on whether something is carried out. The most typical conditional you will encounter are the “If” statements. They typically take a form that resembles the following.\n\n\n\n\n\n\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}" }, { - "objectID": "course/00_Positron/index.html#help", - "href": "course/00_Positron/index.html#help", - "title": "Using Positron", - "section": "Help", - "text": "Help\nWhen trying to evaluate how a particular function is working in R, you can hover over it and positron will open up the documentation for that particular function if available, alternatively, you can enter ?theParticularFunctionsName in the console and hit enter to similarly view what is occuring.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "objectID": "course/02_FilePaths/slides.html#conditionals-in-practice", + "href": "course/02_FilePaths/slides.html#conditionals-in-practice", + "title": "02 - File Paths", + "section": "Conditionals in practice", + "text": "Conditionals in practice\n\n\n\n\n\n\n\n\n.\n\n\nFirst off, let’s write a conditional to check if there is a target3 folder within data.\n\n\n\n\n\n\n\nfiles_present <- list.files(\"data\", full.names=FALSE, recursive=FALSE)\nfiles_present" }, { - "objectID": "course/00_Positron/index.html#variables", - "href": "course/00_Positron/index.html#variables", - "title": "Using Positron", - "section": "Variables", - "text": "Variables\nOn the upper-portion of the Secondary Side Bar, we can find the Session window, containing the Variables tab. As you run (execute) lines of code, and different variables, objects and functions are created, these become visible under the variables tab on the upper right.\n\n\n\nFor some types of objects (generally data.frames and other matrix-like objects), you can click on their listing under variables to expand to see additional details about the object (column names, etc.) as well as view a larger version which will appear within the Editor window.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "objectID": "course/02_FilePaths/slides.html#copying-files", + "href": "course/02_FilePaths/slides.html#copying-files", + "title": "02 - File Paths", + "section": "Copying Files", + "text": "Copying Files\n\n\n\n\n\n\n\n\n.\n\n\nTo copy files to another folder location, we use the file.copy() function. It has two arguments that we will be working with, from being the .fcs files, and to being the folder location we wish to transfer them to. If we tried using them as we currently have them:\n\n\n\n\n\n\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)" }, { - "objectID": "course/00_Positron/index.html#plots", - "href": "course/00_Positron/index.html#plots", - "title": "Using Positron", - "section": "Plots", - "text": "Plots\nSimilarly, any generated Plots or Documents will appear within the Secondary Side Bar, either under Plots (bottom) or Viewer (top) tabs.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "objectID": "course/02_FilePaths/slides.html#removing-files.", + "href": "course/02_FilePaths/slides.html#removing-files.", + "title": "02 - File Paths", + "section": "Removing files.", + "text": "Removing files.\n\n\n\n\n\n\n\n\n.\n\n\nJust like we can add files via R, we can also remove them. However, when we remove them via this route, they are removed permanently, not sent to the recycle bin. We will revisit how later on in the course after you have gained additional experience with file.paths.\n\n\n\n\n\n\n\n?unlink()" }, { - "objectID": "course/00_Positron/index.html#view", - "href": "course/00_Positron/index.html#view", - "title": "Using Positron", - "section": "View", - "text": "View\nOn the upper bar multiple tabs can be found, which we will explore in due time. Most useful to point out is the View tab. If you accidentally close your console, session or plots window, and are trying to get them to reapper, you would need to reselect them from this tab.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "objectID": "course/02_FilePaths/slides.html#basename", + "href": "course/02_FilePaths/slides.html#basename", + "title": "02 - File Paths", + "section": "Basename", + "text": "Basename\n\n\n\n\n\n\n\n\n.\n\n\nIf we look at Infants with the full.names=TRUE, we see the additional pathing folder has been added, allowing us to successfully copy over the files.\n\n\n\n\n\n\n\nInfants" }, { - "objectID": "course/00_Positron/index.html#pages", - "href": "course/00_Positron/index.html#pages", - "title": "Using Positron", - "section": "Pages", - "text": "Pages\nThe pages tab and the left-side bar show you everything that is currently within your project folder, including all the folders, and files. Once version control with Git is initiated, new files are relected showing up as green text and a dot, while modified tracked files are reflected by light brown text and a dot.\n\n\n\nThe dropdown arrows can be used to open and close specific folders to allow for better organization. There is also a scrollbar on the right-side of the side-bar to scroll through the entire folders contents.", - "crumbs": [ - "About", - "Getting Started", - "00 - Positron" - ] + "objectID": "course/02_FilePaths/slides.html#recursive", + "href": "course/02_FilePaths/slides.html#recursive", + "title": "02 - File Paths", + "section": "Recursive", + "text": "Recursive\n\n\n\n\n\n\n\n\n.\n\n\nAnd finally that we have created additional nested folders and populated them with fcs files, let’s see what setting list.files() recursive argument to TRUE\n\n\n\n\n\n\n\nall_files_present <- list.files(full.names=TRUE, recursive=TRUE)\nall_files_present" }, { - "objectID": "course/00_Positron/index.html#search", - "href": "course/00_Positron/index.html#search", - "title": "Using Positron", - "section": "Search", - "text": "Search\nThe search tab on the left side bar is something that I use routinely.\n\n\n\nIt can help locate code that you had been working on, but have since forgotten where it is at. Here is an example of finding the files where I had used a function that needed modifying within a local project folder’s files.\n\n\n\nSimilarly, if you need to replace a particular character string with another, the replace with field below can help simplify the task without having to track down and change 20 lines across 5 files.", + "objectID": "course/02_FilePaths/slides.html#saving-changes-to-version-control", + "href": "course/02_FilePaths/slides.html#saving-changes-to-version-control", + "title": "02 - File Paths", + "section": "Saving changes to Version Control", + "text": "Saving changes to Version Control\n\n\n\n\n\n\n\n\n.\n\n\nAnd as is good practice, to maintain version control, let’s stage all the files and folders we created today within the Week2 Project Folder, write a commit message, and send these files back to GitHub until they are needed again next time." + }, + { + "objectID": "course/02_FilePaths/index.html", + "href": "course/02_FilePaths/index.html", + "title": "02 - File Paths", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nWelcome to the second week of Cytometry in R! This week we will learn about file.path, namely, how to communicate to our computer (and R) where various files are stored.", "crumbs": [ "About", - "Getting Started", - "00 - Positron" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_Positron/index.html#extensions", - "href": "course/00_Positron/index.html#extensions", - "title": "Using Positron", - "section": "Extensions", - "text": "Extensions\nOn the far-left side we can find the Activity bar, which contains several tabs. Which tab you have selected will then dictate the contents of your left side-bar.\nOccupying the left side bar are several tabs. One of these is Extensions, which shows “Plugins” (or the VScode equivalent) that extend the functionality of Positron further. The ones you have installed may vary, but the main ones in context of this course are Air (provides color and highlights syntax for R code to make interpretation easier) as well as Quarto (for rendering the various document types).", + "objectID": "course/02_FilePaths/index.html#set-up", + "href": "course/02_FilePaths/index.html#set-up", + "title": "02 - File Paths", + "section": "Set Up", + "text": "Set Up\nBefore we begin, let’s make sure you get the data needed for today transferred to your local computer, and then get the .fcs files copied over from there to your own working project folder. This is the process you will repeat each week throughout the course.\n\nNew Repository\nFirst off, login to your GitHub account. Once there, you will select the options to create a new repository (similar to what you did during Using GitHub)\n\n\n\nFor this week, let’s set this new repository up as a private repository, and call it Week2. This will keep things consistent with the file.paths we will be showing in the examples.\n\n\n\nOnce the new repository has been created, copy the URL.\n\n\n\nNext, open up Positron, set the interpreter to use R, and then select the option to bring in a “New Folder from Git”.\n\n\n\nPaste in your new repository’s url. Additionally, if you want to match file.paths shown in the examples, set your storage location to your local Documents folder (please note the start of the file.path will look differently depending on whether you are on Windows, MacOS, or Linux).\n\n\n\nYour new repository will then be imported from GitHub. Once this is done, create two subfolders (data and images) and a new .qmd file (naming it filepaths.qmd).\n\n\n\n\n\nSync\nWith this done, return to GitHub and open your forked version of the CytometryInR course folder. If you haven’t yet done so, click on sync to bring in this week’s code and datasets.\n\n\n\nReturning to Positron, you will need to switch Project Folders, switching from Week2 over to CytometryInR.\n\n\n\n\n\nPull\nOnce CytometryInR project folder has opened, you will need to pull in the new data from GitHub to your local computer.\n\n\n\n\n\nCopy Files to Week2\nOnce this is done, you will see within the course folder, containing this weeks folder (02_FilePaths). Within it there is a data folder with .fcs files. To avoid causing conflicts when bringing in next week’s materials, you will want to manually copy over these .fcs files (via your File Explorer) to the data folder within your “Week2” Project Folder.\n\n\n\n\n\nCommit and Push\nWhen you reopen your Week2 project folder in Positron, you should now be able to see the .fcs files within the data folder. Next, from the action bar on the far left, select the Source Control tab. Stage all the changes (as was done in Using Git), and write a short commit message.\n\n\n\nWith these files now being tracked by version control, push (ie. send) your changes to GitHub so that they are remotely backed up.\n\n\n\nAnd with this setup complete, you are now ready to proceed. Remember, run code and write notes in your working project folder (Week2 or otherwise named) to avoid conflicts next week in the CytometryInR folder when you are trying to bring in the Week #3 code and datasets.", "crumbs": [ "About", - "Getting Started", - "00 - Positron" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_Positron/index.html#git", - "href": "course/00_Positron/index.html#git", - "title": "Using Positron", - "section": "Git", - "text": "Git\nThe Git tab on the left side bar is where once version control is initiated for the project folder, we can see changes that have occurred to the individual files since the last commit. These changes can be added to a new commit by clicking on the + sign. This will be covered more extensively in the next section\n\n\n\nSimilarly, if you want to discard a change that has occured, the circular arrow will revert to the last commited version. Selecting and pressing the delete button will similarly work.\n\n\n\nSelecting the … options will highlight all the various git functions, some of which we will cover more extensively in the next section and throughout the course.", + "objectID": "course/02_FilePaths/index.html#working-directory", + "href": "course/02_FilePaths/index.html#working-directory", + "title": "02 - File Paths", + "section": "Working Directory", + "text": "Working Directory\nNow that we are back in our Week2 folder, let’s start by seeing our current location similarly to how our computer perceives it.\nWe will use getwd() function (ie. get working directory) to return the location of the folder we are currently inside of. For example, when getwd() is run within my Week2 project folder, I see the following location\n\ngetwd()\n\n\nThis returns a file path. The final location (Week2 in this case) is the Working Directory. Your computer when working in R will be descern other locations in relation to this directory.", "crumbs": [ "About", - "Getting Started", - "00 - Positron" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_Quarto/index.html", - "href": "course/00_Quarto/index.html", - "title": "Introduction to Quarto", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", + "objectID": "course/02_FilePaths/index.html#directories", + "href": "course/02_FilePaths/index.html#directories", + "title": "02 - File Paths", + "section": "Directories", + "text": "Directories\nWithin this working directory, we have a variety of project folders and files related to the course. We can see the folders that are present using the list.dirs() function.\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)\n\n\nWithin this list.dirs() function, we are specifying two arguments with which we will be working with later today, full.names and recursive. For now, lets set their arguments to FALSE, which means they conditions they implement are inactive (turned off).\n\n\nThe path argument is currently set to “.”, which is a stand-in for the present directory. In R, if an argument is not specified directly, it is inferred based on an order of expected arguments. Thus, if not present, we could still get the same output as seen before.\n\nlist.dirs(full.names=FALSE, recursive=FALSE)\n\n\n\n\nWithin Positron, in addition to visible folders, we also have hidden folders (denoted by the “.” in front of the folder name when using list.dirs()). In the case of one of our course website folders, we can see a “.quarto” folder shown in a lighter gray . The “.git” folder we saw from list.dirs() is typically hidden when viewing from Positron.\n\nIn the case of Week2, the two not-hidden folders we created are listed. We will see how to navigate these in a second.", "crumbs": [ "About", - "Getting Started", - "00 - Quarto" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_Quarto/index.html#renderpreview", - "href": "course/00_Quarto/index.html#renderpreview", - "title": "Introduction to Quarto", - "section": "Render/Preview", - "text": "Render/Preview\nThe preview button, at the upper-left end of the Editor, is used to render/knit a quarto document. This triggers the process by which code-chunks are run, and then the outputs are cobbled together into the file format type designated by the YAML header.\n\n\n\n\nHTML\nIn this case, the YAML header’s format argument is set to html. After clicking preview, we can see the various rendering steps appear in the console below. Since no errors occured, the html document was formed succesfully and appears as a file in the left side-bar. Additional, a preview of the document appears in the View tab of the right side-bar, allowing for quick visual inspection.\n\n\n\nAlternatively, we can render a document via the terminal, by entering “quarto render”, followed by the name of the document.\n\n\n\nThis results similar process as what we saw with the preview button\n\n\n\nWe can also open the .html document via our File Explorer, which will open it within our web browser.\n\n\n\nQuarto documents can be rendered (previewed) in other formats besides html. These include pdf, Word documents (docx), and slides (revealjs). This is set by the format argument within the YAML header.\n\n\nPDF\nBy switching the format argument from html to pdf, we can render the document as a pdf\n\n\n\nWe can see the pdf is now listed in the list of files, with a preview shown on the right side-bar.\n\n\n\n\n\nDocx\nWe can also generate Word documents (.docx) as well.\n\n\n\nIn this case, we can see that a Word document file was created, but nothing appears in the View tab. This is because the format is not yet supported for the View tab. We can however open and view the Word document via our File explorer.\n\n\n\nWhich shows a Word Document style output.", + "objectID": "course/02_FilePaths/index.html#variables", + "href": "course/02_FilePaths/index.html#variables", + "title": "02 - File Paths", + "section": "Variables", + "text": "Variables\nBefore exploring file paths, we need to have some basic R code knowledge that we can use to work with them. Within R, we have the ability to assign particular values (be they character strings, numbers or logicals) to objects (ie. variables) that can be used when called upon later.\nFor example:\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\nIn this case, the variable name is what the assignment arrow (“<-”) is pointing at. In this case, WhatDayDidIWriteThis\n\n\nWhen we run this, we create a variable, that will appear within the right-sidebar.\n\nWhatDayDidIWriteThis <- \"Saturday\"\n\n\n\n\nThese variables can subsequently be retrieved by printing (ie. running) the name of the variable\n\nWhatDayDidIWriteThis \n\n[1] \"Saturday\"\n\n\n\n\nYou can create variables with almost any name you can think of\n\nTopSecretMeetingDay <- \"Saturday\"\n\n\n\nWith a few exceptions. R doesn’t play well with spaces:\n\nTop Secret Meeting Day <- \"Saturday\"\n\nError in parse(text = input): <text>:1:5: unexpected symbol\n1: Top Secret\n ^\n\n\n\n\nBut does play well with underscores:\n\nTop_Secret_Meeting_Day <- \"Saturday\"\n\n\n\nThe above (with individual words separated by _) is collectively known as snake case. The alternate way to help delineate variable names is “camelCase”, with first letter of each word being capitalized (seen in the previous example).\n\n\n\n\nTopSecretMeetingDay\n\n[1] \"Saturday\"\n\n\n\n\nYou can overwrite a Variable name by assigning a different value to it:\n\nTopSecretMeetingDay <- \"Monday\"\n\n\nTopSecretMeetingDay\n\n[1] \"Monday\"\n\n\n\n\nYou can also remove individual variables via the rm function\n\nrm(Top_Secret_Meeting_Day)\n\n\n\nOr if trying to remove all, via the right sidebar\n\n\n\nIn the prior case, we are creating a variable that is a “string” of character values, due to our use of “” around the word. We can see this when we use the str() function.\n\nFluorophores <- \"FITC\"\nstr(Fluorophores)\n\n chr \"FITC\"\n\n\nThe “chr” in front denotating that Fluorophores contains a character string.\n\n\nThis could also be retrieved using the class() function.\n\nclass(Fluorophores)\n\n[1] \"character\"\n\n\n\n\nAlternatively, we could assign a numeric value to a variable\n\nFluorophores <- 29\nstr(Fluorophores)\n\n num 29\n\n\nWhich returns “num”, ie. numeric.\n\n\nWe can also specify a logical (ie. True or FALSE) to a particular object\n\nIsPerCPCy5AGoodFluorophore <- FALSE\nstr(IsPerCPCy5AGoodFluorophore)\n\n logi FALSE\n\n\nWhich returns logi in front, denoting this variable contains a logical value.\n\n\nLast week, when we were installing dplyr, the reason that installation failed was install.packages() expects a character string. However, when we left off the ““, it looked within our local environments created variables for the dplyr variable, couldn’t find it, and thus failed.\nWe could of course, have assigned a character value to a variable name, and then used that variable name, which would have worked.\n\nPackageToInstall <- \"dplyr\"\n\ninstall.packages(PackageToInstall)", "crumbs": [ "About", - "Getting Started", - "00 - Quarto" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_Quarto/index.html#yaml", - "href": "course/00_Quarto/index.html#yaml", - "title": "Introduction to Quarto", - "section": "YAML", - "text": "YAML\nWe can additionally provide additional custom inputs to the YAML header. A couple examples include providing the document author and date.\n\n\n\nWhich we can see are updated after we preview/render.", + "objectID": "course/02_FilePaths/index.html#indexing", + "href": "course/02_FilePaths/index.html#indexing", + "title": "02 - File Paths", + "section": "Indexing", + "text": "Indexing\nNot all variables contain single objects.\nFor example, we can modify Fluorophores and add additional entries:\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nstr(Fluorophores)\n\n chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n\n\nThe c stands for concatenate. It concatenates the objects into a larger object, known as a vector.\nIn this case, you notice in addition to the specification the values are characters, we get a [1:4], denoting four objects are present.\n\n\nWe can similarly retrieve this information using the length() function\n\nlength(Fluorophores)\n\n[1] 4\n\n\n\n\nWhen multiple objects are present, we can specify them individidually by providing their index number within square brackets [].\n\nFluorophores[1]\n\n[1] \"BV421\"\n\n\n\n\n\nFluorophores[3]\n\n[1] \"PE\"\n\n\n\n\nOr specify in sequence using a colon (:)\n\nFluorophores[3:4]\n\n[1] \"PE\" \"APC\"\n\n\n\n\nOr if not adjacent, reusing c within the square brackets\n\nFluorophores[c(1,4)]\n\n[1] \"BV421\" \"APC\" \n\n\n\n\nWe will revisit these concepts throughout the course, with what we have covered today, this will help us create file.paths and select fcs files that we want to work with via index number.", "crumbs": [ "About", - "Getting Started", - "00 - Quarto" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_Quarto/index.html#table-of-contents", - "href": "course/00_Quarto/index.html#table-of-contents", - "title": "Introduction to Quarto", - "section": "Table of Contents", - "text": "Table of Contents\nIn the previous section, we saw that we could provide headings and subheadings to our .qmd file by placing a # at the start of a line in the text portion of the document. A subheading was designated by a ##, with additional hierarchy being designated by appending an additional #.\n\n\n\nWe can use the heading information to generate a table of contents for our document. To do this, we add a toc argument to the yaml header, and set it to TRUE. After rendering, it appears on the upper-right side of the document.\n\n\n\nNotice, that the subheaders do not appear currently within the TOC.\n\n\n\nWe can fix this by setting a toc-expand argument in the YAML to true.", + "objectID": "course/02_FilePaths/index.html#listing-files", + "href": "course/02_FilePaths/index.html#listing-files", + "title": "02 - File Paths", + "section": "Listing Files", + "text": "Listing Files\nAfter this detour into variables and indexing, let’s return our focus to how to use these in context of file paths. Working from within our Week2 project folder, let’s see what directories (folders) are present\n\nlist.dirs(path=\".\", full.names=FALSE, recursive=FALSE)\n\n\n\n\nWe can also list any files that are present within our working directory using the list.files() function.\n\nlist.files()\n\n\nIn this case, in addition to our filepaths.qmd file, we can see the LICENSE and README files created when we set up the repository.\n\n\nWe can also specify a particular folder we want to show items present within by changing the path argument. For example, if we wanted to see the contents of the “data” folder\n\nlist.files(path=\"data\", full.names=FALSE, recursive=FALSE)\n\n\nWhich in this case returns the fcs files we copied over at the start of this lesson.\n\n\nIn this case, there are no folders under “data”. Let’s go ahead and create a new one, calling it target.", "crumbs": [ "About", - "Getting Started", - "00 - Quarto" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_Quarto/index.html#code-chunk-arguments", - "href": "course/00_Quarto/index.html#code-chunk-arguments", - "title": "Introduction to Quarto", - "section": "Code Chunk Arguments", - "text": "Code Chunk Arguments\nAs we briefly touched on in the last section, code-chunks can be modified by including arguments, which affect whether a particular code chunk gets evaluated. In that example, we included a “#| eval: FALSE” to the install commands since we did not want them to be re-run subsequently. We will take a closer look at the other arguments in this section.\n\nEval\nThe code-chunk argument, “Eval”, is used to determine when a code-chunk get’s evaluated. When set to true (or by default if no eval argument is included), the code-chunks contents will be run/executed, and the output will appear. We can see this in the html output, as below the code block, we get back the address of my working directory.\n\n\n\nWhen we switch the Eval argument to FALSE, and then render the document, we can see that the code block remains, but we do not get any output for the code contained within.\nIn every-day practice, we will “use eval: FALSE” arguments when we want to keep the code for later use, but want to manually run the code contained within ourselves.\n\n\n\n\n\nEcho\nThe code-block argument “echo” dictates whether the code within the code-block is displayed within the document. So in the case when “echo: true”, we get both the code displayed, as well as the output that gets returned by the code.\n\n\n\nBy contrast, when “echo: FALSE”, we do not have the code displayed, but do get the output of that code being run.\nIn daily-practice, “echo: FALSE” gets often used when generating plots that we want to include in the report, without the code that generated them being displayed.\n\n\n\n\n\nInclude\nThe next code-chunk argument is include. Unlike echo, which focuses on whether the code is displayed, but still returns the output, include dictates behavior of both the code-block and it’s output. Unlike eval however, it will still run the code, which allows it to be available for the next code-chunk that might need it. When we set “include: false”, no trace of that code-chunk is present in the document. This is useful when making reports where we do not want to include the code used to generate a particular figure.\n\n\n\nBy contrast, when we set “include: true”, the code block and it’s output is once again included within the rendered document.\n\n\n\n\n\nCode-Fold\nOne of my favorites is “code-fold”. When we set it as “code-fold: show”, it displays the code, but provides a drop-down arrow that can be closed to compress the code.\n\n\n\nIn contrast, if we want to make the code-available for those that are interested, but not directly visible, we can set as “code-fold: true”\n\n\n\n\n\nWarnings\nWithin R, when code is executed, in addition to returning the output, R is capable of returning warnings (when something is not as expected, but not sufficient to elicit an error with a complete stop) or a message (text output that gets displayed, often telling about progress). While these are useful when running code yourself, it can be annoying when generating a report and the 2nd page is a bunch of warning text being displayed.\nFor example, when the R package ggcyto is loaded via the library call, it will automatically load several other packages, which typically results in these messages being outputted:\n\n\n\nWe can therefore set that code-chunk’s warning/message arguments to FALSE, therefore silencing the message outputs that would otherwise clutter up our report.", + "objectID": "course/02_FilePaths/index.html#creating-directories", + "href": "course/02_FilePaths/index.html#creating-directories", + "title": "02 - File Paths", + "section": "Creating directories", + "text": "Creating directories\nAlternatively, we can also create a folder via R using the dir.create() function. Since we want it within data, we would modify the path accordingly\n\nNewFolderLocation <- file.path(\"data\", \"target2\")\n\ndir.create(path=NewFolderLocation)\n\n\n\n\nBefore continuing, let’s copy the first two .fcs files into both target and target2.\n\n\n\nGiven our working directory is set the top-level of the Week2 project folder, we can’t just check inside nested target folders directly. If we attempt to:\n\nlist.files(path=\"target\", full.names=FALSE, recursive=FALSE)\n\ncharacter(0)\n\n\n\n\nNo files are returned (ie, character(0)), since from our computers perspective, “target” doesn’t exist within the active working directory.\n\nfile.exists(\"target\")\n\n[1] FALSE\n\n\n\n\nOn the other hand, within it’s view, it knows that the data folder exist\n\nfile.exists(\"data\")\n\n\nSo here we encounter the first challenge when communicating to our computer where to search for and find files. We need to provide a file.path that incorporates the path of folders between where the computer is currently at (ie. the working directory) and the target file itself.", "crumbs": [ "About", - "Getting Started", - "00 - Quarto" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_Quarto/index.html#text-styles", - "href": "course/00_Quarto/index.html#text-styles", - "title": "Introduction to Quarto", - "section": "Text Styles", - "text": "Text Styles\nQuarto primarily uses Markdown for text styling. Consequently, markdown arguments can be used within the text to change how various text appears.\n\n\n\nFor a regular text, This single asterisk on each side of a word will italicize.\n\n\n\nWhen the number of asterisk is doubled, This word is bolded.\n\n\n\nWhen three asterisk are used, both are applied.\n\n\n\nFor an underscore, the word of interest is surrounded by square brackets “[]”, with “{.underline}” adjacent.", + "objectID": "course/02_FilePaths/index.html#file-paths", + "href": "course/02_FilePaths/index.html#file-paths", + "title": "02 - File Paths", + "section": "File Paths", + "text": "File Paths\nOne way we can do this is through a file.path argument. We could potentially provide this by adding either a / or a  into the path argument, depending on your computers operating system.\n\nlist.files(path=\"data/target\", full.names=FALSE, recursive=FALSE)\n\n\n\nWhile this works in your particular context, if you are sharing the code with others who have a different operating system, these hard-coded “/” or “\" will cause the code for them to error out at these particular steps.\n\nFor that reason, it is better to assemble a file.path using the file.path() function. This function takes into account the operating system, removing your need to have to worry about this particular computing nuance, and write code that is reproducible and replicable for everyone.\n\nFolderLocation <- file.path(\"data\", \"target\")\nFolderLocation\n\n[1] \"data/target\"\n\n\n\nlist.files(path=FolderLocation, full.names=FALSE, recursive=FALSE)\n\n\n\n\nWe can also append additional locations to existing file paths, by including the variable name within the file.path() we are creating.\n\nFolderLocation <- \"data\"\nScreenshotFolder <- file.path(FolderLocation, \"target\")\nScreenshotFolder\n\n[1] \"data/target\"\n\n\n\nlist.files(path=ScreenshotFolder, full.names=FALSE, recursive=FALSE)\n\n\n\n\nAdditionally, list.files() has the ability to filter for files that contain a particular character string. This can be useful is we are searching for “.fcs” or “.csv” files, but also for files that contain a particular word. In the case of the ScreenshotFolders\n\nlist.files(path=ScreenshotFolder, pattern=\"ND050\", full.names=FALSE, recursive=FALSE)\n\n\nYou will notice, the index numbers are in the context of what is filtered, not all the folder contents.", "crumbs": [ "About", - "Getting Started", - "00 - Quarto" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_Quarto/index.html#hyperlinks", - "href": "course/00_Quarto/index.html#hyperlinks", - "title": "Introduction to Quarto", - "section": "Hyperlinks", - "text": "Hyperlinks\nYou can link to a website by surrounding word of interest in [] and placing the url within () adjacent to it.", + "objectID": "course/02_FilePaths/index.html#selecting-for-patterns", + "href": "course/02_FilePaths/index.html#selecting-for-patterns", + "title": "02 - File Paths", + "section": "Selecting for Patterns", + "text": "Selecting for Patterns\nIf we currently listed the files within data, we get a return that looks like this:\n\nlist.files(\"data\", full.names=FALSE, recursive=FALSE)\n\n\n\n\nAs you can see, we are getting back both folders and individual .fcs files. We could consequently change the pattern to provide a character string that will only return the .fcs files. We will go ahead and assign this list to a variable named files, for later retrieval.\n\nfiles <- list.files(\"data\", pattern=\".fcs\", full.names=FALSE, recursive=FALSE)\nfiles\n\n\n\n\nOne of the R packages we will be using througout the course is the stringr package. It contains two functions that can be useful when identifying more complicated character strings. In this case, if we run the str_detect() function to identify which of the .fcs files within the files variable contains the “INF” character string, we get a vector of logical (ie. True or FALSE) outputs corresponding to each file.\n\n# install.packages(\"stringr\") # CRAN\nlibrary(stringr)\n\n\nstr_detect(files, \"INF\")\n\n\n\n\nSimilar to how we indexed the Fluorophore list (ex. Fluorophore[1:2]) which returned a subset, we can similarly use this logical vector to subset files that returned as TRUE for containing the pattern “INF”\n\nfiles[str_detect(files, \"INF\")]\n\n\n\n\nLet’s go ahead and save these subsetted file names to a new variable, called Infants.\n\nInfants <- files[str_detect(files, \"INF\")]", "crumbs": [ "About", - "Getting Started", - "00 - Quarto" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_Quarto/index.html#images", - "href": "course/00_Quarto/index.html#images", - "title": "Introduction to Quarto", - "section": "Images", - "text": "Images\nYou can place images by adding the following, as long as the file.path to the image is correctly formatted. In my case, this is why I include images folders within my folders to simplify the copy and paste.", + "objectID": "course/02_FilePaths/index.html#conditionals", + "href": "course/02_FilePaths/index.html#conditionals", + "title": "02 - File Paths", + "section": "Conditionals", + "text": "Conditionals\nOne useful thing is that within R, we can set conditions on whether something is carried out. The most typical conditional you will encounter are the “If” statements. They typically take a form that resembles the following.\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n\n\nIn this case of the above, if the variable within the () is equal to true, the code within the {} will be executed.\n\nNeedCoffee <- TRUE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n[1] \"Take a break\"\n\n\n\n\nBy contrast, when the variable within the () is equal to false, the code within the {} will not be executed.\n\nNeedCoffee <- FALSE\n\nif (NeedCoffee){\n print(\"Take a break\")\n}\n\n\n\nThese “If” statements will trigger as long as the specified condition within the () is TRUE. For a different example:\n\nRowNumber <- 299\n2 + RowNumber > 300\n\n[1] TRUE\n\n\n\nif (2 + RowNumber > 3){\n print(\"Stop Iterating\")\n}\n\n[1] \"Stop Iterating\"\n\n\n\n\nWhen you add an ! in front a conditional, it flips the expected outcome.\n\nItsRaining <- TRUE\n\nif (ItsRaining){print(\"Bring an Umbrella\")}\n\n[1] \"Bring an Umbrella\"\n\n\n\n!ItsRaining\n\n[1] FALSE\n\n\n\nif (!ItsRaining){print(\"Bring an Umbrella\")}\n\n\nItsRaining <- TRUE\n\nif (!ItsRaining){print(\"Bring Sunglasses\")}\n\n\n\nWe will explore more complicated conditionals throughout the course, but for now, let’s implement a couple simple ones in the context of copying over the .fcs files in Infants over to a new target3 folder.", "crumbs": [ "About", - "Getting Started", - "00 - Quarto" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_WorkstationSetup/MacOS.html", - "href": "course/00_WorkstationSetup/MacOS.html", - "title": "Installing Software on MacOS", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nThis is the software installation walkthrough for those whose computers are running MacOS. Based on our pre-course interest form, you make up a solid proportion of the course participants." - }, - { - "objectID": "course/00_WorkstationSetup/MacOS.html#installing-r", - "href": "course/00_WorkstationSetup/MacOS.html#installing-r", - "title": "Installing Software on MacOS", - "section": "Installing R", - "text": "Installing R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nYou will then select your Operating System, in this case, macOS\n\n\n\nNext, you will need to select the appropiate download based on your computers architecture. On newer Macs (containing M1+ chips) this would the arm64 option on the center left of the screen. For the older Intel (pre-2020) Macs, you would select the x86_64 option. If you are unsure, check your About This Mac tab\n\n\n\nAfter the download has completed, launch the installer\n\n\n\nProceed through the Read Me\n\n\n\nYou will then be prompted to acccept the software license (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\n\n\n\nNext, you will need to navigate through several pages, keeping the defaults.\n\n\n\nAnd with any luck, you should see that the installation was successful." - }, - { - "objectID": "course/00_WorkstationSetup/MacOS.html#xcode-command-line-tools", - "href": "course/00_WorkstationSetup/MacOS.html#xcode-command-line-tools", - "title": "Installing Software on MacOS", - "section": "Xcode Command Line Tools", - "text": "Xcode Command Line Tools\nDepending on your version of macOS, you may or may not already have Git installed on your computer. The reason is that it comes bundled within the Xcode Command Line Tools.\nIf this is not your first foray into coding, you may have previously seen an installation pop-up along the lines of “XYZ requires command line developer tools. Would you like to install the tools now?” when installing an IDE (like Positron, Rstudio or Visual Studio Code).\n\n\n\nSince these command line developer tools contain both Git, and also the equivalent of Rtools for Windows, we will need to install them for this course. To get started, first open your terminal.\n\n\n\nNext run the following code:\n\nxcode-select --install\n\n\n\n\nYou will then have the pop-up asking whether you want to install the command line tools (which contain Git). Select Install.\n\n\n\nYou will then be asked to accept the license\n\n\n\nYour installation will then proceed\n\n\n\nAnd if all goes well, the software will finish installing.\n\n\n\nAfter you complete Positron installation (next section), if you check the version control tab on the action bar on the far left side of the screen, you should see the following if Git was installed correctly.\n\n\n\nAlternatively, if you see this, you will need to reattempt the installation." - }, - { - "objectID": "course/00_WorkstationSetup/MacOS.html#install-positron", - "href": "course/00_WorkstationSetup/MacOS.html#install-positron", - "title": "Installing Software on MacOS", - "section": "Install Positron", - "text": "Install Positron\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\nWith the license accepted, you will be able to select your operating system and the relevant installer depending on whether you are on an M1+ (ARM) or older Intel (x86) Mac.\n\n\nOnce the Download completes, proceed to install the package as you normally would for any other program." - }, - { - "objectID": "course/00_WorkstationSetup/index.html", - "href": "course/00_WorkstationSetup/index.html", - "title": "Workstation Setup", - "section": "", - "text": "In the previous section, we first set up your GitHub account. Then we modified your GitHub profile and added a README section. Finally, we forked the CytometryInR repository so that you can easily retrieve the new course materials each week.\nIt is now time to install the required software on your computer, which will get your work-station set up with everything needed for this course. Depending on your computers operating system, the installation requirements may differ a bit. In general, you will need to install the following software:\nR website : The programming language we will be using throughout the course.\nPositron : The integrated development environment (IDE) in which we will open, modify and run our code.\nGit : The version control software that will allow us to track changes to our files.\nAdditionally, Windows users will need to install:\nRTools : Used to build R packages from source code.\nYou can find the operating system specific installation walkthroughs below. Once you have completed your specific walkthrough, return to this page and proceed to the next section.\nPlease note: For those using university or company administered computers, please be aware that you may not have the necessary permissions to install these directly, and may need to reach out to your IT department to help get the software installed and running correctly.\nIf you are using your own computer, congratulations, you are your system administrator, and should already have the necessary permissions.", + "objectID": "course/02_FilePaths/index.html#conditionals-in-practice", + "href": "course/02_FilePaths/index.html#conditionals-in-practice", + "title": "02 - File Paths", + "section": "Conditionals in practice", + "text": "Conditionals in practice\nFirst off, let’s write a conditional to check if there is a target3 folder within data.\n\nfiles_present <- list.files(\"data\", full.names=FALSE, recursive=FALSE)\nfiles_present\n\n\n\n\n\nFolderTarget3 <- file.path(\"data\", \"target3\")\ndir.exists(FolderTarget3)\n\n\n\n\nWe can write a conditional to create a folder if one does not yet exist.\n\nif (!dir.exists(FolderTarget3)){\n dir.create(FolderTarget3)\n}", "crumbs": [ "About", - "Getting Started", - "00 - Workstation Setup" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_WorkstationSetup/index.html#windows", - "href": "course/00_WorkstationSetup/index.html#windows", - "title": "Workstation Setup", - "section": "Windows", - "text": "Windows\n\nInstallation walkthrough for Windows", + "objectID": "course/02_FilePaths/index.html#copying-files", + "href": "course/02_FilePaths/index.html#copying-files", + "title": "02 - File Paths", + "section": "Copying Files", + "text": "Copying Files\nTo copy files to another folder location, we use the file.copy() function. It has two arguments that we will be working with, from being the .fcs files, and to being the folder location we wish to transfer them to. If we tried using them as we currently have them:\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)\n\n\n\n\nThe reason for this error is we are only working with a partial file path, as viewed from our Working directory. In this case, what is needed is the full file.path, so the file.path should also include the upstream folders from your current working directory.\n\ngetwd()\n\n\n\n\nIn this case, we can update the .fcs files location by switching the full.names argument within list.files() from FALSE, to TRUE.\n\nfiles_present <- list.files(\"data\", full.names=TRUE, recursive=FALSE)\nfiles_present\n\n\nAnd filter for those containing “INF” again\n\nInfants <- files_present[str_detect(files_present, \"INF\")]\n\nAnd then try again:\n\n# Variable Infants containing 4 .fcs file names\n\nfile.copy(from=Infants, to=FolderTarget3)", "crumbs": [ "About", - "Getting Started", - "00 - Workstation Setup" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_WorkstationSetup/index.html#macos", - "href": "course/00_WorkstationSetup/index.html#macos", - "title": "Workstation Setup", - "section": "MacOS", - "text": "MacOS\n\nInstallation walkthrough for MacOS", + "objectID": "course/02_FilePaths/index.html#removing-files.", + "href": "course/02_FilePaths/index.html#removing-files.", + "title": "02 - File Paths", + "section": "Removing files.", + "text": "Removing files.\nJust like we can add files via R, we can also remove them. However, when we remove them via this route, they are removed permanently, not sent to the recycle bin. We will revisit how later on in the course after you have gained additional experience with file.paths.\n\n?unlink()", "crumbs": [ "About", - "Getting Started", - "00 - Workstation Setup" + "Intro to R", + "02 - File Paths" ] }, { - "objectID": "course/00_WorkstationSetup/index.html#linux-debian", - "href": "course/00_WorkstationSetup/index.html#linux-debian", - "title": "Workstation Setup", - "section": "Linux (Debian)", - "text": "Linux (Debian)\n\nInstallation walkthrough for Linux", + "objectID": "course/02_FilePaths/index.html#basename", + "href": "course/02_FilePaths/index.html#basename", + "title": "02 - File Paths", + "section": "Basename", + "text": "Basename\nIf we look at Infants with the full.names=TRUE, we see the additional pathing folder has been added, allowing us to successfully copy over the files.\n\nInfants\n\n\n\n\nIf we were trying to retrieve just the local file names from the full.names, we could do so with basename() function. We will use this in combination with additional arguments later in the course\n\nbasename(Infants)", "crumbs": [ "About", - "Getting Started", - "00 - Workstation Setup" + "Intro to R", + "02 - File Paths" ] - }, - { - "objectID": "course/00_WorkstationSetup/Windows.html", - "href": "course/00_WorkstationSetup/Windows.html", - "title": "Installing Software on Windows", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shots slides, click here\nThis is the software installation walkthrough for those whose computers are running Windows. Based on our pre-course interest form, you make up the majority of course participants." - }, - { - "objectID": "course/00_WorkstationSetup/Windows.html#installing-r", - "href": "course/00_WorkstationSetup/Windows.html#installing-r", - "title": "Installing Software on Windows", - "section": "Installing R", - "text": "Installing R\nTo get started, first navigate to the R website. Once there, click on Download R option towards the top of the page.\n\n\n\nOn the next screen, you will need to select a mirror from which to download the software from. You can either select the closest geographic location (which may be faster) or alternatively just select the Cloud option which should redirect you.\n\n\n\nYou will then select your Operating System, in this case, Windows.\n\n\n\nAnd go ahead and select the Install R for the first time link.\n\n\n\nNext, you will select the download the current version option at the top of the page.\n\n\n\nThe popup window will then ask where you want to save the installer (.exe) file. We generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nAfter the download is complete, double click on the installer’s .exe file. This will open a popup asking you to select your preferred language.\n\n\n\nYou will then be prompted to acccept the software license (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\nOn Windows, R will normally save it’s software folder under Program Files.\n\n\n\nNext, please accept the defaults.\n\n\n\n\n\n\n\n\n\n\n\n\nWith the defaults accepted, the installation will commence. Feel free to go have a coffee/tea/beverage-of-your choice break while you wait.\n\n\n\nAnd if all goes well, the installation will complete without any issues." - }, - { - "objectID": "course/00_WorkstationSetup/Windows.html#installing-rtools", - "href": "course/00_WorkstationSetup/Windows.html#installing-rtools", - "title": "Installing Software on Windows", - "section": "Installing RTools", - "text": "Installing RTools\nWe will now work on installing Rtools. This software is needed when building R packages from source, which we will need throughout the course for R packages hosted on GitHub.\nTo get started, we will return to the R installation page we visited previously and instead click on the Rtools option.\n\n\n\nNext, select the most recent version of Rtools to Download.\n\n\n\nYou will then select for your architecture. For the vast majority of Windows users, your computer will likely be be using a x86 chip architecture, so you would select the Rtools45 installer option.\nIf your computer however uses the ARM chip architecture, you would select the 64-bit ARM Rtools45 installer instead. If you are unsure, see the following.\n\n\n\nNext, you will select the location to save the Rtools installer to. We generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nOnce downloaded, double click on the .exe to launch the Rtools installer.\n\n\n\nSimilar to what we did when installing R, go ahead and keep the defaults.\n\n\n\nAnd click install to proceed with the installation.\n\n\n\nAnd wait while the installation wraps up.\n\n\n\nIf all goes well, you should see the following installation success page." - }, - { - "objectID": "course/00_WorkstationSetup/Windows.html#installing-git", - "href": "course/00_WorkstationSetup/Windows.html#installing-git", - "title": "Installing Software on Windows", - "section": "Installing Git", - "text": "Installing Git\nGit is a version control software widely used among software developers and bioinformaticians. We will use it extensively throughout the course, both locally on our computers (to keep track of changes to our files), as well as in combination with GitHub(to maintain online backups of our files).\nWe will first navigate to the website and select the download from Windows option.\n\n\n\n\n\n\n\n\n\nWe will then proceed and select install 64-bit Git for Windows Setup option\n\n\n\n\n\n\n\nAs was the case with our installation of R and Rtools, a pop-up will appear asking for a location to save the installer to.\nOnce downloaded, double-click and proceed with the installation.\nYou will be asked to accept the Git License (which is the free copyleft GPL2 license, which we will learn about later in the course).\n\n\n\nThen you will be asked to select the folder to save to software to (usually your Programs folder)\n\n\n\nAt this point, the Git installer will ask a series of increasingly niche questions. It is best to just accept all the default options, to avoid wandering too far down a “What is Vim?!?” rabbit-hole.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHaving made it through all the niche customization screens, we finally reach the install button.\n\n\n\nWe then can wait for the install to complete.\n\n\n\nAnd success, we have now installed Git." - }, - { - "objectID": "course/00_WorkstationSetup/Windows.html#installing-positron", - "href": "course/00_WorkstationSetup/Windows.html#installing-positron", - "title": "Installing Software on Windows", - "section": "Installing Positron", - "text": "Installing Positron\nFinally, you will install Positron. It is an integrated development environment (IDE) in which we will open, modify and run our code throughout the course.\nFirst, navigate to their homepage, and select the blue Download option button on the upper-right.\n\n\n\nYou will then need to accept the Elastic License agreement to use the software (we will cover this source-available license type and what it does later in the course).\nWith the license accepted, you will be able to select your operating system. In this case, we will select Windows, specifally the user level install.\n\n\n\nPlease note, if you are using a Windows computer with an ARM based chip (like is the case with Snapdragons), you will need to download the installed from the Positron’s GitHub Release Page, as they are still testing some features.\n\n\nYou will then be prompted to select the location you want to save the installer to. We will generally save this to either Downloads or Desktop to make finding it easier.\n\n\n\nOnce the download is complete, double click on the installer, and again accept the license agreement.\n\n\n\nGenerally, Positron will be store its software folder under Program Files.\n\n\n\nNext up, accept the default options for the following screens\n\n\n\n\n\n\nAnd finally, click Install.\n\n\n\n \n\nIf all goes well, you should then see the installation success page." - }, - { - "objectID": "course/01_InstallingRPackages/slides.html#set-up", - "href": "course/01_InstallingRPackages/slides.html#set-up", - "title": "01 - Installing R Packages", - "section": "Set Up", - "text": "Set Up\nAlright, with the background out of the way, let’s get started!\n\n\n\n\n\n\n\nImportant\n\n\nPlease make sure to sync your forked version of the CytometryInR repository, and 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.\n\n\n\n\n\n\n\n\n\n\n\nWarning\n\n\nPlease remember to always copy over the new material from your local CytometryInR folder to a separate Project Folder that you created and named (ex. “Week_01” or “MyLearningFolder”, etc.). This will ensure any edits you make to the files do not affect your ability to bring in next week’s materials to the CytometryInR folder" - }, - { - "objectID": "course/01_InstallingRPackages/slides.html#checking-for-loaded-packages", - "href": "course/01_InstallingRPackages/slides.html#checking-for-loaded-packages", - "title": "01 - Installing R Packages", - "section": "Checking for Loaded Packages", - "text": "Checking for Loaded Packages\n\n\n\n\n\n\n\n\n.\n\n\nFor the contents (ie. the functions) of an R package to be available for your computer to use, they must first be activated (ie. loaded) into your local environment. We will first learn how to check what R packages are currently active." - }, - { - "objectID": "course/01_InstallingRPackages/slides.html#installing-from-cran", - "href": "course/01_InstallingRPackages/slides.html#installing-from-cran", - "title": "01 - Installing R Packages", - "section": "Installing from CRAN", - "text": "Installing from CRAN\n\n\n\n\n\n\n\n\n.\n\n\nWe will start by installing R packages that are part of the CRAN repository. This is the main R package repository, being part of the broader R software project. In the context of this course, R packages that work primarily with general data structure (rows, columns, matrices, etc.) or visualizations will predominantly be found within this repository.\nThese include the tidyverse packages. These packages have collectively made R easier to use by smoothing out some of the rough edges of base R, which is why R has seen major growth within the last decade. We will be installing several of these R packages today." - }, - { - "objectID": "course/01_InstallingRPackages/slides.html#installing-from-bioconductor", - "href": "course/01_InstallingRPackages/slides.html#installing-from-bioconductor", - "title": "01 - Installing R Packages", - "section": "Installing from Bioconductor", - "text": "Installing from Bioconductor\n\n\n\n\n\n\n\n\n.\n\n\nBioconductor is the second R package repository we will be working with throughout the course. While it contains far fewer packages than CRAN, it contains packages that are primarily used by the biomedical sciences. Following this link you can find it’s current flow and mass cytometry R packages.\nBioconductor R packages differ from CRAN R packages in a couple of ways. Bioconductor has different standards for acceptance than CRAN. They usually contain interoperable object-types, put more effort into documentation and continous testing to ensure that the R package remains functional across operating systems." - }, - { - "objectID": "course/01_InstallingRPackages/slides.html#install-from-github", - "href": "course/01_InstallingRPackages/slides.html#install-from-github", - "title": "01 - Installing R Packages", - "section": "Install from GitHub", - "text": "Install from GitHub\n\n\n\n\n\n\n\n\n.\n\n\nIn addition to the CRAN and Bioconductor repositories, individual R packages can also be found on GitHub hosted on their respective developers GitHub accounts. Newer packages that are still being worked on (often in the process of submission to CRAN or Bioconductor) can be found here, as well as those where the author decided not to bother with a review process, and just made the packages immediately available, warts and all." - }, - { - "objectID": "course/01_InstallingRPackages/slides.html#troubleshooting-install-errors", - "href": "course/01_InstallingRPackages/slides.html#troubleshooting-install-errors", - "title": "01 - Installing R Packages", - "section": "Troubleshooting Install Errors", - "text": "Troubleshooting Install Errors\n\n\n\n\n\n\n\n\n.\n\n\nWe have now installed three R packages, dplyr, PeacoQC, and flowSpectrum. In my case, I did not encounter any errors during the installation. However, sometimes a package installation will fail due to an error encountered during the installation process. This can be due to a number of reasons, ranging from a missing dependency, or an update that caused a conflict. While these can occur for CRAN or Bioconductor packages, they are more frequently seen for GitHub packages where the Description/Namespace files may not have been fully updated yet to install all the required dependencies.\nWhen encountering an error, start of by first reading through the message to see if you can parse any useful information about what package failed to install, and if it list the missing dependency packages name. The later was the case in the error message example shown below." - }, - { - "objectID": "course/01_InstallingRPackages/slides.html#installing-specific-package-versions", - "href": "course/01_InstallingRPackages/slides.html#installing-specific-package-versions", - "title": "01 - Installing R Packages", - "section": "Installing Specific-Package Versions", - "text": "Installing Specific-Package Versions\n\n\n\n\n\n\n\n\n.\n\n\nWhile we may be tempted to think of R packages as static, they change quite often, as their develipers add new features, fix bugs, etc. To help keep track of these changes (essential for reproducibility and replicability), R packages have version numbers.\nWhen we run sessionInfo(), we can see an example of this, with the version number appearing after the package name.\n\n\n\n\n\n\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27\n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] IRanges_2.44.0 clue_0.3-66 cluster_2.1.8.1 \n[49] pkgconfig_2.0.3 pillar_1.11.1 gtable_0.3.6 \n[52] data.table_1.18.2.1 glue_1.8.0 xfun_0.56 \n[55] tibble_3.3.1 tidyselect_1.2.1 knitr_1.51 \n[58] farver_2.1.2 rjson_0.2.23 htmltools_0.5.9 \n[61] rmarkdown_2.30 compiler_4.5.2 S7_0.2.1" - }, - { - "objectID": "course/01_InstallingRPackages/slides.html#documentation-and-websites", - "href": "course/01_InstallingRPackages/slides.html#documentation-and-websites", - "title": "01 - Installing R Packages", - "section": "Documentation and Websites", - "text": "Documentation and Websites\n\n\n\n\n\n\n\n\n.\n\n\nWe have already seen a couple ways to access the help documentation contained within an R package via Positron. Beyond internal documentation, R packages often have external websites that contain additional walk-through articles (ie. vignettes) to better document how to use the package.\nFor CRAN-based packages, we can start off by searching for the package name. So, in the case of dplyr" - }, - { - "objectID": "course/01_InstallingRPackages/index.html", - "href": "course/01_InstallingRPackages/index.html", - "title": "01 - Installing R Packages", - "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here\nWelcome to the first week of Cytometry in R! This week we will be diving into how R packages work, and the how to go about installing them.\nBefore getting started, please make sure you have completed the creating a GitHub and Workstation Setup walk-throughs, since we will begin where they left off once the required software was successfully installed.", + }, + { + "objectID": "course/02_FilePaths/index.html#recursive", + "href": "course/02_FilePaths/index.html#recursive", + "title": "02 - File Paths", + "section": "Recursive", + "text": "Recursive\nAnd finally that we have created additional nested folders and populated them with fcs files, let’s see what setting list.files() recursive argument to TRUE\n\nall_files_present <- list.files(full.names=TRUE, recursive=TRUE)\nall_files_present \n\n\n\n\nIn this case, all files in all folders within the working directory are shown. This can be useful when exploring folder contents, but if there are a lot of files present within the folder, it will take a while to return the list.", "crumbs": [ "About", "Intro to R", - "01 - Installing R Packages" + "02 - File Paths" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#set-up", - "href": "course/01_InstallingRPackages/index.html#set-up", - "title": "01 - Installing R Packages", - "section": "Set Up", - "text": "Set Up\nAlright, with the background out of the way, let’s get started!\n\n\n\n\n\n\nImportant\n\n\n\nPlease make sure to sync your forked version of the CytometryInR repository, and 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.\n\n\n\n\n\n\n\n\nWarning\n\n\n\nPlease remember to always copy over the new material from your local CytometryInR folder to a separate Project Folder that you created and named (ex. “Week_01” or “MyLearningFolder”, etc.). This will ensure any edits you make to the files do not affect your ability to bring in next week’s materials to the CytometryInR folder\n\n\n\n\nAfter pulling the new data and code locally, open CytometryInR, open the course folder, and open the 01_InstallingRPackages folder. From here, copy the index.qmd file to your own working Project Folder (ex. Week_01) where you can work on it without causing any conflicts. Then return to Positron and open up your working project folder (ex. Week_01).\n\n\n\nNext up, within Positron, let’s make sure to select R as the coding language being used for this session.\n\n\n\nNow that R is running within Positron, the console (lower portion of the screenn) is now able to run (ie. execute) any R code that is sent to it.", + "objectID": "course/02_FilePaths/index.html#saving-changes-to-version-control", + "href": "course/02_FilePaths/index.html#saving-changes-to-version-control", + "title": "02 - File Paths", + "section": "Saving changes to Version Control", + "text": "Saving changes to Version Control\nAnd as is good practice, to maintain version control, let’s stage all the files and folders we created today within the Week2 Project Folder, write a commit message, and send these files back to GitHub until they are needed again next time.", "crumbs": [ "About", "Intro to R", - "01 - Installing R Packages" + "02 - File Paths" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#checking-for-loaded-packages", - "href": "course/01_InstallingRPackages/index.html#checking-for-loaded-packages", - "title": "01 - Installing R Packages", - "section": "Checking for Loaded Packages", - "text": "Checking for Loaded Packages\nFor the contents (ie. the functions) of an R package to be available for your computer to use, they must first be activated (ie. loaded) into your local environment. We will first learn how to check what R packages are currently active.\n\n\n\nAccessing Help Documentation\nWithin your own index.qmd (or a new .qmd file that you created), type out/copy-paste the following sessionInfo() function:\n\nsessionInfo()\n\n\n\nIf you hover over the line of code within Positron, you will glimpse the help file for the particular function you are hovering over.\n\n\n\nIn this case, we can see the help documentation corresponding for sessionInfo(). Beyond hovering over the function, this can also be accessed by adding a ? directly in front of the function, and then running that line of code.\n\n?sessionInfo()\n\n\n\n\nWhen executed, the function’s help file documentation will open up within the Help tab in the secondary side bar on the right-side of the screen. Glancing at the top of the page we can see the name of the package that contains the sessionInfo() function ({utils}). Scrolling down the help page past all the documentation, we can see a link to the index page.\n\n\n\nAfter clicking, the Help tab switches from viewing the documentation for the sessionInfo() function, to showing all the functions within the utils package. Most R packages contain help documentation, so this process can be adapted to find out additional information about what a function does, and what arguments are needed to produce customized outputs.\n\n\n\n\n\nsessionInfo()\nWithin your .qmd file, let’s go ahead and run the following code-block:\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] htmlwidgets_1.6.4 BiocManager_1.30.27 compiler_4.5.2 \n [4] fastmap_1.2.0 cli_3.6.5 tools_4.5.2 \n [7] htmltools_0.5.9 otel_0.2.0 yaml_2.3.12 \n[10] rmarkdown_2.30 knitr_1.51 jsonlite_2.0.0 \n[13] xfun_0.56 digest_0.6.39 rlang_1.1.7 \n[16] evaluate_1.0.5 \n\n\n\n\nThe outputs that get returned by sessionInfo() will vary a bit depending on your computer’s operating system, and the version of R you have installed.\nFor today, let’s focus on the last two elements of the output:\n\n\n\nThe R software itself is made up of several base R packages, that are loaded automatically. These contain everything you need to read, write and run R code on your computer. You can see these packages are the stats, graphics, grDevices, utils, datasets, methods and base packages.\nAs we install additional R packages and load them using the library() function throughout this session, sporadically re-run sessionInfo() to see how this list of R packages changes.", + "objectID": "course/03_InsideFCSFile/index.html", + "href": "course/03_InsideFCSFile/index.html", + "title": "03 - Inside an FCS File", + "section": "", + "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", "crumbs": [ "About", "Intro to R", - "01 - Installing R Packages" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#installing-from-cran", - "href": "course/01_InstallingRPackages/index.html#installing-from-cran", - "title": "01 - Installing R Packages", - "section": "Installing from CRAN", - "text": "Installing from CRAN\nWe will start by installing R packages that are part of the CRAN repository. This is the main R package repository, being part of the broader R software project. In the context of this course, R packages that work primarily with general data structure (rows, columns, matrices, etc.) or visualizations will predominantly be found within this repository.\nThese include the tidyverse packages. These packages have collectively made R easier to use by smoothing out some of the rough edges of base R, which is why R has seen major growth within the last decade. We will be installing several of these R packages today.\n\n\n\ndplyr\nOur first R package we will install during this session is the dplyr package. Since it is hosted on the CRAN repository, to install it, we will need to use the CRAN-specific installation function install.packages().\n\n?install.packages()\n\n\n\n\nFor the install.packages() function, we place within the () the name of the R package from CRAN that we wish to install.\n\ninstall.packages(\"dplyr\")\n\n\n\n\n\n\n\n\n\nTip\n\n\n\nA usual struggle point for beginners is that install.packages() requires ” ” to be placed around the package name. Forgetting them results in the error that we see below.\n\n\n\ninstall.packages(dplyr)\n\nError:\n! object 'dplyr' not found\n\n\n\n\n\ninstall.packages(\"dplyr\")\n\nGo ahead and click on “Run Cell” next to your code-block, to install the dplyr R package.\n\n\nWhen a package starts to install, you will see your console start to display text resembling that seen in the image below (varying a bit depending on your computers operating system).\n\n\n\nWithin this opening scrawl, you will see the location on your computer the R package is being installed to, as well as the file location for the R package being retrieved on CRAN.\nIf the package is successfully located, your computer will proceed to first download, then unpack (ie. unzip) it, before attempting to install to the target folder.\n\n\n\nThe final steps of the installation process involved various steps to verify everything was copied successfully, the help documentation assembled, and that the R package is capable of being loaded. If this is the case, you will see the “Done” line appear, as well as a mention where the original downloaded source package files has been stashed (usually a temp folder).\n\n\n\n\nAttaching packages via library()\nIf an R package has been installed successfully, we are now able to load it (ie. make it’s functions available) to our local environment using the library() function.\n\n?library()\n\n\n\nUnlike install.packages(), where we needed “” around the package name, the library() function does not require “” around the package name. Let’s go ahead and load in dplyr, making its respective functions to our local environment.\n\nlibrary(dplyr)\n\n\nAttaching package: 'dplyr'\n\n\nThe following objects are masked from 'package:stats':\n\n filter, lag\n\n\nThe following objects are masked from 'package:base':\n\n intersect, setdiff, setequal, union\n\n\n\n\nFrom the output, we can see that dplyr has been attached. There are also a couple functions within dplyr that have identical names to functions within the stats and base packages. To avoid confusion, these 6 functions are masked, which is why we get the additional messages.\nWith dplyr now loaded via the library() call, let’s check sessionInfo() to see what has changed.\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] dplyr_1.2.0 BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 \n [4] tidyselect_1.2.1 xfun_0.56 magrittr_2.0.4 \n [7] glue_1.8.0 tibble_3.3.1 knitr_1.51 \n[10] pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 \n[13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 \n[16] vctrs_0.7.1 compiler_4.5.2 tools_4.5.2 \n[19] evaluate_1.0.5 pillar_1.11.1 yaml_2.3.12 \n[22] otel_0.2.0 BiocManager_1.30.27 rlang_1.1.7 \n[25] jsonlite_2.0.0 htmlwidgets_1.6.4 \n\n\n\n\nSimilar to what was seen for the base R packages, dplyr is now attached. This means we should theoretically now have access to all its functions. We can verify this by seeing if we can look up the dplyr packages select() function and it’s respective help page.\n\n?select\n\n\n\n\nSince its parent package has been attached to our local environment (via the library() call), we can see dplyr functions appear as suggestions as we begin to type.\nBy contrast, is we check for the ggplot() function from the ggplot2 package (which we haven’t yet installed or attached via library()), no suggestions will pop up.\n\n?ggplot\n\nNo documentation for 'ggplot' in specified packages and libraries:\nyou could try '??ggplot'\n\n\n\n\nBeyond individual functions, some R packages also have help landing pages, that can be similarly accessed by adding a ? in front of the package name:\n\n\n\n\n\nUnattaching\nSo far, we have installed an R package, and then attached it (via library()). How would we reverse these steps?\nWell, to unload it from the local environment, there are a couple options. You could of course simply shut down Positron. The local environment only exist in context of when you open and close the session, which closing the program will do. All previously loaded R packages will be unattached, which is why when you start a new session you will need to load in all packages you plan on using via library().\nAlternatively, although less used, you could detach() it via your console:\n\ndetach(\"package:dplyr\", unload=TRUE)\n\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] BiocStyle_2.38.0\n\nloaded via a namespace (and not attached):\n [1] digest_0.6.39 R6_2.6.1 fastmap_1.2.0 \n [4] tidyselect_1.2.1 xfun_0.56 magrittr_2.0.4 \n [7] glue_1.8.0 tibble_3.3.1 knitr_1.51 \n[10] pkgconfig_2.0.3 htmltools_0.5.9 generics_0.1.4 \n[13] rmarkdown_2.30 lifecycle_1.0.5 cli_3.6.5 \n[16] vctrs_0.7.1 compiler_4.5.2 tools_4.5.2 \n[19] evaluate_1.0.5 pillar_1.11.1 yaml_2.3.12 \n[22] otel_0.2.0 BiocManager_1.30.27 rlang_1.1.7 \n[25] jsonlite_2.0.0 htmlwidgets_1.6.4 \n\n\n\n\nLooking at the sessionInfo() output, dplyr is no longer attached to the local environment. Consequently, if we try to once again look for the documentation, no information will be retrieved.\n\n?dplyr\n\nNo documentation for 'dplyr' in specified packages and libraries:\nyou could try '??dplyr'\n\n\n\n\nThere is a workaround however, if we want to access functions from an unloaded R package. We can specify the R package’s name, followed by two :, and then the function name. The :: conveys the context to your computer that the package is present, but may not be attached.\n\n?dplyr::select()\n\nThis particular use case can be useful if we want to run a particular function, but not load in all a packages functions (which may have identical function names to other R packages we are using and cause some conflicts).\n\n\n\n\nRemoving Packages\nJust as we can install an R package, we can also uninstall an R package (although doing so is rare, most often when encountering package dependency conflict). To do so, we would use the remove.packages() function.\n\n?remove.packages()\n\n\nremove.packages(\"dplyr\")\n\nThis results in the package being removed entirely from our computer. We would then need to reinstall it if needed in the future.\n\n\n\n\nCommon Issues\nAs previously mentioned, CRAN is the main repository for R packages. But what if we tried to install an R package that is only found on Bioconductor or via GitHub using the install.packages() function?\nTo see what occurs, let’s try installing the PeacoQC package (which is found on Bioconductor).\n\ninstall.packages(\"PeacoQC\")\n\nInstalling package into '/home/david/R/x86_64-pc-linux-gnu-library/4.5'\n(as 'lib' is unspecified)\n\n\nWarning: package 'PeacoQC' is not available for this version of R\n\nA version of this package for your version of R might be available elsewhere,\nsee the ideas at\nhttps://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages\n\n\n\n\nAs you can see, the initial warning message suggest that PeacoQC is not available for your version of R. When I first started trying to learn R on my own during COVID, this particular message was the bane of my existence and I couldn’t figure out what was going on.\nThis is just a default warning message, that would apply for both a package having a version mismatch, but also shown when trying to install packages that are not found on CRAN.", + "objectID": "course/03_InsideFCSFile/index.html#getting-set-up", + "href": "course/03_InsideFCSFile/index.html#getting-set-up", + "title": "03 - Inside an FCS File", + "section": "Getting Set Up", + "text": "Getting Set Up\n\n\nSet up File Paths\nHaving copied over the new data to your working project folder (Week 3 or whatever your chosen name), let’s identify the file paths between our working directory and the fcs files. If you retained the same project organization structure we had during Week #2, it may look similar to the following:\n\nPathToDataFolder <- file.path(\"data\")\n\n\nPathToDataFolder\n\n[1] \"data\"\n\n\n\n\n\n\nLocate .fcs files\nWe will now locate our .fcs files. As we saw last week, our computer will need the full file.paths to these individual files, so we will set the list.files() “full.names” argument to TRUE.\n\nfcs_files <- list.files(PathToDataFolder, pattern=\".fcs\", full.names=TRUE)\nfcs_files\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n\nBy contrast, if the “full.names” argument was set to FALSE, we would have retrieved just the file names\n\nlist.files(PathToDataFolder, pattern=\".fcs\", full.names=FALSE)\n\n[1] \"CellCounts4L_AB_05_ND050_05.fcs\"\n\n\nThis would have been the equivalent of running the basename function on the “full.names=TRUE” output.\n\nbasename(fcs_files)\n\n[1] \"CellCounts4L_AB_05_ND050_05.fcs\"", "crumbs": [ "About", "Intro to R", - "01 - Installing R Packages" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#installing-from-bioconductor", - "href": "course/01_InstallingRPackages/index.html#installing-from-bioconductor", - "title": "01 - Installing R Packages", - "section": "Installing from Bioconductor", - "text": "Installing from Bioconductor\nBioconductor is the second R package repository we will be working with throughout the course. While it contains far fewer packages than CRAN, it contains packages that are primarily used by the biomedical sciences. Following this link you can find it’s current flow and mass cytometry R packages.\nBioconductor R packages differ from CRAN R packages in a couple of ways. Bioconductor has different standards for acceptance than CRAN. They usually contain interoperable object-types, put more effort into documentation and continous testing to ensure that the R package remains functional across operating systems.\n\n\nTo install an R package that is located on Bioconductor, we first need to install the BiocManager package from CRAN. This package will allow us to install Bioconductor packages from their respective repository.\n\ninstall.packages(\"BiocManager\")\n\n\n\nOnce BiocManager is installed, we can attach it to our local environment using the library() function\n\nlibrary(BiocManager)\n\n\n\nWhen loaded, you will see an output showing the current Bioconductor and R versions.\nWe can then use BiocManager’s install() function to go back and install PeacoQC().\n\n\n\n\n\n\nTip\n\n\n\nAs always, don’t forget the “” when running an install() command.\n\n\n\n?install()\n\n\ninstall(\"PeacoQC\")\n\n\n\nWe see a similar opening sequence of installation steps as what we saw when installing the dplyr package from CRAN. However, in this case, several package dependencies (rjson, GlobalOptions, etc.) are present. Consequently, you can see these packages are also being downloaded from their respective repositories (either CRAN or Bioconductor), then unzipped and assembled before PeacoQC undergoes installation.\n\n\n\n\n\n\nNote\n\n\n\nBehind the scenes, within an R package, what package dependencies need to be installed are specified through the Description and Namespace files. If a package name is removed from these files, it will not be installed during the installation process\n\n\n\n\n\nWithin the scrawl of installation outputs, we can see individual dependencies undergoing installation similar to what we saw with dplyr, with a “Done (packagename)” being printed upon successful installation.\n\n\n\nThis process continues for each dependency being installed.\n\n\n\nAnd finally, once all the dependencies are installed, PeacoQC starts to install.\n\n\n\nOccasionally, during installation, you will see a pop-up windown like this one in the console. This let’s you know that some of the package dependencies have newer updated versions that are available to download. We are prompted to select between updating all, some or none. You will need to specify via the console how you want to proceed, by typing and entering one of the suggested options [a/s/n].\n\n\n\nAlternatively you may encounter a pop-up that resembles this one. Unlike the a/s/n output, we would need to provide a number for our intended choice. In this case, I went ahead and skipped all updates by typing 3 into the console, then hitting enter.\n\n\n\nGenerally, it’s okay to update if you have the time. Updates generally consist of minor improvements or bug fixes, that shouldn’t cause major issues. If you are short on time, you can go ahead and select skip the update by entering the value (n) for the none option.\n\n\n\nWith PeacoQC has been installed, we can load it via the library() call\n\n\n\n\n\n\nTip\n\n\n\nRemeber, library() doesn’t require ” ”\n\n\n\nlibrary(PeacoQC)\n\n\n\nAnd we can check to see if it has been attached to the local environment\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27 BiocStyle_2.38.0 \n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] htmlwidgets_1.6.4 IRanges_2.44.0 clue_0.3-66 \n[49] cluster_2.1.8.1 pkgconfig_2.0.3 pillar_1.11.1 \n[52] gtable_0.3.6 data.table_1.18.2.1 glue_1.8.0 \n[55] xfun_0.56 tibble_3.3.1 tidyselect_1.2.1 \n[58] knitr_1.51 farver_2.1.2 rjson_0.2.23 \n[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.2 \n[64] S7_0.2.1 \n\n\n\n\nAs you may have noticed, the section of loaded via namespace (but not attached) packages has grown larger. These packages are dependencies for the attached packages (dplyr, BiocManager and PeacoQC). Since the functions within these dependencies are only used selectively by the attached packages, they do not need to be active within the local environment.\n\n\n\nTo see what packages are installed (but not yet loaded), we can use the installed.packages() function to return a list of R packages for your computer.\n\ninstalled.packages()", + "objectID": "course/03_InsideFCSFile/index.html#flowcore", + "href": "course/03_InsideFCSFile/index.html#flowcore", + "title": "03 - Inside an FCS File", + "section": "flowCore", + "text": "flowCore\nWe will be using the flowCore package, which is the oldest and most-frequently downloaded flow cytometry package on Bioconductor.\n\n\nCode\n# I have attached this code for anyone that is interested in seeing how these plots were made. The content is not part of today's lesson, so if you are just starting off, we will cover the details of data-tidying and creating ggplot objects over the next several weeks. Best, David\n\n# Load required packages via a library call\n\nlibrary(dplyr) # CRAN\nlibrary(stringr) # CRAN\nlibrary(ggplot2) # CRAN\n#library(plotly) # Using the :: to access \n\n# Loading in the dataset contained within the .csv file\nBioconductorFlow_path <- file.path(PathToDataFolder, \"BioconductorFlow.csv\")\nBioconductorFlowPackages <- read.csv(BioconductorFlow_path, check.names=FALSE)\nBioconductorFlowPackages <- BioconductorFlowPackages |>\n arrange(desc(since)) |> mutate(package = factor(package, levels = package))\n\n# Newer Base R Pipe : |> \n# Older mostly equivalent Magrittr Pipe %>% \n\n\n\n\nCode\n# Notice the code-chunk eval arguments above dictate the shape of the final rendered plot. \n\n# Taking the imported dataset and passing it to ggplot2 to create the first plot. \n\nplot <- ggplot(BioconductorFlowPackages,\n aes(x = 0, xend = since, y = package, yend = package)) +\n geom_segment(linewidth = 2, color = \"steelblue\") +\n scale_x_continuous(trans = \"reverse\", \n breaks = seq(0, max(BioconductorFlowPackages$since), by = 5)) +\n labs(\n x = \"Years in Bioconductor\",\n y = NULL,\n title = \"Bioconductor Flow Cytometry R packages\"\n ) +\n theme_bw()\n\n# Taking the static plot and making it interactive using the plotly package\n\nplotly::ggplotly(plot)\n\n\n\n\n\n\n\n\nCode\n# Retrieving the names of Bioconductor flow cytometry R packages in correct release order. \n\nHistoricalOrder <- BioconductorFlowPackages |> pull(package)\n\n# Bringing in 2025 package usage dataset from a .csv file\nBioconductorUsage_path <- file.path(PathToDataFolder, \"BioconductorDownloads.csv\")\nBioconductorUsage <- read.csv(BioconductorUsage_path, check.names=FALSE)\nBioconductorUsage <- BioconductorUsage |> dplyr::filter(Month %in% \"all\")\n\n# Note, dplyr::filter is used due to flowCore also having a filter function, which causes conflicts once it is attached to the local environment. \n\n# Combining both data.frames for use in the plot\n\nDataset <- left_join(BioconductorFlowPackages, BioconductorUsage, by=\"package\")\n\n# Rearranging the order in which packages are displayed\n\nDataset$package <- factor(Dataset$package, levels=HistoricalOrder)\n\n\n\n\nCode\n# Generating the 2nd plot with ggplot2\n\nplot <- ggplot(Dataset, aes(x = since, y = Nb_of_distinct_IPs)) +\n geom_point(aes(color = package), size = 3, alpha = 0.7) + \n labs(\n x = \"Years in Bioconductor\",\n y = \"Number of Yearly Downloads\",\n title = \"\",\n color = \"Package\"\n ) +\n theme_bw()\n\n# Making it interactive with plotly\n\nplotly::ggplotly(plot)\n\n\n\n\n\n\nflowCore is also one of the many Bioconductor packages maintained by Mike Jiang. In many ways (as those who completed the optional take-home problems for Week #1 know) reminiscent of this xkcd comic:\n\nAs with all our R packages, we first need to make sure flowCore is attached to our local environment via the library call.\n\nlibrary(flowCore)\n\nThe function we will be using today is the read.FCS() function. Do you remember how to access the help documentation?\n\n\nCode\n# Or when in Positron, hovering over the highlighted function name within the code-chunk\n\n?flowCore::read.FCS\n\n\nTo start, lets select just the first .fcs file. We will do this by indexing the first item within fcs_files via the square brackets [].\n\nfirstfile <- fcs_files[1]\nfirstfile\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"", "crumbs": [ "About", "Intro to R", - "01 - Installing R Packages" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#install-from-github", - "href": "course/01_InstallingRPackages/index.html#install-from-github", - "title": "01 - Installing R Packages", - "section": "Install from GitHub", - "text": "Install from GitHub\nIn addition to the CRAN and Bioconductor repositories, individual R packages can also be found on GitHub hosted on their respective developers GitHub accounts. Newer packages that are still being worked on (often in the process of submission to CRAN or Bioconductor) can be found here, as well as those where the author decided not to bother with a review process, and just made the packages immediately available, warts and all.\n\n\nWhile many gems of R packages can be found on GitHub, there are also a bunch of R packages that due to deprecation since when they were published and released have stopped working. This is often the case for R packages that are not maintained, which is why it’s useful to check the commits and issues pages to see when the last contribution occurred. We will take a closer look at how to do so later on.\n\n\nTo install packages from GitHub, you will need the remotes package, which can be found on CRAN.\n\n\n\n\n\n\nSpot Check #1\n\n\n\nTo install a package from CRAN, what function would you use? Click on the code-fold arrow below to reveal the answer.\n\n\n\n\nCode\ninstall.packages(\"remotes\")\n\n\n\n\nWith the remotes package now installed, we can attach it to our local environment.\n\n\n\n\n\n\nSpot Check #2\n\n\n\nWhat function would be used to do so?\n\n\n\n\nCode\nlibrary(remotes)\n\n\n\n\nAnd finally, we can use the install_github() function to download R packages from the invidual developers GitHub account.\n\n\n\n\n\n\nSpot Check #3\n\n\n\nHow would you look up the help documentation for this function?\n\n\n\n\nCode\n# Either by hovering over it within Positron or via\n\n?install_github()\n\n\n\n\nWe will be installing a small R package flowSpectrum for this example. It’s one of the packages created by Christopher Hall, whose small series of Flow Cytometry Data Analysis in R tutorials were immensely useful when I was first getting started learning R. flowSpectrum can be used to generate spectrum-style plots for spectral flow cytometry data.\n\n\n\nTo install an R package from GitHub, we first need the GitHub username (so hally166 in this case), which is followed by a “/”, and then the name of the package repository (so flowSpectrum in this case). Our code should consequently be:\n\ninstall_github(\"hally166/flowSpectrum\")\n\n\n\nWhen installing from GitHub, the opening installation scrawl will look different. Unlike R packages from CRAN or Bioconductor, which are usually shipped in an assembled binary format, R packages from GitHub start off as source code. So the first steps shown in the scrawl are the process of converting them to binary before proceeding.\nThis process of building R packages from source code is one of the reasons we needed to install Rtools (for Windows users) or Xcode Developer Tools (for MacOS) for this course. We will look at this topic in greater depth later in the course when we talk about creating R packages.", + "objectID": "course/03_InsideFCSFile/index.html#flowframe", + "href": "course/03_InsideFCSFile/index.html#flowframe", + "title": "03 - Inside an FCS File", + "section": "flowFrame", + "text": "flowFrame\nFor read.FCS(), it accepts several arguments. The argument “filename” is where we provide our file.path to .fcs file that we wish to load into R. Let’s go ahead and do so\n\nread.FCS(filename=firstfile)\n\nPlease note, if you are doing this with your own .fcs files, you will need to provide two additional arguments, “transformation” = FALSE, and “truncate_max_range” = FALSE for the files to be read in correctly. We will revisit the reasons why in Week #5.\n\nread.FCS(filename=firstfile, transformation = FALSE, truncate_max_range = FALSE)\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot\n\n\nIn this case, we can see the .fcs file has been read into R as a “flowFrame” object. We can also see the file name, as well as details about the number of cells, and number of columns (whether detectors (for raw spectral flow data) or fluorophores (for unmixed spectral flow data)).\n\nDirectly below we see what resembles a table. At first glance, the only column with an immediately discernable purpose is the one with the name column, which is listing the detectors present on a Cytek Aurora.\n\nAnd finally, at the bottom we reach a line that tells us that for this .fcs files, 599 keyword can be found in a description slot.\n\n\n\nSo let’s get our bearings, we have loaded in an .fcs file to R, but let’s use some of the concepts we covered last week to try to understand a bit about what type or class of object we are working with. From the output, we saw the words flowFrame object, so let’s read it back in again, but assign it to an variable/object called flowFrame so that we can use the type-discerning functions we worked with last week on.\n\nflowFrame <- read.FCS(filename=firstfile, transformation = FALSE, truncate_max_range = FALSE)\n\nAs we create this variable, if we have the session tab selected on our right secondary side bar, we see it appear:\n\nIf we were to use the type-determining functions we learned last week\n\nclass(flowFrame)\n\n[1] \"flowFrame\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nflowFrames are a class of object with a structure defined within the flowCore package. They are used to work with the data contained within individual .fcs files. Looking again at the right secondary side bar, we can see that it shows up as a ““S4 class flowFrame package flowCore”“” with 3 slots, with the words flowFrame adjacent to it.\nA perfectly valid first reaction to first reading this is “well how should I know what any of this means?”. Powering through this initial discomfort, let’s go ahead and click on the dropdown arrow next to the variables name and see if we get any additional clarity on the issue.\n\nWhen we do so, three additional drop-downs appear. Based on the previous line that mentioned 3 slots, we could infer that each line corresponds to one of those slots.\nWhat we are encountering with flowFrame is our first example of an S4 object type. These more-complicated object types are quite common for the various Bioconductor affilitated R packages.\nThese objects will usually appear with either S4 or S3 in their metadata, and are made up of various simpler object types that are cobbled together within the larger object, usually occupying individual slots.\nWhat advantage this bundling provides will be something we revisit throughout the course as you encounter more of these S4/S3 objects.\n\n\n\nexprs\nThe first slot within the flowFrame object shows up with the name “exprs”. For the exprs object, glancing at it’s middle column, we can based on the 100 rows and 61 columns, that it is likely a matrix-style object. We might also recall we saw similar numbers in the printed output when we ran read.FCS()earlier.\n\nWhich likely means that “exprs” slot is where the MFI data for the individual acquired cells within our .fcs file is being stored. Within Positron, for a matrix object, we can click on the little grid symbol on the far right to open up the table within editor.\n\nIf we utilize the scroll bars, we can see that the individual detectors (in the case of uploading a raw spectral fcs file, they would appear as fluorophores for unmixed spectral or conventional fcs files) occupy the individual columns, which are named. The rows are not named, but number 100, matching the number of cells present in the .fcs file. Additionally, on the far left there is a little summary table about the overall data.\n\nLet’s go ahead and assign this matrix to a new variable/object so that we can explore it later. Since flowFrame is an S4 object, it’s slots can be individually accessed by adding the @ symbol and the respective slot name.\n\nMFI_Matrix <- flowFrame@exprs\n\nAlternatively, we can use the Bioconductor helper function exprs() to get data held in that slot\n\nMFI_Matrix_Alternate <- exprs(flowFrame)\n\nIn the case of the above, this displayed text output to the console would be unwiedly to display all at once. If we wanted to only see the first five rows, we could use the head() function, and provide a value of 5.\n\nhead(MFI_Matrix, 5)\n\n Time UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A\n[1,] 38823 37.79983 -184.479996 353.87714 1106.22998 1145.18140 2130.21899\n[2,] 39780 234.23021 -98.456429 26.43876 70.65833 -89.93541 -29.14263\n[3,] 267292 -117.96355 40.732426 473.94574 1177.86975 1516.70935 1985.46130\n[4,] 128101 289.87671 -2.723389 -54.11960 -163.71489 32.62989 -134.90411\n[5,] 255221 -104.50541 -71.163338 567.57562 610.23627 1416.61328 2868.16040\n UV7-A UV8-A UV9-A UV10-A UV11-A UV12-A UV13-A\n[1,] 4376.34277 3246.7952 32050.65039 8123.2637 1992.5785 1070.3323 956.43573\n[2,] -26.34649 -162.6675 17.98848 271.9152 154.8575 163.5411 -32.81524\n[3,] 3658.87671 4140.1724 59792.16406 14013.7969 3427.4324 1668.7588 1071.14636\n[4,] 739.71960 402.9025 427.37534 315.6364 -223.0423 145.7121 127.03777\n[5,] 4034.58789 3234.6626 40126.46484 10325.0371 1974.0907 1033.8450 -21.57245\n UV14-A UV15-A UV16-A SSC-H SSC-A V1-A V2-A\n[1,] 290.8685 385.49921 670.97687 657613 750760.12 1171.1390 154.5628\n[2,] -104.9198 103.41382 71.41528 83481 81552.85 266.2424 705.2527\n[3,] 730.1430 214.93053 252.75406 890845 1183519.00 1196.0931 1183.1105\n[4,] -207.8978 -55.37944 -45.10131 75103 72457.33 227.9926 556.9189\n[5,] 273.6271 960.16290 341.20633 415791 501690.97 717.2498 929.9780\n V3-A V4-A V5-A V6-A V7-A V8-A\n[1,] 1346.4488525 1706.9260 1923.50940 898.2527 3162.55371 83596.5078\n[2,] 244.3218689 341.0508 381.15939 87.1600 151.68785 119.5544\n[3,] 2087.0092773 824.6352 1635.27258 1613.9069 4653.16260 176981.6094\n[4,] -0.8137281 205.4732 18.12125 179.6371 -69.50061 -132.4348\n[5,] 1358.4512939 788.6506 1208.81006 1156.7040 3118.42627 104951.2578\n V9-A V10-A V11-A V12-A V13-A V14-A\n[1,] 32506.7617 27161.5137 6236.072754 2220.303223 2023.39966 753.589355\n[2,] -79.7691 -109.1783 -73.991196 114.375542 -11.53453 124.986206\n[3,] 69236.4297 57626.8984 13175.838867 4534.874023 3434.38989 1995.172363\n[4,] 129.2739 231.8918 -5.473321 8.792875 -24.62049 -8.212234\n[5,] 42090.0781 34104.3164 7620.552734 3103.544189 2426.43359 650.836304\n V15-A V16-A FSC-H FSC-A SSC-B-H SSC-B-A B1-A\n[1,] 510.9540 228.34962 1055905 1217097.50 716733 815959.06 606.6683\n[2,] -207.3494 -28.96272 79696 83439.11 104575 103132.83 195.2795\n[3,] 1321.8030 615.05560 1092481 1453969.38 757351 982038.31 2010.5110\n[4,] -133.7503 -34.32619 64760 60415.23 67955 66806.13 -146.8936\n[5,] 290.2892 473.32599 1038362 1184479.00 425296 522873.12 1015.5981\n B2-A B3-A B4-A B5-A B6-A B7-A\n[1,] 416.98294 4172.4712 192400.0938 93929.9375 54236.3320 19342.6445\n[2,] 333.25662 332.1675 -230.9639 196.7810 292.8945 -187.2845\n[3,] 2150.21826 10106.9551 437801.5625 212176.1562 124294.3594 45068.3008\n[4,] -34.90987 165.7988 675.0156 136.3076 482.8665 133.0948\n[5,] 639.77527 6034.0200 244022.6094 118871.4609 68616.9688 24067.7949\n B8-A B9-A B10-A B11-A B12-A B13-A\n[1,] 10507.24219 9498.1270 4465.50928 1668.048096 2199.9475 1581.7345\n[2,] 70.90886 -334.3563 188.05545 -663.359619 -163.2331 27.9856\n[3,] 24289.59180 22500.1914 10624.99219 4684.497559 3471.7749 2727.3904\n[4,] 432.28091 246.8794 -94.44906 2.905877 106.8489 283.3633\n[5,] 14182.12793 13019.7100 5577.33984 2753.355957 1279.3009 1423.0276\n B14-A R1-A R2-A R3-A R4-A R5-A\n[1,] 1487.56860 147.1335 129.867630 35.90353 267.23999 49.79849\n[2,] 205.82298 -142.9224 66.516052 113.63218 -94.41375 98.13978\n[3,] 2371.95850 -128.3749 -105.482544 726.48547 18.87000 95.47879\n[4,] 33.24665 127.5455 122.607941 37.83584 -82.87500 -343.83768\n[5,] 1565.72742 -266.4482 -3.350622 -178.39566 -117.10875 -100.10384\n R6-A R7-A R8-A\n[1,] -732.7097 42.83144 248.56728\n[2,] 143.4497 -263.28741 -85.83299\n[3,] -194.4526 -84.08820 -301.46066\n[4,] 82.3745 60.27896 -94.38461\n[5,] -182.0066 184.36417 186.17207\n\n\nThis is much more workable, especially on a small laptop screen. We can see that there are names for each column corresponding to detector/fluorophore/metal depending on the .fcs file we are accessing. Lets retrieve these column names using the colnames() function.\n\nColumnNames <- colnames(MFI_Matrix)\nColumnNames\n\n $P1N $P2N $P3N $P4N $P5N $P6N $P7N $P8N \n \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \"UV7-A\" \n $P9N $P10N $P11N $P12N $P13N $P14N $P15N $P16N \n \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \"UV14-A\" \"UV15-A\" \n $P17N $P18N $P19N $P20N $P21N $P22N $P23N $P24N \n \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \"V3-A\" \"V4-A\" \"V5-A\" \n $P25N $P26N $P27N $P28N $P29N $P30N $P31N $P32N \n \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \n $P33N $P34N $P35N $P36N $P37N $P38N $P39N $P40N \n \"V14-A\" \"V15-A\" \"V16-A\" \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \n $P41N $P42N $P43N $P44N $P45N $P46N $P47N $P48N \n \"B2-A\" \"B3-A\" \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \n $P49N $P50N $P51N $P52N $P53N $P54N $P55N $P56N \n \"B10-A\" \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n $P57N $P58N $P59N $P60N $P61N \n \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\nSomething interesting occurred when this occurred, we can see in addition to the detector names directly above each a “$P#N” pattern appear, with # standing for increasing numbers. If we recall, we saw something similar in the first output column when we first ran read.FCS().\n\nLets break out the str() and class() functions from last week and see what we can find out about why this is occuring.\n\nstr(ColumnNames)\n\n Named chr [1:61] \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" ...\n - attr(*, \"names\")= chr [1:61] \"$P1N\" \"$P2N\" \"$P3N\" \"$P4N\" ...\n\n\nIn this case we can see that we don’t just have a vector (list) similar to what we saw with Fluorophores object last week, because instead of a chr [1:61] we get back a Named chr [1:61] designation. What we see is that in this case, each value has a corresponding index name as well. (ex. $P1N, $P2N, etc.) Let’s double check with class() function.\n\nclass(ColumnNames)\n\n[1] \"character\"\n\n\nWe can see that everything is character, but it doesn’t inform us that each index was named. This is one of the reasons it is best when trying to see what type of an object something is, to use multiple functions, to avoid missing some important details.\nIf we were trying to remove the names, being left with just the values (similar to what we saw with the vector-style list last week), we could use the unname() function:\n\nunname(ColumnNames)\n\n [1] \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \n [8] \"UV7-A\" \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \n[15] \"UV14-A\" \"UV15-A\" \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \n[22] \"V3-A\" \"V4-A\" \"V5-A\" \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \n[29] \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \"V14-A\" \"V15-A\" \"V16-A\" \n[36] \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \"B2-A\" \"B3-A\" \n[43] \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \"B10-A\" \n[50] \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n[57] \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\n\n\nLet’s return to the right sidebar to continue our exploration, by clicking on the dropdown arrow for exprs in the side-bar\n\nThe output is less user-friendly than what we saw when clicking on the little grid. If we scroll down far enough, we get down as far as [,61], which corresponds to the total number of columns.\n\nIn base R, column order can be defined by placing the corresponding column index number after a comma “,”. So for this case, the first column would be designated would be [,1] while the last column would be designated [,61].\n\nMFI_Matrix[,1]\n\n [1] 38823 39780 267292 128101 255221 79210 196643 83855 109315 26128\n [11] 114423 120001 71831 70551 197021 239994 252611 223012 152780 171822\n [21] 172611 168464 191503 253015 73885 82221 176641 128533 4117 191632\n [31] 191229 58093 141776 265894 55593 227555 233212 248578 95165 171934\n [41] 1360 251847 195764 147503 118723 1060 90033 253553 268268 74610\n [51] 23531 150119 226391 201568 179264 79944 196686 252667 117309 3903\n [61] 77690 195142 229873 254472 179943 236618 68193 87154 28541 78622\n [71] 155664 50115 40866 70753 260118 12033 96149 20740 37461 73998\n [81] 231939 192329 88649 197664 86006 142486 159539 251298 104864 164090\n [91] 102380 218968 145182 239323 261272 118979 17202 194277 229284 258723\n\n\n\nMFI_Matrix[,61]\n\n [1] 248.567276 -85.832993 -301.460663 -94.384613 186.172073 -461.407745\n [7] 843.507080 277.516113 -106.166855 281.633545 195.927261 818.865723\n [13] 734.996460 209.356476 206.442596 279.859894 518.165222 56.947498\n [19] 285.751007 857.126343 -94.384613 -213.030518 62.585236 138.409653\n [25] 118.012444 328.255768 -61.635056 185.285233 464.384979 5.637739\n [31] -66.385956 31.229273 1198.241211 185.475266 873.279419 457.607025\n [37] -73.353951 37.880539 729.168640 221.772171 -169.512238 348.272888\n [43] -338.391022 845.534119 -4.434176 620.024597 610.269409 -193.900208\n [49] 230.830566 -23.754517 607.102112 14.949510 -34.333195 -169.132172\n [55] -96.158287 220.631958 125.297165 -15.202891 -126.057304 193.393448\n [61] 90.203819 -277.706146 590.505615 911.096619 -92.230873 347.259369\n [67] 135.559113 369.430267 -62.015125 -180.597672 -146.517868 810.440796\n [73] 134.038818 -165.268097 727.711731 -88.746880 62.901962 203.275330\n [79] 436.196289 -242.676147 -40.857769 222.278946 -170.272385 525.513245\n [85] -41.491222 176.670258 201.501648 175.530045 329.839386 474.140167\n [91] -48.142490 -174.833252 46.052090 357.584656 -26.541714 191.493088\n [97] 211.320190 124.790398 -113.324883 343.268616\n\n\nWhat would happen if used a column index number that didn’t exist? Let’s check.\n\nMFI_Matrix[,350]\n\nError in `MFI_Matrix[, 350]`:\n! subscript out of bounds\n\n\nWe get back an error message telling us the subscript is out of bounds.\nSo if columns are specified by a number after the comma (ex. [,1]), how are rows specified? In R, rows would be specified by a number before the comma [1,]\n\nMFI_Matrix[1,]\n\n Time UV1-A UV2-A UV3-A UV4-A \n 38823.00000 37.79983 -184.48000 353.87714 1106.22998 \n UV5-A UV6-A UV7-A UV8-A UV9-A \n 1145.18140 2130.21899 4376.34277 3246.79517 32050.65039 \n UV10-A UV11-A UV12-A UV13-A UV14-A \n 8123.26367 1992.57849 1070.33228 956.43573 290.86853 \n UV15-A UV16-A SSC-H SSC-A V1-A \n 385.49921 670.97687 657613.00000 750760.12500 1171.13904 \n V2-A V3-A V4-A V5-A V6-A \n 154.56281 1346.44885 1706.92603 1923.50940 898.25269 \n V7-A V8-A V9-A V10-A V11-A \n 3162.55371 83596.50781 32506.76172 27161.51367 6236.07275 \n V12-A V13-A V14-A V15-A V16-A \n 2220.30322 2023.39966 753.58936 510.95404 228.34962 \n FSC-H FSC-A SSC-B-H SSC-B-A B1-A \n1055905.00000 1217097.50000 716733.00000 815959.06250 606.66833 \n B2-A B3-A B4-A B5-A B6-A \n 416.98294 4172.47119 192400.09375 93929.93750 54236.33203 \n B7-A B8-A B9-A B10-A B11-A \n 19342.64453 10507.24219 9498.12695 4465.50928 1668.04810 \n B12-A B13-A B14-A R1-A R2-A \n 2199.94751 1581.73450 1487.56860 147.13348 129.86763 \n R3-A R4-A R5-A R6-A R7-A \n 35.90353 267.23999 49.79849 -732.70966 42.83144 \n R8-A \n 248.56728 \n\n\nAnd while not the focus of today, we could retrieve individual values from a matrix by specifying both a row and a column index number. So for example, if we wanted the MFI value for the UV1-A detector for the first acquired cell (knowing that UV1-A is the 2nd column):\n\nMFI_Matrix[1,2]\n\n UV1-A \n37.79983 \n\n\nFrom our exploration, this looks to be all the information contained within the “exprs” slot, so let’s back up and check on the next slot.\n\n\n\n\nparameters\nAs we look at the next slot in the flowFrame object, we can see that parameters looks like it is going to be another more complex object, as it is showing up as an AnnotatedDataFrame object (defined by the Biobase R package, and itself contains 4 slots).\n\n\nHaving carved our way this far into the heart of an .fcs file, we are not about to call it quits now, so CHARGE my fellow cytometrist!!! Click that drop-down arrow!\n\nHaving survived our charge into the unknown, the four parameter slots appear to be “varMetadata”, “data”, “dimLabels” and “._classVersion_”.\n\n\nvarMetadata\nFortunately for us, both “varMetadata” and “data” at least appear to be table-like objects of a type known as a “data.frame”, so lets click on the grid to open in our editor window.\nIn the case of varMetadata, we seem to have retrieved a column of metadata names.\n\nThese look reminiscent of what we saw at the top of the read.FCS() column outputs previously\n\n\n\ndata\nClicking on the grid for parameters’s data slot will end opening the actual content that was displayed.\n\nLet’s try to retrieve the data contained within this slot and save it as it’s own variable/object within our R session. First, we need to open flowFrame object, then use @ to get inside its parameters slot. Since parameters is also a complex object (AnnotatedDataFrame specifically), we will need to use another @ to get inside its data slot:\n\nParameterData <- flowFrame@parameters@data\n\nhead(ParameterData, 10)\n\n name desc range minRange maxRange\n$P1 Time <NA> 272140 0.00000 272139\n$P2 UV1-A <NA> 4194304 -111.00000 4194303\n$P3 UV2-A <NA> 4194304 -111.00000 4194303\n$P4 UV3-A <NA> 4194304 -111.00000 4194303\n$P5 UV4-A <NA> 4194304 -111.00000 4194303\n$P6 UV5-A <NA> 4194304 -111.00000 4194303\n$P7 UV6-A <NA> 4194304 -111.00000 4194303\n$P8 UV7-A <NA> 4194304 -26.34649 4194303\n$P9 UV8-A <NA> 4194304 -111.00000 4194303\n$P10 UV9-A <NA> 4194304 0.00000 4194303\n\n\nAnd similarly, we could access with the Bioconductor helper function parameters(), but we would need to specify the accessor for data outside the parenthesis.\n\nParameterData_Alternate <- parameters(flowFrame)@data\n\nIf we ran the str() function, we get the following insight into ParameterData’s object type\n\nstr(ParameterData)\n\n'data.frame': 61 obs. of 5 variables:\n $ name : 'AsIs' Named chr \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" ...\n ..- attr(*, \"names\")= chr [1:61] \"$P1N\" \"$P2N\" \"$P3N\" \"$P4N\" ...\n $ desc : 'AsIs' Named chr NA NA NA NA ...\n ..- attr(*, \"names\")= chr [1:61] NA NA NA NA ...\n $ range : num 272140 4194304 4194304 4194304 4194304 ...\n $ minRange: num 0 -111 -111 -111 -111 ...\n $ maxRange: num 272139 4194303 4194303 4194303 4194303 ...\n\n\nWe can see this class of object is a “data.frame”. This is one of the more common object types in R, and we will be seeing these extensively throughout the course. We see that each of the columns appears to be designated by a $ followed by the column name, and then type of column (numeric, character, etc).\n\nIf we are trying to see these columns in R, we notice that data.frame is not like the previous S4 class objets we interacted with, as the @ symbol after doesn’t bring up any suggestions\n\nParameterData@\n\nBy contrast, adding the $ we saw when using the str() function does retrieve the underlying information\n\nParameterData$\n\n\nAs you become more familiar with R, remembering to check what kind of object you are working with, and how to access the contents will with practice become more familiar to you.\nSimilar to what we saw with a matrix, we can subset a data.frame based on the column or row index using square brackets [].\n\nParameterData[,1]\n\n $P1N $P2N $P3N $P4N $P5N $P6N $P7N $P8N \n \"Time\" \"UV1-A\" \"UV2-A\" \"UV3-A\" \"UV4-A\" \"UV5-A\" \"UV6-A\" \"UV7-A\" \n $P9N $P10N $P11N $P12N $P13N $P14N $P15N $P16N \n \"UV8-A\" \"UV9-A\" \"UV10-A\" \"UV11-A\" \"UV12-A\" \"UV13-A\" \"UV14-A\" \"UV15-A\" \n $P17N $P18N $P19N $P20N $P21N $P22N $P23N $P24N \n \"UV16-A\" \"SSC-H\" \"SSC-A\" \"V1-A\" \"V2-A\" \"V3-A\" \"V4-A\" \"V5-A\" \n $P25N $P26N $P27N $P28N $P29N $P30N $P31N $P32N \n \"V6-A\" \"V7-A\" \"V8-A\" \"V9-A\" \"V10-A\" \"V11-A\" \"V12-A\" \"V13-A\" \n $P33N $P34N $P35N $P36N $P37N $P38N $P39N $P40N \n \"V14-A\" \"V15-A\" \"V16-A\" \"FSC-H\" \"FSC-A\" \"SSC-B-H\" \"SSC-B-A\" \"B1-A\" \n $P41N $P42N $P43N $P44N $P45N $P46N $P47N $P48N \n \"B2-A\" \"B3-A\" \"B4-A\" \"B5-A\" \"B6-A\" \"B7-A\" \"B8-A\" \"B9-A\" \n $P49N $P50N $P51N $P52N $P53N $P54N $P55N $P56N \n \"B10-A\" \"B11-A\" \"B12-A\" \"B13-A\" \"B14-A\" \"R1-A\" \"R2-A\" \"R3-A\" \n $P57N $P58N $P59N $P60N $P61N \n \"R4-A\" \"R5-A\" \"R6-A\" \"R7-A\" \"R8-A\" \n\n\nThe individual detectors or fluorophore appear under “name”. For now, based on what we know, the $P# appears to be some sort of name being used as an internal consistent reference to the respective.\n“desc” is appearing empty for this raw spectral fcs file, but if you were to checked an unmixed file, this would be occupied the marker/ligand name assigned to it during the experiment setup.\n“range”, “minRange” and “maxRange” are beyond the scope of today, but are used by both instrument manufacturers and software vendors when setting appropiate scaling for a plot. For the actual details, see the Flow Cytometry Standard documentation.\nHaving exhausted our options under parameters “varMetadata” and “data” slots, let’s continue to the next slot.\n\n\ndimLabels\n\nIn this case, not much is returned. Yey!\n\nflowFrame@parameters@dimLabels\n\n[1] \"rowNames\" \"columnNames\"\n\n\n\n\nclassVersion\nContinuing on to the last slot “.__classVersion__”\n\nflowFrame@parameters@.__classVersion__\n\nAnnotatedDataFrame \n \"1.1.0\" \n\n\nAlso mercifully short, both of these seem to be more involved in defining the S4 class object, and don’t contain anything we need to retrieve today.\n\n\n\n\nDescription\nAt this point, we have explored both “exprs” and “parameter” slots for the flowFrame object we created. Let’s tackle the final slot, named description.\n\nWhen doing so, a very large list is opened within the Positron variables window. While we could scroll through it, it might be easier to retrieve certain number of rows via the console to make interpreting this more structured.\n\nTo retrieve the list itself, we would need to access the description slot of the flowFrame object. Since it is a slot, we will need to use the @ accessor.\n\n\nDescriptionList <- flowFrame@description\n\n\nDescriptionList \n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n$`$CYT`\n[1] \"Aurora\"\n\n$`$CYTOLIB_VERSION`\n[1] \"2.22.0\"\n\n$`$CYTSN`\n[1] \"V0333\"\n\n$`$DATATYPE`\n[1] \"F\"\n\n$`$DATE`\n[1] \"04-Aug-2025\"\n\n$`$ENDANALYSIS`\n[1] \"0\"\n\n$`$ENDDATA`\n[1] \"57711\"\n\n$`$ENDSTEXT`\n[1] \"0\"\n\n$`$ETIM`\n[1] \"13:55:57.02\"\n\n$`$FIL`\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$`$INST`\n[1] \"UMBC\"\n\n$`$MODE`\n[1] \"L\"\n\n$`$NEXTDATA`\n[1] \"0\"\n\n$`$OP`\n[1] \"David Rach\"\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"\n\n$ORIGINALGUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"\n\n$THRESHOLD\n[1] \"(FSC,50000)\"\n\n$TUBENAME\n[1] \"05\"\n\n$USERSETTINGNAME\n[1] \"DTR_CellCounts\"\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n\nThe returned list is a little too large to reasonably explore. We can attempt to subset using the head() function as shown below\n\nhead(DescriptionList, 5)\n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n\nAlternatively, it might be better to subset based on position index\n\nDescriptionList[1:10]\n\n$`$BEGINANALYSIS`\n[1] \"0\"\n\n$`$BEGINDATA`\n[1] \"33312\"\n\n$`$BEGINSTEXT`\n[1] \"0\"\n\n$`$BTIM`\n[1] \"13:55:29.85\"\n\n$`$BYTEORD`\n[1] \"4,3,2,1\"\n\n$`$CYT`\n[1] \"Aurora\"\n\n$`$CYTOLIB_VERSION`\n[1] \"2.22.0\"\n\n$`$CYTSN`\n[1] \"V0333\"\n\n$`$DATATYPE`\n[1] \"F\"\n\n$`$DATE`\n[1] \"04-Aug-2025\"\n\n\nAnd just as we saw for exprs and parameters, there is also a Bioconductor helper keyword() function to access this same information directly from the flowFrame.\n\nDescriptionList_Alternate <- keyword(flowFrame)\n\nIf we run the class() function, we can see that DescriptionList is an actual “list”.\n\nclass(DescriptionList)\n\n[1] \"list\"\n\n\nThis is in contrast to the vectors we have previously generated. While these are also list like, they are what are known as as atomic list, which contain values that are all either characters, numerics or logicals.\n\nFluorophores <- c(\"BV421\", \"FITC\", \"PE\", \"APC\")\nclass(Fluorophores)\n\n[1] \"character\"\n\n\n\nPanelAntibodyCounts <- c(5, 12, 19, 26, 34, 46, 51)\nclass(PanelAntibodyCounts)\n\n[1] \"numeric\"\n\n\n\nSpecimenIndexToKeep <- c(TRUE, TRUE, FALSE, TRUE)\nclass(SpecimenIndexToKeep)\n\n[1] \"logical\"\n\n\nA list on the other hand is not restricted to contain objects composed entirely of a certain atomic type. For example, I could include the three previous vectors into a list using the list() function.\n\nMyListofVectors <- list(Fluorophores, PanelAntibodyCounts, SpecimenIndexToKeep)\nstr(MyListofVectors)\n\nList of 3\n $ : chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n $ : num [1:7] 5 12 19 26 34 46 51\n $ : logi [1:4] TRUE TRUE FALSE TRUE\n\n\nWe can see that with the Description/Keyword list we retrieved from our flowFrame shares a somewhat similar format.\n\nstr(DescriptionList[1:10])\n\nList of 10\n $ $BEGINANALYSIS : chr \"0\"\n $ $BEGINDATA : chr \"33312\"\n $ $BEGINSTEXT : chr \"0\"\n $ $BTIM : chr \"13:55:29.85\"\n $ $BYTEORD : chr \"4,3,2,1\"\n $ $CYT : chr \"Aurora\"\n $ $CYTOLIB_VERSION: chr \"2.22.0\"\n $ $CYTSN : chr \"V0333\"\n $ $DATATYPE : chr \"F\"\n $ $DATE : chr \"04-Aug-2025\"\n\n\nBut in this case, there are also names present ($BEGINANALYSIS, $BEGINDATA, etc). What if we had tried to provide names to our List of Vectors? Would the format match?\nWhen we assigned a name to each of the vectors (by providing an equal to = ), we get the same kind of structure format to what we see in Description.\n\nMyNamedListofVectors <- list(FluorophoresNamed=Fluorophores,\n PanelAntibodyCountsNamed=PanelAntibodyCounts,\n SpecimenIndexToKeepNamed=SpecimenIndexToKeep)\n\nstr(MyNamedListofVectors)\n\nList of 3\n $ FluorophoresNamed : chr [1:4] \"BV421\" \"FITC\" \"PE\" \"APC\"\n $ PanelAntibodyCountsNamed: num [1:7] 5 12 19 26 34 46 51\n $ SpecimenIndexToKeepNamed: logi [1:4] TRUE TRUE FALSE TRUE\n\n\nWe could then subsequently be able to isolate items from that list using the $ operator.\n\nMyNamedListofVectors$\n\n\nAlternatively, we could also access by list index position\n\nMyNamedListofVectors[1]\n\n$FluorophoresNamed\n[1] \"BV421\" \"FITC\" \"PE\" \"APC\" \n\n\nRemembering back to the original output from read.FCS() we remember that it mentioned 599 keywords being in the description slot, so now we know that this is what was being referenced.", "crumbs": [ "About", "Intro to R", - "01 - Installing R Packages" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#troubleshooting-install-errors", - "href": "course/01_InstallingRPackages/index.html#troubleshooting-install-errors", - "title": "01 - Installing R Packages", - "section": "Troubleshooting Install Errors", - "text": "Troubleshooting Install Errors\nWe have now installed three R packages, dplyr, PeacoQC, and flowSpectrum. In my case, I did not encounter any errors during the installation. However, sometimes a package installation will fail due to an error encountered during the installation process. This can be due to a number of reasons, ranging from a missing dependency, or an update that caused a conflict. While these can occur for CRAN or Bioconductor packages, they are more frequently seen for GitHub packages where the Description/Namespace files may not have been fully updated yet to install all the required dependencies.\nWhen encountering an error, start of by first reading through the message to see if you can parse any useful information about what package failed to install, and if it list the missing dependency packages name. The later was the case in the error message example shown below.\n\n\n\nIf you encounter an installation error this week, please take screenshots of the error message and post them to this Discussion. This will help us troubleshoot your installation, as well as provide additional examples of installation errors that will be used to update this section in the future.", + "objectID": "course/03_InsideFCSFile/index.html#early-metadata", + "href": "course/03_InsideFCSFile/index.html#early-metadata", + "title": "03 - Inside an FCS File", + "section": "Early Metadata", + "text": "Early Metadata\nWithin the initial portion, we are getting back metadata keywords related to where and how the particular file was acquired. Keywords of potential interest include:\n\n\n\n\n\n\nStart Time\n\n\n\nWhat time was the .fcs file acquired\n\n\n\n\nDescriptionList$`$BTIM`\n\n[1] \"13:55:29.85\"\n\n\n\n\n\n\n\n\n\nCytometer\n\n\n\nWhat type of cytometer was the .fcs file acquired on\n\n\n\n\nDescriptionList$`$CYT`\n\n[1] \"Aurora\"\n\n\n\n\n\n\n\n\n\n\n\nCytometer Serial Number\n\n\n\nManufacturer Serial Number of the Cytometer\n\n\n\n\nDescriptionList$`$CYTSN`\n\n[1] \"V0333\"\n\n\n\n\n\n\n\n\n\nFCS File Acquisition Date\n\n\n\nWhat was the date of acquisition\n\n\n\n\nDescriptionList$`$DATE`\n\n[1] \"04-Aug-2025\"\n\n\n\n\n\n\n\n\n\n\n\nAcquisition End Time\n\n\n\nWhat time was acquisition stopped\n\n\n\n\nDescriptionList$`$ETIM`\n\n[1] \"13:55:57.02\"\n\n\n\n\n\n\n\n\n\nFile Name\n\n\n\nName of the .fcs file\n\n\n\n\nDescriptionList$`$FIL`\n\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\n\n\n\n\n\n\n\n\n\nOperator\n\n\n\nWho acquired the .fcs file\n\n\n\n\nDescriptionList$`$OP`\n\n[1] \"David Rach\"", "crumbs": [ "About", "Intro to R", - "01 - Installing R Packages" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#installing-specific-package-versions", - "href": "course/01_InstallingRPackages/index.html#installing-specific-package-versions", - "title": "01 - Installing R Packages", - "section": "Installing Specific-Package Versions", - "text": "Installing Specific-Package Versions\nWhile we may be tempted to think of R packages as static, they change quite often, as their develipers add new features, fix bugs, etc. To help keep track of these changes (essential for reproducibility and replicability), R packages have version numbers.\nWhen we run sessionInfo(), we can see an example of this, with the version number appearing after the package name.\n\nsessionInfo()\n\nR version 4.5.2 (2025-10-31)\nPlatform: x86_64-pc-linux-gnu\nRunning under: Debian GNU/Linux 13 (trixie)\n\nMatrix products: default\nBLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.1 \nLAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.1; LAPACK version 3.12.0\n\nlocale:\n [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C \n [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 \n [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 \n [7] LC_PAPER=en_US.UTF-8 LC_NAME=C \n [9] LC_ADDRESS=C LC_TELEPHONE=C \n[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C \n\ntime zone: America/New_York\ntzcode source: system (glibc)\n\nattached base packages:\n[1] stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] PeacoQC_1.20.0 BiocManager_1.30.27 BiocStyle_2.38.0 \n\nloaded via a namespace (and not attached):\n [1] generics_0.1.4 shape_1.4.6.1 digest_0.6.39 \n [4] magrittr_2.0.4 evaluate_1.0.5 grid_4.5.2 \n [7] RColorBrewer_1.1-3 iterators_1.0.14 circlize_0.4.17 \n[10] fastmap_1.2.0 foreach_1.5.2 doParallel_1.0.17 \n[13] jsonlite_2.0.0 graph_1.88.1 GlobalOptions_0.1.3 \n[16] ComplexHeatmap_2.26.0 flowWorkspace_4.22.1 scales_1.4.0 \n[19] XML_3.99-0.20 Rgraphviz_2.54.0 codetools_0.2-20 \n[22] cli_3.6.5 RProtoBufLib_2.22.0 rlang_1.1.7 \n[25] crayon_1.5.3 Biobase_2.70.0 yaml_2.3.12 \n[28] otel_0.2.0 cytolib_2.22.0 ncdfFlow_2.56.0 \n[31] tools_4.5.2 parallel_4.5.2 dplyr_1.2.0 \n[34] colorspace_2.1-2 ggplot2_4.0.2 GetoptLong_1.1.0 \n[37] BiocGenerics_0.56.0 vctrs_0.7.1 R6_2.6.1 \n[40] png_0.1-8 matrixStats_1.5.0 stats4_4.5.2 \n[43] lifecycle_1.0.5 flowCore_2.22.1 S4Vectors_0.48.0 \n[46] htmlwidgets_1.6.4 IRanges_2.44.0 clue_0.3-66 \n[49] cluster_2.1.8.1 pkgconfig_2.0.3 pillar_1.11.1 \n[52] gtable_0.3.6 data.table_1.18.2.1 glue_1.8.0 \n[55] xfun_0.56 tibble_3.3.1 tidyselect_1.2.1 \n[58] knitr_1.51 farver_2.1.2 rjson_0.2.23 \n[61] htmltools_0.5.9 rmarkdown_2.30 compiler_4.5.2 \n[64] S7_0.2.1 \n\n\n\n\nAlternatively, we can retrieve the same information for the individual packages via the packageVersion() function\n\npackageVersion(\"PeacoQC\")\n\n[1] '1.20.0'\n\n\n\n\nAs well as from the citation() function.\n\ncitation(\"PeacoQC\")\n\nTo cite package 'PeacoQC' in publications use:\n\n Emmaneel A (2025). _PeacoQC: Peak-based selection of high quality\n cytometry data_. doi:10.18129/B9.bioc.PeacoQC\n <https://doi.org/10.18129/B9.bioc.PeacoQC>, R package version 1.20.0,\n <https://bioconductor.org/packages/PeacoQC>.\n\nA BibTeX entry for LaTeX users is\n\n @Manual{,\n title = {PeacoQC: Peak-based selection of high quality cytometry data},\n author = {Annelies Emmaneel},\n year = {2025},\n note = {R package version 1.20.0},\n url = {https://bioconductor.org/packages/PeacoQC},\n doi = {10.18129/B9.bioc.PeacoQC},\n }\n\n\n\n\nHow does a version number work? Lets say we have the following version number: 1.20.0\nThe first number of the version (1. in this case) denotes major changes, primarily those where after the version change the package may not be compatible with the code used in the prior version. As a consequence, this number changes rarely.\nThe second number (.20. in this case) is the minor version. Minor changes typically consist of new features that are added, that don’t affect the overall package function. These will change more frequently, especially for Bioconductor packages with fixed release cycles.\nThe final number (.0 in this case) is often used to denote small changes occuring within a minor release period, often bug-fixes or fixing typos within the documentation.\n\n\nWe may in the future need to install specific package versions (but wont be doing so today). As expected, which repository contains the R package influences how we would go about doing this.\nFor CRAN packages, we can use the remotes packages install_version() function. This allows us to provide the version number, and designate the repository location (the CRAN url in this case).\n\nremotes::install_version(\"ggplot2\", version = \"3.5.2\", repos = \"https://cloud.r-project.org\")\n\nFor GitHub-based R packages, the package versioning schema is not as strict as that of CRAN or Bioconductor. Typically, changes in R packagaes are put out by their developers as releases. When trying to install a particular release, we can add an additional argument to the install_github() function, specifying the release version’s tag number. For example:\n\nremotes::install_github(\"DavidRach/Luciernaga\", ref = \"v0.99.7\")\n\nAlternatively, if the developer doesn’t implement releases, you can provide the hash number of a particular commit.\n\nremotes::install_github(\"DavidRach/Luciernaga\", ref = \"8d1d694\")", + "objectID": "course/03_InsideFCSFile/index.html#detector-values", + "href": "course/03_InsideFCSFile/index.html#detector-values", + "title": "03 - Inside an FCS File", + "section": "Detector Values", + "text": "Detector Values\nThe next major stretch of keywords encode parameter values associated with the individual detectors for at the time of acquisition.\n\nDetectors <- DescriptionList[20:384]\nDetectors\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"\n\n\nFortunately for all involved, there is a consistently repeating pattern for the keywords corresponding to each detector. We can see that here for $P7B, $P7E, $P7N, $P7R, $P7TYPE, $P7V\n\nWhen referencing to the Flow Cytometry Standard documentation, here are what the particular keyword letters mean:\n\n\n\n\n\n\nB\n\n\n\nNumber of bits reserved for parameter number n\n\n\n\n\nDescriptionList$`$P7B`\n\n[1] \"32\"\n\n\n\n\n\n\n\n\n\nE\n\n\n\nAmplification type for parameter n. \n\n\n\n\nDescriptionList$`$P7E`\n\n[1] \"0,0\"\n\n\n\n\n\n\n\n\n\n\n\nN\n\n\n\nShort Name for parameter n. \n\n\n\n\nDescriptionList$`$P7N`\n\n[1] \"UV6-A\"\n\n\n\n\n\n\n\n\n\nR\n\n\n\nRange for parameter number n. \n\n\n\n\nDescriptionList$`$P7R`\n\n[1] \"4194304\"\n\n\n\n\n\n\n\n\n\n\n\nTYPE\n\n\n\nDetector type for parameter n. \n\n\n\n\nDescriptionList$`$P7TYPE`\n\n[1] \"Raw_Fluorescence\"\n\n\n\n\n\n\n\n\n\nV\n\n\n\nDetector voltage for parameter n. \n\n\n\n\nDescriptionList$`$P7V`\n\n[1] \"506\"\n\n\n\n\n\nWhile not immediately obvious, understanding what these keywords encoded has proven useful for our core. In our case, we have built an automated InstrumentQC dashboard for all the instruments at our core.\n\n\n\nBy extracting out from our daily QC bead .fcs files the stored N (Detector Name) and V (Gain/Voltage) values for all the individual detectors, it allows us to plot Levey-Jennings Plots for our individual instruments, giving us usually around a months warning before an individual laser begins to fail. This helps with scheduling the Field-Service Engineer visit before it starts impacting the actual data.\n\n\n\nWhile most of the detectors keywords are similar (only changing there individual name and voltage) there are a couple exceptions.\nFor the FSC/SSC parameters, instead of Raw_Fluorescence value for Type, we see the corresponding Scatter value get return. This in term is what is used by various commercial softwares to show those axis as linear instead of biexponential when selected.\n\n\n\nThis is similarly the case for the Time parameter, where in addition to Type being set to Time, the range also appears different to Raw/Scatters value.", "crumbs": [ "About", "Intro to R", - "01 - Installing R Packages" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/01_InstallingRPackages/index.html#documentation-and-websites", - "href": "course/01_InstallingRPackages/index.html#documentation-and-websites", - "title": "01 - Installing R Packages", - "section": "Documentation and Websites", - "text": "Documentation and Websites\nWe have already seen a couple ways to access the help documentation contained within an R package via Positron. Beyond internal documentation, R packages often have external websites that contain additional walk-through articles (ie. vignettes) to better document how to use the package.\nFor CRAN-based packages, we can start off by searching for the package name. So, in the case of dplyr:\n\n\n\nTwo main suggestions pop up. One is the package’s CRAN page. Unfortunately, this one is not particularly user-friendly, although some text-based vignettes are accessible.\n\n\n\nBecause of this, many CRAN-based R packages (especially those part of the tidyverse) use pkgdown-generated websites hosted via a GitHub page (similar to the one used by this course. The second option on the search is dplyr’s pkgdown-style website\n\n\n\nWe can usually find the list of functions under the Reference tab, with the more extensive documentation vignettes being found under the Articles tab.\n\n\n\nGitHub-based packages will vary depending on their individual developers, but often will also use pkgdown-style websites. These often appear as links on the right-hand side, or within the repository’s ReadMe.\n\n\n\nFor Bioconductor-based packages, on the package’s page we can typically find the already rendered vignette articles, usually as either html or pdf files. For example, with PeacoQC:\n\n\n\nAdditionally, package vignettes can also be reached via the packages help index page. These will usually appear under User guides, package vignettes, and other documentation.", + "objectID": "course/03_InsideFCSFile/index.html#middle-metadata", + "href": "course/03_InsideFCSFile/index.html#middle-metadata", + "title": "03 - Inside an FCS File", + "section": "Middle Metadata", + "text": "Middle Metadata\nOnce we are out of the detector keywords, we find the last of the $Metadata associated keywords.\n\nDetectors <- DescriptionList[385:398]\nDetectors\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\nAmong those of potential interest\n\n\n\n\n\n\nProj\n\n\n\nOften corresponding to the experiment file name\n\n\n\n\nDescriptionList$`$PROJ`\n\n[1] \"CellCounts4L_AB_05\"\n\n\n\n\n\n\n\n\n\nSpillover\n\n\n\nWhere the internal spillover matrix is stored (we will revisit during compensation)\n\n\n\n\nDescriptionList$`$SPILLOVER`\n\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n\n\n\n\n\n\n\n\nTOT\n\n\n\nTotal events (in this case my downsampled 100 cells)\n\n\n\n\nDescriptionList$`$TOT`\n\n[1] \"100\"\n\n\n\n\n\n\n\n\n\nVolume\n\n\n\nVolume amount acquired during acquisition.\n\n\n\n\nDescriptionList$`$VOL`\n\n[1] \"30.31\"\n\n\n\n\n\n\n\n\n\nSoftware\n\n\n\nSoftware used and version\n\n\n\n\nDescriptionList$CREATOR\n\n[1] \"SpectroFlo 3.3.0\"\n\n\n\nYou will notice at this point, the keyword names including a “$” symbol have stopped, so tick marks are no longer required (except when there is a space in the name). The only $ remaining is being used as a selector for a particular item in the list.\n\nDetectors <- DescriptionList[390:398]\nDetectors\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"\n\n\n\n\n\n\n\n\nFILENAME\n\n\n\nBasically the full file.path to the .fcs file of interest.\n\n\n\n\nDescriptionList$FILENAME\n\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n\n\n\n\n\n\n\n\nGROUPNAME\n\n\n\nThe Name assigned to the acquisition Group.\n\n\n\n\nDescriptionList$GROUPNAME\n\n[1] \"ND050\"", "crumbs": [ "About", "Intro to R", - "01 - Installing R Packages" + "03 - Inside a .FCS file" ] }, { - "objectID": "course/02_FilePaths/Downsampler.html", - "href": "course/02_FilePaths/Downsampler.html", - "title": "Downsampling", - "section": "", - "text": "Due to trying to keep the overall file size down, I am downsampling to 100 events. For anyone interested in how I did this, this Quarto Markdown Document contains the code needed to repeat the process." - }, - { - "objectID": "course/02_FilePaths/Downsampler.html#specify-file.path-and-identify-files", - "href": "course/02_FilePaths/Downsampler.html#specify-file.path-and-identify-files", - "title": "Downsampling", - "section": "Specify file.path and identify files", - "text": "Specify file.path and identify files\nDue to the counts being conducter on two separate instruments, the number of columns differs, so they will need to be loaded into separate GatingSet objects.\n\nStorageLocation <- file.path(\"course\", \"02_FilePaths\", \"data\")\nExisting <- list.files(StorageLocation, pattern=\".fcs\", full.names=TRUE)\nList1 <- Existing[1:2] # 3L Aurora\nList2 <- Existing[3:8] # 4L Aurora" - }, - { - "objectID": "course/02_FilePaths/Downsampler.html#load-.fcs-files-into-a-gatingset", - "href": "course/02_FilePaths/Downsampler.html#load-.fcs-files-into-a-gatingset", - "title": "Downsampling", - "section": "Load .fcs files into a GatingSet", - "text": "Load .fcs files into a GatingSet\nLoad in files to their respective GatingSet objects\n\ncs1 <- load_cytoset_from_fcs(List1, truncate_max_range = FALSE, transformation = FALSE)\ngs1 <- GatingSet(cs1)\n\ncs2 <- load_cytoset_from_fcs(List2, truncate_max_range = FALSE, transformation = FALSE)\ngs2 <- GatingSet(cs2)" + "objectID": "course/03_InsideFCSFile/index.html#laser-metadata", + "href": "course/03_InsideFCSFile/index.html#laser-metadata", + "title": "03 - Inside an FCS File", + "section": "Laser Metadata", + "text": "Laser Metadata\nNext up, there is a small stretch of keywords containing the values associated with the individual lasers as far as delays and area scaling factors for a particular day (also useful when plotted).\n\nDetectors <- DescriptionList[399:410]\nDetectors\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"", + "crumbs": [ + "About", + "Intro to R", + "03 - Inside a .FCS file" + ] }, { - "objectID": "course/03_InsideFCSFile/slides.html#getting-set-up", - "href": "course/03_InsideFCSFile/slides.html#getting-set-up", + "objectID": "course/03_InsideFCSFile/index.html#display", + "href": "course/03_InsideFCSFile/index.html#display", "title": "03 - Inside an FCS File", - "section": "Getting Set Up", - "text": "Getting Set Up" + "section": "Display", + "text": "Display\nThen there is a stretch matching whether a particular detector needs to be displayed as linear (in the case of time and scatter) or as log (for individual detectors).\n\nDetectors <- DescriptionList[412:472]\nDetectors\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"\n\n\nAnd a few final keywords with threshold, window scaling and other user selected settings.\n\nDetectors <- DescriptionList[473:476]\nDetectors\n\n$THRESHOLD\n[1] \"(FSC,50000)\"\n\n$TUBENAME\n[1] \"05\"\n\n$USERSETTINGNAME\n[1] \"DTR_CellCounts\"\n\n$`WINDOW EXTENSION`\n[1] \"3\"", + "crumbs": [ + "About", + "Intro to R", + "03 - Inside a .FCS file" + ] }, { - "objectID": "course/03_InsideFCSFile/slides.html#flowcore", - "href": "course/03_InsideFCSFile/slides.html#flowcore", + "objectID": "course/03_InsideFCSFile/index.html#flowcore-parameters", + "href": "course/03_InsideFCSFile/index.html#flowcore-parameters", "title": "03 - Inside an FCS File", - "section": "flowCore", - "text": "flowCore\n\n\n\n\n\n\n\n\n.\n\n\nWe will be using the flowCore package, which is the oldest and most-frequently downloaded flow cytometry package on Bioconductor." + "section": "flowCore Parameters", + "text": "flowCore Parameters\nDepending on the arguments selected during read.FCS(), we might also encounter additional keywords that are added in by flowCore. For example, we do not see these keywords when “transformation” is set to FALSE.\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = FALSE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot\n\n\n\nNoChange <- keyword(flowCoreCheck)\nDetectors <- NoChange [476:500]\nDetectors\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n$<NA>\nNULL\n\n\nBy contrast, if we had set “transformation” to TRUE:\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = TRUE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n599 keywords are stored in the 'description' slot\n\n\n\nYesChange <- keyword(flowCoreCheck)\nDetectors <- YesChange [476:500]\nDetectors\n\n$`WINDOW EXTENSION`\n[1] \"3\"\n\n$transformation\n[1] \"applied\"\n\n$`flowCore_$P1Rmax`\n[1] \"272140\"\n\n$`flowCore_$P1Rmin`\n[1] \"0\"\n\n$`flowCore_$P2Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P2Rmin`\n[1] \"-111\"\n\n$`flowCore_$P3Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P3Rmin`\n[1] \"-111\"\n\n$`flowCore_$P4Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P4Rmin`\n[1] \"-111\"\n\n$`flowCore_$P5Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P5Rmin`\n[1] \"-111\"\n\n$`flowCore_$P6Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P6Rmin`\n[1] \"-111\"\n\n$`flowCore_$P7Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P7Rmin`\n[1] \"-111\"\n\n$`flowCore_$P8Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P8Rmin`\n[1] \"-26.3464946746826\"\n\n$`flowCore_$P9Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P9Rmin`\n[1] \"-111\"\n\n$`flowCore_$P10Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P10Rmin`\n[1] \"0\"\n\n$`flowCore_$P11Rmax`\n[1] \"4194304\"\n\n$`flowCore_$P11Rmin`\n[1] \"-111\"\n\n$`flowCore_$P12Rmax`\n[1] \"4194304\"\n\n\n\n\nFor some flow cytometry R packages, you will notice when opening their exported .fcs outputs in commercial software that these flowCore keywords have ended up integrated. It is likely somewhere in the package code the author forgot to add set transformation to FALSE, which is why we are seeing these flowCore keywords after the fact.", + "crumbs": [ + "About", + "Intro to R", + "03 - Inside a .FCS file" + ] }, { - "objectID": "course/03_InsideFCSFile/slides.html#flowframe", - "href": "course/03_InsideFCSFile/slides.html#flowframe", - "title": "03 - Inside an FCS File", - "section": "flowFrame", - "text": "flowFrame\n\n\n\n\n\n\n\n\n.\n\n\nFor read.FCS(), it accepts several arguments. The argument “filename” is where we provide our file.path to .fcs file that we wish to load into R. Let’s go ahead and do so\n\n\n\n\n\n\n\nread.FCS(filename=firstfile)" + "objectID": "course/04_IntroToTidyverse/BonusContent.html", + "href": "course/04_IntroToTidyverse/BonusContent.html", + "title": "Bonus Content", + "section": "", + "text": "thefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"\nData <- read.csv(file=thefilepath, check.names=FALSE)\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\"" }, { - "objectID": "course/03_InsideFCSFile/slides.html#early-metadata", - "href": "course/03_InsideFCSFile/slides.html#early-metadata", - "title": "03 - Inside an FCS File", - "section": "Early Metadata", - "text": "Early Metadata\n\n\n\n\n\n\n\n\n.\n\n\nWithin the initial portion, we are getting back metadata keywords related to where and how the particular file was acquired. Keywords of potential interest include:\n\n\n\n\n\n\n\n\n\n\n\n\n\nStart Time\n\n\nWhat time was the .fcs file acquired\n\n\n\n\n\n\n\nDescriptionList$`$BTIM`\n\n[1] \"13:55:29.85\"" + "objectID": "course/04_IntroToTidyverse/BonusContent.html#pull", + "href": "course/04_IntroToTidyverse/BonusContent.html#pull", + "title": "Bonus Content", + "section": "Pull", + "text": "Pull" }, { - "objectID": "course/03_InsideFCSFile/slides.html#detector-values", - "href": "course/03_InsideFCSFile/slides.html#detector-values", - "title": "03 - Inside an FCS File", - "section": "Detector Values", - "text": "Detector Values\n\n\n\n\n\n\n\n\n.\n\n\nThe next major stretch of keywords encode parameter values associated with the individual detectors for at the time of acquisition.\n\n\n\n\n\n\n\nDetectors <- DescriptionList[20:384]\nDetectors\n\n$`$P10B`\n[1] \"32\"\n\n$`$P10E`\n[1] \"0,0\"\n\n$`$P10N`\n[1] \"UV9-A\"\n\n$`$P10R`\n[1] \"4194304\"\n\n$`$P10TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P10V`\n[1] \"710\"\n\n$`$P11B`\n[1] \"32\"\n\n$`$P11E`\n[1] \"0,0\"\n\n$`$P11N`\n[1] \"UV10-A\"\n\n$`$P11R`\n[1] \"4194304\"\n\n$`$P11TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P11V`\n[1] \"377\"\n\n$`$P12B`\n[1] \"32\"\n\n$`$P12E`\n[1] \"0,0\"\n\n$`$P12N`\n[1] \"UV11-A\"\n\n$`$P12R`\n[1] \"4194304\"\n\n$`$P12TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P12V`\n[1] \"469\"\n\n$`$P13B`\n[1] \"32\"\n\n$`$P13E`\n[1] \"0,0\"\n\n$`$P13N`\n[1] \"UV12-A\"\n\n$`$P13R`\n[1] \"4194304\"\n\n$`$P13TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P13V`\n[1] \"434\"\n\n$`$P14B`\n[1] \"32\"\n\n$`$P14E`\n[1] \"0,0\"\n\n$`$P14N`\n[1] \"UV13-A\"\n\n$`$P14R`\n[1] \"4194304\"\n\n$`$P14TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P14V`\n[1] \"564\"\n\n$`$P15B`\n[1] \"32\"\n\n$`$P15E`\n[1] \"0,0\"\n\n$`$P15N`\n[1] \"UV14-A\"\n\n$`$P15R`\n[1] \"4194304\"\n\n$`$P15TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P15V`\n[1] \"975\"\n\n$`$P16B`\n[1] \"32\"\n\n$`$P16E`\n[1] \"0,0\"\n\n$`$P16N`\n[1] \"UV15-A\"\n\n$`$P16R`\n[1] \"4194304\"\n\n$`$P16TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P16V`\n[1] \"737\"\n\n$`$P17B`\n[1] \"32\"\n\n$`$P17E`\n[1] \"0,0\"\n\n$`$P17N`\n[1] \"UV16-A\"\n\n$`$P17R`\n[1] \"4194304\"\n\n$`$P17TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P17V`\n[1] \"1069\"\n\n$`$P18B`\n[1] \"32\"\n\n$`$P18E`\n[1] \"0,0\"\n\n$`$P18N`\n[1] \"SSC-H\"\n\n$`$P18R`\n[1] \"4194304\"\n\n$`$P18TYPE`\n[1] \"Side_Scatter\"\n\n$`$P18V`\n[1] \"334\"\n\n$`$P19B`\n[1] \"32\"\n\n$`$P19E`\n[1] \"0,0\"\n\n$`$P19N`\n[1] \"SSC-A\"\n\n$`$P19R`\n[1] \"4194304\"\n\n$`$P19TYPE`\n[1] \"Side_Scatter\"\n\n$`$P19V`\n[1] \"334\"\n\n$`$P1B`\n[1] \"32\"\n\n$`$P1E`\n[1] \"0,0\"\n\n$`$P1N`\n[1] \"Time\"\n\n$`$P1R`\n[1] \"272140\"\n\n$`$P1TYPE`\n[1] \"Time\"\n\n$`$P20B`\n[1] \"32\"\n\n$`$P20E`\n[1] \"0,0\"\n\n$`$P20N`\n[1] \"V1-A\"\n\n$`$P20R`\n[1] \"4194304\"\n\n$`$P20TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P20V`\n[1] \"352\"\n\n$`$P21B`\n[1] \"32\"\n\n$`$P21E`\n[1] \"0,0\"\n\n$`$P21N`\n[1] \"V2-A\"\n\n$`$P21R`\n[1] \"4194304\"\n\n$`$P21TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P21V`\n[1] \"412\"\n\n$`$P22B`\n[1] \"32\"\n\n$`$P22E`\n[1] \"0,0\"\n\n$`$P22N`\n[1] \"V3-A\"\n\n$`$P22R`\n[1] \"4194304\"\n\n$`$P22TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P22V`\n[1] \"304\"\n\n$`$P23B`\n[1] \"32\"\n\n$`$P23E`\n[1] \"0,0\"\n\n$`$P23N`\n[1] \"V4-A\"\n\n$`$P23R`\n[1] \"4194304\"\n\n$`$P23TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P23V`\n[1] \"217\"\n\n$`$P24B`\n[1] \"32\"\n\n$`$P24E`\n[1] \"0,0\"\n\n$`$P24N`\n[1] \"V5-A\"\n\n$`$P24R`\n[1] \"4194304\"\n\n$`$P24TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P24V`\n[1] \"257\"\n\n$`$P25B`\n[1] \"32\"\n\n$`$P25E`\n[1] \"0,0\"\n\n$`$P25N`\n[1] \"V6-A\"\n\n$`$P25R`\n[1] \"4194304\"\n\n$`$P25TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P25V`\n[1] \"218\"\n\n$`$P26B`\n[1] \"32\"\n\n$`$P26E`\n[1] \"0,0\"\n\n$`$P26N`\n[1] \"V7-A\"\n\n$`$P26R`\n[1] \"4194304\"\n\n$`$P26TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P26V`\n[1] \"303\"\n\n$`$P27B`\n[1] \"32\"\n\n$`$P27E`\n[1] \"0,0\"\n\n$`$P27N`\n[1] \"V8-A\"\n\n$`$P27R`\n[1] \"4194304\"\n\n$`$P27TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P27V`\n[1] \"461\"\n\n$`$P28B`\n[1] \"32\"\n\n$`$P28E`\n[1] \"0,0\"\n\n$`$P28N`\n[1] \"V9-A\"\n\n$`$P28R`\n[1] \"4194304\"\n\n$`$P28TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P28V`\n[1] \"320\"\n\n$`$P29B`\n[1] \"32\"\n\n$`$P29E`\n[1] \"0,0\"\n\n$`$P29N`\n[1] \"V10-A\"\n\n$`$P29R`\n[1] \"4194304\"\n\n$`$P29TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P29V`\n[1] \"359\"\n\n$`$P2B`\n[1] \"32\"\n\n$`$P2E`\n[1] \"0,0\"\n\n$`$P2N`\n[1] \"UV1-A\"\n\n$`$P2R`\n[1] \"4194304\"\n\n$`$P2TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P2V`\n[1] \"1008\"\n\n$`$P30B`\n[1] \"32\"\n\n$`$P30E`\n[1] \"0,0\"\n\n$`$P30N`\n[1] \"V11-A\"\n\n$`$P30R`\n[1] \"4194304\"\n\n$`$P30TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P30V`\n[1] \"271\"\n\n$`$P31B`\n[1] \"32\"\n\n$`$P31E`\n[1] \"0,0\"\n\n$`$P31N`\n[1] \"V12-A\"\n\n$`$P31R`\n[1] \"4194304\"\n\n$`$P31TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P31V`\n[1] \"234\"\n\n$`$P32B`\n[1] \"32\"\n\n$`$P32E`\n[1] \"0,0\"\n\n$`$P32N`\n[1] \"V13-A\"\n\n$`$P32R`\n[1] \"4194304\"\n\n$`$P32TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P32V`\n[1] \"236\"\n\n$`$P33B`\n[1] \"32\"\n\n$`$P33E`\n[1] \"0,0\"\n\n$`$P33N`\n[1] \"V14-A\"\n\n$`$P33R`\n[1] \"4194304\"\n\n$`$P33TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P33V`\n[1] \"318\"\n\n$`$P34B`\n[1] \"32\"\n\n$`$P34E`\n[1] \"0,0\"\n\n$`$P34N`\n[1] \"V15-A\"\n\n$`$P34R`\n[1] \"4194304\"\n\n$`$P34TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P34V`\n[1] \"602\"\n\n$`$P35B`\n[1] \"32\"\n\n$`$P35E`\n[1] \"0,0\"\n\n$`$P35N`\n[1] \"V16-A\"\n\n$`$P35R`\n[1] \"4194304\"\n\n$`$P35TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P35V`\n[1] \"372\"\n\n$`$P36B`\n[1] \"32\"\n\n$`$P36E`\n[1] \"0,0\"\n\n$`$P36N`\n[1] \"FSC-H\"\n\n$`$P36R`\n[1] \"4194304\"\n\n$`$P36TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P36V`\n[1] \"55\"\n\n$`$P37B`\n[1] \"32\"\n\n$`$P37E`\n[1] \"0,0\"\n\n$`$P37N`\n[1] \"FSC-A\"\n\n$`$P37R`\n[1] \"4194304\"\n\n$`$P37TYPE`\n[1] \"Forward_Scatter\"\n\n$`$P37V`\n[1] \"55\"\n\n$`$P38B`\n[1] \"32\"\n\n$`$P38E`\n[1] \"0,0\"\n\n$`$P38N`\n[1] \"SSC-B-H\"\n\n$`$P38R`\n[1] \"4194304\"\n\n$`$P38TYPE`\n[1] \"Side_Scatter\"\n\n$`$P38V`\n[1] \"241\"\n\n$`$P39B`\n[1] \"32\"\n\n$`$P39E`\n[1] \"0,0\"\n\n$`$P39N`\n[1] \"SSC-B-A\"\n\n$`$P39R`\n[1] \"4194304\"\n\n$`$P39TYPE`\n[1] \"Side_Scatter\"\n\n$`$P39V`\n[1] \"241\"\n\n$`$P3B`\n[1] \"32\"\n\n$`$P3E`\n[1] \"0,0\"\n\n$`$P3N`\n[1] \"UV2-A\"\n\n$`$P3R`\n[1] \"4194304\"\n\n$`$P3TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P3V`\n[1] \"286\"\n\n$`$P40B`\n[1] \"32\"\n\n$`$P40E`\n[1] \"0,0\"\n\n$`$P40N`\n[1] \"B1-A\"\n\n$`$P40R`\n[1] \"4194304\"\n\n$`$P40TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P40V`\n[1] \"1013\"\n\n$`$P41B`\n[1] \"32\"\n\n$`$P41E`\n[1] \"0,0\"\n\n$`$P41N`\n[1] \"B2-A\"\n\n$`$P41R`\n[1] \"4194304\"\n\n$`$P41TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P41V`\n[1] \"483\"\n\n$`$P42B`\n[1] \"32\"\n\n$`$P42E`\n[1] \"0,0\"\n\n$`$P42N`\n[1] \"B3-A\"\n\n$`$P42R`\n[1] \"4194304\"\n\n$`$P42TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P42V`\n[1] \"471\"\n\n$`$P43B`\n[1] \"32\"\n\n$`$P43E`\n[1] \"0,0\"\n\n$`$P43N`\n[1] \"B4-A\"\n\n$`$P43R`\n[1] \"4194304\"\n\n$`$P43TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P43V`\n[1] \"473\"\n\n$`$P44B`\n[1] \"32\"\n\n$`$P44E`\n[1] \"0,0\"\n\n$`$P44N`\n[1] \"B5-A\"\n\n$`$P44R`\n[1] \"4194304\"\n\n$`$P44TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P44V`\n[1] \"467\"\n\n$`$P45B`\n[1] \"32\"\n\n$`$P45E`\n[1] \"0,0\"\n\n$`$P45N`\n[1] \"B6-A\"\n\n$`$P45R`\n[1] \"4194304\"\n\n$`$P45TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P45V`\n[1] \"284\"\n\n$`$P46B`\n[1] \"32\"\n\n$`$P46E`\n[1] \"0,0\"\n\n$`$P46N`\n[1] \"B7-A\"\n\n$`$P46R`\n[1] \"4194304\"\n\n$`$P46TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P46V`\n[1] \"531\"\n\n$`$P47B`\n[1] \"32\"\n\n$`$P47E`\n[1] \"0,0\"\n\n$`$P47N`\n[1] \"B8-A\"\n\n$`$P47R`\n[1] \"4194304\"\n\n$`$P47TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P47V`\n[1] \"432\"\n\n$`$P48B`\n[1] \"32\"\n\n$`$P48E`\n[1] \"0,0\"\n\n$`$P48N`\n[1] \"B9-A\"\n\n$`$P48R`\n[1] \"4194304\"\n\n$`$P48TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P48V`\n[1] \"675\"\n\n$`$P49B`\n[1] \"32\"\n\n$`$P49E`\n[1] \"0,0\"\n\n$`$P49N`\n[1] \"B10-A\"\n\n$`$P49R`\n[1] \"4194304\"\n\n$`$P49TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P49V`\n[1] \"490\"\n\n$`$P4B`\n[1] \"32\"\n\n$`$P4E`\n[1] \"0,0\"\n\n$`$P4N`\n[1] \"UV3-A\"\n\n$`$P4R`\n[1] \"4194304\"\n\n$`$P4TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P4V`\n[1] \"677\"\n\n$`$P50B`\n[1] \"32\"\n\n$`$P50E`\n[1] \"0,0\"\n\n$`$P50N`\n[1] \"B11-A\"\n\n$`$P50R`\n[1] \"4194304\"\n\n$`$P50TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P50V`\n[1] \"286\"\n\n$`$P51B`\n[1] \"32\"\n\n$`$P51E`\n[1] \"0,0\"\n\n$`$P51N`\n[1] \"B12-A\"\n\n$`$P51R`\n[1] \"4194304\"\n\n$`$P51TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P51V`\n[1] \"407\"\n\n$`$P52B`\n[1] \"32\"\n\n$`$P52E`\n[1] \"0,0\"\n\n$`$P52N`\n[1] \"B13-A\"\n\n$`$P52R`\n[1] \"4194304\"\n\n$`$P52TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P52V`\n[1] \"700\"\n\n$`$P53B`\n[1] \"32\"\n\n$`$P53E`\n[1] \"0,0\"\n\n$`$P53N`\n[1] \"B14-A\"\n\n$`$P53R`\n[1] \"4194304\"\n\n$`$P53TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P53V`\n[1] \"693\"\n\n$`$P54B`\n[1] \"32\"\n\n$`$P54E`\n[1] \"0,0\"\n\n$`$P54N`\n[1] \"R1-A\"\n\n$`$P54R`\n[1] \"4194304\"\n\n$`$P54TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P54V`\n[1] \"158\"\n\n$`$P55B`\n[1] \"32\"\n\n$`$P55E`\n[1] \"0,0\"\n\n$`$P55N`\n[1] \"R2-A\"\n\n$`$P55R`\n[1] \"4194304\"\n\n$`$P55TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P55V`\n[1] \"245\"\n\n$`$P56B`\n[1] \"32\"\n\n$`$P56E`\n[1] \"0,0\"\n\n$`$P56N`\n[1] \"R3-A\"\n\n$`$P56R`\n[1] \"4194304\"\n\n$`$P56TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P56V`\n[1] \"338\"\n\n$`$P57B`\n[1] \"32\"\n\n$`$P57E`\n[1] \"0,0\"\n\n$`$P57N`\n[1] \"R4-A\"\n\n$`$P57R`\n[1] \"4194304\"\n\n$`$P57TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P57V`\n[1] \"238\"\n\n$`$P58B`\n[1] \"32\"\n\n$`$P58E`\n[1] \"0,0\"\n\n$`$P58N`\n[1] \"R5-A\"\n\n$`$P58R`\n[1] \"4194304\"\n\n$`$P58TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P58V`\n[1] \"191\"\n\n$`$P59B`\n[1] \"32\"\n\n$`$P59E`\n[1] \"0,0\"\n\n$`$P59N`\n[1] \"R6-A\"\n\n$`$P59R`\n[1] \"4194304\"\n\n$`$P59TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P59V`\n[1] \"274\"\n\n$`$P5B`\n[1] \"32\"\n\n$`$P5E`\n[1] \"0,0\"\n\n$`$P5N`\n[1] \"UV4-A\"\n\n$`$P5R`\n[1] \"4194304\"\n\n$`$P5TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P5V`\n[1] \"1022\"\n\n$`$P60B`\n[1] \"32\"\n\n$`$P60E`\n[1] \"0,0\"\n\n$`$P60N`\n[1] \"R7-A\"\n\n$`$P60R`\n[1] \"4194304\"\n\n$`$P60TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P60V`\n[1] \"524\"\n\n$`$P61B`\n[1] \"32\"\n\n$`$P61E`\n[1] \"0,0\"\n\n$`$P61N`\n[1] \"R8-A\"\n\n$`$P61R`\n[1] \"4194304\"\n\n$`$P61TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P61V`\n[1] \"243\"\n\n$`$P6B`\n[1] \"32\"\n\n$`$P6E`\n[1] \"0,0\"\n\n$`$P6N`\n[1] \"UV5-A\"\n\n$`$P6R`\n[1] \"4194304\"\n\n$`$P6TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P6V`\n[1] \"616\"\n\n$`$P7B`\n[1] \"32\"\n\n$`$P7E`\n[1] \"0,0\"\n\n$`$P7N`\n[1] \"UV6-A\"\n\n$`$P7R`\n[1] \"4194304\"\n\n$`$P7TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P7V`\n[1] \"506\"\n\n$`$P8B`\n[1] \"32\"\n\n$`$P8E`\n[1] \"0,0\"\n\n$`$P8N`\n[1] \"UV7-A\"\n\n$`$P8R`\n[1] \"4194304\"\n\n$`$P8TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P8V`\n[1] \"661\"\n\n$`$P9B`\n[1] \"32\"\n\n$`$P9E`\n[1] \"0,0\"\n\n$`$P9N`\n[1] \"UV8-A\"\n\n$`$P9R`\n[1] \"4194304\"\n\n$`$P9TYPE`\n[1] \"Raw_Fluorescence\"\n\n$`$P9V`\n[1] \"514\"" + "objectID": "course/04_IntroToTidyverse/BonusContent.html#case-when", + "href": "course/04_IntroToTidyverse/BonusContent.html#case-when", + "title": "Bonus Content", + "section": "Case-When", + "text": "Case-When\nCase-when is an useful function, but may be a bit much to try to teach in the main segment. Basically, when the condition on the left side of the ~ is fulfilled, it will execute what is being specified on the right hand side.\nIn turn, we can combine these together by adding a “,”. I tend to use this mutate str_detect case_when combination when encountering messy data out in the while where I need to selectively change particular cell values in a consistent reproducible manner" }, { - "objectID": "course/03_InsideFCSFile/slides.html#middle-metadata", - "href": "course/03_InsideFCSFile/slides.html#middle-metadata", - "title": "03 - Inside an FCS File", - "section": "Middle Metadata", - "text": "Middle Metadata\n\n\n\n\n\n\n\n\n.\n\n\nOnce we are out of the detector keywords, we find the last of the $Metadata associated keywords.\n\n\n\n\n\n\n\nDetectors <- DescriptionList[385:398]\nDetectors\n\n$`$PAR`\n[1] \"61\"\n\n$`$PROJ`\n[1] \"CellCounts4L_AB_05\"\n\n$`$SPILLOVER`\n UV1-A UV2-A UV3-A UV4-A UV5-A UV6-A UV7-A UV8-A UV9-A UV10-A UV11-A\n [1,] 1e+00 0 0 0 0 0 0 0 0 0 0\n [2,] 1e-06 1 0 0 0 0 0 0 0 0 0\n [3,] 0e+00 0 1 0 0 0 0 0 0 0 0\n [4,] 0e+00 0 0 1 0 0 0 0 0 0 0\n [5,] 0e+00 0 0 0 1 0 0 0 0 0 0\n [6,] 0e+00 0 0 0 0 1 0 0 0 0 0\n [7,] 0e+00 0 0 0 0 0 1 0 0 0 0\n [8,] 0e+00 0 0 0 0 0 0 1 0 0 0\n [9,] 0e+00 0 0 0 0 0 0 0 1 0 0\n[10,] 0e+00 0 0 0 0 0 0 0 0 1 0\n[11,] 0e+00 0 0 0 0 0 0 0 0 0 1\n[12,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[13,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[14,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[15,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[16,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[17,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[18,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[19,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[20,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[21,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[22,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[23,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[24,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[25,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[26,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[27,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[28,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[29,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[30,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[31,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[32,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[33,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[34,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[35,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[36,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[37,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[38,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[39,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[40,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[41,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[42,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[43,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[44,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[45,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[46,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[47,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[48,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[49,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[50,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[51,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[52,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[53,] 0e+00 0 0 0 0 0 0 0 0 0 0\n[54,] 0e+00 0 0 0 0 0 0 0 0 0 0\n UV12-A UV13-A UV14-A UV15-A UV16-A V1-A V2-A V3-A V4-A V5-A V6-A V7-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 1 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 1 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 1 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 1 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 1 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 1 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 1 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 1 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 1 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 1 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 1 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 1\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0\n V8-A V9-A V10-A V11-A V12-A V13-A V14-A V15-A V16-A B1-A B2-A B3-A B4-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[37,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n B5-A B6-A B7-A B8-A B9-A B10-A B11-A B12-A B13-A B14-A R1-A R2-A R3-A\n [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [2,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [3,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [4,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [5,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [6,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [7,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [8,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n [9,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[10,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[11,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[12,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[13,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[14,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[15,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[16,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[17,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[18,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[19,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[20,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[21,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[22,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[23,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[24,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[25,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[26,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[27,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[28,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[29,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[30,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[31,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[32,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[33,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[34,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[35,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[36,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[37,] 1 0 0 0 0 0 0 0 0 0 0 0 0\n[38,] 0 1 0 0 0 0 0 0 0 0 0 0 0\n[39,] 0 0 1 0 0 0 0 0 0 0 0 0 0\n[40,] 0 0 0 1 0 0 0 0 0 0 0 0 0\n[41,] 0 0 0 0 1 0 0 0 0 0 0 0 0\n[42,] 0 0 0 0 0 1 0 0 0 0 0 0 0\n[43,] 0 0 0 0 0 0 1 0 0 0 0 0 0\n[44,] 0 0 0 0 0 0 0 1 0 0 0 0 0\n[45,] 0 0 0 0 0 0 0 0 1 0 0 0 0\n[46,] 0 0 0 0 0 0 0 0 0 1 0 0 0\n[47,] 0 0 0 0 0 0 0 0 0 0 1 0 0\n[48,] 0 0 0 0 0 0 0 0 0 0 0 1 0\n[49,] 0 0 0 0 0 0 0 0 0 0 0 0 1\n[50,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[51,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[52,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[53,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n[54,] 0 0 0 0 0 0 0 0 0 0 0 0 0\n R4-A R5-A R6-A R7-A R8-A\n [1,] 0 0 0 0 0\n [2,] 0 0 0 0 0\n [3,] 0 0 0 0 0\n [4,] 0 0 0 0 0\n [5,] 0 0 0 0 0\n [6,] 0 0 0 0 0\n [7,] 0 0 0 0 0\n [8,] 0 0 0 0 0\n [9,] 0 0 0 0 0\n[10,] 0 0 0 0 0\n[11,] 0 0 0 0 0\n[12,] 0 0 0 0 0\n[13,] 0 0 0 0 0\n[14,] 0 0 0 0 0\n[15,] 0 0 0 0 0\n[16,] 0 0 0 0 0\n[17,] 0 0 0 0 0\n[18,] 0 0 0 0 0\n[19,] 0 0 0 0 0\n[20,] 0 0 0 0 0\n[21,] 0 0 0 0 0\n[22,] 0 0 0 0 0\n[23,] 0 0 0 0 0\n[24,] 0 0 0 0 0\n[25,] 0 0 0 0 0\n[26,] 0 0 0 0 0\n[27,] 0 0 0 0 0\n[28,] 0 0 0 0 0\n[29,] 0 0 0 0 0\n[30,] 0 0 0 0 0\n[31,] 0 0 0 0 0\n[32,] 0 0 0 0 0\n[33,] 0 0 0 0 0\n[34,] 0 0 0 0 0\n[35,] 0 0 0 0 0\n[36,] 0 0 0 0 0\n[37,] 0 0 0 0 0\n[38,] 0 0 0 0 0\n[39,] 0 0 0 0 0\n[40,] 0 0 0 0 0\n[41,] 0 0 0 0 0\n[42,] 0 0 0 0 0\n[43,] 0 0 0 0 0\n[44,] 0 0 0 0 0\n[45,] 0 0 0 0 0\n[46,] 0 0 0 0 0\n[47,] 0 0 0 0 0\n[48,] 0 0 0 0 0\n[49,] 0 0 0 0 0\n[50,] 1 0 0 0 0\n[51,] 0 1 0 0 0\n[52,] 0 0 1 0 0\n[53,] 0 0 0 1 0\n[54,] 0 0 0 0 1\n\n$`$TIMESTEP`\n[1] \"0.0001\"\n\n$`$TOT`\n[1] \"100\"\n\n$`$VOL`\n[1] \"30.31\"\n\n$`APPLY COMPENSATION`\n[1] \"FALSE\"\n\n$CHARSET\n[1] \"utf-8\"\n\n$CREATOR\n[1] \"SpectroFlo 3.3.0\"\n\n$FCSversion\n[1] \"3\"\n\n$FILENAME\n[1] \"data/CellCounts4L_AB_05_ND050_05.fcs\"\n\n$`FSC ASF`\n[1] \"1.21\"\n\n$GROUPNAME\n[1] \"ND050\"\n\n$GUID\n[1] \"CellCounts4L_AB_05-ND050-05.fcs\"" + "objectID": "course/04_IntroToTidyverse/BonusContent.html#selecting-columns-base-r", + "href": "course/04_IntroToTidyverse/BonusContent.html#selecting-columns-base-r", + "title": "Bonus Content", + "section": "Selecting Columns (Base R)", + "text": "Selecting Columns (Base R)\nAs we saw last week, there are multiple ways to select values from particular columns in base R. If we had wanted to retrieve the “Date” column, why not first identify its index position, and use [,] to extract the underlying data?\n\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\n\ncolnames(Data)[4]\n\n[1] \"Date\"\n\n\n\nDataColumn <- Data[,4] # Column specified after the ,\nDataColumn\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [11] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [16] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [21] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [26] \"2025-07-26\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [31] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [36] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [41] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-29\"\n [46] \"2025-07-29\" \"2025-07-29\" \"2025-07-29\" \"2025-07-31\" \"2025-07-31\"\n [51] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [56] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [61] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [66] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [71] \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\" \"2025-07-31\"\n [76] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [81] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [86] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [91] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-05\"\n [96] \"2025-08-05\" \"2025-08-05\" \"2025-08-05\" \"2025-08-07\" \"2025-08-07\"\n[101] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[106] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[111] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[116] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\"\n[121] \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-07\" \"2025-08-22\"\n[126] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[131] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[136] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[141] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[146] \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\" \"2025-08-22\"\n[151] \"2025-08-22\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[156] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[161] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[166] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[171] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-28\"\n[176] \"2025-08-28\" \"2025-08-28\" \"2025-08-28\" \"2025-08-30\" \"2025-08-30\"\n[181] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[186] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[191] \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\" \"2025-08-30\"\n[196] \"2025-08-30\"\n\n\nHowever, looking at the output, we see this looks like the values, not a column. Our suspicions are confirmed when running DataColumn\n\nstr(DataColumn)\n\n chr [1:196] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n\n\nThis is similarly the case when we use the $ accessor.\n\nDataColumn <- Data$Date\nstr(DataColumn)\n\n chr [1:196] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n\n\n\nhead(DataColumn, 3)\n\n[1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nBy contrast, when selecting two columns, the structure is maintained.\n\nTwoColumns <- Data[,4:5]\n\nWhy is the data.frame column structure lost in base R when isolating a single data.frame column? And who thought to make it that convoluted? If we were an R course in early 2010s, we might go into an explanation, but fortunately, we don’t need to understand why, we have the dplyr R package to rescue us." }, { - "objectID": "course/03_InsideFCSFile/slides.html#laser-metadata", - "href": "course/03_InsideFCSFile/slides.html#laser-metadata", - "title": "03 - Inside an FCS File", - "section": "Laser Metadata", - "text": "Laser Metadata\n\n\n\n\n\n\n\n\n.\n\n\nNext up, there is a small stretch of keywords containing the values associated with the individual lasers as far as delays and area scaling factors for a particular day (also useful when plotted).\n\n\n\n\n\n\n\nDetectors <- DescriptionList[399:410]\nDetectors\n\n$LASER1ASF\n[1] \"1.09\"\n\n$LASER1DELAY\n[1] \"-19.525\"\n\n$LASER1NAME\n[1] \"Violet\"\n\n$LASER2ASF\n[1] \"1.14\"\n\n$LASER2DELAY\n[1] \"0\"\n\n$LASER2NAME\n[1] \"Blue\"\n\n$LASER3ASF\n[1] \"1.02\"\n\n$LASER3DELAY\n[1] \"20.15\"\n\n$LASER3NAME\n[1] \"Red\"\n\n$LASER4ASF\n[1] \"0.92\"\n\n$LASER4DELAY\n[1] \"40.725\"\n\n$LASER4NAME\n[1] \"UV\"" + "objectID": "course/05_GatingSets/slides.html#flowframe", + "href": "course/05_GatingSets/slides.html#flowframe", + "title": "05 - Gating Sets", + "section": "flowFrame", + "text": "flowFrame\n\n\n\n\n\n\n\n\n.\n\n\nLet’s start off by recalling the approach we first saw during Week 03, where using the flowCore package we loaded the contents of our .fcs file into R as a “flowFrame” object." }, { - "objectID": "course/03_InsideFCSFile/slides.html#display", - "href": "course/03_InsideFCSFile/slides.html#display", - "title": "03 - Inside an FCS File", - "section": "Display", - "text": "Display\n\n\n\n\n\n\n\n\n.\n\n\nThen there is a stretch matching whether a particular detector needs to be displayed as linear (in the case of time and scatter) or as log (for individual detectors).\n\n\n\n\n\n\n\nDetectors <- DescriptionList[412:472]\nDetectors\n\n$P10DISPLAY\n[1] \"LOG\"\n\n$P11DISPLAY\n[1] \"LOG\"\n\n$P12DISPLAY\n[1] \"LOG\"\n\n$P13DISPLAY\n[1] \"LOG\"\n\n$P14DISPLAY\n[1] \"LOG\"\n\n$P15DISPLAY\n[1] \"LOG\"\n\n$P16DISPLAY\n[1] \"LOG\"\n\n$P17DISPLAY\n[1] \"LOG\"\n\n$P18DISPLAY\n[1] \"LIN\"\n\n$P19DISPLAY\n[1] \"LIN\"\n\n$P1DISPLAY\n[1] \"LOG\"\n\n$P20DISPLAY\n[1] \"LOG\"\n\n$P21DISPLAY\n[1] \"LOG\"\n\n$P22DISPLAY\n[1] \"LOG\"\n\n$P23DISPLAY\n[1] \"LOG\"\n\n$P24DISPLAY\n[1] \"LOG\"\n\n$P25DISPLAY\n[1] \"LOG\"\n\n$P26DISPLAY\n[1] \"LOG\"\n\n$P27DISPLAY\n[1] \"LOG\"\n\n$P28DISPLAY\n[1] \"LOG\"\n\n$P29DISPLAY\n[1] \"LOG\"\n\n$P2DISPLAY\n[1] \"LOG\"\n\n$P30DISPLAY\n[1] \"LOG\"\n\n$P31DISPLAY\n[1] \"LOG\"\n\n$P32DISPLAY\n[1] \"LOG\"\n\n$P33DISPLAY\n[1] \"LOG\"\n\n$P34DISPLAY\n[1] \"LOG\"\n\n$P35DISPLAY\n[1] \"LOG\"\n\n$P36DISPLAY\n[1] \"LIN\"\n\n$P37DISPLAY\n[1] \"LIN\"\n\n$P38DISPLAY\n[1] \"LIN\"\n\n$P39DISPLAY\n[1] \"LIN\"\n\n$P3DISPLAY\n[1] \"LOG\"\n\n$P40DISPLAY\n[1] \"LOG\"\n\n$P41DISPLAY\n[1] \"LOG\"\n\n$P42DISPLAY\n[1] \"LOG\"\n\n$P43DISPLAY\n[1] \"LOG\"\n\n$P44DISPLAY\n[1] \"LOG\"\n\n$P45DISPLAY\n[1] \"LOG\"\n\n$P46DISPLAY\n[1] \"LOG\"\n\n$P47DISPLAY\n[1] \"LOG\"\n\n$P48DISPLAY\n[1] \"LOG\"\n\n$P49DISPLAY\n[1] \"LOG\"\n\n$P4DISPLAY\n[1] \"LOG\"\n\n$P50DISPLAY\n[1] \"LOG\"\n\n$P51DISPLAY\n[1] \"LOG\"\n\n$P52DISPLAY\n[1] \"LOG\"\n\n$P53DISPLAY\n[1] \"LOG\"\n\n$P54DISPLAY\n[1] \"LOG\"\n\n$P55DISPLAY\n[1] \"LOG\"\n\n$P56DISPLAY\n[1] \"LOG\"\n\n$P57DISPLAY\n[1] \"LOG\"\n\n$P58DISPLAY\n[1] \"LOG\"\n\n$P59DISPLAY\n[1] \"LOG\"\n\n$P5DISPLAY\n[1] \"LOG\"\n\n$P60DISPLAY\n[1] \"LOG\"\n\n$P61DISPLAY\n[1] \"LOG\"\n\n$P6DISPLAY\n[1] \"LOG\"\n\n$P7DISPLAY\n[1] \"LOG\"\n\n$P8DISPLAY\n[1] \"LOG\"\n\n$P9DISPLAY\n[1] \"LOG\"" + "objectID": "course/05_GatingSets/slides.html#flowset", + "href": "course/05_GatingSets/slides.html#flowset", + "title": "05 - Gating Sets", + "section": "flowSet", + "text": "flowSet\n\n\n\n\n\n\n\n\n.\n\n\nConsequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.\n\n\n\n\n\n\n\nflowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,\n transformation = FALSE)\nflowSet\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A" }, { - "objectID": "course/03_InsideFCSFile/slides.html#flowcore-parameters", - "href": "course/03_InsideFCSFile/slides.html#flowcore-parameters", - "title": "03 - Inside an FCS File", - "section": "flowCore Parameters", - "text": "flowCore Parameters\n\n\n\n\n\n\n\n\n.\n\n\nDepending on the arguments selected during read.FCS(), we might also encounter additional keywords that are added in by flowCore. For example, we do not see these keywords when “transformation” is set to FALSE.\n\n\n\n\n\n\n\nflowCoreCheck <- read.FCS(filename=firstfile,\n transformation = FALSE, truncate_max_range = FALSE)\n\nflowCoreCheck\n\nflowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'\nwith 100 cells and 61 observables:\n name desc range minRange maxRange\n$P1 Time NA 272140 0 272139\n$P2 UV1-A NA 4194304 -111 4194303\n$P3 UV2-A NA 4194304 -111 4194303\n$P4 UV3-A NA 4194304 -111 4194303\n$P5 UV4-A NA 4194304 -111 4194303\n... ... ... ... ... ...\n$P57 R4-A NA 4194304 -111 4194303\n$P58 R5-A NA 4194304 -111 4194303\n$P59 R6-A NA 4194304 -111 4194303\n$P60 R7-A NA 4194304 -111 4194303\n$P61 R8-A NA 4194304 -111 4194303\n476 keywords are stored in the 'description' slot" + "objectID": "course/05_GatingSets/slides.html#memory-usage", + "href": "course/05_GatingSets/slides.html#memory-usage", + "title": "05 - Gating Sets", + "section": "Memory Usage", + "text": "Memory Usage\n\n\n\n\n\n\n\n\n.\n\n\nBoth “flowFrame” and “flowSet” objects were implemented in the flowCore package, which is the oldest extant flow cytometry R package on Bioconductor. Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as “flowFrame” and “flowSet” objects.\n\n\n\n\n\n\n\n\n\n\n\n\n\n.\n\n\nOne consideration of this method is the contents of your .fcs files are read into your computer’s random access memory (RAM). While for individual .fcs files or small experiments this will not present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM." }, { - "objectID": "course/04_IntroToTidyverse/slides.html#read.csv", - "href": "course/04_IntroToTidyverse/slides.html#read.csv", - "title": "04 - Introduction to Tidyverse", - "section": "read.csv", - "text": "read.csv\n\n\n\n\n\n\n\n\n.\n\n\nWe will start by first loading in our copied over dataset (Dataset.csv) from it’s location in the project folder. If you are following the organization scheme we have been using throughout the course, your file path will look something like this:\n\n\n\n\n\n\n\n\n\n\nthefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"" + "objectID": "course/05_GatingSets/slides.html#cytoframe", + "href": "course/05_GatingSets/slides.html#cytoframe", + "title": "05 - Gating Sets", + "section": "cytoframe", + "text": "cytoframe\n\n\n\n\n\n\n\n\n.\n\n\nIn addition to the flowCore R package, additional flow cytometry infrastructure support is provided by the flowWorkspace package. Instead of the reading all the .fcs files contents into active RAM, flowWorkspace reduces the memory overhead by using “pointers” to interact with the object in it’s current storage location (either on your harddrive, SSD, etc.), only reading in components to RAM as needed.\n\n\n\n\n\n\n\n# BiocManager::install(\"flowWorkspace\") #Bioconductor\nlibrary(flowWorkspace)" }, { - "objectID": "course/04_IntroToTidyverse/slides.html#data.frame", - "href": "course/04_IntroToTidyverse/slides.html#data.frame", - "title": "04 - Introduction to Tidyverse", - "section": "data.frame", - "text": "data.frame\n\n\n\n\n\n\n\n\n.\n\n\nOr alternatively using the new-to-us glimpse() function\n\n\n\n\n\n\n\nglimpse(Data)\n\nError in `glimpse()`:\n! could not find function \"glimpse\"" + "objectID": "course/05_GatingSets/slides.html#cytoset", + "href": "course/05_GatingSets/slides.html#cytoset", + "title": "05 - Gating Sets", + "section": "cytoset", + "text": "cytoset\n\n\n\n\n\n\n\n\n.\n\n\nAs well as “cytoset” to handle multiple .fcs files.\n\n\n\n\n\n\n\ncytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\ncytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\n\n\nclass(cytoset)\n\n[1] \"cytoset\"\nattr(,\"package\")\n[1] \"flowWorkspace\"" }, { - "objectID": "course/04_IntroToTidyverse/slides.html#column-value-type", - "href": "course/04_IntroToTidyverse/slides.html#column-value-type", - "title": "04 - Introduction to Tidyverse", - "section": "Column value type", - "text": "Column value type\n\n\n\n\n\n\n\n\n.\n\n\nAs we saw last week, functions often need values that match a certain type (the paintbrush needing paint analogy). As we inspect the columns of Data, we can notice some of the columns contain values within that are character (ie. “char”) values. Others appear to contain numeric values (which are subtyped as either double (“ie. dbl”) or integer (ie. “int”)). At first glance, we do not appear to have any logical (ie. TRUE or FALSE) columns in this dataset." + "objectID": "course/05_GatingSets/slides.html#interconverting", + "href": "course/05_GatingSets/slides.html#interconverting", + "title": "05 - Gating Sets", + "section": "Interconverting", + "text": "Interconverting\n\n\n\n\n\n\n\n\n.\n\n\nDespite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed." }, { - "objectID": "course/04_IntroToTidyverse/slides.html#select-columns", - "href": "course/04_IntroToTidyverse/slides.html#select-columns", - "title": "04 - Introduction to Tidyverse", - "section": "select (Columns)", - "text": "select (Columns)\n\n\n\n\n\n\n\n\n.\n\n\nNow that we have read in our data, and have a general picture of the structure and contents, lets start learning the main dplyr functions we will be using throughout the course. To do this, lets go ahead and attach dplyr to our local environment via the library() call.\n\n\n\n\n\n\n\nlibrary(dplyr)" + "objectID": "course/05_GatingSets/slides.html#gating-sets", + "href": "course/05_GatingSets/slides.html#gating-sets", + "title": "05 - Gating Sets", + "section": "Gating Sets", + "text": "Gating Sets\n\n\n\n\n\n\n\n\n.\n\n\nFortunately, regardless of whether we are using flowFrame/flowSet (RAM) and cytoframe/cytoset (memory pointers), both routes end up converging at the next step, where the underlying .fcs files are passed off to the GatingSet() function.\n\n\n\n\n\n\n\nGatingSet1 <- GatingSet(flowSet)\nGatingSet1 \n\nA GatingSet with 6 samples\n\n\n\n\n\nclass(GatingSet1)\n\n[1] \"GatingSet\"\nattr(,\"package\")\n[1] \"flowWorkspace\"" }, { - "objectID": "course/04_IntroToTidyverse/slides.html#relocate", - "href": "course/04_IntroToTidyverse/slides.html#relocate", - "title": "04 - Introduction to Tidyverse", - "section": "relocate", - "text": "relocate\n\n\n\n\n\n\n\n\n.\n\n\nAlternatively, we occasionally want to move one column. While we could respecify the location using select(), specifying the names of all the other columns out in a line of code to just to rearrange one does not sound like a good use of time. For this reason, the second dplyr function we will be learning is the relocate() function." + "objectID": "course/05_GatingSets/slides.html#cytoml", + "href": "course/05_GatingSets/slides.html#cytoml", + "title": "05 - Gating Sets", + "section": "CytoML", + "text": "CytoML\n\n\n\n\n\n\n\n\n.\n\n\nThe CytoML R package (also maintained by Mike Jiang) is a sister package to the flowWorkspace. It’s main purpose is to permit bringing in existing FlowJo, Diva and Cytobank Workspaces, with all their gates, transformations, etc. into R as fully assembled GatingSet objects. For those who already use one of these commercial softwares, it can be quite useful tool.\n\n\n\n\n\n\n\n\n\n\n\n\n\n.\n\n\nSince our goal is to examine a fully assembled GatingSet object, we will be using it today to bring in a FlowJo workspace to R. However, since this is a free Cytometry in R course, and not about to have everyone pay for a license for a one-off topic, in the pre-course Floreada walkthrough I documented how to convert a free Floreada.io workspae into a FlowJo.wsp that can also be used (please note that as of early 2026, some scaling bugs may be present and require troubleshooting)." }, { - "objectID": "course/04_IntroToTidyverse/slides.html#rename", - "href": "course/04_IntroToTidyverse/slides.html#rename", - "title": "04 - Introduction to Tidyverse", - "section": "rename", - "text": "rename\n\n\n\n\n\n\n\n\n.\n\n\nAt this point, we are able to both move and select particular columns, allowing us to rearrange and subset a larger data.frame object however we want it to appear. However, as we encountered, some of the names contain special characters and spaces, requiring use of tick marks (``) to avoid issues. How can we change a column name?" + "objectID": "course/05_GatingSets/slides.html#system-time", + "href": "course/05_GatingSets/slides.html#system-time", + "title": "05 - Gating Sets", + "section": "System Time", + "text": "System Time\n\n\n\n\n\n\n\n\n.\n\n\nEspecially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so." }, { - "objectID": "course/04_IntroToTidyverse/slides.html#pull", - "href": "course/04_IntroToTidyverse/slides.html#pull", - "title": "04 - Introduction to Tidyverse", - "section": "pull", - "text": "pull\n\n\n\n\n\n\n\n\n.\n\n\nSometimes, we may want to retrieve individual values present in a column, to use within either a vector or a list. We can do this using the pull() function, which will retrieve the column contents and strip the column formatting\n\n\n\n\n\n\n\nData |> pull(Date) |> head(10)\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"" + "objectID": "course/05_GatingSets/slides.html#gates", + "href": "course/05_GatingSets/slides.html#gates", + "title": "05 - Gating Sets", + "section": "Gates", + "text": "Gates\n\n\n\n\n\n\n\n\n.\n\n\nNow that we have loaded the contents of the FlowJo/Floreada workspace, we can start exploring the various infrastructural capabilities of a GatingSet object." }, { - "objectID": "course/04_IntroToTidyverse/slides.html#filter-rows", - "href": "course/04_IntroToTidyverse/slides.html#filter-rows", - "title": "04 - Introduction to Tidyverse", - "section": "filter (Rows)", - "text": "filter (Rows)\n\n\n\n\n\n\n\n\n.\n\n\nSo far, we have been working with dplyr functions primarily used when working with and subsetting columns (including select(), pull(), rename() and relocate()). What if we wanted to work with rows of a data.frame? This is where the filter() function is used." + "objectID": "course/05_GatingSets/slides.html#counts", + "href": "course/05_GatingSets/slides.html#counts", + "title": "05 - Gating Sets", + "section": "Counts", + "text": "Counts\n\n\n\n\n\n\n\n\n.\n\n\nIf we wanted to retrieve counts of cells found within the individual gates, we could do so with gs_pop_get_count_fast()\n\n\n\n\n\n\n\nData <- gs_pop_get_count_fast(gs)\nhead(Data, 5)\n\n name Population\n <char> <char>\n1: 00_Ctrl.fcs_INF052 /Scatter\n2: 00_Ctrl.fcs_INF052 /Scatter/Singlets\n3: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live\n4: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live/Tcells\n5: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live/Tcells/CD4+\n Parent Count ParentCount\n <char> <int> <int>\n1: root 10000 10000\n2: /Scatter 9986 10000\n3: /Scatter/Singlets 9708 9986\n4: /Scatter/Singlets/Live 9708 9708\n5: /Scatter/Singlets/Live/Tcells 6151 9708" }, { - "objectID": "course/04_IntroToTidyverse/slides.html#mutate", - "href": "course/04_IntroToTidyverse/slides.html#mutate", - "title": "04 - Introduction to Tidyverse", - "section": "mutate", - "text": "mutate\n\n\n\n\n\n\n\n\n.\n\n\nAs we can see, with just these handful of functions, we have the building blocks to rearrange and subset a larger data.frame into a format that we prefer. But what if we wanted to alter the content of a column, or add new columns to an existing data.frame? This is where the mutate() function can be used." + "objectID": "course/05_GatingSets/slides.html#metadata", + "href": "course/05_GatingSets/slides.html#metadata", + "title": "05 - Gating Sets", + "section": "Metadata", + "text": "Metadata\n\n\n\n\n\n\n\n\n.\n\n\nSince GatingSets contain multiple .fcs files, we may want to be able to subset them based on metadata for a particular variable. We can check to see current metadata using the pData() function.\n\n\n\n\n\n\n\npData(gs)\n\n name\n00_Ctrl.fcs_INF052 00_Ctrl.fcs\n00_Ctrl.fcs_INF100 00_Ctrl.fcs\n00_Ctrl.fcs_INF179 00_Ctrl.fcs\n00_SEB.fcs_INF052 00_SEB.fcs\n00_SEB.fcs_INF100 00_SEB.fcs\n00_SEB.fcs_INF179 00_SEB.fcs" }, { - "objectID": "course/04_IntroToTidyverse/slides.html#arrange", - "href": "course/04_IntroToTidyverse/slides.html#arrange", - "title": "04 - Introduction to Tidyverse", - "section": "arrange", - "text": "arrange\n\n\n\n\n\n\n\n\n.\n\n\nAnd while we are here, let’s rearrange the rows so that they are descending based on the Tcell proportion. We can use this by using the desc() and arrange() functions from dplyr:\n\n\n\n\n\n\n\nTidyData <- TidyData |> arrange(desc(TcellsRounded))" + "objectID": "course/05_GatingSets/slides.html#ggcyto", + "href": "course/05_GatingSets/slides.html#ggcyto", + "title": "05 - Gating Sets", + "section": "ggcyto", + "text": "ggcyto\n\n\n\n\n\n\n\n\n.\n\n\nAs you can surmise, a lot of the infrastructural style handling done by commercial softwares is being orchestrated/mediated through our GatingSet object. Since it’s able to create and retain gating information, how would we go about visualizing the underlying data contained within each?" }, { - "objectID": "course/04_IntroToTidyverse/index.html", - "href": "course/04_IntroToTidyverse/index.html", - "title": "04 - Introduction to Tidyverse", + "objectID": "course/05_GatingSets/slides.html#plotting", + "href": "course/05_GatingSets/slides.html#plotting", + "title": "05 - Gating Sets", + "section": "Plotting", + "text": "Plotting\n\n\n\n\n\n\n\n\n.\n\n\nOnce you have the current versions of both ggplot2 and ggcyto, we can proceed to attach them to your local environment via the library() function.\n\n\n\n\n\n\n\nlibrary(ggplot2)\nlibrary(ggcyto)" + }, + { + "objectID": "course/05_GatingSets/index.html", + "href": "course/05_GatingSets/index.html", + "title": "05 - Gating Sets", "section": "", "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "05 - Gating Sets" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#read.csv", - "href": "course/04_IntroToTidyverse/index.html#read.csv", - "title": "04 - Introduction to Tidyverse", - "section": "read.csv", - "text": "read.csv\nWe will start by first loading in our copied over dataset (Dataset.csv) from it’s location in the project folder. If you are following the organization scheme we have been using throughout the course, your file path will look something like this:\n\nthefilepath <- file.path(\"data\", \"Dataset.csv\")\n\nthefilepath\n\n[1] \"data/Dataset.csv\"\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWe encourage using the file.path function to build our file paths, as this keeps our code reproducible and replicable when a project folder is copied to other people’s computers that differ on whether the operating system uses forward or backward slash separation between folders.\n\n\nAbove, we directly specified the name (Dataset) and filetype (.csv) of the file we wanted in the last argument of the file.path (“Dataset.csv”). This allows us to skip the list.files() step we used last week as we have provided the full file path. While this approach can be faster, if we accidentally mistype the file name, we could end up with an error at the next step due to no files being found with the mistyped name.\nSince our dataset is stored as a .csv file, we will be using the read.csv() function from the utils package (included in our base R software installation) to read it into R. We will also use the colnames() function from last week to get a read-out of the column names.\n\nData <- read.csv(file=thefilepath, check.names=FALSE)\ncolnames(Data)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump+\" \"Dump-\" \"Tcells\" \n[19] \"Vd2+\" \"Vd2-\" \"Va7.2+\" \n[22] \"Va7.2-\" \"CD4+\" \"CD4-\" \n[25] \"CD8+\" \"CD8-\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\nAs we look at the line of code, we now have enough context to decipher that the “file” argument is where we provide a file path to an individual file, but what does the “check.names” argument do?\nLet’s see what happens to the column names when we set “check.names” argument to TRUE:\n\nData_Alternative <- read.csv(thefilepath, check.names=TRUE)\ncolnames(Data_Alternative)\n\n [1] \"bid\" \"timepoint\" \"Condition\" \n [4] \"Date\" \"infant_sex\" \"ptype\" \n [7] \"root\" \"singletsFSC\" \"singletsSSC\" \n[10] \"singletsSSCB\" \"CD45\" \"NotMonocytes\" \n[13] \"nonDebris\" \"lymphocytes\" \"live\" \n[16] \"Dump.\" \"Dump..1\" \"Tcells\" \n[19] \"Vd2.\" \"Vd2..1\" \"Va7.2.\" \n[22] \"Va7.2..1\" \"CD4.\" \"CD4..1\" \n[25] \"CD8.\" \"CD8..1\" \"Tcells_count\" \n[28] \"lymphocytes_count\" \"Monocytes\" \"Debris\" \n[31] \"CD45_count\" \n\n\nAs we can see, any column name that contained a special character or a space was automatically converted over to R-approved syntax. However, this resulted in the loss of both +” and “-”, leaving us unable to determine whether we are looking at cells within or outside a particular gate.\n\nBecause of this, it is often better to rename columns individually after import, which we will learn how to do later today.\nFollowing up with what we practiced last week, lets use the head() function to visualize the first few rows of data.\n\nhead(Data, 3)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 Ctrl 2025-07-26 Male HEU-hi 2098368 1894070\n2 INF0100 0 Ctrl 2025-07-26 Male HEU-lo 2020184 1791890\n3 INF0100 4 Ctrl 2025-07-26 Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n\nWhen working in Positron, we could have alternatively clicked on the little grid icon next to our created variable “Data” in the right secondary sidebar, which would have opened the data in our Editor window. From this same window, we can see it is stored as a “data.frame” object type.\n\nWe could also achieve the same window to open using the View() function:\n\nView(Data)\n\nWrapping up our brief recap of last week functions, we can check an objects type using both the class() and str() functions.\n\nclass(Data)\n\n[1] \"data.frame\"\n\n\n\nstr(Data)\n\n'data.frame': 196 obs. of 31 variables:\n $ bid : chr \"INF0052\" \"INF0100\" \"INF0100\" \"INF0100\" ...\n $ timepoint : int 0 0 4 9 0 4 9 4 9 0 ...\n $ Condition : chr \"Ctrl\" \"Ctrl\" \"Ctrl\" \"Ctrl\" ...\n $ Date : chr \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" ...\n $ infant_sex : chr \"Male\" \"Male\" \"Male\" \"Male\" ...\n $ ptype : chr \"HEU-hi\" \"HEU-lo\" \"HEU-lo\" \"HEU-lo\" ...\n $ root : int 2098368 2020184 1155040 358624 1362216 1044808 1434840 972056 1521928 2363512 ...\n $ singletsFSC : int 1894070 1791890 1033320 328624 1206309 917398 1265022 875707 1359574 2136616 ...\n $ singletsSSC : int 1666179 1697083 875465 289327 1032946 735579 988445 767323 1175755 1875394 ...\n $ singletsSSCB : int 1537396 1579098 845446 276289 982736 685592 940454 718000 1097478 1732620 ...\n $ CD45 : num 0.595 0.911 0.971 0.982 0.957 ...\n $ NotMonocytes : num 0.882 0.905 0.985 0.986 0.956 ...\n $ nonDebris : num 0.863 0.86 0.958 0.941 0.841 ...\n $ lymphocytes : num 0.642 0.215 0.74 0.651 0.705 ...\n $ live : num 0.902 0.891 0.876 0.915 0.895 ...\n $ Dump+ : num 0.2109 0.0625 0.2002 0.2147 0.3383 ...\n $ Dump- : num 0.691 0.828 0.676 0.701 0.557 ...\n $ Tcells : num 0.28 0.675 0.612 0.631 0.44 ...\n $ Vd2+ : num 0.00812 0.00727 0.00465 0.01135 0.00475 ...\n $ Vd2- : num 0.992 0.993 0.995 0.989 0.995 ...\n $ Va7.2+ : num 0.0145 0.0158 0.0158 0.017 0.0133 ...\n $ Va7.2- : num 0.977 0.977 0.98 0.972 0.982 ...\n $ CD4+ : num 0.634 0.612 0.664 0.438 0.739 ...\n $ CD4- : num 0.343 0.365 0.316 0.534 0.243 ...\n $ CD8+ : num 0.273 0.336 0.286 0.486 0.195 ...\n $ CD8- : num 0.0698 0.0293 0.0294 0.0476 0.0476 ...\n $ Tcells_count : int 164771 208241 371723 111552 291777 271870 487937 220634 415867 184930 ...\n $ lymphocytes_count: int 587573 308583 607477 176662 663667 510730 726238 451047 710964 652155 ...\n $ Monocytes : num 0.118 0.0948 0.0155 0.0145 0.0444 ...\n $ Debris : num 0.1372 0.1397 0.0421 0.0587 0.1592 ...\n $ CD45_count : int 915203 1438047 820570 271304 940733 675857 921660 701657 1066884 1017713 ...", + "objectID": "course/05_GatingSets/index.html#flowframe", + "href": "course/05_GatingSets/index.html#flowframe", + "title": "05 - Gating Sets", + "section": "flowFrame", + "text": "flowFrame\nLet’s start off by recalling the approach we first saw during Week 03, where using the flowCore package we loaded the contents of our .fcs file into R as a “flowFrame” object.\nTo do this, we first identified the .fcs files we were interested using file.path() to specify the folder, and list.files() to find contents containing “.fcs”.\n\n# Folder <- file.path(\"course\", \"05_GatingSets\", \"data\") # For Testing\n\n Folder <- file.path(\"data\") # For Quarto Rendering\n\nfcs_files <- list.files(Folder, pattern=\".fcs\", full.names=TRUE)\n\nfcs_files\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n[2] \"data/2025_07_26_AB_02_INF052_00_SEB.fcs\" \n[3] \"data/2025_07_26_AB_02_INF100_00_Ctrl.fcs\"\n[4] \"data/2025_07_26_AB_02_INF100_00_SEB.fcs\" \n[5] \"data/2025_07_26_AB_02_INF179_00_Ctrl.fcs\"\n[6] \"data/2025_07_26_AB_02_INF179_00_SEB.fcs\" \n\n\nWe then identified an individual .fcs file of interest using the [] method of indexing.\n\nfcs_files[1]\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\n\nThen, after making sure flowCore was attached to our local environment (via the library() function), we could use read.FCS() to read in our .fcs files contents to R.\n\n# BiocManager::install(\"flowCore\") #Bioconductor\nlibrary(flowCore)\n\n\nflowFrame <- read.FCS(filename=fcs_files[1], truncate_max_range = FALSE,\n transformation = FALSE)\nflowFrame\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 896745 0 878.809\n$P2 SSC-W NA 4194304 0 4194303.000\n$P3 SSC-H NA 4194304 0 4194303.000\n$P4 SSC-A NA 4194304 0 4194303.000\n$P5 FSC-W NA 4194304 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4194304 -111 4192506\n$P40 Zombie NIR-A Viability 4194304 -111 4192506\n$P41 APC-Fire 750-A CD27 4194304 -111 4192506\n$P42 APC-Fire 810-A CCR7 4194304 -111 4192506\n$P43 AF-A NA 4194304 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\nAs we start to think about the wider infrastructural handling of our .fcs files, what would have occurred if we had provided multiple .fcs file paths to read.FCS()? Let’s go ahead and check by not providing an index number.\n\nread.FCS(filename=fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\nError in `read.FCS()`:\n! 'filename' must be character scalar\n\n\nAs you can tell, this error message is not particularly interpretable. It however arises from type of object we are passing to the function, whereby an individual file.path (fcs_files[1]) appears as class “character” with a single value (ie. a scalar), but the combined vector (fcs_files) contains multiple values.\n\nfcs_files[1]\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\nstr(fcs_files[1])\n\n chr \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n\n\n\nfcs_files\n\n[1] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\"\n[2] \"data/2025_07_26_AB_02_INF052_00_SEB.fcs\" \n[3] \"data/2025_07_26_AB_02_INF100_00_Ctrl.fcs\"\n[4] \"data/2025_07_26_AB_02_INF100_00_SEB.fcs\" \n[5] \"data/2025_07_26_AB_02_INF179_00_Ctrl.fcs\"\n[6] \"data/2025_07_26_AB_02_INF179_00_SEB.fcs\" \n\nstr(fcs_files)\n\n chr [1:6] \"data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\" ...", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "05 - Gating Sets" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#data.frame", - "href": "course/04_IntroToTidyverse/index.html#data.frame", - "title": "04 - Introduction to Tidyverse", - "section": "data.frame", - "text": "data.frame\nOr alternatively using the new-to-us glimpse() function\n\nglimpse(Data)\n\nError in `glimpse()`:\n! could not find function \"glimpse\"\n\n\n\n\n\n\n\n\nCheckpoint 1\n\n\n\nThis however returns an error. Any idea why this might be occuring?\n\n\n\n\nCode\n# We haven't attached/loaded the package in which the function glimpse is within\n\n\n\n\n\n\n\n\nCheckpoint 2\n\n\n\nHow would we locate a package a not-yet-loaded function is within?\n\n\n\n\nCode\n# We can use double ? to search all installed packages for a function, regardless\n# if the package is attached to the environment or not\n\n??glimpse\n\n\n\nFrom the list of search matches (in the right secondary sidebar), it looks likely that the glimpse() function in the dplyr package was the one we were looking for. This is one the main tidyverse packages we will be using throughout the course. Let’s attach it to our environment via the library() call first and try running glimpse() again.\n\nlibrary(dplyr)\nglimpse(Data)\n\nRows: 196\nColumns: 31\n$ bid <chr> \"INF0052\", \"INF0100\", \"INF0100\", \"INF0100\", \"INF0179…\n$ timepoint <int> 0, 0, 4, 9, 0, 4, 9, 4, 9, 0, 0, 4, 9, 0, 4, 9, 4, 9…\n$ Condition <chr> \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctrl\", \"Ctr…\n$ Date <chr> \"2025-07-26\", \"2025-07-26\", \"2025-07-26\", \"2025-07-2…\n$ infant_sex <chr> \"Male\", \"Male\", \"Male\", \"Male\", \"Male\", \"Male\", \"Mal…\n$ ptype <chr> \"HEU-hi\", \"HEU-lo\", \"HEU-lo\", \"HEU-lo\", \"HU\", \"HU\", …\n$ root <int> 2098368, 2020184, 1155040, 358624, 1362216, 1044808,…\n$ singletsFSC <int> 1894070, 1791890, 1033320, 328624, 1206309, 917398, …\n$ singletsSSC <int> 1666179, 1697083, 875465, 289327, 1032946, 735579, 9…\n$ singletsSSCB <int> 1537396, 1579098, 845446, 276289, 982736, 685592, 94…\n$ CD45 <dbl> 0.5952943, 0.9106762, 0.9705765, 0.9819573, 0.957259…\n$ NotMonocytes <dbl> 0.8820349, 0.9052256, 0.9845400, 0.9855070, 0.955627…\n$ nonDebris <dbl> 0.8627649, 0.8602660, 0.9578793, 0.9412615, 0.840783…\n$ lymphocytes <dbl> 0.6420138, 0.2145848, 0.7403110, 0.6511588, 0.705478…\n$ live <dbl> 0.9020581, 0.8908981, 0.8757665, 0.9153242, 0.895214…\n$ `Dump+` <dbl> 0.21090996, 0.06252775, 0.20023803, 0.21469246, 0.33…\n$ `Dump-` <dbl> 0.6911482, 0.8283703, 0.6755285, 0.7006317, 0.556895…\n$ Tcells <dbl> 0.2804264, 0.6748298, 0.6119129, 0.6314431, 0.439643…\n$ `Vd2+` <dbl> 0.008120361, 0.007265620, 0.004651313, 0.011348967, …\n$ `Vd2-` <dbl> 0.9918796, 0.9927344, 0.9953487, 0.9886510, 0.995246…\n$ `Va7.2+` <dbl> 0.014480704, 0.015774991, 0.015794019, 0.017023451, …\n$ `Va7.2-` <dbl> 0.9773989, 0.9769594, 0.9795547, 0.9716276, 0.981924…\n$ `CD4+` <dbl> 0.6341164, 0.6119112, 0.6639621, 0.4378944, 0.739256…\n$ `CD4-` <dbl> 0.3432825, 0.3650482, 0.3155925, 0.5337331, 0.242668…\n$ `CD8+` <dbl> 0.2734826, 0.3357696, 0.2862104, 0.4861231, 0.195063…\n$ `CD8-` <dbl> 0.06979990, 0.02927858, 0.02938209, 0.04761008, 0.04…\n$ Tcells_count <int> 164771, 208241, 371723, 111552, 291777, 271870, 4879…\n$ lymphocytes_count <int> 587573, 308583, 607477, 176662, 663667, 510730, 7262…\n$ Monocytes <dbl> 0.11796509, 0.09477437, 0.01545999, 0.01449297, 0.04…\n$ Debris <dbl> 0.13723513, 0.13973396, 0.04212072, 0.05873854, 0.15…\n$ CD45_count <int> 915203, 1438047, 820570, 271304, 940733, 675857, 921…\n\n\nWe notice that while similar to the str() output, glimpse() handles spacing a little differently, and includes the dimensions at the top. However, we can also retrieve the dimensions directly using the dim() function (which maintains the row followed by column position convention of base R (ex. [196,31]))\n\ndim(Data)\n\n[1] 196 31", + "objectID": "course/05_GatingSets/index.html#flowset", + "href": "course/05_GatingSets/index.html#flowset", + "title": "05 - Gating Sets", + "section": "flowSet", + "text": "flowSet\nConsequently, we will need to use another function if we want to read in multiple .fcs files at once. For flowCore, this function is the read.flowSet() function.\n\nflowSet <- read.flowSet(files=fcs_files, truncate_max_range = FALSE,\n transformation = FALSE)\nflowSet\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nAlternatively, we can designate specific files within “fcs_files” we want to read in using the [] and c() notation style we have encountered previously.\n\nread.flowSet(files=fcs_files[c(1, 3:4)],\n truncate_max_range = FALSE, transformation = FALSE)\n\nA flowSet with 3 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\nOn follow-up, we can see that read.flowSet() has created a “flowSet” class object.\n\nclass(flowSet)\n\n[1] \"flowSet\"\nattr(,\"package\")\n[1] \"flowCore\"\n\n\nWhich we can also confirm by glancing at the right secondary sidebar to see the created Variables within our environment. Applying our investigatory skills from Week 3, we surmise that “flowSet” is another Bioconductor style S4-type object that within its frame slot contains individual “flowFrames”.\n\nIf instead of class() we had used str(), we would have seen a similar output ton what we see in the Variables panel.\n\nstr(flowSet)\n\nFormal class 'flowSet' [package \"flowCore\"] with 2 slots\n ..@ frames :<environment: 0x55855d56b440> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 1 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr \"Name\"\n .. .. ..@ data :'data.frame': 6 obs. of 1 variable:\n .. .. .. ..$ name: 'AsIs' chr [1:6] \"2025_07_26_AB_02_INF052_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF052_00_SEB.fcs\" \"2025_07_26_AB_02_INF100_00_Ctrl.fcs\" \"2025_07_26_AB_02_INF100_00_SEB.fcs\" ...\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\n\n\n\n\n\n\n\n\nReminder\n\n\n\nWhile not today’s focus, remember we could access individual components inside the flowSet using the @ accessors covered during Week 3", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "05 - Gating Sets" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#column-value-type", - "href": "course/04_IntroToTidyverse/index.html#column-value-type", - "title": "04 - Introduction to Tidyverse", - "section": "Column value type", - "text": "Column value type\nAs we saw last week, functions often need values that match a certain type (the paintbrush needing paint analogy). As we inspect the columns of Data, we can notice some of the columns contain values within that are character (ie. “char”) values. Others appear to contain numeric values (which are subtyped as either double (“ie. dbl”) or integer (ie. “int”)). At first glance, we do not appear to have any logical (ie. TRUE or FALSE) columns in this dataset.\n\nIf we were trying to verify type of values contained within a data.frame column, we could employ several similarly-named functions (is.character(), is.numeric() or is.logical()) to check\n\n# colnames(Data) # To recheck the column names\n\nis.character(Data$bid)\n\n[1] TRUE\n\n\n\nis.numeric(Data$bid)\n\n[1] FALSE\n\n\n\n# colnames(Data) # To recheck the column names\n\nis.character(Data$Tcells_count)\n\n[1] FALSE\n\n\nFor numeric columns using the is.numeric() function, we can also be subtype specific using either is.integer() or is.double().\n\n# colnames(Data) # To recheck the column names\n\nis.numeric(Data$Tcells_count)\n\n[1] TRUE\n\nis.integer(Data$Tcells_count)\n\n[1] TRUE\n\nis.double(Data$Tcells_count)\n\n[1] FALSE\n\n\n\n\n\n\n\n\nReminder\n\n\n\nAs we observed last week with keywords, column names that contain special characters like $ or spaces will need to be surrounded with tick marks in order for the function to be able to run.\n\n\n\n# colnames(Data) # To recheck the column names\nis.numeric(Data$CD8-)\n\nError in parse(text = input): <text>:2:21: unexpected ')'\n1: # colnames(Data) # To recheck the column names\n2: is.numeric(Data$CD8-)\n ^\n\n\n\n# colnames(Data) # To recheck the column names\nis.numeric(Data$`CD8-`)\n\n[1] TRUE", + "objectID": "course/05_GatingSets/index.html#memory-usage", + "href": "course/05_GatingSets/index.html#memory-usage", + "title": "05 - Gating Sets", + "section": "Memory Usage", + "text": "Memory Usage\nBoth “flowFrame” and “flowSet” objects were implemented in the flowCore package, which is the oldest extant flow cytometry R package on Bioconductor. Consequently, a large proportion of the other flow cytometry R packages read in .fcs files as “flowFrame” and “flowSet” objects.\nOne consideration of this method is the contents of your .fcs files are read into your computer’s random access memory (RAM). While for individual .fcs files or small experiments this will not present a problem for most modern computers, when working with large spectral flow cytometry files containing millions of events (or trying to analyze many .fcs files at once), you may encounter situations where you can quickly exceed your computers available RAM.\nTo build some contextual understanding of the problem, let’s learn how to check how much memory is being used by our individual variables/objects within our R session. We will primarily use the lobstr R packages obj_size() function, as it better handles evaluating complicated objects than base R’s object.size() function.\nWe can check and see the memory usage by our flowFrame object\n\n# Base R\nobject.size(flowFrame)\n\n3570896 bytes\n\n# install.packages(\"lobstr\") # CRAN\nlibrary(lobstr)\nobj_size(flowFrame)\n\n3.53 MB\n\n\nAnd contrast to the greater ammount of space occupied by our flowSet object (which contains multiple flowFrames)\n\nobj_size(flowSet)\n\n20.99 MB\n\n\nIf we were curious how much memory total we are using within R at the current moment, we can check using the mem_used() function:\n\nmem_used()\n\n146.99 MB\n\n\nUltimately, how many .fcs files you are able to read in and interact with before running out of available RAM memory space will be dictated by your individual computers hardware configuration. There are various ways you can check programmatically how much RAM your computer has available, although the specific functions will vary depending on your computers operating system, since they often involve system-level code outside R. Using the ps R package’s ps_system_memory() function is one of the easier ways for Windows users.\nTo simplify the process, here is an additional example of where a conditional can prove useful, allowing us to check in an operating system specific manner. It takes the output of the Sys.info() function, namely the “sysname” argument and then retrieves the relavent function.\n\nOperatingSystem <- Sys.info()[[\"sysname\"]]\n\nif (OperatingSystem == \"Windows\") { # Windows\n Memory <- ps::ps_system_memory()\n message(\"Total GB \", round(Memory$total / 1024^3, 2))\n message(\"Free GB \", round(Memory$free / 1024^3, 2))\n\n } else if (OperatingSystem == \"Darwin\") { # MacOS\n system(\"top -l 1 | grep PhysMem\")\n\n } else if (OperatingSystem == \"Linux\") { # Linux\n system(\"free -h\")\n\n } else {message(\"A wild FreeBSD-User appears\")}\n\n\n# install.packages(\"ps\") # CRAN\nlibrary(ps)\nMemory <- ps::ps_system_memory()\nmessage(\"Total GB \", round(Memory$total / 1024^3, 2))\n\nTotal GB 62.5\n\nmessage(\"Free GB \", round(Memory$free / 1024^3, 2))\n\nFree GB 52.13", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "05 - Gating Sets" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#select-columns", - "href": "course/04_IntroToTidyverse/index.html#select-columns", - "title": "04 - Introduction to Tidyverse", - "section": "select (Columns)", - "text": "select (Columns)\nNow that we have read in our data, and have a general picture of the structure and contents, lets start learning the main dplyr functions we will be using throughout the course. To do this, lets go ahead and attach dplyr to our local environment via the library() call.\n\nlibrary(dplyr)\n\nWe will start with the select() function. It is used to “select” a column from a data.frame type object. In the simplest usage, we provide the name of our data.frame variable/object as the first argument after the opening parenthesis. This is then followed by the name of the column we want to select as the second argument (let’s place around the “” around the column name for now)\n\nDateColumn <- select(Data, \"Date\")\nDateColumn[1:10,]\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nThis results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object.\n\nPipe Operators\nWhile the above line of code works to select a column, when you encounter select() out in the wild, it will more often be in a line of code that looks like this:\n\nDateColumn <- Data |> select(\"Date\")\nDateColumn[1:10,]\n\n [1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n [6] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\n… “What in the world is that thing |> ?” …\nGlad you asked! An useful feature of the tidyverse packages is their use of pipes (either the original magrittr package’s “%>%” or base R version >4.1.0's “|>”“), usually appearing like this:\n\n# magrittr %>% pipe\n\nDateColumn <- Data %>% select(\"Date\")\n\n# base R |> pipe\nDateColumn <- Data |> select(\"Date\")\n\n… “How do we interpret/read that line of code?” …\nLet’s break it down, starting off just to the right of the assignment arrow (<-) with our data.frame “Data”.\n\nData\n\nWe then proceed to read to the right, adding in our pipe operator. The pipe essentially serves as an intermediate passing the contents of data onward to the subsequent function.\n\nData |> \n\nIn our case, this subsequent function is the select() function, which will select a particular column from the available data. When using the pipe, the first argument slot we saw for “select(Data,”Date”)” is occupied by the contents Data that are being passed by the pipe.\n\nData |> select()\n\nTo complete the transfer, we provide the desired column name to select() to act on (“Date” in this case)\n\nData |> select(\"Date\")\n\nIn summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column\n\nData |> select(\"Date\")\n\nOne of the main advantages for using pipes, is they can be linked together, passing resulting objects of one operation on to the next pipe and subsequent function. We can see this in operation in the example below where we hand off the isolated “Date” column to the nrow() function to determine number of rows. We will use pipes throughout the course, so you will gradually gain familiarity as you encounter them.\n\nData |> select(\"Date\") |> nrow()\n\n[1] 196\n\n\nFor those with prior R experience, you will be more familiar with the older magrittr %>% pipe. The base R |> pipe operator was introduced starting with R version 4.1.0. While mostly interchangeable, they have a few nuances that come into play for more advance use cases. You are welcome to use whichever you prefer (my current preference is |> as it’s one less key to press).\n\n\nR Quirks\n\n\n\n\n\n\nOdd R Behavior # 1\n\n\n\nWhile we used “” around the column name in our previous example, unlike what we encountered with install.packages() when we forget to include quotation marks, select() still retrieves the correct column despite Date not being an environment variable:\n\n\n\nData |> select(Date) |> head(3)\n\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n\n\n\n\n\n\n\n\n.\n\n\n\nThe reasons for this Odd R behaviour are nuanced and for another day. For now, think of it as dplyr R package is picking up the slack, and using context to infer it’s a column name and not an environmental variable/object.\n\n\n\n\nSelecting multiple columns\nSince we are able to select one column, can we select multiple (similar to a [Data[,2:5]] approach in base R)? We can, and they can be positioned anywhere within the data.frame:\n\nSubset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`)\n\nhead(Subset, 3)\n\n bid timepoint Condition Tcells CD8+ CD4+\n1 INF0052 0 Ctrl 0.2804264 0.2734826 0.6341164\n2 INF0100 0 Ctrl 0.6748298 0.3357696 0.6119112\n3 INF0100 4 Ctrl 0.6119129 0.2862104 0.6639621\n\n\nYou will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object:\n\nSubset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, )\n\nhead(Subset, 3)\n\n bid Tcells CD8+ CD4+ timepoint Condition\n1 INF0052 0.2804264 0.2734826 0.6341164 0 Ctrl\n2 INF0100 0.6748298 0.3357696 0.6119112 0 Ctrl\n3 INF0100 0.6119129 0.2862104 0.6639621 4 Ctrl", + "objectID": "course/05_GatingSets/index.html#cytoframe", + "href": "course/05_GatingSets/index.html#cytoframe", + "title": "05 - Gating Sets", + "section": "cytoframe", + "text": "cytoframe\nIn addition to the flowCore R package, additional flow cytometry infrastructure support is provided by the flowWorkspace package. Instead of the reading all the .fcs files contents into active RAM, flowWorkspace reduces the memory overhead by using “pointers” to interact with the object in it’s current storage location (either on your harddrive, SSD, etc.), only reading in components to RAM as needed.\n\n# BiocManager::install(\"flowWorkspace\") #Bioconductor\nlibrary(flowWorkspace)\n\nAs part of improvements to flowWorkspace, some behavior of\nGatingSet objects has changed. For details, please read the section\ntitled \"The cytoframe and cytoset classes\" in the package vignette:\n\n vignette(\"flowWorkspace-Introduction\", \"flowWorkspace\")\n\n\nBecause of these differences in how data is interracted with, we end up with parallel equivalents to the traditional flowFrame and flowSet type objects. These include “cytoframe” for single .fcs files\n\ncytoframe <- load_cytoframe_from_fcs(fcs_files[1], truncate_max_range = FALSE, transformation = FALSE)\n\ncytoframe\n\ncytoframe object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\nrow names(0):\n\n\n\nclass(cytoframe)\n\n[1] \"cytoframe\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nWhich also still errors out when not given a scalar object\n\nload_cytoframe_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\nError:\n! Expected string vector of length 1", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "05 - Gating Sets" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#relocate", - "href": "course/04_IntroToTidyverse/index.html#relocate", - "title": "04 - Introduction to Tidyverse", - "section": "relocate", - "text": "relocate\nAlternatively, we occasionally want to move one column. While we could respecify the location using select(), specifying the names of all the other columns out in a line of code to just to rearrange one does not sound like a good use of time. For this reason, the second dplyr function we will be learning is the relocate() function.\nLooking at our Data object, let’s say we wanted to move the Tcells column from its current location to the second column position (right after the bid column). The line of code to do so would look like:\n\nData |> relocate(Tcells, .after=bid) |> head(3)\n\n bid Tcells timepoint Condition Date infant_sex ptype root\n1 INF0052 0.2804264 0 Ctrl 2025-07-26 Male HEU-hi 2098368\n2 INF0100 0.6748298 0 Ctrl 2025-07-26 Male HEU-lo 2020184\n3 INF0100 0.6119129 4 Ctrl 2025-07-26 Male HEU-lo 1155040\n singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nSimilar to what we saw with select(), this approach can also be used for more than 1 column:\n\nData |> relocate(Tcells, Monocytes, .after=bid) |> head(3)\n\n bid Tcells Monocytes timepoint Condition Date infant_sex ptype\n1 INF0052 0.2804264 0.11796509 0 Ctrl 2025-07-26 Male HEU-hi\n2 INF0100 0.6748298 0.09477437 0 Ctrl 2025-07-26 Male HEU-lo\n3 INF0100 0.6119129 0.01545999 4 Ctrl 2025-07-26 Male HEU-lo\n root singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 2098368 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 2020184 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1155040 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Debris CD45_count\n1 587573 0.13723513 915203\n2 308583 0.13973396 1438047\n3 607477 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nWe can also modify the argument so that columns are placed before a certain column\n\nData |> relocate(Tcells, .before=Date) |> head(3)\n\n bid timepoint Condition Tcells Date infant_sex ptype root\n1 INF0052 0 Ctrl 0.2804264 2025-07-26 Male HEU-hi 2098368\n2 INF0100 0 Ctrl 0.6748298 2025-07-26 Male HEU-lo 2020184\n3 INF0100 4 Ctrl 0.6119129 2025-07-26 Male HEU-lo 1155040\n singletsFSC singletsSSC singletsSSCB CD45 NotMonocytes nonDebris\n1 1894070 1666179 1537396 0.5952943 0.8820349 0.8627649\n2 1791890 1697083 1579098 0.9106762 0.9052256 0.8602660\n3 1033320 875465 845446 0.9705765 0.9845400 0.9578793\n lymphocytes live Dump+ Dump- Vd2+ Vd2- Va7.2+\n1 0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070\n2 0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499\n3 0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D\n\nAnd as we might suspect, we could specify a column index location rather than using a column name.\n\nData |> relocate(Date, .before=1) |> head(3)\n\n Date bid timepoint Condition infant_sex ptype root singletsFSC\n1 2025-07-26 INF0052 0 Ctrl Male HEU-hi 2098368 1894070\n2 2025-07-26 INF0100 0 Ctrl Male HEU-lo 2020184 1791890\n3 2025-07-26 INF0100 4 Ctrl Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570\n\n# |> head(3) is used only to make the website output visualization manageable :D", + "objectID": "course/05_GatingSets/index.html#cytoset", + "href": "course/05_GatingSets/index.html#cytoset", + "title": "05 - Gating Sets", + "section": "cytoset", + "text": "cytoset\nAs well as “cytoset” to handle multiple .fcs files.\n\ncytoset <- load_cytoset_from_fcs(fcs_files, truncate_max_range = FALSE, transformation = FALSE)\n\ncytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nclass(cytoset)\n\n[1] \"cytoset\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nUnlike “flowFrame” and “flowSet”, when we run str(), for “cytoframe” and “cytoset” objects we don’t get back quite as much information.\n\nstr(cytoframe)\n\nFormal class 'cytoframe' [package \"flowWorkspace\"] with 5 slots\n ..@ pointer :<externalptr> \n ..@ use.exprs : logi TRUE\n ..@ exprs : num[0 , 0 ] \n ..@ parameters :Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 5 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr [1:5] \"Name of Parameter\" \"Description of Parameter\" \"Range of Parameter\" \"Minimum Parameter Value after Transformation\" ...\n .. .. ..@ data :'data.frame': 0 obs. of 5 variables:\n .. .. .. ..$ name : chr(0) \n .. .. .. ..$ description: chr(0) \n .. .. .. ..$ range : num(0) \n .. .. .. ..$ minRange : num(0) \n .. .. .. ..$ maxRange : num(0) \n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n ..@ description:List of 1\n .. ..$ note: chr \"empty\"\n\n\n\nstr(cytoset)\n\nFormal class 'cytoset' [package \"flowWorkspace\"] with 3 slots\n ..@ pointer :<externalptr> \n ..@ frames :<environment: 0x5585682fd140> \n ..@ phenoData:Formal class 'AnnotatedDataFrame' [package \"Biobase\"] with 4 slots\n .. .. ..@ varMetadata :'data.frame': 0 obs. of 1 variable:\n .. .. .. ..$ labelDescription: chr(0) \n .. .. ..@ data :'data.frame': 0 obs. of 0 variables\n .. .. ..@ dimLabels : chr [1:2] \"rowNames\" \"columnNames\"\n .. .. ..@ .__classVersion__:Formal class 'Versions' [package \"Biobase\"] with 1 slot\n .. .. .. .. ..@ .Data:List of 1\n .. .. .. .. .. ..$ : int [1:3] 1 1 0\n .. .. .. .. ..$ names: chr \"AnnotatedDataFrame\"\n\n\nThis is similarly the case when glancing at the right secondary side bar, as the respective objects under variables appear to have empty matrices where normally we would have seen the MFI values.\n\nDue to flowWorkspace use of pointers, the missing data remains stored on the drive, only being retrieved right before it is required. This reduces the overall RAM utilization. Let’s double check the differences in memory utilization for flowFrame/cytoframe:\n\nobj_size(flowFrame)\n\n3.53 MB\n\n\n\nobj_size(cytoframe)\n\n5.40 kB\n\n\nAnd similarly the case for flowSet and cytoset:\n\nobj_size(flowSet)\n\n20.99 MB\n\n\n\nobj_size(cytoset)\n\n3.88 kB\n\n\nAdditionally, with computer hardware increasingly switching from spinning disk hard-drives to faster solid state drives, the performance penalty previously experienced when not running from RAM is not as large of a concern as in previous years.", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "05 - Gating Sets" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#rename", - "href": "course/04_IntroToTidyverse/index.html#rename", - "title": "04 - Introduction to Tidyverse", - "section": "rename", - "text": "rename\nAt this point, we are able to both move and select particular columns, allowing us to rearrange and subset a larger data.frame object however we want it to appear. However, as we encountered, some of the names contain special characters and spaces, requiring use of tick marks (``) to avoid issues. How can we change a column name?\nIn base R, we could change individual column names by assigning a new value with the assignment arrow to the corresponding column name index. For example, looking at our Subset object, wen could rename CD8+ as follows:\n\ncolnames(Subset)\n\n[1] \"bid\" \"Tcells\" \"CD8+\" \"CD4+\" \"timepoint\" \"Condition\"\n\ncolnames(Subset)[3]\n\n[1] \"CD8+\"\n\n\n\ncolnames(Subset)[3] <- \"CD8Positive\"\ncolnames(Subset)\n\n[1] \"bid\" \"Tcells\" \"CD8Positive\" \"CD4+\" \"timepoint\" \n[6] \"Condition\" \n\n\nWith the tidyverse, we can use the rename() function which removes the need to look up the column index number. The way we write the argument is placing within the parenthesis the old name to the right of the equals sign, with the new name to the left\n\nRenamed <- Subset |> rename(CD4_Positive = `CD4+`)\ncolnames(Renamed)\n\n[1] \"bid\" \"Tcells\" \"CD8Positive\" \"CD4_Positive\" \"timepoint\" \n[6] \"Condition\" \n\n\nIf we wanted to rename multiple column names at once, we would just need to include a comma between the individual rename arguments within the parenthesis.\n\nRenamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`)\ncolnames(Renamed_Multiple)\n\n[1] \"specimen\" \"Tcells\" \"CD8Positive\" \"CD4Positive\" \n[5] \"timepoint_months\" \"stimulation\"", + "objectID": "course/05_GatingSets/index.html#interconverting", + "href": "course/05_GatingSets/index.html#interconverting", + "title": "05 - Gating Sets", + "section": "Interconverting", + "text": "Interconverting\nDespite both R packages having been around for a while, many Bioconductor and GitHub often only implement methods to handle either flowFrames or cytoframes (although newer R packages are now allowing for both). Consequently, as we move forward in the course, it helps to be aware of which ones we are working with, and have the ability to interconvert between them as needed.\nTo go from a flowFrame to a cytoframe, we can use the flowFrame_to_cytoframe() function\n\nConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)\nConvertedToCytoframe\n\ncytoframe object 'file3df916651526'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\nrow names(0):\n\n\n\nobj_size(ConvertedToCytoframe)\n\n5.40 kB\n\n\nTo go from a cytoframe to a flowFrame, we can use the cytoframe_to_flowFrame() function\n\nConvertedToFlowframe <- flowWorkspace::cytoframe_to_flowFrame(cytoframe)\nConvertedToFlowframe\n\nflowFrame object '2025_07_26_AB_02_INF052_00_Ctrl.fcs'\nwith 10000 cells and 43 observables:\n name desc range minRange maxRange\n$P1 Time NA 878.809 0 878.809\n$P2 SSC-W NA 4194303.000 0 4194303.000\n$P3 SSC-H NA 4194303.000 0 4194303.000\n$P4 SSC-A NA 4194303.000 0 4194303.000\n$P5 FSC-W NA 4194303.000 0 4194303.000\n... ... ... ... ... ...\n$P39 APC-R700-A CD107a 4192506 -111 4192506\n$P40 Zombie NIR-A Viability 4192506 -111 4192506\n$P41 APC-Fire 750-A CD27 4192506 -111 4192506\n$P42 APC-Fire 810-A CCR7 4192506 -111 4192506\n$P43 AF-A NA 4194303 -111 4194303\n472 keywords are stored in the 'description' slot\n\n\n\nobj_size(ConvertedToFlowframe)\n\n3.53 MB\n\n\nTo go from a flowSet to a cytoSet, we can use the flowSet_to_cytoset() funciton\n\nConvertedToCytoset <- flowSet_to_cytoset(flowSet)\nConvertedToCytoset\n\nA cytoset with 6 samples.\n\n column names:\n Time, SSC-W, SSC-H, SSC-A, FSC-W, FSC-H, FSC-A, SSC-B-W, SSC-B-H, SSC-B-A, BUV395-A, BUV563-A, BUV615-A, BUV661-A, BUV737-A, BUV805-A, Pacific Blue-A, BV480-A, BV570-A, BV605-A, BV650-A, BV711-A, BV750-A, BV786-A, Alexa Fluor 488-A, Spark Blue 550-A, Spark Blue 574-A, RB613-A, RB705-A, RB780-A, PE-A, PE-Dazzle594-A, PE-Cy5-A, PE-Fire 700-A, PE-Fire 744-A, PE-Vio770-A, APC-A, Alexa Fluor 647-A, APC-R700-A, Zombie NIR-A, APC-Fire 750-A, APC-Fire 810-A, AF-A\n\n\n\nobj_size(ConvertedToCytoset)\n\n3.88 kB\n\n\nTo go from a cytoSet to a flowSet, we can use the cytoset_to_flowSet() function.\n\nConvertedToFlowset <- cytoset_to_flowSet(flowSet)\nConvertedToFlowset\n\nA flowSet with 6 experiments.\n\ncolumn names(43): Time SSC-W ... APC-Fire 810-A AF-A\n\n\n\nobj_size(ConvertedToFlowset)\n\n20.99 MB", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "05 - Gating Sets" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#pull", - "href": "course/04_IntroToTidyverse/index.html#pull", - "title": "04 - Introduction to Tidyverse", - "section": "pull", - "text": "pull\nSometimes, we may want to retrieve individual values present in a column, to use within either a vector or a list. We can do this using the pull() function, which will retrieve the column contents and strip the column formatting\n\nData |> pull(Date) |> head(5)\n\n[1] \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\" \"2025-07-26\"\n\n\nThis can be useful when we are doing data exploration, and trying to determine how many unique variants might be present. For example, if we wanted to see what days individual samples were acquired, we could pull() the data and pass it to the unique() function:\n\nData |> pull(Date) |> unique()\n\n[1] \"2025-07-26\" \"2025-07-29\" \"2025-07-31\" \"2025-08-05\" \"2025-08-07\"\n[6] \"2025-08-22\" \"2025-08-28\" \"2025-08-30\"", + "objectID": "course/05_GatingSets/index.html#gating-sets", + "href": "course/05_GatingSets/index.html#gating-sets", + "title": "05 - Gating Sets", + "section": "Gating Sets", + "text": "Gating Sets\nFortunately, regardless of whether we are using flowFrame/flowSet (RAM) and cytoframe/cytoset (memory pointers), both routes end up converging at the next step, where the underlying .fcs files are passed off to the GatingSet() function.\n\nGatingSet1 <- GatingSet(flowSet)\nGatingSet1 \n\nA GatingSet with 6 samples\n\n\n\nclass(GatingSet1)\n\n[1] \"GatingSet\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\n\nGatingSet2 <- GatingSet(cytoset)\nGatingSet2\n\nA GatingSet with 6 samples\n\n\n\nclass(GatingSet1)\n\n[1] \"GatingSet\"\nattr(,\"package\")\n[1] \"flowWorkspace\"\n\n\nAs we prefaced in the background, beyond the .fcs files themselves, we need infrastructural elements with which to interact with the underlying data, which allows us to organize the various files, transform (scale), compensate (for conventional flow), visualize, derrive statistics, etc. A GatingSet serves as the infrastructural framework that allows us to do this in R.\nIf we investigate our current GatingSet objects, we won’t see much\n\nThis will change as we start layering on additional elements. However, rather than try to cram everything into a single week, we will explore in greater depth the individual components over the next three weeks. Instead, for the rest of today, we will work backward, by exploring a GatingSet objecct and what it is capable of doing once fully assembled.", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "05 - Gating Sets" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#filter-rows", - "href": "course/04_IntroToTidyverse/index.html#filter-rows", - "title": "04 - Introduction to Tidyverse", - "section": "filter (Rows)", - "text": "filter (Rows)\nSo far, we have been working with dplyr functions primarily used when working with and subsetting columns (including select(), pull(), rename() and relocate()). What if we wanted to work with rows of a data.frame? This is where the filter() function is used.\nThe Condition column in this Dataset appears to be indicating whether the samples were stimulated. Let’s see how many unique values are contained within that column\n\nData |> pull(Condition) |> unique() \n\n[1] \"Ctrl\" \"PPD\" \"SEB\" \n\n\nIn the case of this dataset, looks like the .fcs files where treated with either left alone, treated with PPD (Purified Protein Derrivative) or SEB. What if we wanted to subset only those treated with PPD?\nWithin filter(), we would specify the column name as the first argument, and ask that only values equal to (==) “PPD” be returned. Notice in this case, “” are needed, as we are asking for a matching character value.\n\nPPDOnly <- Data |> filter(Condition == \"PPD\")\nhead(PPDOnly, 5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nWhile this works, using “==” to match can glitch, especially with character values. Using the %in% operator is a better way of identifying and extracting only the rows whose Condition column contains “PPD”\n\nData |> filter(Condition %in% \"PPD\") |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nSimilar to what we saw for select(), we can grab rows that contain various values at once. We would just need to modify the second part of the argument. If we wanted to grab rows whose Condition column contained either PPD or SEB, we would need to provide that argument as a vector, placing both within c()/\n\nData |> filter(Condition %in% c(\"PPD\", \"SEB\")) |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nAlternatively, we could have set up the vector externally, and then provided it to filter()\n\nTheseConditions <- c(\"PPD\", \"SEB\")\nData |> filter(Condition %in% TheseConditions) |> head(5)\n\n bid timepoint Condition Date infant_sex ptype root singletsFSC\n1 INF0052 0 PPD 2025-07-26 Male HEU-hi 2363512 2136616\n2 INF0100 0 PPD 2025-07-26 Male HEU-lo 2049112 1821676\n3 INF0100 4 PPD 2025-07-26 Male HEU-lo 1063496 946587\n4 INF0100 9 PPD 2025-07-26 Male HEU-lo 788368 714198\n5 INF0179 0 PPD 2025-07-26 Male HU 1380336 1242311\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1875394 1732620 0.5873838 0.8619837 0.8429685 0.6408044\n2 1717636 1597085 0.9063081 0.9251961 0.8771889 0.2174284\n3 796056 767297 0.9709891 0.9848719 0.9556049 0.7313503\n4 626387 600011 0.9822803 0.9842139 0.8123041 0.6223228\n5 1047081 1000877 0.9470275 0.9575685 0.9134438 0.6996502\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479 184930\n2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620 211987\n3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109 326378\n4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636 238021\n5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554 294549\n lymphocytes_count Monocytes Debris CD45_count\n1 652155 0.13801632 0.15703150 1017713\n2 314717 0.07480391 0.12281107 1447451\n3 544883 0.01512811 0.04439511 745037\n4 366784 0.01578611 0.18769586 589379\n5 663169 0.04243146 0.08655621 947858\n\n\nWhile this works when we have a limited number of variant condition values, what if had many more but only wanted to exclude one value? As we saw when learning about Conditionals, when we add a ! in front of a logical value, we get the opposite logical value returned\n\nIsThisASpectralInstrument <- TRUE\n\n!IsThisASpectralInstrument\n\n[1] FALSE\n\n\nIn the context of the dplyr package, we can use ! within the filter() to remove rows that contain a certain value\n\nSubset <- Data |> filter(!Condition %in% \"SEB\")\nSubset |> pull(Condition) |> unique()\n\n[1] \"Ctrl\" \"PPD\" \n\n\nLikewise, we can also use it with the select() to exclude columns we don’t want to include\n\nSubset <- Data |> select(!timepoint)\nSubset[1:3,]\n\n bid Condition Date infant_sex ptype root singletsFSC\n1 INF0052 Ctrl 2025-07-26 Male HEU-hi 2098368 1894070\n2 INF0100 Ctrl 2025-07-26 Male HEU-lo 2020184 1791890\n3 INF0100 Ctrl 2025-07-26 Male HEU-lo 1155040 1033320\n singletsSSC singletsSSCB CD45 NotMonocytes nonDebris lymphocytes\n1 1666179 1537396 0.5952943 0.8820349 0.8627649 0.6420138\n2 1697083 1579098 0.9106762 0.9052256 0.8602660 0.2145848\n3 875465 845446 0.9705765 0.9845400 0.9578793 0.7403110\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9020581 0.21090996 0.6911482 0.2804264 0.008120361 0.9918796 0.01448070\n2 0.8908981 0.06252775 0.8283703 0.6748298 0.007265620 0.9927344 0.01577499\n3 0.8757665 0.20023803 0.6755285 0.6119129 0.004651313 0.9953487 0.01579402\n Va7.2- CD4+ CD4- CD8+ CD8- Tcells_count\n1 0.9773989 0.6341164 0.3432825 0.2734826 0.06979990 164771\n2 0.9769594 0.6119112 0.3650482 0.3357696 0.02927858 208241\n3 0.9795547 0.6639621 0.3155925 0.2862104 0.02938209 371723\n lymphocytes_count Monocytes Debris CD45_count\n1 587573 0.11796509 0.13723513 915203\n2 308583 0.09477437 0.13973396 1438047\n3 607477 0.01545999 0.04212072 820570", + "objectID": "course/05_GatingSets/index.html#cytoml", + "href": "course/05_GatingSets/index.html#cytoml", + "title": "05 - Gating Sets", + "section": "CytoML", + "text": "CytoML\nThe CytoML R package (also maintained by Mike Jiang) is a sister package to the flowWorkspace. It’s main purpose is to permit bringing in existing FlowJo, Diva and Cytobank Workspaces, with all their gates, transformations, etc. into R as fully assembled GatingSet objects. For those who already use one of these commercial softwares, it can be quite useful tool.\nSince our goal is to examine a fully assembled GatingSet object, we will be using it today to bring in a FlowJo workspace to R. However, since this is a free Cytometry in R course, and not about to have everyone pay for a license for a one-off topic, in the pre-course Floreada walkthrough I documented how to convert a free Floreada.io workspae into a FlowJo.wsp that can also be used (please note that as of early 2026, some scaling bugs may be present and require troubleshooting).\nTo get started, let’s first attach CytoML to our local environment via the library() call.\n\n# BiocManager::install(\"CytoML\") #Bioconductor\nlibrary(CytoML)\n\nThe .wsp files within this week’s data where created via Floreada.io. The main difference between the two files is one is a copy of the original that was opened within FlowJo, and subsequently swtiched from logicle to bi-exponential transformation.\nWe will need to provide the appropiate file path for our desired .wsp file. We can start by identifying which are present using list.files()\n\nFolder # Defined Above\n\n[1] \"data\"\n\nFlowJoWsp <- list.files(path = Folder, pattern = \".wsp\", full = TRUE)\nFlowJoWsp\n\n[1] \"data/FlowJoWSP_OpenedCopy.wsp\" \"data/FlowJoWSP_Unopened.wsp\" \n\n\nIn our case, we will proceed by using str_detect() to select the .wsp that contains the pattern “Opened”\n\nThisWorkspace <- FlowJoWsp[stringr::str_detect(FlowJoWsp, \"Opened\")]\nThisWorkspace\n\n[1] \"data/FlowJoWSP_OpenedCopy.wsp\"\n\n\nWith our single .wsp filepath now identified, we can now proceed to set up the intermediate object using open_flowjo_xml()\n\nws <- open_flowjo_xml(ThisWorkspace)\nws\n\nFile location: data/FlowJoWSP_OpenedCopy.wsp \n\nGroups in Workspace\n Name Num.Samples\n1 All Samples 6\n\n\n\nclass(ws)\n\n[1] \"flowjo_workspace\"\nattr(,\"package\")\n[1] \"CytoML\"\n\n\nHaving set up the intermediate flowjo_workspace object, we can attempt to read in the actual data from the .wsp into a GatingSet using the flowjo_to_gatingset() function.\nHowever, due to how I named the original .fcs files (“GROUPNAME” being individual specimens, “TUBENAME” being either Ctrl or SEB), and downsampled to the same number of cells, we will encounter the following error\n\ngs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder)\n\nError:\n! Multiple FCS files match sample 00_Ctrl.fcs by filename, event count, and keywords.\nCandidates are: \n/home/david/Documents/CytometryInR/course/05_GatingSets/data/2025_07_26_AB_02_INF052_00_Ctrl.fcs\n/home/david/Documents/CytometryInR/course/05_GatingSets/data/2025_07_26_AB_02_INF100_00_Ctrl.fcs\n/home/david/Documents/CytometryInR/course/05_GatingSets/data/2025_07_26_AB_02_INF179_00_Ctrl.fcs\nPlease move incorrect files out of this directory or its subdirectories.\n\ngs\n\nError:\n! object 'gs' not found\n\n\nAs with any error, my first move is to check the help documentation. In this case, my initial response is to see if I can identify an argument that will help differentiate between the names for each specimen.\n\n?flowjo_to_gatingset\n\n\nIn this case, I find that the “additional.keys” argument would likely work for this troubleshooting\n\n\ngs <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\")\ngs\n\nA GatingSet with 6 samples\n\n\n\nclass(gs)\n\n[1] \"GatingSet\"\nattr(,\"package\")\n[1] \"flowWorkspace\"", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "05 - Gating Sets" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#mutate", - "href": "course/04_IntroToTidyverse/index.html#mutate", - "title": "04 - Introduction to Tidyverse", - "section": "mutate", - "text": "mutate\nAs we can see, with just these handful of functions, we have the building blocks to rearrange and subset a larger data.frame into a format that we prefer. But what if we wanted to alter the content of a column, or add new columns to an existing data.frame? This is where the mutate() function can be used.\nLet’s start by slimming down our current Data to a smaller workable example, highlighting the functions and pipes we learned about today\n\nTidyData <- Data |> filter(Condition %in% \"Ctrl\") |> filter(timepoint %in% \"0\") |>\n select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |>\n rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen)\n\n\nTidyData\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n\n\nThe mutate() function can be used to modify existing columns, as well as to create new ones. For example, let’s derrive the proportion of T cells from the overall CD45 gate. To do so, within the parenthesis, we would specify a new column name, and then divide the original columns:\n\nTidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count)\nTidyData\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n Tcells_ProportionCD45\n1 0.18003765\n2 0.14480820\n3 0.31015921\n4 0.18540010\n5 0.23110302\n6 0.07796568\n7 0.10221747\n8 0.12578030\n9 0.08839285\n10 0.23815220\n11 0.47942008\n12 0.27147570\n13 0.26442564\n14 0.22484948\n15 0.38022498\n16 0.21845195\n17 0.22564783\n18 0.11678076\n19 0.30514067\n20 0.15261613\n21 0.04313730\n22 0.14301785\n23 0.17238666\n\n\nWe can see that we have many significant digits being returned. Let’s round this new column to 2 significant digits by applying the round() function\n\nTidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2))\nTidyData \n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0052 2025-07-26 0 Ctrl 164771 915203\n2 INF0100 2025-07-26 0 Ctrl 208241 1438047\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0134 2025-07-29 0 Ctrl 127866 689676\n5 INF0148 2025-07-29 0 Ctrl 234335 1013985\n6 INF0191 2025-07-29 0 Ctrl 55780 715443\n7 INF0124 2025-07-31 0 Ctrl 70297 687720\n8 INF0149 2025-07-31 0 Ctrl 107900 857845\n9 INF0169 2025-07-31 0 Ctrl 75540 854594\n10 INF0019 2025-08-05 0 Ctrl 208055 873622\n11 INF0032 2025-08-05 0 Ctrl 361034 753064\n12 INF0180 2025-08-05 0 Ctrl 284958 1049663\n13 INF0155 2025-08-07 0 Ctrl 281626 1065048\n14 INF0158 2025-08-07 0 Ctrl 280913 1249338\n15 INF0159 2025-08-07 0 Ctrl 452551 1190219\n16 INF0013 2025-08-22 0 Ctrl 182751 836573\n17 INF0023 2025-08-22 0 Ctrl 218435 968035\n18 INF0030 2025-08-22 0 Ctrl 85521 732321\n19 INF0166 2025-08-28 0 Ctrl 225650 739495\n20 INF0199 2025-08-28 0 Ctrl 169736 1112176\n21 INF0207 2025-08-28 0 Ctrl 39055 905365\n22 INF0614 2025-08-30 0 Ctrl 224396 1569007\n23 INF0622 2025-08-30 0 Ctrl 161924 939307\n Tcells_ProportionCD45 TcellsRounded\n1 0.18003765 0.18\n2 0.14480820 0.14\n3 0.31015921 0.31\n4 0.18540010 0.19\n5 0.23110302 0.23\n6 0.07796568 0.08\n7 0.10221747 0.10\n8 0.12578030 0.13\n9 0.08839285 0.09\n10 0.23815220 0.24\n11 0.47942008 0.48\n12 0.27147570 0.27\n13 0.26442564 0.26\n14 0.22484948 0.22\n15 0.38022498 0.38\n16 0.21845195 0.22\n17 0.22564783 0.23\n18 0.11678076 0.12\n19 0.30514067 0.31\n20 0.15261613 0.15\n21 0.04313730 0.04\n22 0.14301785 0.14\n23 0.17238666 0.17", + "objectID": "course/05_GatingSets/index.html#system-time", + "href": "course/05_GatingSets/index.html#system-time", + "title": "05 - Gating Sets", + "section": "System Time", + "text": "System Time\nEspecially when working with CytoML, it is often good to have an idea of how long it will take a particular function to run (to better plan how to use our time while waiting, whether to go grab coffee, etc.). There are a couple ways to do so.\nOne, using the system.time() function from base R, in which we surround whatever line of code we wish to evaluate in {}\n\nsystem.time({\n\nflowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\")\n\n})\n\n user system elapsed \n 0.608 0.020 0.631 \n\n\nAlternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.\n\n# install.packages(\"bench\") # CRAN\nlibrary(bench)\n\n\nmark(\n Test <- flowjo_to_gatingset(ws=ws, name=1, path = Folder, additional.keys=\"GROUPNAME\"),\n iterations= 5\n )\n\n# A tibble: 1 × 6\n expression min median `itr/sec` mem_alloc `gc/sec`\n <bch:expr> <bch> <bch:> <dbl> <bch:byt> <dbl>\n1 Test <- flowjo_to_gatingset(ws = ws… 536ms 542ms 1.76 13.3KB 0", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "05 - Gating Sets" ] }, { - "objectID": "course/04_IntroToTidyverse/index.html#arrange", - "href": "course/04_IntroToTidyverse/index.html#arrange", - "title": "04 - Introduction to Tidyverse", - "section": "arrange", - "text": "arrange\nAnd while we are here, let’s rearrange the rows so that they are descending based on the Tcell proportion. We can use this by using the desc() and arrange() functions from dplyr:\n\nTidyData <- TidyData |> arrange(desc(TcellsRounded))\n\nAnd let’s go ahead and filter() and identify the specimens that had more than 30% T cells as part of the overall CD45 gate (context, these samples were Cord Blood):\n\nTidyData |> filter(TcellsRounded > 0.3)\n\n specimen Date timepoint condition Tcells_count CD45_count\n1 INF0032 2025-08-05 0 Ctrl 361034 753064\n2 INF0159 2025-08-07 0 Ctrl 452551 1190219\n3 INF0179 2025-07-26 0 Ctrl 291777 940733\n4 INF0166 2025-08-28 0 Ctrl 225650 739495\n Tcells_ProportionCD45 TcellsRounded\n1 0.4794201 0.48\n2 0.3802250 0.38\n3 0.3101592 0.31\n4 0.3051407 0.31\n\n\nWhich is we had wanted to just retrieve the specimen IDs, we could add pull() after a new pipe argument.\n\nTidyData |> filter(TcellsRounded > 0.3) |> pull(specimen)\n\n[1] \"INF0032\" \"INF0159\" \"INF0179\" \"INF0166\"\n\n\nAnd finally, since I may want to send the data to a supervisor, let’s go ahead and export this “tidyed” version of our data.frame out to it’s own .csv file. Working within our project folder, this would look like this:\n\nNewName <- paste0(\"MyNewDataset\", \".csv\")\nStorageLocation <- file.path(\"data\", NewName)\nStorageLocation\n\n[1] \"data/MyNewDataset.csv\"\n\n\n\nwrite.csv(TidyData, StorageLocation, row.names=FALSE)", + "objectID": "course/05_GatingSets/index.html#gates", + "href": "course/05_GatingSets/index.html#gates", + "title": "05 - Gating Sets", + "section": "Gates", + "text": "Gates\nNow that we have loaded the contents of the FlowJo/Floreada workspace, we can start exploring the various infrastructural capabilities of a GatingSet object.\nLet’s start by evaluating whether the manually-drawn gates I drew survived the journey. To do this, I can generate a visual gating treee using the plot() function.\n\nplot(gs)\n\n\n\n\n\n\n\n\nWe can also retrieve the individual gates and their gaing paths using the gs_get_pop_paths() function.\n\ngs_get_pop_paths(gs)\n\n [1] \"root\" \n [2] \"/Scatter\" \n [3] \"/Scatter/Singlets\" \n [4] \"/Scatter/Singlets/Live\" \n [5] \"/Scatter/Singlets/Live/Tcells\" \n [6] \"/Scatter/Singlets/Live/Tcells/CD4+\" \n [7] \"/Scatter/Singlets/Live/Tcells/CD4+/TNFa+IFNg+\" \n [8] \"/Scatter/Singlets/Live/Tcells/CD4+/TNFa+IFNg-\" \n [9] \"/Scatter/Singlets/Live/Tcells/CD4+/TNFa-IFNg+\" \n[10] \"/Scatter/Singlets/Live/Tcells/CD4+/TNFa-IFNg-\" \n[11] \"/Scatter/Singlets/Live/Tcells/CD4-CD8-\" \n[12] \"/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa+IFNg+\"\n[13] \"/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa+IFNg-\"\n[14] \"/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa-IFNg+\"\n[15] \"/Scatter/Singlets/Live/Tcells/CD4-CD8-/TNFa-IFNg-\"\n[16] \"/Scatter/Singlets/Live/Tcells/CD8+\" \n[17] \"/Scatter/Singlets/Live/Tcells/CD8+/TNFa+IFNg+\" \n[18] \"/Scatter/Singlets/Live/Tcells/CD8+/TNFa+IFNg-\" \n[19] \"/Scatter/Singlets/Live/Tcells/CD8+/TNFa-IFNg+\" \n[20] \"/Scatter/Singlets/Live/Tcells/CD8+/TNFa-IFNg-\"", "crumbs": [ "About", "Intro to R", - "04 - Intro to Tidyverse" + "05 - Gating Sets" ] }, { - "objectID": "course/05_GatingSets/Downsampling.html", - "href": "course/05_GatingSets/Downsampling.html", - "title": "Downsampling", - "section": "", - "text": "Due to trying to keep the overall file size down, I am downsampling to 100 events. For anyone interested in how I did this, this Quarto Markdown Document contains the code needed to repeat the process." + "objectID": "course/05_GatingSets/index.html#counts", + "href": "course/05_GatingSets/index.html#counts", + "title": "05 - Gating Sets", + "section": "Counts", + "text": "Counts\nIf we wanted to retrieve counts of cells found within the individual gates, we could do so with gs_pop_get_count_fast()\n\nData <- gs_pop_get_count_fast(gs)\nhead(Data, 5)\n\n name Population\n <char> <char>\n1: 00_Ctrl.fcs_INF052 /Scatter\n2: 00_Ctrl.fcs_INF052 /Scatter/Singlets\n3: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live\n4: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live/Tcells\n5: 00_Ctrl.fcs_INF052 /Scatter/Singlets/Live/Tcells/CD4+\n Parent Count ParentCount\n <char> <int> <int>\n1: root 10000 10000\n2: /Scatter 9986 10000\n3: /Scatter/Singlets 9708 9986\n4: /Scatter/Singlets/Live 9708 9708\n5: /Scatter/Singlets/Live/Tcells 6151 9708", + "crumbs": [ + "About", + "Intro to R", + "05 - Gating Sets" + ] }, { - "objectID": "course/05_GatingSets/Downsampling.html#specify-file.path-and-identify-files", - "href": "course/05_GatingSets/Downsampling.html#specify-file.path-and-identify-files", - "title": "Downsampling", - "section": "Specify file.path and identify files", - "text": "Specify file.path and identify files\nDue to the counts being conducter on two separate instruments, the number of columns differs, so they will need to be loaded into separate GatingSet objects.\n\nStorageLocation <- file.path(\"/media\", \"david\", \"DavidSSD\", \"AlphaBeta\", \"Tcells\")\nExisting <- list.files(StorageLocation, pattern=\".fcs\", full.names=TRUE)\nList1 <- Existing[c(1,3:4,6,12, 14)]" + "objectID": "course/05_GatingSets/index.html#metadata", + "href": "course/05_GatingSets/index.html#metadata", + "title": "05 - Gating Sets", + "section": "Metadata", + "text": "Metadata\nSince GatingSets contain multiple .fcs files, we may want to be able to subset them based on metadata for a particular variable. We can check to see current metadata using the pData() function.\n\npData(gs)\n\n name\n00_Ctrl.fcs_INF052 00_Ctrl.fcs\n00_Ctrl.fcs_INF100 00_Ctrl.fcs\n00_Ctrl.fcs_INF179 00_Ctrl.fcs\n00_SEB.fcs_INF052 00_SEB.fcs\n00_SEB.fcs_INF100 00_SEB.fcs\n00_SEB.fcs_INF179 00_SEB.fcs\n\n\nIt currently doesn’t have much, but we will explore how to change this more over the next few weeks. For now, just know that we could add additional metadata via either a .csv file, or by retrieving additional description keywords from within the .fcs files themselves (as shown below)\n\nAlternateGS <- flowjo_to_gatingset(ws=ws, name=1, path = Folder,\n additional.keys=\"GROUPNAME\",\n keywords=c(\"$DATE\", \"$CYT\", \"GROUPNAME\"))\npData(AlternateGS)\n\n GROUPNAME $CYT $DATE name\n00_Ctrl.fcs_INF052 INF052 Aurora 26-Jul-2025 00_Ctrl.fcs\n00_Ctrl.fcs_INF100 INF100 Aurora 26-Jul-2025 00_Ctrl.fcs\n00_Ctrl.fcs_INF179 INF179 Aurora 26-Jul-2025 00_Ctrl.fcs\n00_SEB.fcs_INF052 INF052 Aurora 26-Jul-2025 00_SEB.fcs\n00_SEB.fcs_INF100 INF100 Aurora 26-Jul-2025 00_SEB.fcs\n00_SEB.fcs_INF179 INF179 Aurora 26-Jul-2025 00_SEB.fcs", + "crumbs": [ + "About", + "Intro to R", + "05 - Gating Sets" + ] }, { - "objectID": "course/05_GatingSets/Downsampling.html#load-.fcs-files-into-a-gatingset", - "href": "course/05_GatingSets/Downsampling.html#load-.fcs-files-into-a-gatingset", - "title": "Downsampling", - "section": "Load .fcs files into a GatingSet", - "text": "Load .fcs files into a GatingSet\nLoad in files to their respective GatingSet objects\n\ncs1 <- load_cytoset_from_fcs(List1, truncate_max_range = FALSE, transformation = FALSE)\ngs1 <- GatingSet(cs1)" + "objectID": "course/05_GatingSets/index.html#ggcyto", + "href": "course/05_GatingSets/index.html#ggcyto", + "title": "05 - Gating Sets", + "section": "ggcyto", + "text": "ggcyto\nAs you can surmise, a lot of the infrastructural style handling done by commercial softwares is being orchestrated/mediated through our GatingSet object. Since it’s able to create and retain gating information, how would we go about visualizing the underlying data contained within each?\nWithin R, most plots are generated using the ggplot2 package from the tidyverse (which we will explore next week), which builds of the “Grammar of Graphics” concept, combining layers together to create the final plots. The Bioconductor ggcyto R package extends this concept to enable flow cytometry data contained within a GatingSet to be plotted.\n\n\n\n\n\n\nImportant\n\n\n\nAs is the case with most free open-source software (FOSS), R packages will change over time as their developers add new features, make improvements, or alter internal functions to speed things up.\n\n\n\n\n\n\n\n\nImportant\n\n\n\nggplot2 recently had a major version change, with significant internal changes occuring. As a consequence of these changes, ggcyto functions that relied on the old ggplot2 functions broke and had to be updated.\n\n\n\n\n\n\n\n\nImportant\n\n\n\nAny updates to CRAN packages are reflected immediately. By contrast, Bioconductor is on a twice yearly release cycle, so to take advantage of the ggcyto “fixes” that allow it to interact with the new version of ggplot2, we will need to make sure we have the “developmental” version installed.\n\n\n\npackageVersion\nLet’s start off by checking what version of both the ggplot2 and ggcyto packages you currently have installed on your computer.\n\npackageVersion(\"ggplot2\")\n\n[1] '4.0.2'\n\n\n\npackageVersion(\"ggcyto\")\n\n[1] '1.39.3'\n\n\nIf you were able to retrieve the following package versions (or greater”) for ggplot2 and ggcyto, you should be all set and can skip the subsequent reinstallation steps.\n\nIf you however found you have the older package versions (ex. ggplot2 3.5.2 or ggcyto 1.37.1) currently installed, you will likely encounter errors when trying to run the functions to plot your data below (since the changes are not fully backward-compatible with older versions).\n\n\nremove.packages\nSince ggcyto has a hard-coded dependency on ggplot2, if you have the older versions, I would recommend uninstaling both first, using the remove.packages() function.\n\nremove.packages(\"ggplot2\")\nremove.packages(\"ggcyto\")\n\nOnce this is done, I recommend exiting and then reopening Positron. This will ensure all currently-loaded R packages are unattached from the environment. However, you will loose all your environmental variables, so will need to reload them to get back to this point. If you are working with code chunks inside a Quarto Markdown File (.qmd), you can quickly accomplish this by scrolling down to the point of the document where you left off, and selecting the “Run Above” option showin on the code chunk.\n\n\n\nInstalling correct versions\nTo reinstall ggplot2, you just need to install again from CRAN (as with it’s rolling-release model any changes the developers make become immediately available to everyone)\n\ninstall.packages(\"ggplot2\")\n\nIf you need to reinstall ggcyto, because of Bioconductor’s twice yearly release cycle, you will need to install the “developmental” version to take advantage of the fixes. Since this is for a one-off package, the easiest installation approach if to go via the GitHub using the remotes package’s install_github()\n\nremotes::install_github(\"RGLab/ggcyto\")", + "crumbs": [ + "About", + "Intro to R", + "05 - Gating Sets" + ] + }, + { + "objectID": "course/05_GatingSets/index.html#plotting", + "href": "course/05_GatingSets/index.html#plotting", + "title": "05 - Gating Sets", + "section": "Plotting", + "text": "Plotting\nOnce you have the current versions of both ggplot2 and ggcyto, we can proceed to attach them to your local environment via the library() function.\n\nlibrary(ggplot2)\nlibrary(ggcyto)\n\nLoading required package: ncdfFlow\n\n\nLoading required package: BH\n\n\nAs was mentioned, ggcyto follows the ggplot2 grammar of graphics syntax, which we will learn more extensively next week. For now, lets look at a simple example\n\nggcyto(gs[1], subset=\"root\", aes(x=\"FSC-A\", y=\"SSC-A\")) + geom_hex(bins=100) \n\nThe function responsible for plotting is the ggcyto() function. The first argument (“gs[1]”) is designating which .fcs file in our GatingSet we are trying to visualize.\nThe second argument (“subset”) corresponds to which gating node we want to visualize. In this case, when set to “root”, we are seeing all cells present in the .fcs file. If we however wanted to visualize the cells within the CD4+ gate, we would swap the value provided to this argument.\n\nggcyto(gs[1], subset=\"CD4+\", aes(x=\"FSC-A\", y=\"SSC-A\")) + geom_hex(bins=100) \n\nThe next argument “aes” stands for aesthetics (more on this next week). You will notice it has its own set of parenthesis, in which we designate the markers/fluorophores we want to visualize on the x and y axis.\nThe final argument (“+ geom_hex(bins=100)”) specifies we want to generate a flow cytometry style plot, with it’s bin arguments value setting the resolution.\nNow that we have walked through the arguments, let’s visualize the data\n\nggcyto(gs[1], subset=\"CD4+\", aes(x=\"FSC-A\", y=\"SSC-A\")) + geom_hex(bins=100) \n\n\n\n\n\n\n\n\nAlternatively, if we switched things around\n\nggcyto(gs[1], subset=\"CD8+\", aes(x=\"IFNg\", y=\"TNFa\")) + geom_hex(bins=100) \n\n\n\n\n\n\n\n\nBriefly, if we didn’t remember the marker, we could specify the fluorophore\n\nggcyto(gs[1], subset=\"CD8+\", aes(x=\"BV750-A\", y=\"PE-Dazzle594-A\")) + geom_hex(bins=100) \n\n\n\n\n\n\n\n\n\nggcyto(gs[6], subset=\"Tcells\", aes(x=\"CD4\", y=\"CD8\")) + geom_hex(bins=100)\n\n\n\n\n\n\n\n\nThis is all we will cover for ggcyto for now, we will circle back over the next couple weeks as we gain more familiarity with how to build our own GatingSet objects. If you want to jump ahead, please see the additional resources section and happy exploring!", + "crumbs": [ + "About", + "Intro to R", + "05 - Gating Sets" + ] } ] \ No newline at end of file From ac6addcf3ba24080004f5a1c0799002d6f96b9d4 Mon Sep 17 00:00:00 2001 From: David Rach Date: Tue, 17 Mar 2026 21:17:25 -0400 Subject: [PATCH 8/8] Initial slides Week # 06 --- course/06_Visualizing/images/ggplot2.png | Bin 0 -> 79964 bytes course/06_Visualizing/index.qmd | 166 +- course/06_Visualizing/slides.qmd | 1376 +++++++ docs/course/03_InsideFCSFile/index.html | 8 +- docs/course/03_InsideFCSFile/slides.html | 8 +- docs/course/05_GatingSets/index.html | 12 +- docs/course/05_GatingSets/slides.html | 10 +- docs/course/06_Visualizing/images/ggplot2.png | Bin 0 -> 79964 bytes docs/course/06_Visualizing/index.html | 269 +- .../figure-html/unnamed-chunk-35-1.png | Bin 32725 -> 0 bytes .../figure-html/unnamed-chunk-36-1.png | Bin 38360 -> 0 bytes .../figure-html/unnamed-chunk-37-1.png | Bin 41715 -> 28319 bytes .../figure-html/unnamed-chunk-38-1.png | Bin 29257 -> 28251 bytes .../figure-html/unnamed-chunk-39-1.png | Bin 26123 -> 48553 bytes .../figure-html/unnamed-chunk-40-1.png | Bin 27078 -> 45687 bytes .../figure-html/unnamed-chunk-41-1.png | Bin 29069 -> 0 bytes .../figure-html/unnamed-chunk-42-1.png | Bin 28362 -> 0 bytes .../figure-html/unnamed-chunk-43-1.png | Bin 27534 -> 0 bytes .../figure-html/unnamed-chunk-44-1.png | Bin 27457 -> 41084 bytes .../figure-html/unnamed-chunk-45-1.png | Bin 27816 -> 41084 bytes .../figure-html/unnamed-chunk-46-1.png | Bin 28015 -> 38674 bytes .../figure-html/unnamed-chunk-47-1.png | Bin 0 -> 43293 bytes .../figure-html/unnamed-chunk-48-1.png | Bin 0 -> 43795 bytes .../figure-html/unnamed-chunk-49-1.png | Bin 0 -> 41084 bytes .../figure-html/unnamed-chunk-50-1.png | Bin 0 -> 38886 bytes .../figure-html/unnamed-chunk-51-1.png | Bin 75415 -> 37497 bytes .../figure-html/unnamed-chunk-52-1.png | Bin 0 -> 40323 bytes .../figure-html/unnamed-chunk-53-1.png | Bin 0 -> 39888 bytes .../figure-html/unnamed-chunk-54-1.png | Bin 0 -> 39457 bytes .../figure-html/unnamed-chunk-55-1.png | Bin 0 -> 39349 bytes .../figure-html/unnamed-chunk-56-1.png | Bin 0 -> 39609 bytes .../figure-html/unnamed-chunk-57-1.png | Bin 0 -> 39870 bytes .../figure-html/unnamed-chunk-62-1.png | Bin 0 -> 75415 bytes docs/course/06_Visualizing/slides.html | 3223 ++++++++++++++++ .../figure-revealjs/unnamed-chunk-17-1.png | Bin 0 -> 3849 bytes .../figure-revealjs/unnamed-chunk-19-1.png | Bin 0 -> 15891 bytes .../figure-revealjs/unnamed-chunk-21-1.png | Bin 0 -> 15891 bytes .../figure-revealjs/unnamed-chunk-22-1.png | Bin 0 -> 10675 bytes .../figure-revealjs/unnamed-chunk-23-1.png | Bin 0 -> 24163 bytes .../figure-revealjs/unnamed-chunk-24-1.png | Bin 0 -> 17890 bytes .../figure-revealjs/unnamed-chunk-25-1.png | Bin 0 -> 41529 bytes .../figure-revealjs/unnamed-chunk-26-1.png | Bin 0 -> 26538 bytes .../figure-revealjs/unnamed-chunk-27-1.png | Bin 0 -> 36047 bytes .../figure-revealjs/unnamed-chunk-28-1.png | Bin 0 -> 38323 bytes .../figure-revealjs/unnamed-chunk-29-1.png | Bin 0 -> 38404 bytes .../figure-revealjs/unnamed-chunk-30-1.png | Bin 0 -> 38127 bytes .../figure-revealjs/unnamed-chunk-32-1.png | Bin 0 -> 20162 bytes .../figure-revealjs/unnamed-chunk-33-1.png | Bin 0 -> 30685 bytes .../figure-revealjs/unnamed-chunk-34-1.png | Bin 0 -> 36047 bytes .../figure-revealjs/unnamed-chunk-37-1.png | Bin 0 -> 31576 bytes .../figure-revealjs/unnamed-chunk-38-1.png | Bin 0 -> 34424 bytes .../figure-revealjs/unnamed-chunk-39-1.png | Bin 0 -> 51613 bytes .../figure-revealjs/unnamed-chunk-40-1.png | Bin 0 -> 49469 bytes .../figure-revealjs/unnamed-chunk-44-1.png | Bin 0 -> 45455 bytes .../figure-revealjs/unnamed-chunk-45-1.png | Bin 0 -> 45455 bytes .../figure-revealjs/unnamed-chunk-46-1.png | Bin 0 -> 46573 bytes .../figure-revealjs/unnamed-chunk-47-1.png | Bin 0 -> 49904 bytes .../figure-revealjs/unnamed-chunk-48-1.png | Bin 0 -> 47826 bytes .../figure-revealjs/unnamed-chunk-49-1.png | Bin 0 -> 45455 bytes .../figure-revealjs/unnamed-chunk-50-1.png | Bin 0 -> 44203 bytes .../figure-revealjs/unnamed-chunk-51-1.png | Bin 0 -> 40052 bytes .../figure-revealjs/unnamed-chunk-52-1.png | Bin 0 -> 44251 bytes .../figure-revealjs/unnamed-chunk-53-1.png | Bin 0 -> 42185 bytes .../figure-revealjs/unnamed-chunk-54-1.png | Bin 0 -> 43044 bytes .../figure-revealjs/unnamed-chunk-55-1.png | Bin 0 -> 42939 bytes .../figure-revealjs/unnamed-chunk-56-1.png | Bin 0 -> 43104 bytes .../figure-revealjs/unnamed-chunk-57-1.png | Bin 0 -> 43385 bytes .../figure-revealjs/unnamed-chunk-62-1.png | Bin 0 -> 85830 bytes docs/search.json | 3417 +++++++++-------- 69 files changed, 6688 insertions(+), 1801 deletions(-) create mode 100644 course/06_Visualizing/images/ggplot2.png create mode 100644 course/06_Visualizing/slides.qmd create mode 100644 docs/course/06_Visualizing/images/ggplot2.png delete mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-35-1.png delete mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-36-1.png delete mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-41-1.png delete mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-42-1.png delete mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-43-1.png create mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-47-1.png create mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-48-1.png create mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-49-1.png create mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-50-1.png create mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-52-1.png create mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-53-1.png create mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-54-1.png create mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-55-1.png create mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-56-1.png create mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-57-1.png create mode 100644 docs/course/06_Visualizing/index_files/figure-html/unnamed-chunk-62-1.png create mode 100644 docs/course/06_Visualizing/slides.html create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-17-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-19-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-21-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-22-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-23-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-24-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-25-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-26-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-27-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-28-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-29-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-30-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-32-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-33-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-34-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-37-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-38-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-39-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-40-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-44-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-45-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-46-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-47-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-48-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-49-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-50-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-51-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-52-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-53-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-54-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-55-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-56-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-57-1.png create mode 100644 docs/course/06_Visualizing/slides_files/figure-revealjs/unnamed-chunk-62-1.png diff --git a/course/06_Visualizing/images/ggplot2.png b/course/06_Visualizing/images/ggplot2.png new file mode 100644 index 0000000000000000000000000000000000000000..0187d1603b27b7635c6f0d86b39f69c1d33c454c GIT binary patch literal 79964 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 @@ -23,7 +23,12 @@ For screen-shot slides, click [here]() # Background -Welcome back! This is the sixth week of Cytometry in R. At this point we are slowly but surely building a solid foundation of general R knowledge, and learning how to apply it when it comes to working with cytometry data. This week, we will explore how to use the `ggplot2` package to create plots. While these will include plots typical of cytometry, `ggplot2` and its extension packages can be used to create quite a few visualizations, from statistics, to maps, to graphics for news articles. +Welcome back! This is the sixth week of Cytometry in R. At this point we are slowly but surely building out a solid foundation of general R knowledge, and learning how to apply it when it comes to working with cytometry data. This week, we will explore how to use the [ggplot2](https://ggplot2.tidyverse.org/) package to create plots. +While these will include plots typical of cytometry, `ggplot2` (and other packages that extend its reach) allow us to create a wide range of visualizations, ranging from statistical plots, to maps, to informational graphics you might see in a magazine. + +One of `ggplot2`'s core strengths is its utilization of the [grammar of graphics](https://www.tandfonline.com/doi/abs/10.1198/jcgs.2009.07098). Rather than treat each type of plot separately, if treats individual elements of a plot on its own (i.e. a layer), with the combined output creating the desired plot. This abstraction is what in turn permits the construction of such a wide array of plots from the same dataset by simply swapping out functions and arguments provided. + +![](images/ggplot2.png) # Walk Through @@ -235,7 +240,7 @@ Yikes! Not what we were expecting. ### Geometries -Having specified our Data and Aesthetics layers, we now reach the important point in our plotting step, deciding on what geometries we want to use. It is this layer that determines how the data actually gets plotted. +Having specified our Data and Aesthetics layers, we now reach the important point in our plotting step, deciding on what geometries we want to use. Geometry is the layer that determines how our data is displayed/plotted. For example, we could use the `geom_point()` function to set the plot geometry as follows @@ -320,90 +325,209 @@ This would similarly be the case for `geom_density()` ggplot(Data) + aes(x=TcellFrequency) + geom_density() ``` +##### Geometry Arguments + +Lets return to our current beeswarm boxplot, which is currently using only the default `geom_boxplot()` and `geom_beeswarm()` functions when building the geometry layer. + +```{r} +Plot <- ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +Plot +``` + +If we think back to what we have been learning about grammar of graphics, each layer is manipulated individually, with subsequent layers combining to make the final plots that we might be interested in. Consequently, if we are making any large changes to the geometry layer, it would be occuring as an argument provided to the geometry determining functions. Lets check to see what our argument options are for both of the above + +```{r} +#| eval: FALSE +?geom_boxplot +``` + +```{r} +#| eval: FALSE +?geom_beeswarm +``` + +Currently, all the dots in the beeswarm are kind of small, and tightly wrapped together around the vertical axis for their respective groups. Let's attempt to change this. One of the easiest things to do when modifying arguments is to start with size (or the equivalent argument) + +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + + geom_boxplot() + geom_beeswarm(size=5) +``` + +Waaaaay toooo large. Let's tone it back. + +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + + geom_boxplot() + geom_beeswarm(size=2.5) +``` + +Better, but now the individual dots being too tightly wrapped together is limiting our capacity to visualize individuals. Lets next attempt to get the dots to spread out more horizontally from each other. Taking a look at the documentation, it looks like "cex" is the argument that might work. + +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + + geom_boxplot() + geom_beeswarm(size=2.5, cex=5) +``` + +Upps! Too far! Let's adjust it again + +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + + geom_boxplot() + geom_beeswarm(size=2.5, cex=2.5) +``` + +Good enough for now! + + +### Scales + +The next ggplot2 layer we will work is scales. Working with our individual dots, we were able to change the size within the geometry layer. However, we can also modify their appearance at the scale level. Refering back to our original data, we can see there is a metadata column corresponding to whether the PBMCs were from male or female donors. + +```{r} +Data |> pull(infant_sex) |> unique() +``` + +Let's go ahead and attempt to alter the dots to reflect based on this additional metadata variable. First, we can assign values based on the categorical values that are present for that column. + +```{r} +shape_sex <- c("Female" = 22, "Male" = 21) +fill_sex <- c("Female" = "white", "Male" = "black") +``` + +The two scale layer functions we will use will be `scale_shape_manual()` and `scale_fill_manual()`. + +```{r} +#| error: TRUE +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + + geom_boxplot() + geom_beeswarm(size=2.5, cex=2.5) + + scale_shape_manual(shape=shape_sex) + scale_fill_manual(fill=fill_sex) +``` + +This did not quite work as expected, with our additional arguments not being perceived by the plot. Part of this is due to needing to set up the underlying geometry layer with the necessary arguments as well. After some investigation, lets try + +```{r} +ggplot(Data) + aes(x=timepoint, 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) +``` + ### Facets At this point, we have added the Data, Aesthetic, and two Geometry layers. We have a decent working version of our plot object which we can continue to edit as we go forward. ```{r} -Plot <- ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +Plot <- ggplot(Data) + aes(x=timepoint, 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) Plot ``` The next layer, Facets, allows creation of separate plots based on an additional variable. For example, if we were interested in seeing the difference between male and female infrants, we could specify the column name within the `facet_wrap()` argument. ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + facet_wrap(~ infant_sex) +ggplot(Data) + aes(x=timepoint, 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) + facet_wrap(~ infant_sex) ``` We could similarly return individual plots for various treatment conditions (Ctrl, PPD, SEB) ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + facet_wrap(~ Condition) +ggplot(Data) + aes(x=timepoint, 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) + facet_wrap(~ Condition) ``` We could also use the variant `facet_grid()` to facet on the basis of two separate variables. ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + facet_grid(infant_sex ~ Condition) +ggplot(Data) + aes(x=timepoint, 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) + facet_grid(infant_sex ~ Condition) ``` -### Statistics - ### Coordinates +Having built out much of the underlying plot, we currently have the following plot + ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +ggplot(Data) + aes(x=timepoint, 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) ``` +An additional ggplot layer we will occasionally work with is the coordinates layer. It doesn't change the underlying data, but does the position from which we view with. For example, we can use the `coord_cartesian()` function to zoom out from the plot shown above, and see the full y-axis values from 0 to 100. + ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + coord_cartesian(ylim=c(0, 100)) +ggplot(Data) + aes(x=timepoint, 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) + coord_cartesian(ylim=c(0, 100)) ``` ### Themes +The final layer in todays exploration of ggplot2 is the "theme" layer. This is where most of the customizations tend to occur when it comes to editing our plots, as most of these are often personal choices. There are a couple ways by which we can implement these, either using a broader "theme_" function, which will set to various defaults, or through the general `theme()` function, which as long as we look up the correct argument will let us edit pretty much anything. + #### Broad Themes +Here are a couple examples of what applying one of the various default "theme_"'s looks like. + ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + theme_classic() +ggplot(Data) + aes(x=timepoint, 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_classic() ``` ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + theme_bw() +ggplot(Data) + aes(x=timepoint, 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_bw() ``` ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + theme_minimal() +ggplot(Data) + aes(x=timepoint, 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_minimal() ``` #### Active Customization -Instead of applying broad theme, you can also modify individual elements. For example, we can +By contrast, instead of (or in addition to) applying a broad theme, we can also modify individual elements of our plots. For example, within theme functions parenthesis, we can silence a particular plot element by setting its theme element equal to the `element_blank()`. If we were trying to remove the major grid lines, we would run a line of code like this. ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + +ggplot(Data) + aes(x=timepoint, 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()) ``` +If we decided to remove the minor grid lines, we would set it's equivalent argument equal to `element_blank()` within the theme (), although we must first add a comma to distinguish it from the previous argument. ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + +ggplot(Data) + aes(x=timepoint, 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()) ``` -Especially useful in cases with long axis text names, we can rotate them using the "angle" argument (and horizontally justify their starting position using "hjust") + +In addition to removing things, we can also modify theme elements. One issue often encountered is the axis-text labels obscure one another. One solution is to rotate them (via the "angle" argument)and horizontally justify their starting position using "hjust" to line up with the original starting position. ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + +ggplot(Data) + aes(x=timepoint, 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 = 16)) ``` +We can in a similar manner adjust the size of the axis text labels, using the "size" argument. ```{r} -ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() + +ggplot(Data) + aes(x=timepoint, 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(), @@ -446,7 +570,7 @@ And return to the plot we had left off on: Plot <- ggcyto(gs[6], subset="Tcells", aes(x="CD8", y="CD4")) + geom_hex(bins=100) ``` -To start, let's switch out the background theme. +Are we able to use some of the same ggplot2 functions? ```{r} Plot + theme_bw() diff --git a/course/06_Visualizing/slides.qmd b/course/06_Visualizing/slides.qmd new file mode 100644 index 0000000..8f9bc37 --- /dev/null +++ b/course/06_Visualizing/slides.qmd @@ -0,0 +1,1376 @@ +--- +title: "06 - Visualizing with ggplot2" +author: "David Rach" +date: 03-17-2026 +format: + revealjs: + theme: default + slide-number: true + incremental: true +page-layout: full +execute: + echo: true + warning: false + message: false +--- + +![](/images/WebsiteBanner.png) + +::: {style="text-align: right;"} +[![AGPL-3.0](https://img.shields.io/badge/license-AGPLv3-blue)](https://www.gnu.org/licenses/agpl-3.0.en.html) [![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](http://creativecommons.org/licenses/by-sa/4.0/) +::: + +For the YouTube livestream schedule, see [here](https://www.youtube.com/@cytometryinr) + +For screen-shot slides, click [here]() + +
    + +--- + +# Background + +::: {.fragment} +::: {.callout-tip title="."} +Welcome back! This is the sixth week of Cytometry in R. At this point we are slowly but surely building out a solid foundation of general R knowledge, and learning how to apply it when it comes to working with cytometry data. This week, we will explore how to use the [ggplot2](https://ggplot2.tidyverse.org/) package to create plots. +While these will include plots typical of cytometry, `ggplot2` (and other packages that extend its reach) allow us to create a wide range of visualizations, ranging from statistical plots, to maps, to informational graphics you might see in a magazine. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +One of `ggplot2`'s core strengths is its utilization of the [grammar of graphics](https://www.tandfonline.com/doi/abs/10.1198/jcgs.2009.07098). Rather than treat each type of plot separately, if treats individual elements of a plot on its own (i.e. a layer), with the combined output creating the desired plot. This abstraction is what in turn permits the construction of such a wide array of plots from the same dataset by simply swapping out functions and arguments provided. +::: +::: + +--- + +![](images/ggplot2.png) + +--- + +# Walk Through + +:::{.callout-important title="Housekeeping"} +As we do [every week](/course/02_FilePaths/index.qmd), on GitHub, [sync](/course/00_Homeworks/index.qmd#sync-your-fork) your forked version of the CytometryInR course to bring in the most recent updates. Then within Positron, [pull](/course/00_Homeworks/index.qmd#pull-to-local) in those changes to your local computer. + +After [setting up](/course/00_Git/index.qmd#new-folder-from-template) a "Week06" project folder, copy over the contents of "course/06_Visualizing/data" to that folder. This will hopefully prevent merge issues next week when attempting to pull in new course material. Once you have your new project folder organized, remember to [commit](/course/00_Git/index.qmd#push) and push your changes to GitHub to maintain remote version control. + +If you encounter issues syncing due to the Take-Home Problem merge conflict, see this [walkthrough](https://umgcccfcsr.github.io/CytometryInR/course/00_BonusContent/PullConflicts/). The updated homework submission protocol can be found [here](https://umgcccfcsr.github.io/CytometryInR/course/00_BonusContent/PullConflicts/UpdatedPullRequest) +::: + +--- + +## Preparation + +--- + +### Masked Function Names + +::: {.fragment} +::: {.callout-tip title="."} +Since we will be using `dplyr` extensively throughout this session, let's go ahead and attach it to our local environment via the `library()` function. +::: +::: + +::: {.fragment} +```{r} +library(dplyr) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If `dplyr` was not already attached to your local environment, you might have gotten the following message +::: +::: + +--- + +![](images/00_DplyrMessage.png) + +--- + +::: {.fragment} +::: {.callout-tip title="."} +The reason behind this message is that both the `dplyr` and `stats` packages contain functions named "filter" and "lag". Since `stats` is a base R package that is loaded by default, when `dplyr` is loaded via the `library()` call, both packages functions become active in your environment. Consequently, if you ran a line of code containing "filter" or "lag", R would not know which packages function you intender to use in that line of code. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +To avoid this, the base R `stats` and `base` package functions with identical names are masked (ie. hidden), so that the `dplyr` functions are instead prioritized when code is run. +::: +::: + +--- + +### Load Dataset + +::: {.fragment} +::: {.callout-tip title="."} +Lets continue by loading in the dataset we were working with during [Week # 4](/course/04_IntroToTidyverse/). +::: +::: + +::: {.fragment} + +```{r} +#StorageLocation <- file.path("course", "06_Visualizing", "data") # When interactively writing the code +StorageLocation <- file.path("data") #When Quarto Rendering + +TheCSV <- list.files(StorageLocation, pattern=".csv", full.names=TRUE) +Data <- read.csv(TheCSV, check.names=FALSE) + +head(Data, 3) +``` + +::: + +--- + +### Identifying column value types + +::: {.fragment} +::: {.callout-tip title="."} +And let's quickly evaluate the columns to determine what type of values each contains +::: +::: + +::: {.fragment} + +```{r} +str(Data) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +The type of values that a column contains are particularly important to be aware of when working with `ggplot2` plots. For example, we can see that several columns contain character values: +::: +::: + +::: {.fragment} + +```{r} +Data |> select(bid, Condition, Date, infant_sex, ptype) |> head(6) |> str() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +While spotting the character columns from the `str()` output, and isolating them using `select()` works, we could achieve something similar using the `is.character()` function in combination with the `where()` function, which the `dplyr` package actively borrows (ie. exports) from the `tidyselect` package. +::: +::: + +::: {.fragment} +```{r} +Data |> select(where(is.character)) |> head(6) |> str() +``` + +::: + +--- + +We can switch out `is.character()` to identify columns containing other value types + +::: {.fragment} +```{r} +Data |> select(where(is.numeric)) |> head(6) |> str() +``` + +::: + +--- + +::: {.fragment} +```{r} +Data |> select(where(is.logical)) |> head(6) |> str() +``` + +::: + +--- + +### Reformatting Column Value Types + +::: {.fragment} +::: {.callout-tip title="."} +Looking at the `str()` output, we can spot that the Date column is currently showing as a character value: +::: +::: + +::: {.fragment} + +```{r} +Data |> select(Date) |> str() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Character values when plotting are generally treated as categorical factors. When plotted, these will arrange according to alphabetical order. In this particular case, this may not be an issue: +::: +::: + +::: {.fragment} +```{r} +Data |> pull(Date) |> sort() |> unique() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +However, if year/month/day is formatted differently, as character values, the alphabetical reordering could result in your dates being scrambled +::: +::: + +::: {.fragment} +```{r} +AlternateFormat <- c("26-07-2025", "27-08-2019", "09-09-2025", "16-03-2026") +AlternateFormat |> sort() |> unique() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Because of this, I generally recommend reformatting these character type values over to Date type values. I will generally use the the tidyverse `lubridate` package, as it has various functions that can handle the date format variation. In this case, since the character values appear year-month-day, we can use the `ymd()` function to update the column type +::: +::: + +::: {.fragment} +```{r} +library(lubridate) +``` + +::: + +::: {.fragment} + +```{r} +Data$Date <- ymd(Data$Date) +str(Data[,1:5]) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +You can notice, `str()` now returns the column type as "Date". +::: +::: + +--- + +### Factors + +::: {.fragment} +::: {.callout-tip title="."} +For columns with numeric type values, we previously discussed the difference between integer (ie. whole) and double (containing decimal point) values. When it comes to plotting using ggplot, numeric values will generally be treated as [continuous](https://www.r-bloggers.com/2022/01/handling-categorical-data-in-r-part-1/) values unless we specify they should be treated as [categorical](https://www.r-bloggers.com/2022/01/handling-categorical-data-in-r-part-1/) values for plotting. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +For example, if we look at the Timepoint column, we can see its numeric values are [discrete](https://www.r-bloggers.com/2022/01/handling-categorical-data-in-r-part-1/), corresponding to the timepoint in months when the blood sample was collected (0, 4, 9) +::: +::: + +::: {.fragment} +```{r} +Data |> pull(timepoint) |> unique() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If we want to avoid having `ggplot` treating these values as continuous, and instead see them as categorical, we will need to specify to R to treat these as such. We can do this by converting them into [factos](https://r4ds.had.co.nz/factors.html), using the `factor()` function. +::: +::: + +::: {.fragment} +```{r} +Data1 <- Data +Data1$timepoint <- factor(Data1$timepoint) +str(Data1[,1:3]) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We will see what occurs when we try to plot without having specified this numeric column as a categorical factor later today, but mentioning it early, as creating factor variables is something we will see continously throughout the class when it comes to both plotting and statistical analysis. +::: +::: + +--- + +## ggplot2 + +::: {.fragment} +::: {.callout-tip title="."} +Alright, with the data imported, havinf refreshed our memory of the types of values contained within, we are now ready to start learning how to ready top lot in R using the `ggplot2` package. For this first plot, as we learn more about the [grammar of graphics](https://ggplot2-book.org/mastery.html) concept, and how to layer the different arguments together, lets first decide what kind of plot we want to build. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +Glancing at Data, let's try creating a boxplot, with the different timepoints on the x-axis, and the frequency of T cells in the CD45+ gate on the y-axis. We can envision we want something at the end that resembles the following: +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Let's go ahead and actually convert timepoint over to a categorical factor for this example, and mutate the frequency column. +::: +::: + +::: {.fragment} + +```{r} +Data <- Data |> + mutate(TcellProportion=Tcells_count/CD45_count) |> + mutate(TcellFrequency=TcellProportion *100) |> + mutate(TcellFrequency=round(TcellFrequency, 1)) + +Data$timepoint <- factor(Data$timepoint) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Lets start by going ahead and calling `library()` for ggplot2 +::: +::: + +::: {.fragment} + +```{r} +library(ggplot2) +``` + +::: + +--- + +### Data + +::: {.fragment} + +```{r} +Plot <- ggplot(Data) +Plot +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As you can see, nothing is yet outputted at this stage. Let's however peak behind the curtain. +::: +::: + +--- + +::: {.fragment} +```{r} +#| eval: FALSE +str(Plot) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +In this first chunk, we see that the data slot of the ggplot object now contains the underlying data.frame object +::: +::: + +--- + +![](images/01_DataSlot.png) + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If we scroll past, we can spot additional slots, which are currently empty, waiting to be filled. We will sporadically check back and see how this changes. +::: +::: + +--- + +![](images/01_DataSlot.png) + +--- + +### Aesthetics + +::: {.fragment} +::: {.callout-tip title="."} +Having established the first layer of our plot (Data), we can now start by specifying the next layer, aesthetics. In our case, we were interested in placing timepoint on the x-axis, and placing the TcellFrequency on the y-axis. +::: +::: + +--- + +::: {.fragment} +```{r} +Plot <- ggplot(Data) + aes(x=timepoint, y=TcellFrequency) +Plot +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As you can see, additional elements were added to the plot, namely we are now seeing on the axis we specified. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If we glanced behind the curtains, we now see the mapping slot has now been filled in +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE + +str(Plot) +``` + +::: + +--- + +![](images/03_MappingSlot.png) + +--- + +::: {.fragment} +::: {.callout-tip title="."} +In our case, we are building this plot with each layer being connected by a "+"" argument. However, you will often see both the Data and Aesthetics layers combined together in actual practice. This would look like the following +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data, aes(x=timepoint, y=TcellFrequency)) +``` + +::: + +--- + +#### No Quotation Marks! + +::: {.fragment} +::: {.callout-tip title="."} +You may have noticed, we relied on tidyverse to figure out that timepoint and TcellFrequency were column names, and not objects in our environment (for reasons detailed during [Week 04]()). What would have happened if we had included "" around each? +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x="timepoint", y="TcellFrequency") +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Yikes! Not what we were expecting. +::: +::: + +--- + +### Geometries + +::: {.fragment} +::: {.callout-tip title="."} +Having specified our Data and Aesthetics layers, we now reach the important point in our plotting step, deciding on what geometries we want to use. Geometry is the layer that determines how our data is displayed/plotted. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +For example, we could use the `geom_point()` function to set the plot geometry as follows +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_point() +``` + +::: + +--- + +We could swap `geom_point()` out for `geom_boxplot()` + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() +``` + +::: + +--- + +or `geom_violin()` + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_violin() +``` + +::: + +--- + +We could also add two geometries + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_point() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As you can see, many different `geom_` functions exist in both ggplot2, as well as other R packages that expand the plotting capacity further. One I like to use for my own plots is the `ggbeeswarm` package, specifically the `geom_beeswarm()` function in conjunction with the `geom_boxplots()`. +::: +::: + +--- + +::: {.fragment} +```{r} +library(ggbeeswarm) +Plot <- ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +Plot +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We will continue building offf this plot version as we go forward. +::: +::: + +---- + +#### If left as continuous + +::: {.fragment} +::: {.callout-tip title="."} +In the case of the above dataset, we had converted timepoint to a factor. But what would our plot have looked like if we had left it in the original continuous format? +::: +::: + +--- + +::: {.fragment} + +```{r} +AlternateData <- read.csv(TheCSV, check.names=FALSE) +AlternateData <- AlternateData |> + mutate(TcellProportion=Tcells_count/CD45_count) |> + mutate(TcellFrequency=TcellProportion *100) |> + mutate(TcellFrequency=round(TcellFrequency, 1)) +ggplot(AlternateData) + aes(x=timepoint, y=TcellFrequency) + geom_beeswarm() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As you can see, in this case, the x-axis instead of being spaced categorically, now appears as continuous, with the individual dots being plotted at 0, 4, 9 respectively. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Given that `geom_boxplot` is expecting a categorical factor, this fails to plot correctly when added on +::: +::: + +--- + +::: {.fragment} + +```{r} +ggplot(AlternateData) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Fortunately, the warning message provides some context we can use when troubleshooting. If we implement the suggestion, we are able to rescue `geom_boxplot()` plotting attempt even in abscence of specifying timepoint as categorical. +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(AlternateData) + aes(x=timepoint, y=TcellFrequency, group=timepoint) + geom_boxplot() + geom_beeswarm() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +This example generally highlights the importance of being aware of what types of values you are trying to plot, warning messages, and some of the quiky odd-looking plots that can arise when the assumptions are not met. +::: +::: + +--- + +#### Mismatched Assumptions + +::: {.fragment} +::: {.callout-tip title="."} +In this case, the two "geom_" functions we are using are using x-axis value as categorical, and y-axis as a continuous variable. What happens if we used a "geom_" function that has different specifications? +::: +::: + +--- + +::: {.fragment} +```{r} +#| error: TRUE +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_histogram() +``` + +::: + +--- + +In the case of the above, `geom_histogram()` was expecting only one column being present in the `aes()` argument. + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=TcellFrequency) + geom_histogram() +``` + +::: + +--- + +This would similarly be the case for `geom_density()` + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=TcellFrequency) + geom_density() +``` + +::: + +--- + +##### Geometry Arguments + +::: {.fragment} +::: {.callout-tip title="."} +Lets return to our current beeswarm boxplot, which is currently using only the default `geom_boxplot()` and `geom_beeswarm()` functions when building the geometry layer. +::: +::: + +--- + +::: {.fragment} +```{r} +Plot <- ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + geom_boxplot() + geom_beeswarm() +Plot +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If we think back to what we have been learning about grammar of graphics, each layer is manipulated individually, with subsequent layers combining to make the final plots that we might be interested in. Consequently, if we are making any large changes to the geometry layer, it would be occuring as an argument provided to the geometry determining functions. Lets check to see what our argument options are for both of the above +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE +?geom_boxplot +``` + +::: + +::: {.fragment} + +```{r} +#| eval: FALSE +?geom_beeswarm +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Currently, all the dots in the beeswarm are kind of small, and tightly wrapped together around the vertical axis for their respective groups. Let's attempt to change this. One of the easiest things to do when modifying arguments is to start with size (or the equivalent argument) +::: +::: + +--- + +::: {.fragment} + +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + + geom_boxplot() + geom_beeswarm(size=5) +``` + +::: + +--- + +Waaaaay toooo large. Let's tone it back. + +::: {.fragment} + +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + + geom_boxplot() + geom_beeswarm(size=2.5) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Better, but now the individual dots being too tightly wrapped together is limiting our capacity to visualize individuals. Lets next attempt to get the dots to spread out more horizontally from each other. Taking a look at the documentation, it looks like "cex" is the argument that might work. +::: +::: + +--- + +::: {.fragment} + +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + + geom_boxplot() + geom_beeswarm(size=2.5, cex=5) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Upps! Too far! Let's adjust it again +::: +::: + +::: {.fragment} + +```{r} +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + + geom_boxplot() + geom_beeswarm(size=2.5, cex=2.5) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Good enough for now! +::: +::: + +--- + +### Scales + +::: {.fragment} +::: {.callout-tip title="."} +The next ggplot2 layer we will work is scales. Working with our individual dots, we were able to change the size within the geometry layer. However, we can also modify their appearance at the scale level. Refering back to our original data, we can see there is a metadata column corresponding to whether the PBMCs were from male or female donors. +::: +::: + +--- + +::: {.fragment} + +```{r} +Data |> pull(infant_sex) |> unique() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Let's go ahead and attempt to alter the dots to reflect based on this additional metadata variable. First, we can assign values based on the categorical values that are present for that column. +::: +::: + +::: {.fragment} + +```{r} +shape_sex <- c("Female" = 22, "Male" = 21) +fill_sex <- c("Female" = "white", "Male" = "black") +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +The two scale layer functions we will use will be `scale_shape_manual()` and `scale_fill_manual()`. +::: +::: + +::: {.fragment} +```{r} +#| error: TRUE +ggplot(Data) + aes(x=timepoint, y=TcellFrequency) + + geom_boxplot() + geom_beeswarm(size=2.5, cex=2.5) + + scale_shape_manual(shape=shape_sex) + scale_fill_manual(fill=fill_sex) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +This did not quite work as expected, with our additional arguments not being perceived by the plot. Part of this is due to needing to set up the underlying geometry layer with the necessary arguments as well. After some investigation, lets try +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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) +``` + +::: + +--- + +### Facets + +::: {.fragment} +::: {.callout-tip title="."} +At this point, we have added the Data, Aesthetic, and two Geometry layers. We have a decent working version of our plot object which we can continue to edit as we go forward. +::: +::: + +--- + +::: {.fragment} +```{r} +Plot <- ggplot(Data) + aes(x=timepoint, 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) +Plot +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +The next layer, Facets, allows creation of separate plots based on an additional variable. For example, if we were interested in seeing the difference between male and female infrants, we could specify the column name within the `facet_wrap()` argument. +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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) + facet_wrap(~ infant_sex) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We could similarly return individual plots for various treatment conditions (Ctrl, PPD, SEB) +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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) + facet_wrap(~ Condition) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We could also use the variant `facet_grid()` to facet on the basis of two separate variables. +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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) + facet_grid(infant_sex ~ Condition) +``` + +::: + +--- + +### Coordinates + +::: {.fragment} +::: {.callout-tip title="."} +Having built out much of the underlying plot, we currently have the following plot +::: +::: + +--- + +::: {.fragment} + +```{r} +ggplot(Data) + aes(x=timepoint, 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) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +An additional ggplot layer we will occasionally work with is the coordinates layer. It doesn't change the underlying data, but does the position from which we view with. For example, we can use the `coord_cartesian()` function to zoom out from the plot shown above, and see the full y-axis values from 0 to 100. +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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) + coord_cartesian(ylim=c(0, 100)) +``` + +::: + +--- + +### Themes + +::: {.fragment} +::: {.callout-tip title="."} +The final layer in todays exploration of ggplot2 is the "theme" layer. This is where most of the customizations tend to occur when it comes to editing our plots, as most of these are often personal choices. There are a couple ways by which we can implement these, either using a broader "theme_" function, which will set to various defaults, or through the general `theme()` function, which as long as we look up the correct argument will let us edit pretty much anything. +::: +::: + +--- + +#### Broad Themes + +::: {.fragment} +::: {.callout-tip title="."} +Here are a couple examples of what applying one of the various default "theme_"'s looks like. +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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_classic() +``` + +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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_bw() +``` + +::: + +--- + + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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_minimal() +``` + +::: + +--- + +#### Active Customization + +::: {.fragment} +::: {.callout-tip title="."} +By contrast, instead of (or in addition to) applying a broad theme, we can also modify individual elements of our plots. For example, within theme functions parenthesis, we can silence a particular plot element by setting its theme element equal to the `element_blank()`. If we were trying to remove the major grid lines, we would run a line of code like this. +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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()) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If we decided to remove the minor grid lines, we would set it's equivalent argument equal to `element_blank()` within the theme (), although we must first add a comma to distinguish it from the previous argument. +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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()) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +In addition to removing things, we can also modify theme elements. One issue often encountered is the axis-text labels obscure one another. One solution is to rotate them (via the "angle" argument)and horizontally justify their starting position using "hjust" to line up with the original starting position. +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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 = 16)) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We can in a similar manner adjust the size of the axis text labels, using the "size" argument. +::: +::: + +--- + +::: {.fragment} +```{r} +ggplot(Data) + aes(x=timepoint, 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)) +``` + +::: + +--- + +## ggcyto + +::: {.fragment} +::: {.callout-tip title="."} +Let's return to the [initial](/course/05_GatingSets/index.qmd#plotting) flow cytometry style plots we generated last time using `ggcyto`, and see if we can customize them further using what we have learned today. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As we mentioned during [Week 5](/course/05_GatingSets/index.qmd#ggcyto), `ggplot2` implemented some major changes going from version 3 to 4. As a result of this, ggcyto had to implement several [bug fixes](https://github.com/RGLab/ggcyto/pull/110) to get the developmental branch back to working order. Consequently, as of the time of this course, you need the following versions (or greater) or both packages to successfully create all the plots. +::: +::: + +::: {.fragment} +```{r} +packageVersion("ggplot2") +packageVersion("ggcyto") +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If you are still running older versions, and encounter issues, the updating your package version instructions are [here](/course/05_GatingSets/index.qmd#packageversion) +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +Let's begin by loading in the additional R packages we will need +::: +::: + +::: {.fragment} +```{r} +library(CytoML) +library(ggcyto) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +And proceed to load in the FlowJo.wsp [example](/course/05_GatingSets/index.qmd#cytoml) from Week 05 into a GatingSet object. +::: +::: + +::: {.fragment} +```{r} +# StorageLocation # Defined Above +FlowJoWsp <- list.files(path = StorageLocation, pattern = ".wsp", full = TRUE) +ws <- open_flowjo_xml(FlowJoWsp) +gs <- flowjo_to_gatingset(ws=ws, name=1, path = StorageLocation, additional.keys = "GROUPNAME") +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +And return to the plot we had left off on: +::: +::: + +--- + +::: {.fragment} +```{r} +Plot <- ggcyto(gs[6], subset="Tcells", aes(x="CD8", y="CD4")) + geom_hex(bins=100) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Are we able to use some of the same ggplot2 functions? +::: +::: + +--- + +::: {.fragment} +```{r} +Plot + theme_bw() +``` + +::: + +--- + +# Take Away + +--- + +::: {.fragment} +::: {.callout-tip title="."} +In this session, we saw how using grammar of graphics concept, we can create ggplot2 plots by adding on individual layers, which can permit us to build different style of plots depending on what we want to visualize. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +Next time, we will take a closer look at how to modify `ggcyto` plots in other to visualize differences when different transformations (scaling) is applied, as well as compensation in the context of conventional flow cytometry files. +::: +::: + +--- + +![](images/TakeAway.jpg) + +--- + +# Additional Resources + +::: {.fragment} +::: {.callout-tip title="."} +[ggplot2: Elegant Graphics for Data Analysis](https://ggplot2-book.org/mastery.html) A book written by Hadley Wickham, Danielle Navarro, and Thomas Lin Pedersen, who are the main developers. It is an excellent resource for both beginners and advanced users alike. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +[Introduction to {ggplot2} in R by Tanya Shapiro | R-Ladies Paris]() There are [many](https://rladies.org/) R-Ladies groups worldwide hosting monthly meetups. Many of them post their monthly workshops on YouTube, which are an invaluable resource for those just getting started. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +[Level up your Plots with Cara Thompson](https://youtu.be/_indbXPXUw8?si=7BUdWGmPOfG5fDaZ) I really enjoy Cara Thompson's videos, if you want to dive deeply into how to make your ggplots go above and beyond, look up her resource videos on YouTube. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +[Tidy Tuesday](https://github.com/rfordatascience/tidytuesday) Make sure to star and follow the hashtag for weekly inspiration! +::: +::: + +--- + +# Take-home Problems + +:::{.callout-tip title="Problem 1"} +Work in Progress +::: + +:::{.callout-tip title="Problem 2"} +Work in Progress +::: + +:::{.callout-tip title="Problem 3"} +Work in Progress +::: + +::: {style="text-align: right;"} +[![AGPL-3.0](https://www.gnu.org/graphics/agplv3-with-text-162x68.png)](https://www.gnu.org/licenses/agpl-3.0.en.html) [![CC BY-SA 4.0](https://licensebuttons.net/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) +::: \ No newline at end of file diff --git a/docs/course/03_InsideFCSFile/index.html b/docs/course/03_InsideFCSFile/index.html index 89cc3ab..aa7ec96 100644 --- a/docs/course/03_InsideFCSFile/index.html +++ b/docs/course/03_InsideFCSFile/index.html @@ -552,8 +552,8 @@

    flowCore

    plotly::ggplotly(plot)
    -
    - +
    +
    @@ -599,8 +599,8 @@

    flowCore

    plotly::ggplotly(plot)
    -
    - +
    +

    flowCore is also one of the many Bioconductor packages maintained by Mike Jiang. In many ways (as those who completed the optional take-home problems for Week #1 know) reminiscent of this xkcd comic:

    diff --git a/docs/course/03_InsideFCSFile/slides.html b/docs/course/03_InsideFCSFile/slides.html index 35e3afc..397bd66 100644 --- a/docs/course/03_InsideFCSFile/slides.html +++ b/docs/course/03_InsideFCSFile/slides.html @@ -485,8 +485,8 @@

    flowCore


    -
    - +
    +
    @@ -497,8 +497,8 @@

    flowCore


    -
    - +
    +
    diff --git a/docs/course/05_GatingSets/index.html b/docs/course/05_GatingSets/index.html index 763f3b0..4bb0291 100644 --- a/docs/course/05_GatingSets/index.html +++ b/docs/course/05_GatingSets/index.html @@ -543,7 +543,7 @@

    flowSet

    str(flowSet)
    Formal class 'flowSet' [package "flowCore"] with 2 slots
    -  ..@ frames   :<environment: 0x55855d56b440> 
    +  ..@ frames   :<environment: 0x55beaac54be0> 
       ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
       .. .. ..@ varMetadata      :'data.frame': 1 obs. of  1 variable:
       .. .. .. ..$ labelDescription: chr "Name"
    @@ -635,7 +635,7 @@ 

    Memory Usage

    message("Free GB ", round(Memory$free / 1024^3, 2))
    -
    Free GB 52.13
    +
    Free GB 53.1
    @@ -747,7 +747,7 @@

    cytoset

    Formal class 'cytoset' [package "flowWorkspace"] with 3 slots
       ..@ pointer  :<externalptr> 
    -  ..@ frames   :<environment: 0x5585682fd140> 
    +  ..@ frames   :<environment: 0x55beb59e0e00> 
       ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
       .. .. ..@ varMetadata      :'data.frame': 0 obs. of  1 variable:
       .. .. .. ..$ labelDescription: chr(0) 
    @@ -797,7 +797,7 @@ 

    Interconverting

    ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
     ConvertedToCytoframe
    -
    cytoframe object 'file3df916651526'
    +
    cytoframe object 'file3ac94c22fe70'
     with 10000 cells and 43 observables:
                    name      desc       range  minRange    maxRange
     $P1            Time        NA     878.809         0     878.809
    @@ -1025,7 +1025,7 @@ 

    System Time

    })
       user  system elapsed 
    -  0.608   0.020   0.631 
    + 0.492 0.004 0.496

    Alternatively, if we install the bench package, we can use the mark function to evaluate how long it takes on average across numerous iterations.

    @@ -1042,7 +1042,7 @@

    System Time

    # A tibble: 1 × 6
       expression                             min median `itr/sec` mem_alloc `gc/sec`
       <bch:expr>                           <bch> <bch:>     <dbl> <bch:byt>    <dbl>
    -1 Test <- flowjo_to_gatingset(ws = ws… 536ms  542ms      1.76    13.3KB        0
    +1 Test <- flowjo_to_gatingset(ws = ws… 491ms 493ms 2.02 13.3KB 0
    diff --git a/docs/course/05_GatingSets/slides.html b/docs/course/05_GatingSets/slides.html index feb608e..257d645 100644 --- a/docs/course/05_GatingSets/slides.html +++ b/docs/course/05_GatingSets/slides.html @@ -663,7 +663,7 @@

    flowSet

    str(flowSet)
    Formal class 'flowSet' [package "flowCore"] with 2 slots
    -  ..@ frames   :<environment: 0x557c16753070> 
    +  ..@ frames   :<environment: 0x55c088906388> 
       ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
       .. .. ..@ varMetadata      :'data.frame': 1 obs. of  1 variable:
       .. .. .. ..$ labelDescription: chr "Name"
    @@ -1126,7 +1126,7 @@ 

    cytoset

    Formal class 'cytoset' [package "flowWorkspace"] with 3 slots
       ..@ pointer  :<externalptr> 
    -  ..@ frames   :<environment: 0x557c21ac49f8> 
    +  ..@ frames   :<environment: 0x55c093c768c8> 
       ..@ phenoData:Formal class 'AnnotatedDataFrame' [package "Biobase"] with 4 slots
       .. .. ..@ varMetadata      :'data.frame': 0 obs. of  1 variable:
       .. .. .. ..$ labelDescription: chr(0) 
    @@ -1299,7 +1299,7 @@ 

    Interconverting

    ConvertedToCytoframe <- flowFrame_to_cytoframe(flowFrame)
     ConvertedToCytoframe
    -
    cytoframe object 'file3d545cb6d20'
    +
    cytoframe object 'file3a182671eeb3'
     with 10000 cells and 43 observables:
                    name      desc       range  minRange    maxRange
     $P1            Time        NA     878.809         0     878.809
    @@ -1951,7 +1951,7 @@ 

    System Time

    })
       user  system elapsed 
    -  0.626   0.000   0.628 
    + 0.476 0.004 0.480
    @@ -1991,7 +1991,7 @@

    System Time

    # A tibble: 1 × 6
       expression                             min median `itr/sec` mem_alloc `gc/sec`
       <bch:expr>                           <bch> <bch:>     <dbl> <bch:byt>    <dbl>
    -1 Test <- flowjo_to_gatingset(ws = ws… 515ms  529ms      1.81    13.3KB        0
    +1 Test <- flowjo_to_gatingset(ws = ws… 476ms 478ms 2.09 13.3KB 0
    diff --git a/docs/course/06_Visualizing/images/ggplot2.png b/docs/course/06_Visualizing/images/ggplot2.png new file mode 100644 index 0000000000000000000000000000000000000000..0187d1603b27b7635c6f0d86b39f69c1d33c454c GIT binary patch literal 79964 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 this page
  • Geometries
  • +
  • Scales
  • Facets
  • -
  • Statistics
  • Coordinates
  • Themes
  • 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 literal 0 HcmV?d00001 diff --git a/docs/course/06_Visualizing/index.html b/docs/course/06_Visualizing/index.html new file mode 100644 index 0000000..4dc6594 --- /dev/null +++ b/docs/course/06_Visualizing/index.html @@ -0,0 +1,1628 @@ + + + + + + + + + + + +06 - Visualizing with ggplot2 – Cytometry in R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +