From 23795d9c5880174b62813ff57eeb799483e0162b Mon Sep 17 00:00:00 2001 From: Jarkko Toivonen Date: Tue, 10 Feb 2026 23:27:57 +0200 Subject: [PATCH 01/10] Added solutions for week01 --- .../homeworks/jttoivon/cytomem.png | Bin 0 -> 60227 bytes .../homeworks/jttoivon/exercises.html | 3673 +++++++++++++++++ .../homeworks/jttoivon/exercises.qmd | 112 + .../jttoivon/failure_due_to_embed_som.png | Bin 0 -> 50391 bytes .../homeworks/jttoivon/kernsmooth_fail1.png | Bin 0 -> 88178 bytes .../homeworks/jttoivon/kernsmooth_fail2.png | Bin 0 -> 69546 bytes 6 files changed, 3785 insertions(+) create mode 100644 course/01_InstallingRPackages/homeworks/jttoivon/cytomem.png create mode 100644 course/01_InstallingRPackages/homeworks/jttoivon/exercises.html create mode 100644 course/01_InstallingRPackages/homeworks/jttoivon/exercises.qmd create mode 100644 course/01_InstallingRPackages/homeworks/jttoivon/failure_due_to_embed_som.png create mode 100644 course/01_InstallingRPackages/homeworks/jttoivon/kernsmooth_fail1.png create mode 100644 course/01_InstallingRPackages/homeworks/jttoivon/kernsmooth_fail2.png diff --git a/course/01_InstallingRPackages/homeworks/jttoivon/cytomem.png b/course/01_InstallingRPackages/homeworks/jttoivon/cytomem.png new file mode 100644 index 0000000000000000000000000000000000000000..e1581d8f7ae7e51d127df4f517fef3af5d20c2a0 GIT binary patch literal 60227 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 pjjOPA%d)wODz|V1+)*ghuz7+M3yaRt@ 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 U86Nv6-nTUfL`Djj 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 literal 0 HcmV?d00001 diff --git a/course/01_InstallingRPackages/homeworks/jttoivon/exercises.html b/course/01_InstallingRPackages/homeworks/jttoivon/exercises.html new file mode 100644 index 0000000..4f8a6a7 --- /dev/null +++ b/course/01_InstallingRPackages/homeworks/jttoivon/exercises.html @@ -0,0 +1,3673 @@ + + + + + + + + + + + +Solutions for week01 + + + + + + + + + + + + + + + + + + + +

+ +
+ +
+
+

Solutions for week01

+
+ + + +
+ +
+
Author
+
+

Jarkko Toivonen

+
+
+ +
+
Published
+
+

February 10, 2026

+
+
+ + +
+ + + +
+ + +
+
library(PeacoQC)
+
+
+

Problem 1

+
+

We installed PeacoQC during this session, but we didn’t have time to explore what functions are present within the package. Using what you have learned about accessing documentation, figure out and list what functions it contains

+
+
+
help(package = PeacoQC)
+
+
+
ls("package:PeacoQC")
+
+
[1] "PeacoQC"        "PeacoQCHeatmap" "PlotPeacoQC"    "RemoveDoublets"
+[5] "RemoveMargins" 
+
+
+
+
+

Problem 2

+
+

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

+
+

There are 69 Bioconductor packages about cytometry.

+

Mike Jiang has contributed to 10 cytometry packages.

+

These packages seem interesting:

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageMaintainerTitleRank
flowVizMike JiangVisualization for flow cytometry227
ggcytoMike JiangVisualize Cytometry data with ggplot237
flowPeaksYongchao GeAn R package for flow data clustering648
+
+
+

Problem 3

+
+

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

+
+
+

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

+
+
+

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

+
+
+

broom

+
+
pak::pkg_install("broom")
+
+
ℹ Loading metadata database
+
+
+
✔ Loading metadata database ... done
+
+
+
+
+
+
 
+
+
+
✔ All system requirements are already installed.
+
+
+
  
+
+
+
ℹ No downloads are needed
+
+
+
✔ 1 pkg + 20 deps: kept 21 [6.4s]
+
+
+

It is easy to see in what stage the installation is. Meaning that all the time it shows how many packages have finished installing out of the total number of needed packages. It is then easier to estimate how long the installation will still take.

+
+
+

cytoMEM

+
+
pak::pkg_install("cytoMEM")
+
+
 
+
+
+
✔ All system requirements are already installed.
+
+
+
  
+
+
+
ℹ No downloads are needed
+
+
+
✔ 1 pkg + 14 deps: kept 15 [1.2s]
+
+
+

+

+

+

Installing cytoMEM causes pak::pkg_install() to install also KernSmooth, even though it is already installed. It fails installing it because fortran compiler and blas library development package are not installed.

+

Works after installing these.

+
+
+

DillonHammill/CytoExploreR

+

The next chunk is disabled.

+
+
pak::pkg_install("DillonHammill/CytoExploreR")
+
+

Error: ! ! error in pak subprocess Caused by error: ! Could not solve package dependencies: * DillonHammill/CytoExploreR: * Can’t install dependency EmbedSOM (>= 1.0.0) * Can’t install dependency superheat (>= 1.0.0) * EmbedSOM: Can’t find package called EmbedSOM. Show Traceback

+

+

Package ‘EmbedSOM’ was removed from the CRAN repository.

+

Formerly available versions can be obtained from the archive.

+

Archived on 2025-12-22 as issues were not corrected in time.

+

So, it seems that this package cannot be installed. At least not with pkg_install().

+

pkg_install() does not print endless messages about compilation, unlike some other installation methods, which is good.

+
+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/course/01_InstallingRPackages/homeworks/jttoivon/exercises.qmd b/course/01_InstallingRPackages/homeworks/jttoivon/exercises.qmd new file mode 100644 index 0000000..be5a6cf --- /dev/null +++ b/course/01_InstallingRPackages/homeworks/jttoivon/exercises.qmd @@ -0,0 +1,112 @@ +--- +title: "Solutions for week01" +author: Jarkko Toivonen +date: "`r Sys.Date()`" +format: + html: + embed-resources: true +--- + +```{r} +library(PeacoQC) +``` + + +## Problem 1 + +> We installed PeacoQC during this session, but we didn’t have time to explore what functions are present within the package. Using what you have learned about accessing documentation, figure out and list what functions it contains + +```{r} +help(package = PeacoQC) +``` + + +```{r} +ls("package:PeacoQC") +``` + +## Problem 2 + +> Take a closer look at the list of Bioconductor cytometry packages. Report back on how many there are currently in Bioconductor, the author/maintainer with the most contributed cytometry R packages, and a couple packages that you would be interested in exploring more in-depth later in the course. + +There are 69 Bioconductor packages about cytometry. + +Mike Jiang has contributed to 10 cytometry packages. + +These packages seem interesting: + +Package | Maintainer | Title | Rank +--------+------------+-------+----- +flowViz | Mike Jiang | Visualization for flow cytometry | 227 +ggcyto | Mike Jiang | Visualize Cytometry data with ggplot | 237 +flowPeaks | Yongchao Ge | An R package for flow data clustering | 648 + +## Problem 3 + + + +> There is another way to install R packages, using the newer pak package. Positron uses this when installing suggested dependencies. + +> After learning more about it via the documentation and it’s pkgdown website, I would like you to attempt to install the following three R packages using this newer method: “broom”, “cytoMEM”, “DillonHammill/CytoExploreR”. + +> Take screenshots, and in a new quarto markdown document, describe how the installation process differed from what you saw for install.packages(), install() and install_github(). + +### broom + +```{r} +pak::pkg_install("broom") +``` + +It is easy to see in what stage the installation is. Meaning that all the time it +shows how many packages have finished installing out of the total number of needed packages. +It is then easier to estimate how long the installation will still take. + +### cytoMEM + +```{r} +pak::pkg_install("cytoMEM") +``` + + +![](cytomem.png) + +![](kernsmooth_fail1.png) + +![](kernsmooth_fail2.png) + +Installing cytoMEM causes pak::pkg_install() to install also KernSmooth, even though it is already installed. +It fails installing it because fortran compiler and blas library development package are not installed. + +Works after installing these. + +### DillonHammill/CytoExploreR + +The next chunk is disabled. + +```{r} +#| eval: FALSE +pak::pkg_install("DillonHammill/CytoExploreR") +``` + +Error: +! ! error in pak subprocess +Caused by error: +! Could not solve package dependencies: +* DillonHammill/CytoExploreR: + * Can't install dependency EmbedSOM (>= 1.0.0) + * Can't install dependency superheat (>= 1.0.0) +* EmbedSOM: Can't find package called EmbedSOM. +Show Traceback + +![](failure_due_to_embed_som.png) + +Package ‘EmbedSOM’ was removed from the CRAN repository. + +Formerly available versions can be obtained from the archive. + +Archived on 2025-12-22 as issues were not corrected in time. + +So, it seems that this package cannot be installed. At least not with pkg_install(). + +pkg_install() does not print endless messages about compilation, unlike some other installation +methods, which is good. \ No newline at end of file diff --git a/course/01_InstallingRPackages/homeworks/jttoivon/failure_due_to_embed_som.png b/course/01_InstallingRPackages/homeworks/jttoivon/failure_due_to_embed_som.png new file mode 100644 index 0000000000000000000000000000000000000000..fe34d9dff9e851aa6893eaa706a138ea9d6ee12e GIT binary patch literal 50391 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

*}(WnTa#FnDnvMr)DfJ>chQ>;C3vLH{Yl^ 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 V?VA=9A>p61r_Y~?mC(NRzW`EGpUD6K literal 0 HcmV?d00001 diff --git a/course/01_InstallingRPackages/homeworks/jttoivon/kernsmooth_fail2.png b/course/01_InstallingRPackages/homeworks/jttoivon/kernsmooth_fail2.png new file mode 100644 index 0000000000000000000000000000000000000000..8acedd726f14c4826b34b6d1501edc00aa5d2c53 GIT binary patch literal 69546 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 U$TwH#C4xVa_vOTM?&-e%FSpFSh5!Hn literal 0 HcmV?d00001 From f05662cd99db7166226fd81e7f931579ea5e1a44 Mon Sep 17 00:00:00 2001 From: Jarkko Toivonen Date: Sat, 14 Feb 2026 17:20:17 +0200 Subject: [PATCH 02/10] Added solutions for week02 --- .../homeworks/jttoivon/filepaths.html | 3710 +++++++++++++++++ .../homeworks/jttoivon/filepaths.qmd | 82 + 2 files changed, 3792 insertions(+) create mode 100644 course/02_FilePaths/homeworks/jttoivon/filepaths.html create mode 100644 course/02_FilePaths/homeworks/jttoivon/filepaths.qmd diff --git a/course/02_FilePaths/homeworks/jttoivon/filepaths.html b/course/02_FilePaths/homeworks/jttoivon/filepaths.html new file mode 100644 index 0000000..357bc08 --- /dev/null +++ b/course/02_FilePaths/homeworks/jttoivon/filepaths.html @@ -0,0 +1,3710 @@ + + + + + + + + + + + +Solutions for week02 + + + + + + + + + + + + + + + + + + + +

+ +
+ +
+
+

Solutions for week02

+
+ + + +
+ +
+
Author
+
+

Jarkko Toivonen

+
+
+ +
+
Published
+
+

February 14, 2026

+
+
+ + +
+ + + +
+ + +
+
library(magrittr)  # For the pipe
+library(fs)
+
+
+

Problem 1

+
+

Plug in an external hard-drive or USB into your computer. Manually, create a folder within called “TargetFolder”. Try to programmatically specify the file path to identify the folders and files present on your external drive. Then, try to copy your .fcs files from their current folder on your desktop to the TargetFolder on your drive using R. Remember, just copy, no deletion, you need to walk before you can run :D

+
+
+
fcs_files <- list.files("data", pattern = ".fcs", full.names = TRUE)
+fcs_files
+
+
[1] "data/CellCounts3L_AB_02_INF052_00.fcs"     
+[2] "data/CellCounts3L_AB_02_ND050_02.fcs"      
+[3] "data/CellCounts4L_AB_03_INF134_00.fcs"     
+[4] "data/CellCounts4L_AB_03_NY068_03.fcs"      
+[5] "data/CellCounts4L_AB_04_INF124-7_00_01.fcs"
+[6] "data/CellCounts4L_AB_04_ND006_04.fcs"      
+[7] "data/CellCounts4L_AB_05_INF019-0_00_01.fcs"
+[8] "data/CellCounts4L_AB_05_ND050_05.fcs"      
+
+
+
+
usb_stick <- file.path("", "media", "jttoivon", "KINGSTON")
+if (file.exists(usb_stick)) {
+    target <- usb_stick
+} else {
+    target <- file.path("", "tmp")
+}
+target <- file.path(target, "TargetFolder")
+target
+
+
[1] "/media/jttoivon/KINGSTON/TargetFolder"
+
+
+
+
dir.create(target)
+
+
+
file.copy(fcs_files, target)
+
+
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
+
+
+
+
+

Problem 2

+
+

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

+
+
+
all_files <- list.files(".", full.names = TRUE, recursive = TRUE)
+all_files
+
+
 [1] "./data/CellCounts3L_AB_02_INF052_00.fcs"             
+ [2] "./data/CellCounts3L_AB_02_ND050_02.fcs"              
+ [3] "./data/CellCounts4L_AB_03_INF134_00.fcs"             
+ [4] "./data/CellCounts4L_AB_03_NY068_03.fcs"              
+ [5] "./data/CellCounts4L_AB_04_INF124-7_00_01.fcs"        
+ [6] "./data/CellCounts4L_AB_04_ND006_04.fcs"              
+ [7] "./data/CellCounts4L_AB_05_INF019-0_00_01.fcs"        
+ [8] "./data/CellCounts4L_AB_05_ND050_05.fcs"              
+ [9] "./data/target/CellCounts3L_AB_02_INF052_00.fcs"      
+[10] "./data/target/CellCounts3L_AB_02_ND050_02.fcs"       
+[11] "./data/target2/CellCounts3L_AB_02_INF052_00.fcs"     
+[12] "./data/target2/CellCounts3L_AB_02_ND050_02.fcs"      
+[13] "./data/target3/CellCounts3L_AB_02_INF052_00.fcs"     
+[14] "./data/target3/CellCounts4L_AB_03_INF134_00.fcs"     
+[15] "./data/target3/CellCounts4L_AB_04_INF124-7_00_01.fcs"
+[16] "./data/target3/CellCounts4L_AB_05_INF019-0_00_01.fcs"
+[17] "./filepaths.html"                                    
+[18] "./filepaths.qmd"                                     
+[19] "./filepaths.rmarkdown"                               
+[20] "./README.md"                                         
+
+
+

Split the paths into components.

+
+
all_files %>%
+    fs::path_norm() %>%    # Get rid of the "." in the beginning
+    fs::path_split()       # Split into components
+
+
[[1]]
+[1] "data"                             "CellCounts3L_AB_02_INF052_00.fcs"
+
+[[2]]
+[1] "data"                            "CellCounts3L_AB_02_ND050_02.fcs"
+
+[[3]]
+[1] "data"                             "CellCounts4L_AB_03_INF134_00.fcs"
+
+[[4]]
+[1] "data"                            "CellCounts4L_AB_03_NY068_03.fcs"
+
+[[5]]
+[1] "data"                                 
+[2] "CellCounts4L_AB_04_INF124-7_00_01.fcs"
+
+[[6]]
+[1] "data"                            "CellCounts4L_AB_04_ND006_04.fcs"
+
+[[7]]
+[1] "data"                                 
+[2] "CellCounts4L_AB_05_INF019-0_00_01.fcs"
+
+[[8]]
+[1] "data"                            "CellCounts4L_AB_05_ND050_05.fcs"
+
+[[9]]
+[1] "data"                             "target"                          
+[3] "CellCounts3L_AB_02_INF052_00.fcs"
+
+[[10]]
+[1] "data"                            "target"                         
+[3] "CellCounts3L_AB_02_ND050_02.fcs"
+
+[[11]]
+[1] "data"                             "target2"                         
+[3] "CellCounts3L_AB_02_INF052_00.fcs"
+
+[[12]]
+[1] "data"                            "target2"                        
+[3] "CellCounts3L_AB_02_ND050_02.fcs"
+
+[[13]]
+[1] "data"                             "target3"                         
+[3] "CellCounts3L_AB_02_INF052_00.fcs"
+
+[[14]]
+[1] "data"                             "target3"                         
+[3] "CellCounts4L_AB_03_INF134_00.fcs"
+
+[[15]]
+[1] "data"                                 
+[2] "target3"                              
+[3] "CellCounts4L_AB_04_INF124-7_00_01.fcs"
+
+[[16]]
+[1] "data"                                 
+[2] "target3"                              
+[3] "CellCounts4L_AB_05_INF019-0_00_01.fcs"
+
+[[17]]
+[1] "filepaths.html"
+
+[[18]]
+[1] "filepaths.qmd"
+
+[[19]]
+[1] "filepaths.rmarkdown"
+
+[[20]]
+[1] "README.md"
+
+
+
+
+

Problem 3

+
+

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

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

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

+
+
+
system.file("extdata", package = "FlowSOM") %>% 
+    list.files(pattern = "\\.fcs$", full.names = TRUE, recursive = TRUE)
+
+
[1] "/usr/lib/R/site-library/FlowSOM/extdata/68983.fcs"
+
+
+
+
system.file("extdata", package = "flowWorkspace") %>% 
+    list.files(pattern = "\\.fcs$", full.names = TRUE, recursive = TRUE)
+
+
character(0)
+
+
+

No .fcs files found for package flowWorkspace.

+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/course/02_FilePaths/homeworks/jttoivon/filepaths.qmd b/course/02_FilePaths/homeworks/jttoivon/filepaths.qmd new file mode 100644 index 0000000..44d1d40 --- /dev/null +++ b/course/02_FilePaths/homeworks/jttoivon/filepaths.qmd @@ -0,0 +1,82 @@ +--- +title: Solutions for week02 +author: Jarkko Toivonen +date: "`r Sys.Date()`" +format: + html: + embed-resources: true +--- + +```{r setup} +library(magrittr) # For the pipe +library(fs) +``` +## Problem 1 + +> Plug in an external hard-drive or USB into your computer. Manually, create a folder within called “TargetFolder”. Try to programmatically specify the file path to identify the folders and files present on your external drive. Then, try to copy your .fcs files from their current folder on your desktop to the TargetFolder on your drive using R. Remember, just copy, no deletion, you need to walk before you can run :D + +```{r} +fcs_files <- list.files("data", pattern = ".fcs", full.names = TRUE) +fcs_files +``` + + +```{r} +usb_stick <- file.path("", "media", "jttoivon", "KINGSTON") +if (file.exists(usb_stick)) { + target <- usb_stick +} else { + target <- file.path("", "tmp") +} +target <- file.path(target, "TargetFolder") +target +``` + +```{r} +dir.create(target) +``` + +```{r} +file.copy(fcs_files, target) +``` + +## Problem 2 + +> In this session, we used list.files() with the “full.names argument” set to TRUE, as well as the basename() function to identify specific files. But what if you wanted a particular directory. Run list.files() with “full.names argument” and “recursive” argument set to TRUE, and then search online to find an R function that would retrieve the “” individual directory folders. + + +```{r} +all_files <- list.files(".", full.names = TRUE, recursive = TRUE) +all_files +``` + +Split the paths into components. + +```{r} +all_files %>% + fs::path_norm() %>% # Get rid of the "." in the beginning + fs::path_split() # Split into components +``` + +## Problem 3 + +> R packages often come with internal datasets, that are typically used for use in the help documentation examples. These can be accessed through the use of the `system.file()` function. See an example below. + +```{r} +#| eval: FALSE +system.file("extdata", package = "FlowSOM") +``` + +> Using what we have learned about file.path navigation, search your way down the file.directory of the `FlowSOM` and `flowWorkspace` packages, and identify any .fcs files that are present for use in the documentation. + +```{r} +system.file("extdata", package = "FlowSOM") %>% + list.files(pattern = "\\.fcs$", full.names = TRUE, recursive = TRUE) +``` + +```{r} +system.file("extdata", package = "flowWorkspace") %>% + list.files(pattern = "\\.fcs$", full.names = TRUE, recursive = TRUE) +``` + +No .fcs files found for package flowWorkspace. \ No newline at end of file From 72691708173ff54580d0812861536aa17af0eb49 Mon Sep 17 00:00:00 2001 From: David Rach Date: Sun, 22 Feb 2026 10:24:42 -0500 Subject: [PATCH 03/10] Week02 Homeworks in Week2 branch --- .../homeworks/DavidRach/images/Week_03.png | Bin 0 -> 61582 bytes .../02_FilePaths/homeworks/DavidRach/index.qmd | 1 + 2 files changed, 1 insertion(+) create mode 100644 course/02_FilePaths/homeworks/DavidRach/images/Week_03.png create mode 100644 course/02_FilePaths/homeworks/DavidRach/index.qmd diff --git a/course/02_FilePaths/homeworks/DavidRach/images/Week_03.png b/course/02_FilePaths/homeworks/DavidRach/images/Week_03.png new file mode 100644 index 0000000000000000000000000000000000000000..25d0058d10c16c3b674b0b51b836e73c244f6241 GIT binary patch literal 61582 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 Date: Mon, 23 Feb 2026 15:01:07 -0500 Subject: [PATCH 04/10] Week #4 materials --- _quarto.yml | 3 + course/04_IntroToTidyverse/BonusContent.qmd | 88 + course/04_IntroToTidyverse/data/Dataset.csv | 197 ++ .../04_IntroToTidyverse/homeworks/README.md | 5 + .../images/00_CheckNamesTRUE.png | Bin 0 -> 51798 bytes .../images/01_DataView.png | Bin 0 -> 200924 bytes .../04_IntroToTidyverse/images/02_Glimpse.png | Bin 0 -> 40838 bytes .../images/03_ColumnClass.png | Bin 0 -> 219665 bytes .../04_IntroToTidyverse/images/TakeAway.jpg | Bin 0 -> 26469 bytes .../images/WebsiteBanner.png | Bin 0 -> 139330 bytes course/04_IntroToTidyverse/index.qmd | 581 ++++ docs/Schedule.html | 6 +- .../00_BonusContent/Immport/images/index.html | 6 + .../PullConflicts/UpdatedPullRequest.html | 6 + .../00_BonusContent/PullConflicts/index.html | 6 + docs/course/00_BonusContent/index.html | 6 + docs/course/00_Floreada/index.html | 6 + docs/course/00_Git/index.html | 6 + docs/course/00_GitHub/index.html | 6 + docs/course/00_Homeworks/index.html | 6 + docs/course/00_Positron/index.html | 6 + docs/course/00_Quarto/index.html | 6 + docs/course/00_WorkstationSetup/Linux.html | 6 + docs/course/00_WorkstationSetup/MacOS.html | 6 + docs/course/00_WorkstationSetup/Windows.html | 6 + docs/course/00_WorkstationSetup/index.html | 6 + docs/course/01_InstallingRPackages/index.html | 6 + docs/course/02_FilePaths/Downsampler.html | 6 + docs/course/02_FilePaths/index.html | 6 + docs/course/03_InsideFCSFile/index.html | 20 +- docs/course/03_InsideFCSFile/slides.html | 8 +- .../04_IntroToTidyverse/BonusContent.html | 1128 +++++++ .../images/00_CheckNamesTRUE.png | Bin 0 -> 51798 bytes .../images/01_DataView.png | Bin 0 -> 200924 bytes .../04_IntroToTidyverse/images/02_Glimpse.png | Bin 0 -> 40838 bytes .../images/03_ColumnClass.png | Bin 0 -> 219665 bytes .../04_IntroToTidyverse/images/TakeAway.jpg | Bin 0 -> 26469 bytes .../images/WebsiteBanner.png | Bin 0 -> 139330 bytes docs/course/04_IntroToTidyverse/index.html | 2617 +++++++++++++++++ docs/course/index.html | 6 + docs/search.json | 160 + 41 files changed, 4907 insertions(+), 14 deletions(-) create mode 100644 course/04_IntroToTidyverse/BonusContent.qmd create mode 100644 course/04_IntroToTidyverse/data/Dataset.csv create mode 100644 course/04_IntroToTidyverse/homeworks/README.md create mode 100644 course/04_IntroToTidyverse/images/00_CheckNamesTRUE.png create mode 100644 course/04_IntroToTidyverse/images/01_DataView.png create mode 100644 course/04_IntroToTidyverse/images/02_Glimpse.png create mode 100644 course/04_IntroToTidyverse/images/03_ColumnClass.png create mode 100644 course/04_IntroToTidyverse/images/TakeAway.jpg create mode 100644 course/04_IntroToTidyverse/images/WebsiteBanner.png create mode 100644 course/04_IntroToTidyverse/index.qmd create mode 100644 docs/course/04_IntroToTidyverse/BonusContent.html create mode 100644 docs/course/04_IntroToTidyverse/images/00_CheckNamesTRUE.png create mode 100644 docs/course/04_IntroToTidyverse/images/01_DataView.png create mode 100644 docs/course/04_IntroToTidyverse/images/02_Glimpse.png create mode 100644 docs/course/04_IntroToTidyverse/images/03_ColumnClass.png create mode 100644 docs/course/04_IntroToTidyverse/images/TakeAway.jpg create mode 100644 docs/course/04_IntroToTidyverse/images/WebsiteBanner.png create mode 100644 docs/course/04_IntroToTidyverse/index.html diff --git a/_quarto.yml b/_quarto.yml index 1458d2c..e393899 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -11,6 +11,7 @@ project: - 01_* - 02_* - 03_* + - 04_* website: google-analytics: "G-LZ35J3XE4D" announcement: @@ -69,6 +70,8 @@ website: href: course/02_FilePaths/index.qmd - text: "03 - Inside a .FCS file" href: course/03_InsideFCSFile/index.qmd + - text: "04 - Intro to Tidyverse" + href: course/04_IntroToTidyverse/index.qmd - section: "Cytometry Core" href: Schedule.qmd - section: "Beyond the Sandbox" diff --git a/course/04_IntroToTidyverse/BonusContent.qmd b/course/04_IntroToTidyverse/BonusContent.qmd new file mode 100644 index 0000000..2459223 --- /dev/null +++ b/course/04_IntroToTidyverse/BonusContent.qmd @@ -0,0 +1,88 @@ +--- +title: "Bonus Content" +author: "David Rach" +date: 02-23-2026 +format: html +toc: true +toc-depth: 5 +--- + +![](/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/) +::: + +```{r} +thefilepath <- file.path("data", "Dataset.csv") + +thefilepath +``` + +```{r} +Data <- read.csv(file=thefilepath, check.names=FALSE) +colnames(Data) +``` + +## Pull + +## Case-When + +Case-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. + +In 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 + +# Quasiquosure + +```{r} +library(dplyr) +DateColumn <- select(Data, Date) +DateColumn +``` + + +## Selecting Columns (Base R) + +As we saw [last week](/course/03_InsideFCSFile/index.qmd), 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? + +```{r} +colnames(Data) +``` + +```{r} +colnames(Data)[4] +``` + +```{r} +DataColumn <- Data[,4] # Column specified after the , +DataColumn +``` + +However, looking at the output, we see this looks like the values, not a column. Our suspicions are confirmed when running DataColumn + +```{r} +str(DataColumn) +``` + +This is similarly the case when we use the $ accessor. + +```{r} +DataColumn <- Data$Date +str(DataColumn) +``` + +```{r} +head(DataColumn, 3) +``` + +By contrast, when selecting two columns, the structure is maintained. + +```{r} +TwoColumns <- Data[,4:5] +``` + +Why 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. + +::: {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/course/04_IntroToTidyverse/data/Dataset.csv b/course/04_IntroToTidyverse/data/Dataset.csv new file mode 100644 index 0000000..a7ac736 --- /dev/null +++ b/course/04_IntroToTidyverse/data/Dataset.csv @@ -0,0 +1,197 @@ +bid,timepoint,Condition,Date,infant_sex,ptype,root,singletsFSC,singletsSSC,singletsSSCB,CD45,NotMonocytes,nonDebris,lymphocytes,live,Dump+,Dump-,Tcells,Vd2+,Vd2-,Va7.2+,Va7.2-,CD4+,CD4-,CD8+,CD8-,Tcells_count,lymphocytes_count,Monocytes,Debris,CD45_count +INF0052,0,Ctrl,2025-07-26,Male,HEU-hi,2098368,1894070,1666179,1537396,0.595294250798103,0.882034914658278,0.862764872929831,0.642013848293767,0.902058127245466,0.210909963527936,0.69114816371753,0.280426432119924,0.00812036098585309,0.991879639014147,0.0144807035218576,0.977398935492289,0.63411644039303,0.343282495099259,0.273482590989919,0.0697999041093396,164771,587573,0.117965085341722,0.137235127070169,915203 +INF0100,0,Ctrl,2025-07-26,Male,HEU-lo,2020184,1791890,1697083,1579098,0.91067622148847,0.905225628925897,0.860266041374169,0.214584780608701,0.890898072803751,0.06252774780205,0.828370325001701,0.6748297864756,0.00726562012283844,0.992734379877162,0.0157749914762223,0.976959388400939,0.611911199043416,0.365048189357523,0.335769613092523,0.0292785762650006,208241,308583,0.0947743710741026,0.139733958625831,1438047 +INF0100,4,Ctrl,2025-07-26,Male,HEU-lo,1155040,1033320,875465,845446,0.970576476794497,0.984540014867714,0.957879279037742,0.740311003326956,0.875766489924721,0.200238033703334,0.675528456221388,0.611912879006119,0.00465131294001178,0.995348687059988,0.0157940186644356,0.979554668395553,0.663962143854429,0.315592524541123,0.286210430885364,0.0293820936557598,371723,607477,0.0154599851322861,0.0421207209622579,820570 +INF0100,9,Ctrl,2025-07-26,Male,HEU-lo,358624,328624,289327,276289,0.981957298336163,0.985507032701324,0.941261463155722,0.651158847639548,0.915324178374523,0.21469246357451,0.700631714800014,0.631443094723257,0.0113489672977625,0.988651032702238,0.0170234509466437,0.971627581755594,0.437894434882387,0.533733146873207,0.486123063683305,0.0476100831899025,111552,176662,0.014492967298676,0.058738536844278,271304 +INF0179,0,Ctrl,2025-07-26,Male,HU,1362216,1206309,1032946,982736,0.957259121473112,0.955627154569894,0.840783729283442,0.705478600197931,0.895214015462574,0.338318765284397,0.556895250178177,0.439643676723417,0.00475363034097958,0.99524636965902,0.0133218176895369,0.981924551969484,0.739256349883644,0.24266820208584,0.195063353177255,0.0476048489085843,291777,663667,0.0443728454301061,0.159216270716558,940733 +INF0179,4,Ctrl,2025-07-26,Male,HU,1044808,917398,735579,685592,0.985800592772378,0.962289360027343,0.949924318309938,0.755677606357558,0.967305621365496,0.369473107121179,0.597832514244317,0.532316488164001,0.00516055467686762,0.994839445323132,0.0124618383786368,0.982377606944495,0.587626439106926,0.394751167837569,0.357137602530621,0.0376135653069482,271870,510730,0.0377106399726569,0.0500756816900616,675857 +INF0179,9,Ctrl,2025-07-26,Male,HU,1434840,1265022,988445,940454,0.98001603480872,0.980521016426882,0.965775882646529,0.7879673632359,0.929742040488104,0.238631137450808,0.691110903037296,0.671869277013871,0.00263148726167518,0.997368512738325,0.0135632264001295,0.983805286338195,0.699414063700847,0.284391222637349,0.258078399465505,0.0263128231718439,487937,726238,0.0194789835731181,0.0342241173534709,921660 +INF0186,4,Ctrl,2025-07-26,Female,HEU-hi,972056,875707,767323,718000,0.977238161559889,0.949066281673239,0.9189703801145,0.642831183897545,0.875651539639993,0.325167887160318,0.550483652479675,0.489159666287549,0.00930047046239474,0.990699529537605,0.0387700898320295,0.951929439705576,0.572472964275678,0.379456475429897,0.355552634680058,0.0239038407498391,220634,451047,0.0509337183267607,0.0810296198854996,701657 +INF0186,9,Ctrl,2025-07-26,Female,HEU-hi,1521928,1359574,1175755,1097478,0.972123359192622,0.95816977290877,0.918676257212593,0.666392972431867,0.874952880877231,0.228757011606776,0.646195869270455,0.584933976966485,0.0179408320448605,0.982059167955139,0.0367713716164062,0.945287796338733,0.511920878550113,0.43336691778862,0.413879918339277,0.0194869994493432,415867,710964,0.0418302270912302,0.0813237427874071,1066884 +INF0052,0,PPD,2025-07-26,Male,HEU-hi,2363512,2136616,1875394,1732620,0.587383846429107,0.86198368302262,0.84296849897761,0.640804431111718,0.900925393503078,0.207432282202851,0.693493111300228,0.28356755679248,0.00740820851132861,0.992591791488671,0.015070567241659,0.977521224247012,0.634034499540367,0.343486724706646,0.274411939652842,0.0690747850538041,184930,652155,0.13801631697738,0.15703150102239,1017713 +INF0100,0,PPD,2025-07-26,Male,HEU-lo,2049112,1821676,1717636,1597085,0.906308054987681,0.925196086085125,0.877188934202263,0.217428431083332,0.892967332555915,0.0618142648792407,0.831153067676675,0.67357975578059,0.00713723011316732,0.992862769886833,0.0167180062928387,0.976144763593994,0.61457070480737,0.361574058786624,0.331227858312066,0.0303462004745574,211987,314717,0.0748039139148752,0.122811065797737,1447451 +INF0100,4,PPD,2025-07-26,Male,HEU-lo,1063496,946587,796056,767297,0.970989069421619,0.984871892268438,0.955604889421599,0.731350255088002,0.878230739443147,0.207272019864815,0.670958719578332,0.598987305531646,0.00525464338895391,0.994745356611046,0.0160978987554308,0.978647457855615,0.655948011201735,0.32269944665388,0.291208353504219,0.0314910931496608,326378,544883,0.0151281077315624,0.0443951105784008,745037 +INF0100,9,PPD,2025-07-26,Male,HEU-lo,788368,714198,626387,600011,0.982280324860711,0.98421389292798,0.812304137066302,0.622322817745458,0.95666386756238,0.231645873320537,0.725017994241843,0.648940520851509,0.0119359216203612,0.988064078379639,0.0185529848206671,0.969511093558972,0.430688888795526,0.538822204763445,0.490855848853673,0.0479663559097727,238021,366784,0.0157861070720199,0.187695862933698,589379 +INF0179,0,PPD,2025-07-26,Male,HU,1380336,1242311,1047081,1000877,0.947027456920281,0.957568538747365,0.913443785883539,0.699650158568056,0.885689771385574,0.331861109309995,0.55382866207558,0.444153752663348,0.00438297193336253,0.995617028066637,0.0129723747152426,0.982644653351395,0.749919368254518,0.232725285096877,0.185089747376498,0.0476355377203793,294549,663169,0.0424314612526349,0.0865562141164605,947858 +INF0179,4,PPD,2025-07-26,Male,HU,1240984,1089933,868877,814909,0.985594710575046,0.954141713460413,0.940082423397288,0.730307406900158,0.960259887718413,0.343572109294685,0.616687778423727,0.565465484408271,0.00432042932947419,0.995679570670526,0.012668837433671,0.983010733236855,0.631877110467921,0.351133622768934,0.317746020260492,0.0333876025084419,331680,586561,0.0458582865395869,0.0599175766027118,803170 +INF0179,9,PPD,2025-07-26,Male,HU,1705960,1492142,1163543,1107878,0.982091890984386,0.981690896825295,0.968165633920874,0.793325233126049,0.934456560020761,0.24759143063691,0.686865129383851,0.668731927040854,0.00273375511929428,0.997266244880706,0.0133032354632831,0.983963009417423,0.701636095269114,0.282326914148309,0.255933530597961,0.0263933835503475,577228,863168,0.0183091031747052,0.0318343660791259,1088038 +INF0186,4,PPD,2025-07-26,Female,HEU-hi,848584,759606,648405,607514,0.98247777005962,0.953948018744482,0.925017047291784,0.672087174907727,0.862222920218972,0.326410701287305,0.535812218931666,0.475772034261669,0.00948363941211915,0.990516360587881,0.0435251892798198,0.946991171308061,0.530910900945744,0.416080270362317,0.391218464279165,0.0248618060831521,190855,401148,0.0460519812555183,0.0749829527082158,596869 +INF0186,9,PPD,2025-07-26,Female,HEU-hi,1425416,1259825,1089955,1014266,0.977148992473375,0.955257297780522,0.913761528984783,0.633243835821001,0.879303888935805,0.238632506959039,0.640671381976766,0.581861724248368,0.0182240393014894,0.981775960698511,0.0373818723523113,0.944394088346199,0.503380552444431,0.441013535901768,0.42133814561158,0.019675390290188,365177,627601,0.0447427022194777,0.0862384710152166,991089 +INF0052,0,SEB,2025-07-26,Male,HEU-hi,2523776,2282292,2041563,1889418,0.578359050247219,0.887807226093147,0.867014958426446,0.67185626879412,0.911565163264,0.233447156619843,0.678118006644156,0.274166109354803,0.00922563305131479,0.990774366948685,0.00842081207430187,0.982353554874383,0.608325425884434,0.37402812898995,0.281175634790126,0.0928524941998241,201287,734179,0.112192773906853,0.132985041573554,1092762 +INF0100,0,SEB,2025-07-26,Male,HEU-lo,1900240,1685653,1598641,1488015,0.911195787676871,0.901785786721913,0.85768873633445,0.217299850354716,0.890574990411735,0.0878318982048732,0.802743092206862,0.650759763908075,0.00764600957576643,0.992353990424234,0.008955114898766,0.983398875525468,0.611049683415565,0.372349192109902,0.335548207412353,0.0368009846975497,191734,294631,0.0982142132780872,0.14231126366555,1355873 +INF0100,4,SEB,2025-07-26,Male,HEU-lo,1009776,900919,761137,732910,0.969596539820715,0.983067066126111,0.953615609876912,0.724198489502932,0.875529258600756,0.21414206184966,0.661387196751095,0.594879866313018,0.00466770756436471,0.995332292435635,0.00950526872799253,0.985827023707643,0.639848307670197,0.345978716037446,0.310218000561823,0.0357607154756227,306146,514635,0.0169329338738888,0.0463843901230885,710627 +INF0179,0,SEB,2025-07-26,Male,HU,783096,710001,604070,579147,0.966198564440462,0.97132088689371,0.892646330849883,0.779109353415384,0.925393435741696,0.34958379877376,0.575809636967936,0.480378102012308,0.00410640360217544,0.995893596397825,0.00684718926223207,0.989046407135592,0.725620616056038,0.263425791079554,0.185747914567706,0.0776778765118489,209429,435967,0.0286791131062903,0.107353669150117,559571 +INF0179,4,SEB,2025-07-26,Male,HU,985280,860127,686367,640888,0.984159478723271,0.951545496055402,0.933428565992745,0.757827363587935,0.925535943295766,0.332859124373155,0.592676818922611,0.519413626673417,0.00457156206449326,0.995428437935507,0.00662171632953914,0.988806721605968,0.56142407179165,0.427382649814318,0.377611026527143,0.0497716232871747,248274,477989,0.048454503944598,0.0665714340072551,630736 +INF0179,9,SEB,2025-07-26,Male,HU,1111728,981610,783127,748455,0.984322370750413,0.984891159611305,0.974006442058798,0.818738708412004,0.935493764734359,0.263124562735625,0.672369201998733,0.651935899943964,0.00303888758913223,0.996961112410868,0.00824949902857317,0.988711613382295,0.696706303593771,0.292005309788524,0.256265957338596,0.0357393524499283,393236,603182,0.0151088403886953,0.0259935579412016,736721 +INF0186,4,SEB,2025-07-26,Female,HEU-hi,492984,443892,386199,365672,0.980110590912074,0.977871032006228,0.943936785537906,0.6789695283748,0.860509077758874,0.334175769082197,0.526333308676677,0.470724330366316,0.00879115123049927,0.991208848769501,0.0126410992867557,0.978567749482745,0.504692397007342,0.473875352475403,0.445432879080203,0.0284424733952002,114547,243342,0.0221289679937723,0.0560632144620939,358399 +INF0186,9,SEB,2025-07-26,Female,HEU-hi,1226128,1088491,957607,891839,0.9712649928967,0.956045402280273,0.910587708320827,0.60486116562689,0.868179059354351,0.229586325099535,0.638592734254816,0.574161446583374,0.0188780852655198,0.98112191473448,0.00923128064489321,0.971890634089587,0.483639990027425,0.488250644062162,0.460942408376963,0.027308235685199,300825,523938,0.0439545977197268,0.0894122916791732,866212 +INF0134,0,Ctrl,2025-07-29,Female,HEU-lo,1205504,1088093,965389,876164,0.787154003131834,0.798904123095483,0.783886926614816,0.577284116019696,0.882294876914846,0.15782427745084,0.724470599464006,0.321159193146112,0.00979932116434392,0.990200678835656,0.0251826130480347,0.965018065787621,0.698582891464502,0.26643517432312,0.225141945474168,0.0412932288489512,127866,398139,0.201095876904517,0.216113073385184,689676 +INF0134,4,Ctrl,2025-07-29,Female,HEU-lo,1277824,1143114,940824,904464,0.981203231969432,0.979719717892464,0.962388291117489,0.775382184947429,0.939878481027374,0.321119916061518,0.618758564965856,0.511173147823863,0.00979673063255153,0.990203269367449,0.0261066098081023,0.964096659559346,0.636952380952381,0.327144278606965,0.275565031982942,0.0515792466240227,351750,688123,0.0202802821075357,0.0376117088825112,887463 +INF0134,9,Ctrl,2025-07-29,Female,HEU-lo,424520,386914,358089,331672,0.95725897875009,0.970383878852017,0.900017638017487,0.427759719807494,0.822040762230142,0.119105822754985,0.702934939475157,0.535733219450417,0.029535864978903,0.970464135021097,0.0286699927156778,0.941794142305419,0.461001388144422,0.480792754160997,0.420387855797908,0.0604048983630891,72759,135812,0.029616121147983,0.0999823619825132,317496 +INF0148,0,Ctrl,2025-07-29,Female,HU,2034128,1833204,1602246,1509990,0.671517692170147,0.91727885520989,0.899144464661706,0.647882365123744,0.876630088150722,0.220344839658844,0.656285248491878,0.356705224045313,0.00385772505174216,0.996142274948258,0.0201335694625216,0.976008705485736,0.668798941686048,0.307209763799689,0.267719290758956,0.0394904730407323,234335,656943,0.0827211447901103,0.100855535338294,1013985 +INF0148,9,Ctrl,2025-07-29,Female,HU,872400,793908,670148,623296,0.982887745148373,0.981657770595629,0.948915332256011,0.610627948353819,0.969135686962194,0.210789411075974,0.75834627588622,0.728201043067291,0.0133988223719954,0.986601177628005,0.0208287446955347,0.96577243293247,0.550636535835426,0.415135897097044,0.362616184309061,0.0525197127879829,272412,374089,0.0183422294043714,0.051084667743989,612630 +INF0191,0,Ctrl,2025-07-29,Female,HEU-hi,1997680,1808121,1593734,1482293,0.482659636117826,0.866839147213684,0.851001407519537,0.578498916056206,0.822556133013436,0.201008497570569,0.621547635442867,0.134772387365512,0.035317318035138,0.964682681964862,0.0205091430620294,0.944173538902833,0.455557547508067,0.488615991394765,0.379221943348871,0.109394048045895,55780,413883,0.133160852786316,0.148998592480463,715443 +INF0191,4,Ctrl,2025-07-29,Female,HEU-hi,644496,572957,458792,438631,0.974322380315117,0.97583347372756,0.953489732502199,0.793023810860897,0.964819880028208,0.240123571536058,0.72469630849215,0.672588540421878,0.00767715585503775,0.992322844144962,0.0165168524538384,0.975805991691124,0.665047883517804,0.310758108173319,0.223865864732901,0.0868922434404187,227949,338913,0.0241665262724396,0.0465102674978005,427368 +INF0191,9,Ctrl,2025-07-29,Female,HEU-hi,1504536,1353339,1109880,1047290,0.954451011658662,0.972429613430347,0.953109634278957,0.693557439222399,0.937200604092772,0.393165154751894,0.544035449340878,0.415256083119011,0.0211785956197787,0.978821404380221,0.0144085311843271,0.964412873195894,0.570575056011949,0.393837817183945,0.260659638397277,0.133178178786668,287885,693271,0.0275703865696533,0.0468903657210428,999587 +INF0134,0,PPD,2025-07-29,Female,HEU-lo,1245024,1126248,993895,896183,0.791566008281791,0.804229843188777,0.789978121986839,0.592486763238172,0.900348082216877,0.154857329117327,0.74549075309955,0.331456116182849,0.00945360055128058,0.990546399448719,0.0258771677960262,0.964669231652693,0.69642241874354,0.268246812909154,0.226039393591363,0.0422074193177903,139312,420303,0.195770156811223,0.210021878013161,709388 +INF0134,4,PPD,2025-07-29,Female,HEU-lo,1340280,1201488,986763,947027,0.983254965275541,0.983444466042147,0.964371666152975,0.763760391507879,0.947150550485805,0.320176042970233,0.626974507515572,0.513328365134493,0.010466371201455,0.989533628798545,0.0256112459391795,0.963922382859365,0.628647890564653,0.335274492294713,0.281901751425738,0.0533727408689745,365074,711190,0.016555533957853,0.0356283338470246,931169 +INF0134,9,PPD,2025-07-29,Female,HEU-lo,929672,828324,752940,697560,0.958546935030678,0.966002835589641,0.899239356069897,0.431271349178337,0.776881543311128,0.129113248048494,0.647768295262634,0.490593583870554,0.0258639579843219,0.974136042015678,0.0275392129835797,0.946596829032098,0.444189975330633,0.502406853701465,0.440365870036969,0.0620409836644966,141471,288367,0.0339971644103588,0.100760643930103,668644 +INF0148,0,PPD,2025-07-29,Female,HU,1862952,1676887,1450059,1372237,0.674659697996775,0.911606590242095,0.896064238982148,0.658815739587575,0.888040699952617,0.226900924208963,0.661139775743655,0.360931718058063,0.00422000345231714,0.995779996547683,0.0193193484205649,0.976460648127118,0.664716410316977,0.311744237810141,0.271842719699103,0.0399015181110374,220142,609927,0.0883934097579049,0.103935761017852,925793 +INF0148,4,PPD,2025-07-29,Female,HU,632312,562703,496868,467363,0.972633691584486,0.986906393472556,0.950157620448201,0.512846121525036,0.914050770827793,0.240886902361813,0.67316386846598,0.639881437505898,0.00312388971194519,0.996876110288055,0.0167054359703163,0.980170674317738,0.619850777285434,0.360319897032305,0.305376978407621,0.0549429186246841,149173,233126,0.0130936065274444,0.0498423795517992,454573 +INF0148,9,PPD,2025-07-29,Female,HU,1110656,997595,827243,774214,0.980991043819926,0.975244141846512,0.945795704262163,0.654739913390046,0.956100572522538,0.196441391348414,0.759659181174124,0.730733420073079,0.012606845839273,0.987393154160727,0.0212756003456494,0.966117553815078,0.556118489490167,0.40999906432491,0.358245223929065,0.0517538403958456,363374,497273,0.0247558581534885,0.054204295737837,759497 +INF0191,0,PPD,2025-07-29,Female,HEU-hi,1968064,1782256,1568308,1456260,0.489216898081387,0.876586653790494,0.861205428766737,0.584636741729328,0.802235715263222,0.199096782557964,0.603138932705259,0.12735317914773,0.0365357062061685,0.963464293793832,0.0206055350275243,0.942858758766307,0.450814418218837,0.49204434054747,0.378968403589473,0.113075936957997,53044,416511,0.123413346209506,0.138794571233263,712427 +INF0191,4,PPD,2025-07-29,Female,HEU-hi,1066672,941050,756678,723688,0.979242435966881,0.966806647983676,0.947546516976968,0.794993692374123,0.960648579568146,0.289526700213886,0.67112187935426,0.608381479805107,0.00961333671769467,0.990386663282305,0.0165308545804121,0.973855808701893,0.631869013546198,0.341986795155695,0.243043824561711,0.0989429705939846,342753,563385,0.0331933520163237,0.052453483023032,708666 +INF0191,9,PPD,2025-07-29,Female,HEU-hi,2415400,2151222,1768089,1652532,0.93912916663641,0.928039145818043,0.910939268954168,0.649623922558912,0.888403635072378,0.410601104170097,0.477802530902281,0.346151175685246,0.0267177103690162,0.973282289630984,0.0146425890160524,0.958639700614931,0.53798476712266,0.420654933492272,0.276607389492868,0.144047543999404,348982,1008178,0.0719608541819566,0.0890607310458322,1551941 +INF0134,0,SEB,2025-07-29,Female,HEU-lo,1193160,1079791,959139,869331,0.782985997278367,0.805832160476234,0.791506653699128,0.566516423427368,0.876204899731078,0.163671867909018,0.71253303182206,0.346036051689129,0.00822116969933151,0.991778830300668,0.0153107107527204,0.976468119547948,0.632348091969184,0.344120027578764,0.261855870979346,0.0822641565994185,133436,385613,0.194167839523766,0.208493346300872,680674 +INF0134,4,SEB,2025-07-29,Female,HEU-lo,1291352,1157622,964426,923312,0.982650501672241,0.977873740897373,0.956105690223555,0.740553492642399,0.941799288285888,0.339208720358268,0.60259056792762,0.501288140032951,0.00984813621721123,0.990151863782789,0.0180811424669329,0.972070721315856,0.600050472811484,0.372020248504372,0.304793432596529,0.0672268159078426,336815,671899,0.0221262591026272,0.0438943097764449,907293 +INF0148,0,SEB,2025-07-29,Female,HU,2042880,1841683,1602125,1513482,0.68014684020028,0.901883639825528,0.887045726109638,0.655521231020313,0.869403233909367,0.222301259508556,0.647101974400811,0.382685202886244,0.00371760168221476,0.996282398317785,0.0109359449485151,0.98534645336927,0.659413470884596,0.325932982484675,0.255453450592686,0.0704795318919882,258231,674787,0.0981163601744722,0.112954273890362,1029390 +INF0191,0,SEB,2025-07-29,Female,HEU-hi,1956304,1772838,1558215,1448120,0.500612518299588,0.874513585131051,0.858720706479232,0.584808268742405,0.813640598648442,0.205064216721114,0.608576381927327,0.153905485251973,0.0330426519946666,0.966957348005333,0.0149274318380358,0.952029916167298,0.46397645940934,0.488053456757958,0.365047740195252,0.123005716562706,65249,423955,0.125486414868949,0.141279293520768,724947 +INF0191,9,SEB,2025-07-29,Female,HEU-hi,1814944,1620273,1311159,1239312,0.955994132228204,0.953430820197928,0.93669852925661,0.694926040809436,0.916094499053236,0.411346105029447,0.504748394023789,0.378588927175097,0.0235030670122937,0.976496932987706,0.0090374201165208,0.967459512871185,0.549190899058081,0.418268613813105,0.271844442163078,0.146424171650027,311704,823331,0.0465691798020721,0.0633014707433901,1184775 +INF0124,0,Ctrl,2025-07-31,Male,HEU-hi,1229248,1096279,962417,891568,0.771360120596522,0.857697900308265,0.851096376432269,0.620287326237422,0.848707405809876,0.216735742550119,0.631971663259757,0.164790521913621,0.0142253581233908,0.985774641876609,0.00988662389575658,0.975888017980853,0.672020143107103,0.30386787487375,0.264805041466919,0.039062833406831,70297,426584,0.142302099691735,0.148903623567731,687720 +INF0124,4,Ctrl,2025-07-31,Male,HEU-hi,1105296,993220,820093,766344,0.899851763698809,0.947894129316295,0.938007181016131,0.699090481963352,0.91153726482607,0.258244311228194,0.653292953597876,0.479005994731274,0.00947930920995652,0.990520690790043,0.00774280715733315,0.98277788363271,0.509990299838908,0.472787583793802,0.423485648958099,0.0493019348357035,230924,482090,0.0521058706837046,0.0619928189838688,689596 +INF0124,9,Ctrl,2025-07-31,Male,HEU-hi,1017128,915840,757350,701114,0.745743202959861,0.954792091819658,0.946617678841582,0.744550550730514,0.902542840922811,0.341029415164569,0.561513425758241,0.534849430628659,0.00372698848763994,0.99627301151236,0.0102107957792816,0.986062215733079,0.662625893924913,0.323436321808166,0.290926031765853,0.0325102900423128,208211,389289,0.045207908180342,0.053382321158418,522851 +INF0149,0,Ctrl,2025-07-31,Female,HU,1327920,1192637,1046943,958252,0.895218585507779,0.886543606362455,0.868127692065583,0.541476607079368,0.836291692411029,0.157884879107347,0.678406813303682,0.232291287677367,0.017191844300278,0.982808155699722,0.0213438368860056,0.961464318813716,0.62177015755329,0.339694161260426,0.299629286376274,0.040064874884152,107900,464503,0.113456393637545,0.131872307934417,857845 +INF0149,4,Ctrl,2025-07-31,Female,HU,1026960,910155,731344,694429,0.945859115906738,0.979643196433791,0.947015370749294,0.669381211634025,0.91294172233329,0.292650641047511,0.62029108128578,0.545926385865795,0.00758244871431666,0.992417551285683,0.0194019031113037,0.97301564817438,0.672871498325195,0.300144149849184,0.263023480593931,0.0371206692552536,240028,439671,0.0203568035662087,0.0529846292507065,656832 +INF0149,9,Ctrl,2025-07-31,Female,HU,757368,665858,536020,502656,0.935176343264579,0.969391922939465,0.928508824180126,0.660841317925765,0.898426811484566,0.184607411079599,0.713819400404966,0.632452686846316,0.00949268833951758,0.990507311660482,0.0293433502827447,0.961163961377738,0.614535774455761,0.346628186921977,0.304509154209104,0.0421190327128729,196467,310643,0.0306080770605354,0.0714911758198744,470072 +INF0169,0,Ctrl,2025-07-31,Female,HEU-lo,1288912,1144653,1051293,973587,0.877778770669699,0.842549795575443,0.826082326812498,0.351936709127375,0.771953332025548,0.130222135036557,0.641731196988991,0.251161213314138,0.0128673550436855,0.987132644956315,0.0153958167858088,0.971736828170506,0.745724119671697,0.226012708498809,0.135041037860736,0.0909716706380725,75540,300763,0.157450204424557,0.173917673187502,854594 +INF0169,4,Ctrl,2025-07-31,Female,HEU-lo,1068232,944862,869444,785215,0.916182192138459,0.94555323881012,0.865148735056992,0.368202668890742,0.781063480378277,0.167733167223512,0.613330313154765,0.37912679087151,0.0106148867313916,0.989385113268608,0.0155240229026637,0.973861090365945,0.812735872541698,0.161125217824247,0.0949166044311675,0.0662086133930794,100425,264885,0.0544467611898805,0.134851264943008,719400 +INF0169,9,Ctrl,2025-07-31,Female,HEU-lo,778672,685649,594814,542125,0.951313811390362,0.975039313130295,0.922139642565601,0.573702181951444,0.867772310021766,0.302004893942057,0.565767416079709,0.461223620705971,0.0194995053676767,0.980500494632323,0.0165243835415674,0.963976111090756,0.829546037445499,0.134430073645257,0.0826072619352948,0.0518228117099623,136465,295876,0.0249606868697053,0.0778603574343989,515731 +INF0124,0,PPD,2025-07-31,Male,HEU-hi,1246824,1108772,973652,900843,0.781135003546678,0.864643019554343,0.85943468622101,0.643083503865393,0.812693221368985,0.207716700734766,0.604976520634219,0.152471134191481,0.014218009478673,0.985781990521327,0.00927576561299767,0.976506224908329,0.66962331695581,0.30688290795252,0.266446367233358,0.0404365407191617,68997,452525,0.135356980445657,0.14056531377899,703680 +INF0124,4,PPD,2025-07-31,Male,HEU-hi,1515456,1357582,1150459,1069355,0.887128222152606,0.906098634382362,0.896618897280887,0.637026105380776,0.772967212626465,0.207635714971257,0.565331497655208,0.425400203204273,0.00905176270144743,0.990948237298553,0.0075463771554826,0.98340186014307,0.516109959272903,0.467291900870167,0.416626147029878,0.0506657538402891,257077,604318,0.0939013656176376,0.103381102719113,948655 +INF0124,9,PPD,2025-07-31,Male,HEU-hi,1583312,1418103,1190344,1093566,0.859891401159144,0.97322799644387,0.962200164194532,0.606947640660692,0.906363996341604,0.342808133972968,0.563555862368636,0.530500646526802,0.00374530598225108,0.996254694017749,0.00994454701283775,0.986310147004911,0.648634812850297,0.337675334154614,0.302699328553169,0.0349760056014453,302779,570742,0.0267720035561303,0.0377998358054678,940348 +INF0149,0,PPD,2025-07-31,Female,HU,1153168,1032394,892184,812261,0.891197533797634,0.892793744862789,0.87600240369672,0.594862443620188,0.826509711759078,0.153493167863413,0.673016543895665,0.213143154394211,0.0175960427970626,0.982403957202937,0.0222047896101632,0.960199167592774,0.618411017410821,0.341788150181953,0.301834782419211,0.0399533677627422,91782,430612,0.107206255137211,0.12399759630328,723885 +INF0149,4,PPD,2025-07-31,Female,HU,1238584,1092917,869629,826659,0.951025755480797,0.982711206425041,0.953305502344265,0.687894791738216,0.949294107857731,0.307957581753127,0.641336526104603,0.564305063747562,0.00772661290586836,0.992273387094132,0.0191494172272666,0.973123969866865,0.66995763142287,0.303166338443995,0.26586036391757,0.0373059745264255,305179,540805,0.0172887935749593,0.0466944976557352,786174 +INF0149,9,PPD,2025-07-31,Female,HU,1216752,1066815,870494,816153,0.934514729468617,0.965079643952396,0.928110008168274,0.65979596358759,0.877932798257659,0.211600636685737,0.666332161571922,0.587092210138088,0.0110308925918028,0.988969107408197,0.028672197344327,0.96029691006387,0.60315864650711,0.357138263556761,0.315184316433288,0.0419539471234722,295443,503231,0.0349203560476041,0.0718899918317257,762707 +INF0169,0,PPD,2025-07-31,Female,HEU-lo,1218624,1082765,987457,903485,0.85632190905217,0.842848538273226,0.825762530471491,0.384300105729287,0.764246291070654,0.123404512937109,0.640841778133545,0.249883123740848,0.012436739528373,0.987563260471627,0.0137019489609131,0.973861311510714,0.744037364057284,0.22982394745343,0.134381393345537,0.0954425541078927,74296,297323,0.157151461726774,0.174237469528509,773674 +INF0169,4,PPD,2025-07-31,Female,HEU-lo,940776,820971,737842,662123,0.926151183390397,0.92995404630593,0.8459621738152,0.381591778561248,0.740784266801138,0.161742207331561,0.579042059469577,0.342556901223066,0.0119512468967926,0.988048753103207,0.015793610199728,0.972255142903479,0.809965194176574,0.162289948726905,0.0932521613293579,0.0690377873975474,80159,234002,0.0700459536940704,0.1540378261848,613226 +INF0169,9,PPD,2025-07-31,Female,HEU-lo,1054184,923351,814226,740463,0.941281333435972,0.956064988579365,0.903875842200108,0.518514054842005,0.787211258564013,0.264463358753279,0.522747899810734,0.416426855858947,0.0214824412771188,0.978517558722881,0.0152895445031396,0.963228014219741,0.829416259676401,0.13381175454334,0.0789527891292069,0.0548589654141334,150495,361396,0.0439350114206352,0.0961241577998921,696984 +INF0124,0,SEB,2025-07-31,Male,HEU-hi,1004008,900404,794342,737214,0.815346697159848,0.858233028606603,0.850839731485564,0.645535989086402,0.90635582518517,0.244872713402848,0.661483111782322,0.178788831561097,0.0139389396603915,0.986061060339608,0.00593882434341396,0.980122235996195,0.65523106639375,0.324891169602445,0.256133421743016,0.0687577478594286,69374,388022,0.141766971393397,0.149160268514436,601085 +INF0124,4,SEB,2025-07-31,Male,HEU-hi,1571248,1425147,1204162,1120656,0.879540197884096,0.899691780752428,0.891540913619476,0.636573186345826,0.779254310331088,0.235330211683555,0.543924098647533,0.407646235691996,0.00896878518703866,0.991031214812961,0.00402305141999249,0.987008163392969,0.48618713249093,0.500821030902039,0.445170774427624,0.0556502564744151,255776,627446,0.100308219247572,0.108459086380524,985662 +INF0124,9,SEB,2025-07-31,Male,HEU-hi,1109328,998592,812606,756059,0.904774627376964,0.966187324851658,0.954087562110507,0.656252421195124,0.903795347925456,0.368147412222277,0.53564793570318,0.510429521649834,0.00333419161127865,0.996665808388721,0.00606176982731157,0.99060403856141,0.663831440030374,0.326772598531035,0.289782273796483,0.0369903247345521,229141,448918,0.0338126751483416,0.0459124378894926,684063 +INF0149,0,SEB,2025-07-31,Female,HU,1225472,1099942,970297,887529,0.895820868951888,0.877578870711525,0.860238193762287,0.535075660290265,0.797532326800981,0.16081481638189,0.636717510419091,0.218588175007816,0.0179800412938747,0.982019958706125,0.0121838437715072,0.969836114934618,0.576006538196834,0.393829576737784,0.319565123881624,0.0742644528561597,92992,425421,0.122421129288475,0.139761806237713,795067 +INF0149,4,SEB,2025-07-31,Female,HU,1124960,999291,795445,758864,0.946020630837673,0.983822281902379,0.956350527440413,0.711361315836028,0.920366095083681,0.332892750353935,0.587473344729746,0.523146271591014,0.007048105283646,0.992951894716354,0.0117006782350916,0.981251216481262,0.663539997903909,0.317711218577353,0.275523648395742,0.0421875701816113,267164,510687,0.0161777180976207,0.043649472559587,717901 +INF0149,9,SEB,2025-07-31,Female,HU,531432,467288,379931,358096,0.92417396452348,0.969384455933499,0.925790846157798,0.651432421897426,0.89664497395483,0.255715789913121,0.640929184041709,0.552259644598236,0.0108684696791534,0.989131530320847,0.0216865445993617,0.967444985721485,0.571140601377457,0.396304384344028,0.34592642365194,0.050377960692088,119060,215587,0.0306155440665009,0.0742091538422024,330943 +INF0169,0,SEB,2025-07-31,Female,HEU-lo,1237144,1103284,1012883,939441,0.876379676850382,0.844672764837418,0.827158034609204,0.358358425228985,0.774778927531614,0.138666413592779,0.636112513938835,0.265283572680222,0.0129553207527885,0.987044679247212,0.00994007844740574,0.977104600799806,0.719211948536458,0.257892652263348,0.137052983940002,0.120839668323346,78269,295039,0.155327235162582,0.172841965390796,823307 +INF0169,4,SEB,2025-07-31,Female,HEU-lo,698912,617805,566286,511948,0.921683452225617,0.933040728699979,0.850002331229575,0.381090337265341,0.73006189557277,0.16779094533948,0.56227095023329,0.332923662126916,0.0121103798483279,0.987889620151672,0.0104566866000735,0.977432933551599,0.795125780910701,0.182307152640898,0.0982360605351953,0.0840710921057027,59866,179819,0.0669592713000208,0.149997668770425,471854 +INF0169,9,SEB,2025-07-31,Female,HEU-lo,887744,782828,694751,633595,0.93819869159321,0.95722682601045,0.905700846850302,0.520298163980096,0.774770842426888,0.261616308582699,0.513154533844189,0.40678662075432,0.0211186443372307,0.978881355662769,0.0102612607600169,0.968620094902752,0.834238115298101,0.134381979604651,0.0766693425957572,0.0577126370088942,125813,309285,0.0427731739895498,0.0942991531496977,594438 +INF0019,0,Ctrl,2025-08-05,Female,HEU-lo,1324344,1197859,1022143,939295,0.930082668384267,0.868875783805811,0.863010546895568,0.690163480315285,0.91948810996746,0.102868932666824,0.816619177300636,0.345066357958145,0.00882458965177477,0.991175410348225,0.0146163274134243,0.976559082934801,0.733344548316551,0.24321453461825,0.222489245632165,0.0207252889860854,208055,602942,0.131124216194189,0.136989453104432,873622 +INF0019,4,Ctrl,2025-08-05,Female,HEU-lo,1244280,1117290,891334,840761,0.905377390245266,0.955721578652822,0.935905654973818,0.704970796341595,0.886148318760855,0.352806786078997,0.533341532681858,0.451748697421678,0.00439318375883277,0.995606816241167,0.0133404284282302,0.982266387812937,0.652608478638402,0.329657909174535,0.293807054669356,0.035850854505179,242421,536628,0.0442784213471781,0.0640943450261822,761206 +INF0019,9,Ctrl,2025-08-05,Female,HEU-lo,1844096,1632745,1274587,1217805,0.930321356867479,0.964861644379717,0.957356458802242,0.793717286729335,0.940427604582526,0.21288596395631,0.727541640626216,0.703361275385269,0.00365696325012807,0.996343036749872,0.0164096937194463,0.979933343030426,0.699705292715165,0.280228050315261,0.26313218190902,0.0170958684062407,632492,899242,0.0351383556202833,0.042643541197758,1132950 +INF0032,0,Ctrl,2025-08-05,Female,HU,1124480,1006880,824473,773851,0.973138239790347,0.93983645480331,0.936204625370486,0.81375420946958,0.977386102358157,0.189406487176265,0.787979615181892,0.589146047137036,0.00786906496341065,0.992130935036589,0.015089991524344,0.977040943512245,0.713304010148629,0.263736933363617,0.236961061839051,0.0267758715245656,361034,612809,0.0601635451966898,0.0637953746295136,753064 +INF0032,4,Ctrl,2025-08-05,Female,HU,711784,637561,497456,468981,0.969265279403643,0.940503820118926,0.934273715425889,0.812375293411092,0.942385025955985,0.363519181973521,0.578865843982463,0.431871295145405,0.0113430439989717,0.988656956001028,0.0133871746477637,0.975269781353265,0.678833215241941,0.296436566111324,0.218145108194707,0.078291457916617,159481,369279,0.0594961798810736,0.0657262845741112,454567 +INF0032,9,Ctrl,2025-08-05,Female,HU,1248456,1118033,911093,872062,0.984879515447296,0.972946036447636,0.965117199688896,0.784273864911815,0.958258238642268,0.255593131767801,0.702665106874467,0.660764496120809,0.0196613246399019,0.980338675360098,0.0175763390078794,0.962762336352219,0.707335869167152,0.255426467185067,0.221487035118977,0.0339394320660905,445087,673594,0.0270539635523638,0.0348828003111042,858876 +INF0180,0,Ctrl,2025-08-05,Male,HEU-hi,1614504,1435508,1209469,1117422,0.939361315599657,0.867784231701032,0.861666077588712,0.699933216660966,0.927674650943114,0.107572676515665,0.820101974427449,0.387859435356761,0.0045269829237993,0.995473017076201,0.0201398100772745,0.975333206998926,0.66050084573867,0.314832361260256,0.295819032980299,0.019013328279957,284958,734694,0.132215768298968,0.138333922411288,1049663 +INF0180,4,Ctrl,2025-08-05,Male,HEU-hi,528392,465660,387783,356166,0.986118832229915,0.924284355763591,0.897517809248851,0.643003570391376,0.977466048521721,0.210988456275987,0.766477592245735,0.5716158114038,0.012913271155455,0.987086728844545,0.0140674867536331,0.973019242090912,0.521325876119357,0.451693365971555,0.374554581228891,0.0771387847426641,129092,225837,0.0757156442364089,0.102482190751149,351222 +INF0019,0,PPD,2025-08-05,Female,HEU-lo,1271392,1149523,966376,895883,0.931680810998758,0.911539433816914,0.906465614842628,0.722051763736152,0.940014601446871,0.10286719320369,0.83714740824318,0.358623149930311,0.00879542878293659,0.991204571217063,0.0149813773798783,0.976223193837185,0.735419992134546,0.24080320170264,0.219931986952599,0.0208712147500405,216135,602680,0.0884605661830864,0.0935343851573722,834677 +INF0019,4,PPD,2025-08-05,Female,HEU-lo,1374576,1213048,954728,905952,0.929225830949101,0.959040618459221,0.938433230304312,0.715411827034784,0.885281723115343,0.3552298184499,0.530051904665442,0.4494967273162,0.00475780623760218,0.995242193762398,0.0131135187449439,0.982128675017454,0.658989409448383,0.323139265569071,0.289232508228271,0.0339067573408,270713,602258,0.0409593815407788,0.0615667696956882,841834 +INF0019,9,PPD,2025-08-05,Female,HEU-lo,1725968,1521365,1188395,1141230,0.939210325701217,0.973696068964552,0.966078434116555,0.812773182939857,0.963162395615118,0.221661549057308,0.74150084655781,0.717317416133383,0.00372374217686095,0.996276257823139,0.0165176049632827,0.979758652859856,0.698383284606239,0.281375368253618,0.263582377594178,0.01779299065944,624909,871175,0.0263039310354479,0.0339215658834451,1071855 +INF0032,0,PPD,2025-08-05,Female,HU,1240368,1107613,907113,859658,0.976240551475121,0.915239272049598,0.912261553108612,0.6988631285948,0.983314834043467,0.168643618426998,0.81467121561647,0.671650392406596,0.00751404440901787,0.992485955590982,0.0149722411906714,0.977513714400311,0.721688426086934,0.255825288313376,0.229117429790648,0.0267078585227287,393929,586509,0.0847607279504023,0.0877384468913878,839233 +INF0032,4,PPD,2025-08-05,Female,HU,774384,688988,533872,502702,0.962799034020155,0.938179879793637,0.931460885411394,0.810487994859515,0.962080366679668,0.362208337475814,0.599872029203853,0.450324643045603,0.0114179290356181,0.988582070964382,0.0143332654031655,0.974248805561216,0.680716889704051,0.293531915857165,0.216431175418337,0.0771007404388289,176652,392277,0.0618201202063632,0.0685391145886062,484001 +INF0032,9,PPD,2025-08-05,Female,HU,1335992,1193171,967189,926155,0.985408489939589,0.971373190553569,0.9628320445827,0.777570808236755,0.954451745455109,0.258002967689387,0.696448777765722,0.653293275632959,0.0199027189094164,0.980097281090584,0.0174696131404968,0.962627667950087,0.705177899289266,0.257449768660821,0.222760755384433,0.0346890132763883,463605,709643,0.0286268094464307,0.0371679554172999,912641 +INF0180,0,PPD,2025-08-05,Male,HEU-hi,1570368,1398767,1158451,1068711,0.942663638719916,0.896367507581134,0.890511050340717,0.70957332234834,0.929576735786159,0.10813752274956,0.821439213036599,0.407784021520629,0.00477523464515067,0.995224765354849,0.0192518799055931,0.975972885449256,0.659836571710851,0.316136313738405,0.296812393654976,0.0193239200834294,291504,714849,0.103632492418866,0.109488949659283,1007435 +INF0180,4,PPD,2025-08-05,Male,HEU-hi,638600,551845,454723,419608,0.989857200053383,0.93640815501069,0.908740056626668,0.631904986613764,0.981166869234902,0.198142214331163,0.783024654903739,0.594365682019942,0.0128398258963198,0.98716017410368,0.013935986769146,0.973224187334534,0.518778966531837,0.454445220802697,0.378848582362707,0.07559663843999,155999,262463,0.0635918449893103,0.0912599433733315,415352 +INF0180,9,PPD,2025-08-05,Male,HEU-hi,1516936,1391367,1205249,1116976,0.580700032946097,0.859905832002319,0.852679810307295,0.619310298044488,0.699471249831965,0.106603900403782,0.592867349428183,0.434677945342567,0.018629983219843,0.981370016780157,0.0152624977807813,0.966107518999376,0.298383263368287,0.667724255631089,0.591028056651643,0.0766961989794457,174611,401702,0.140094167997681,0.147320189692705,648628 +INF0019,0,SEB,2025-08-05,Female,HEU-lo,1353632,1227164,1049849,966363,0.931358092145498,0.874083086119352,0.868618823816984,0.700898858926925,0.923351774646101,0.104785758445223,0.818566016200878,0.359317090182775,0.00802054105564085,0.991979458944359,0.00897788836536256,0.983001570578997,0.701554696737078,0.281446873841919,0.234563326098082,0.0468835477438368,226668,630830,0.125916913880648,0.131381176183016,900030 +INF0019,4,SEB,2025-08-05,Female,HEU-lo,1170048,1047919,832442,792400,0.917228672387683,0.96310875439591,0.942818775694402,0.723126475622307,0.904638140557901,0.344459517825171,0.56017862273273,0.484003295425789,0.00425346232619575,0.995746537673804,0.00847547576273385,0.98727106191107,0.625577381958558,0.361693679952512,0.323259205679669,0.0384344742728427,254381,525577,0.0368912456040902,0.0571812243055976,726812 +INF0019,9,SEB,2025-08-05,Female,HEU-lo,1710322,1517501,1200599,1151235,0.925440939512784,0.969865778111507,0.962381265252487,0.80652900319129,0.946442121041435,0.211284849105526,0.735157271935909,0.711653764331833,0.00369415231550906,0.996305847684491,0.0108077258314296,0.985498121853061,0.692474493341859,0.293023628511203,0.272495654178938,0.0205279743322644,611507,859276,0.0301342218884926,0.0376187347475126,1065400 +INF0032,0,SEB,2025-08-05,Female,HU,1027392,922706,754901,711686,0.97571541382014,0.955185965498421,0.951156605026188,0.835023754217652,0.990864768566664,0.225678330168684,0.76518643839798,0.575916239395836,0.00765404667291528,0.992345953327085,0.0082170203718621,0.984128932955223,0.68755858070737,0.296570352247852,0.251981637474883,0.0445887147729689,333941,579843,0.0448140345015791,0.0488433949738121,694403 +INF0032,9,SEB,2025-08-05,Female,HU,1155456,1036243,850931,814746,0.98729910917022,0.970027275055383,0.962124470722205,0.785860979266482,0.962943628439678,0.261944648775202,0.700998979664476,0.658102175924827,0.0194511749548094,0.980548825045191,0.0122952001846083,0.968253624860582,0.710602476827814,0.257651148032768,0.222056363216799,0.0355947848159686,416016,632145,0.029972724944617,0.0378755292777954,804398 +INF0180,0,SEB,2025-08-05,Male,HEU-hi,1661856,1483795,1251178,1155566,0.945002708629364,0.876733152444156,0.869922793959413,0.699612550400041,0.922558790344326,0.124676368415128,0.797882421929198,0.402479888374918,0.00404892532741009,0.99595107467259,0.0108816900767182,0.985069384595872,0.612174744462403,0.372894640133468,0.313003066776372,0.0598915733570957,307489,763986,0.123266847555844,0.130077206040587,1092013 +INF0155,0,Ctrl,2025-08-07,Female,HEU-lo,1956872,1761294,1560508,1450803,0.734109317391817,0.86158464219453,0.853166242272649,0.705002967002426,0.827947079489973,0.243380274937339,0.584566804552634,0.37507025258969,0.0103115479394658,0.989688452060534,0.0114868655592878,0.978201586501246,0.696086298850248,0.282115287650998,0.228192709479949,0.0539225781710495,281626,750862,0.13841535780547,0.146833757727351,1065048 +INF0155,4,Ctrl,2025-08-07,Female,HEU-lo,1215184,1083687,851644,825005,0.98352979678911,0.985920925985036,0.98077190889518,0.854323978915897,0.967996849453198,0.341870391928599,0.626126457524599,0.59517060412889,0.00328178777449222,0.996718212225508,0.011180861893451,0.985537350332057,0.721515827233506,0.264021523098551,0.223845072470794,0.040176450627757,412580,693213,0.014079074014964,0.0192280911048204,811417 +INF0155,9,Ctrl,2025-08-07,Female,HEU-lo,1123680,1000603,815357,761574,0.980901396318677,0.959184984786401,0.928468640441,0.618258461184238,0.931716960011432,0.317645938028437,0.614071021982995,0.495439064472337,0.0109735951962661,0.989026404803734,0.011511130922726,0.977515273881008,0.501966594121195,0.475548679759813,0.399603185008435,0.0759454947513788,228822,461857,0.0408150152135994,0.0715313595589997,747029 +INF0158,0,Ctrl,2025-08-07,Male,HU,1974064,1742021,1484261,1352364,0.92381784785753,0.802042361634722,0.793962082318796,0.613198349846078,0.932262704740423,0.332249912543141,0.600012792197282,0.366683113777458,0.00460996821079836,0.995390031789202,0.0221207277698077,0.973269304019394,0.590346477379117,0.382922826640277,0.359495644558992,0.023427182081285,280913,766092,0.197957638365278,0.206037917681204,1249338 +INF0158,4,Ctrl,2025-08-07,Male,HU,1017536,914368,805877,754118,0.947414065172824,0.973280594349315,0.924193309091316,0.565141323121454,0.828913347136503,0.594199201529576,0.234714145606927,0.196596098788425,0.0103426555807508,0.989657344419249,0.0161375661375661,0.973519778281683,0.573066263542454,0.400453514739229,0.368808264046359,0.0316452506928697,79380,403772,0.0267194056506854,0.0758066909086837,714462 +INF0158,9,Ctrl,2025-08-07,Male,HU,1148432,1020361,904910,847242,0.957195228754004,0.964520528351024,0.91473730418656,0.565784930750108,0.797826248043972,0.320764627166887,0.477061620877085,0.433948365218225,0.00991904053999759,0.990080959460002,0.0223090521917313,0.967771907268271,0.505695287074611,0.46207662019366,0.431159347502913,0.0309172726907469,199112,458838,0.035479471648976,0.0852626958134396,810976 +INF0159,0,Ctrl,2025-08-07,Male,HEU-hi,2024024,1786795,1447822,1277260,0.931853342310884,0.818567843396887,0.811916966541452,0.651424653782203,0.946597483936038,0.162708392984737,0.783889090951301,0.583682213434657,0.00516847824886035,0.99483152175114,0.0213721768375277,0.973459344913612,0.724433268294623,0.249026076618989,0.217864947818036,0.0311611288009528,452551,775338,0.181432156603113,0.188083033458548,1190219 +INF0159,4,Ctrl,2025-08-07,Male,HEU-hi,1487344,1333646,1131385,1067284,0.940156509420173,0.982565521310247,0.942089705744588,0.646537720223158,0.759423194013056,0.264593946774156,0.4948292472389,0.42502524104232,0.0127949864542873,0.987205013545713,0.0225689344402012,0.964636079105512,0.490235118756188,0.474400960349323,0.394639016729953,0.0797619436193709,275733,648745,0.0174344786897532,0.0579102942554121,1003414 +INF0159,9,Ctrl,2025-08-07,Male,HEU-hi,1167840,1028158,742821,709883,0.982519654647315,0.986670470870599,0.965210172708947,0.813984463937007,0.923115267211876,0.0548056921123134,0.868309575099563,0.858577887845167,0.00239002303859118,0.997609976961409,0.0274596209197793,0.970150356041629,0.627872387130393,0.342277968911237,0.327390074326639,0.0148878945845976,487443,567733,0.0133295291294012,0.0347898272910532,697474 +INF0155,0,PPD,2025-08-07,Female,HEU-lo,2221632,2004398,1728584,1609792,0.784455383055699,0.904280137154441,0.884300092650517,0.762086141224729,0.92752060018496,0.266291551066638,0.661229049118322,0.42905223562663,0.0100119397346134,0.989988060265387,0.0111574761386947,0.978830584126692,0.693289287902603,0.285541296224089,0.231345072861443,0.0541962233626458,412907,962370,0.0957198628455587,0.115699907349483,1262810 +INF0155,4,PPD,2025-08-07,Female,HEU-lo,1393256,1237743,976719,947853,0.987092935296929,0.986962641844597,0.982248115953182,0.856480041555377,0.963070560649114,0.341770461689747,0.621300098959367,0.590333179840242,0.00351120478081922,0.996488795219181,0.0112248629657737,0.985263932253407,0.718674493771364,0.266589438482043,0.226748573639117,0.0398408648429259,473057,801339,0.013037358155403,0.0177518840468182,935619 +INF0155,9,PPD,2025-08-07,Female,HEU-lo,1302344,1145745,915824,856281,0.980871933395696,0.959576236275185,0.932713578488919,0.651871289745708,0.966500946104897,0.340636118558998,0.625864827545899,0.500440176216603,0.0116133506085877,0.988386649391412,0.0115622547856713,0.976824394605741,0.496768189200533,0.480056205405208,0.406102301136882,0.0739539042683261,273995,547508,0.0404237637248155,0.0672864215110811,839902 +INF0158,0,PPD,2025-08-07,Male,HU,1897704,1691391,1435638,1304624,0.922783116054894,0.848499649052858,0.840498884860265,0.656822703165169,0.897703287684052,0.29528959618787,0.602413691496183,0.380556669141145,0.00439650273659864,0.995603497263401,0.022052299440717,0.973551197822684,0.60114116329535,0.372410034527334,0.349540244781853,0.0228697897454814,300921,790739,0.151500350947142,0.159501115139735,1203885 +INF0158,4,PPD,2025-08-07,Male,HU,1229864,1101656,968001,903455,0.944291635997366,0.969077216117216,0.919578021978022,0.52821684981685,0.851467373816947,0.604866466208794,0.246600907608153,0.205767417089219,0.0116795720725579,0.988320427927442,0.0148394193645795,0.973481008562863,0.564210685244699,0.409270323318163,0.377326747622026,0.031943575696137,92726,450635,0.0309227838827839,0.080421978021978,853125 +INF0158,9,PPD,2025-08-07,Male,HU,1371136,1216419,1068812,1005622,0.948960941586401,0.96633644068507,0.920389480831943,0.593111571252525,0.84213539126932,0.346419813287539,0.495715577981781,0.454252973477219,0.00900785270060558,0.990992147299394,0.0225079635485339,0.968484183750861,0.506730608418997,0.461753575331863,0.43024553788471,0.0315080374471528,257109,566004,0.0336635593149296,0.0796105191680568,954296 +INF0159,0,PPD,2025-08-07,Male,HEU-hi,1898040,1677926,1357904,1200314,0.92715656069995,0.836210405623612,0.830270856040953,0.664310315856441,0.953162260904616,0.171448010745343,0.781714250159273,0.588793137264185,0.00438555180074111,0.995614448199259,0.021238568044972,0.974375880154287,0.719421171486792,0.254954708667495,0.223869899125417,0.0310848095420786,435293,739297,0.163789594376388,0.169729143959047,1112879 +INF0159,4,PPD,2025-08-07,Male,HEU-hi,1468272,1314327,1118313,1054808,0.946339997421332,0.981112134056363,0.940226826700274,0.633504874239511,0.820599997786103,0.307417030246581,0.513182967539522,0.438671092352724,0.0131866388850837,0.986813361114916,0.0228152644898018,0.963998096625114,0.479992934441713,0.484005162183402,0.403468612338772,0.0805365498446298,277402,632369,0.0188878659436369,0.0597731732997264,998207 +INF0159,9,PPD,2025-08-07,Male,HEU-hi,1124616,979389,693430,664229,0.986489599219546,0.987891736804755,0.970960923609892,0.834537699063723,0.953283897336491,0.0770854096756791,0.876198487660812,0.865529821609809,0.00256495852542351,0.997435041474577,0.0272806791435489,0.970154362331028,0.626557673536135,0.343596688794892,0.328836556786153,0.0147601320087386,473302,546835,0.0121082631952446,0.0290390763901077,655255 +INF0155,0,SEB,2025-08-07,Female,HEU-lo,2378848,2136279,1866817,1735030,0.768161357440505,0.871291875721704,0.849967324012986,0.725989902332188,0.917141300988955,0.265460366871403,0.651680934117552,0.427269072445165,0.00920371535000726,0.990796284649993,0.00827487784819312,0.9825214068018,0.683459919694258,0.299061487107542,0.234429877606308,0.0646316095012336,413420,967587,0.128708124278296,0.150032675987014,1332783 +INF0155,4,SEB,2025-08-07,Female,HEU-lo,995464,892094,720248,700245,0.986965990474762,0.988068607676258,0.983642446007773,0.852773332484467,0.955501410835693,0.343553337733534,0.611948073102159,0.563346777135469,0.00340041804962382,0.996599581950376,0.00690324018577306,0.989696341764603,0.704103391984772,0.285592949779831,0.238706937575674,0.0468860122041576,332018,589367,0.0119313923237421,0.016357553992227,691118 +INF0158,0,SEB,2025-08-07,Male,HU,1995888,1767501,1513529,1376026,0.927221578662031,0.808748621540724,0.801494026480526,0.617858562044579,0.886202706028309,0.318907186730161,0.567295519298148,0.350209434311708,0.00469075432400616,0.995309245675994,0.0136267318663407,0.981682513809653,0.587833016390474,0.39384949741918,0.357326813365933,0.0365226840532464,276075,788314,0.191251378459276,0.198505973519474,1275881 +INF0158,4,SEB,2025-08-07,Male,HU,1006016,899118,788056,735913,0.950509095504496,0.970617247945652,0.921042699559109,0.55347309190098,0.810776184941237,0.568911274699729,0.241864910241508,0.201115846571096,0.0105699827900645,0.989430017209936,0.00946546453982687,0.979964552670109,0.538285684929747,0.441678867740361,0.406193008142611,0.0354858595977499,77862,387150,0.029382752054348,0.0789573004408914,699492 +INF0158,9,SEB,2025-08-07,Male,HU,1120552,994396,877895,829211,0.951199393158074,0.969440059841901,0.923015676803023,0.590119747193326,0.769334885939319,0.291835498244724,0.477499387694595,0.4362257065145,0.00997818196145644,0.990021818038544,0.0136030299000704,0.976418788138473,0.498879547682018,0.477539240456455,0.442625453721625,0.0349137867348296,203043,465454,0.0305599401580993,0.0769843231969775,788745 +INF0159,0,SEB,2025-08-07,Male,HEU-hi,2086792,1847605,1507051,1327409,0.929341295712173,0.817877686411331,0.811086269957588,0.63500068092502,0.933116486052797,0.168540889286612,0.764575596766184,0.573310423094746,0.00499887553133928,0.995001124468661,0.0134001037628507,0.98160102070581,0.708139149100091,0.273461871605719,0.229282499927633,0.0441793716780858,449101,783347,0.182122313588669,0.188913730042412,1233616 +INF0159,4,SEB,2025-08-07,Male,HEU-hi,1459280,1303303,1109557,1042434,0.940995784865037,0.978019748686445,0.936432513767603,0.633759325372148,0.809547172057246,0.292138446219946,0.5174087258373,0.446210294512692,0.0123001052646758,0.987699894735324,0.0150975500728201,0.972602344662504,0.473806399515494,0.49879594514701,0.416260508442804,0.0825354367042063,277396,621671,0.0219802513135547,0.0635674862323967,980926 +INF0159,9,SEB,2025-08-07,Male,HEU-hi,527136,464846,340607,329303,0.989851291971224,0.990468184844199,0.978966808912723,0.810075438472701,0.908817547992259,0.101222103138385,0.807595444853874,0.791356280746668,0.00333078101071976,0.99666921898928,0.0168501148545176,0.979819104134763,0.607656967840735,0.372162136294028,0.351852029096478,0.0203101071975498,208960,264053,0.00953181515580082,0.0210331910872773,325961 +INF0013,0,Ctrl,2025-08-22,Male,HEU-lo,1284824,1149119,931095,865836,0.966202606498228,0.932750638617311,0.92304556804965,0.750423453781081,0.949825099078664,0.0932661552381074,0.856558943840557,0.291104902323092,0.00844865417973089,0.991551345820269,0.00902320643936285,0.982528139380906,0.850868121104672,0.131660018276234,0.12322777987535,0.00843223840088426,182751,627784,0.0672493613826887,0.0769544319503498,836573 +INF0013,4,Ctrl,2025-08-22,Male,HEU-lo,1212080,1066572,933636,828526,0.95181563402959,0.847583831682315,0.831272730039411,0.60063606068445,0.925172696257263,0.148377330766113,0.77679536549115,0.594396027563843,0.0112913079305544,0.988708692069446,0.0117814622226011,0.976927229846845,0.529906515500241,0.447020714346603,0.122662887506038,0.324357826840565,281544,473664,0.152416168317685,0.168727269960589,788604 +INF0013,9,Ctrl,2025-08-22,Male,HEU-lo,591208,513249,411678,387329,0.98218826888769,0.981357937071209,0.957161632889099,0.743813579370712,0.979025971042764,0.223218797818842,0.755807173223922,0.739819556205803,0.00397428181097322,0.996025718189027,0.00966820479015601,0.986357513398871,0.631418799499393,0.354938713899477,0.330366952318172,0.0245717615813056,209346,282969,0.0186420629287911,0.0428383671109008,380430 +INF0023,0,Ctrl,2025-08-22,Female,HEU-hi,1428512,1282467,1103378,1007499,0.960829737796266,0.84605411994401,0.843164761604694,0.703389856771708,0.877314930401553,0.283347481150115,0.593967449251439,0.320800521657909,0.00813056515668277,0.991869434843317,0.0207613248792547,0.971108109964062,0.74064138073111,0.230466729232953,0.199926751665255,0.0305399775676975,218435,680906,0.15394588005599,0.156835238395306,968035 +INF0023,4,Ctrl,2025-08-22,Female,HEU-hi,1945688,1737383,1389603,1347134,0.970804686096558,0.973963988487571,0.967753577753241,0.82823955271585,0.91921157707665,0.46567267523715,0.4535389018395,0.425440025849932,0.00191178449132644,0.998088215508674,0.0244929756567555,0.973595239851918,0.711776245263939,0.261818994587979,0.236718414325581,0.0251005802623984,460826,1083175,0.0260360115124285,0.0322464222467587,1307804 +INF0023,9,Ctrl,2025-08-22,Female,HEU-hi,987800,871641,686162,661242,0.967712274779884,0.980770192469979,0.97006369824908,0.82072599751208,0.977877892363703,0.332214343382028,0.645663548981675,0.598146145292245,0.00485146371589014,0.99514853628411,0.0375956604230069,0.957552875861103,0.581545337628767,0.376007538232335,0.327330548941209,0.048676989291126,314132,525176,0.0192298075300207,0.0299363017509204,639892 +INF0030,0,Ctrl,2025-08-22,Male,HU,1055672,939062,820166,756891,0.967538258481076,0.956857716766282,0.935349389134,0.547854014837756,0.885988459764958,0.214057651325382,0.671930808439576,0.213160354432273,0.00440827399118345,0.995591726008817,0.0174693934823026,0.978122332526514,0.649021877667473,0.32910045485904,0.304334607874089,0.0247658469849511,85521,401205,0.0431422832337185,0.064650610866,732321 +INF0030,4,Ctrl,2025-08-22,Male,HU,887272,774792,587687,558971,0.959545307359416,0.973952099157652,0.963873010190955,0.820582521375648,0.966016549806192,0.344733099157968,0.621283450648223,0.586763790369122,0.00488673765730881,0.995113262342691,0.0210029041626331,0.974110358180058,0.605254598257502,0.368855759922556,0.302152952565344,0.066702807357212,258250,440126,0.0260479008423479,0.0361269898090455,536358 +INF0030,9,Ctrl,2025-08-22,Male,HU,1059640,929289,780683,761469,0.997026799515148,0.989099123425162,0.984053055498844,0.880723915148083,0.981709414491887,0.19381141105212,0.787898003439767,0.731571076048755,0.00457105475657498,0.995428945243425,0.0326617807897131,0.962767164453712,0.52534420900923,0.437422955444482,0.392945120767021,0.0444778346774606,489165,668650,0.0109008765748382,0.0159469445011559,759205 +INF0013,0,PPD,2025-08-22,Male,HEU-lo,1309848,1169793,941515,876615,0.962326677047507,0.941158619708626,0.932124610296471,0.759162626394339,0.937937797264928,0.0886665355031526,0.849271261761776,0.284356252595945,0.00974147209348299,0.990258527906517,0.00882443385243921,0.981434094054078,0.848205460495969,0.133228633558108,0.124788586992334,0.00844004656577416,182108,640422,0.0588413802913738,0.0678753897035289,843590 +INF0013,4,PPD,2025-08-22,Male,HEU-lo,1021264,890816,775431,680459,0.904611446097414,0.847437499086185,0.828137717264695,0.527857155621549,0.906420905876161,0.1306524930522,0.775768412823961,0.582688821659285,0.00979247764473483,0.990207522355265,0.012153447173967,0.978054075181298,0.563225918903073,0.414828156278225,0.36157693750033,0.0532512187778946,189329,324923,0.152562500913815,0.171862282735305,615551 +INF0013,9,PPD,2025-08-22,Male,HEU-lo,739216,639880,503620,472587,0.982966099363715,0.979256765338391,0.957546976882358,0.746838249698086,0.975531369078845,0.202663907256135,0.77286746182271,0.752431298171987,0.00539755749988508,0.994602442500115,0.00971866811725226,0.984883774382863,0.620462450774582,0.364421323608281,0.338517644535021,0.0259036790732597,261044,346934,0.0207432346616093,0.0424530231176419,464537 +INF0023,0,PPD,2025-08-22,Female,HEU-hi,1572088,1406726,1193232,1088074,0.963874699698734,0.860464717139269,0.857511725674053,0.722300568191028,0.866451932279463,0.280125408402363,0.5863265238771,0.293390977195472,0.00882785679254536,0.991172143207455,0.0203418657283882,0.970830277479066,0.733432020553338,0.237398256925728,0.203517644465042,0.0338806124606863,222251,757525,0.139535282860731,0.142488274325947,1048767 +INF0023,4,PPD,2025-08-22,Female,HEU-hi,1960856,1733414,1389954,1349503,0.97374070305883,0.974950268860164,0.969395753333546,0.816614994985031,0.920252430839653,0.478423910105993,0.44182852073366,0.41255500491107,0.00191097046127574,0.998089029538724,0.0242485436191431,0.973840485919581,0.713799420384137,0.260041065535444,0.234965790014615,0.0250752755208298,442707,1073086,0.0250497311398362,0.0306042466664536,1314066 +INF0023,9,PPD,2025-08-22,Female,HEU-hi,942384,831282,659209,636544,0.965433654232857,0.981319391220439,0.969826260574966,0.819434342053663,0.976605318760227,0.343987799259695,0.632617519500532,0.588131682208842,0.00467976054212291,0.995320239457877,0.0367965587215407,0.958523680736336,0.586502976341211,0.372020704395126,0.324355351167745,0.0476653532273803,296169,503576,0.0186806087795607,0.0301737394250343,614541 +INF0030,0,PPD,2025-08-22,Male,HU,972560,864436,748225,696152,0.967973948218205,0.94563980191643,0.924446878195225,0.564357126215206,0.915665691987294,0.220120642867661,0.695545049119633,0.217351747060185,0.00416172663263084,0.995838273367369,0.0178930049118053,0.977945268455564,0.648612354521038,0.329332913934525,0.304435142393961,0.0248977715405647,82658,380296,0.0543601980835696,0.0755531218047746,673857 +INF0030,4,PPD,2025-08-22,Male,HU,983584,844256,638719,608344,0.973238825401418,0.972557020862609,0.963926197167874,0.819625918819587,0.948748225218486,0.355848587696359,0.592899637522127,0.555135171893643,0.0058947774795743,0.994105222520426,0.0206465694845039,0.973458653035922,0.598208551881837,0.375250101154085,0.307887048936304,0.0673630522177801,269391,485271,0.0274429791373906,0.0360738028321262,592064 +INF0030,9,PPD,2025-08-22,Male,HU,1369512,1205519,999002,973830,0.996570243266279,0.990564560170635,0.984433636616554,0.888463559645128,0.979156736194469,0.202834461203022,0.776322274991447,0.725544363840904,0.00440699044272911,0.995593009557271,0.0321021360396549,0.963490873517616,0.543279459460324,0.420211414057292,0.376963124823169,0.0432482892341236,625597,862245,0.00943543982936457,0.0155663633834455,970490 +INF0013,0,SEB,2025-08-22,Male,HEU-lo,1304808,1167431,967694,900086,0.963833455914213,0.930778425719828,0.919863567149607,0.731671302417314,0.937149960062954,0.10830737819201,0.828842581870944,0.296109170711573,0.00917240828921816,0.990827591710782,0.00503844005214014,0.985789151658642,0.773584102577745,0.212205049080897,0.17543028916496,0.0367747599159373,187955,634749,0.0692215742801715,0.080136432850393,867533 +INF0013,4,SEB,2025-08-22,Male,HEU-lo,1108496,975841,843244,746237,0.875108042083145,0.883216596890227,0.866020047837951,0.519903895332278,0.895616419796358,0.120630189357234,0.774986230439124,0.60606979915586,0.00892739987656181,0.991072600123438,0.00634200154540727,0.984730598578031,0.529000685227753,0.455729913350278,0.401436548396032,0.0542933649542453,205771,339517,0.116783403109773,0.133979952162049,653038 +INF0013,9,SEB,2025-08-22,Male,HEU-lo,338400,296428,235954,224609,0.973162250844801,0.98512679510113,0.96496035794511,0.781618713428889,0.98204826540706,0.217726972086136,0.764321293320925,0.748031864767892,0.00402976549112278,0.995970234508877,0.00665106925719294,0.989319165251684,0.625662172630459,0.363656992621226,0.337897792627485,0.0257591999937402,127799,170847,0.0148732048988705,0.0350396420548904,218581 +INF0023,0,SEB,2025-08-22,Female,HEU-hi,1553624,1392141,1200738,1097477,0.961156361363382,0.842094635525342,0.839047748156842,0.695863949937763,0.866243886489653,0.296521940520142,0.569721945969511,0.334008146805989,0.00759466823291404,0.992405331767086,0.010641508818299,0.981763822948787,0.657619956601896,0.324143866346891,0.233648214314848,0.0904956520320428,245172,734030,0.157905364474658,0.160952251843158,1054847 +INF0023,4,SEB,2025-08-22,Female,HEU-hi,1938960,1727707,1390235,1352003,0.974983043676678,0.973879895006752,0.968768301749382,0.812414086088395,0.935776929484139,0.488083943718788,0.447692985765351,0.423472417798728,0.00190297684674752,0.998097023153252,0.0136758544652701,0.984421168687982,0.703230429988975,0.281190738699008,0.245587651598677,0.0356030871003308,453500,1070908,0.0261201049932482,0.0312316982506182,1318180 +INF0023,9,SEB,2025-08-22,Female,HEU-hi,904872,793595,633506,611464,0.957374432509518,0.979145883156816,0.968143149982918,0.821083020157158,0.971231343438841,0.380720755957409,0.590510587481432,0.543729273377134,0.00462215419934953,0.99537784580065,0.0153969772335948,0.979980868567056,0.561159364836426,0.418821503730629,0.359801033097379,0.0590204706332504,261350,480662,0.0208541168431842,0.0318568500170824,585400 +INF0030,0,SEB,2025-08-22,Male,HU,1039944,924772,816017,756973,0.967017317658622,0.960038578918752,0.938458154714579,0.543828875719598,0.88617032500515,0.227832679370789,0.65833764563436,0.221035153208101,0.00398904433407962,0.99601095566592,0.0100464820265709,0.985964473639349,0.606050618813288,0.379913854826062,0.328624518416656,0.0512893364094055,87991,398086,0.039961421081248,0.0615418452854212,732006 +INF0030,4,SEB,2025-08-22,Male,HU,776400,671086,524037,503966,0.974065710782077,0.979785942439947,0.9725400084743,0.853854991688667,0.979747300514847,0.400874141723567,0.57887315879128,0.548695706112789,0.00444805815955615,0.995551941840444,0.0138442005669861,0.981707741273458,0.59258309129172,0.389124649981738,0.320364540758648,0.0687601092230899,229988,419154,0.0202140575600535,0.0274599915256999,490896 +INF0030,9,SEB,2025-08-22,Male,HU,1288944,1140767,954830,930021,0.996728030872421,0.988507817877015,0.982723430329522,0.876881651991741,0.981596850587439,0.215690471796764,0.765906378790675,0.717375899612475,0.00418782444063733,0.995812175559363,0.0166741265504983,0.979138049008864,0.543307626745141,0.435830422263723,0.388106029815526,0.0477243924481967,583119,812850,0.0114921821229845,0.0172765696704776,926978 +INF0166,0,Ctrl,2025-08-28,Female,HU,1142328,1017218,889137,819646,0.902212662539682,0.902008803304958,0.89485256830675,0.618988634135457,0.762528427772158,0.0749357166420165,0.687592711130142,0.492966515852921,0.00387325504099269,0.996126744959007,0.00858852204741857,0.987538222911589,0.842814092621316,0.144724130290273,0.135945047640151,0.00877908265012187,225650,457739,0.0979911966950419,0.10514743169325,739495 +INF0166,4,Ctrl,2025-08-28,Female,HU,910864,805652,630109,604513,0.989270702201607,0.977171599275618,0.961137206179654,0.796360365000242,0.943407279866455,0.410589087549476,0.53281819231698,0.485300633077513,0.0113749448343299,0.98862505516567,0.00761502583051375,0.981010029335156,0.667746904232397,0.31326312510276,0.263912565657964,0.0493505594447954,231122,476245,0.022828400724382,0.0388627938203459,598027 +INF0166,9,Ctrl,2025-08-28,Female,HU,1053896,933222,740554,713494,0.978962682236991,0.979133380292176,0.963402168124109,0.803150823784081,0.935201822498877,0.276155639692828,0.659046182806049,0.631649874863633,0.00772968945782113,0.992270310542179,0.00842956641493673,0.983840744127242,0.701231557677763,0.282609186449479,0.242981475837312,0.0396277106121666,354348,560988,0.0208666197078243,0.0365978318758912,698484 +INF0199,0,Ctrl,2025-08-28,Male,HEU-hi,1729240,1545717,1379096,1282394,0.867265442601884,0.896476816618952,0.873258369178979,0.717055573937938,0.28363795498889,0.0213393990159149,0.262298555972975,0.21283724476233,0.00818329641325352,0.991816703586746,0.0199721921101004,0.971844511476646,0.552840882311354,0.419003629165292,0.373862940095207,0.0451406890700853,169736,797492,0.103523183381048,0.126741630821021,1112176 +INF0199,4,Ctrl,2025-08-28,Male,HEU-hi,955672,847071,733820,687490,0.930010618336267,0.934141729475596,0.901921100828468,0.565672932701256,0.826955617735211,0.233648348245391,0.59330726948982,0.521875933155642,0.0159364238410596,0.98406357615894,0.0125139072847682,0.971549668874172,0.286638410596027,0.684911258278146,0.529997350993378,0.154913907284768,188750,361676,0.0658582705244044,0.0980788991715321,639373 +INF0199,9,Ctrl,2025-08-28,Male,HEU-hi,1090984,980857,815737,784725,0.987602026187518,0.97428760922637,0.950512002642594,0.742637381354226,0.926212033547567,0.20359800604996,0.722614027497607,0.674732121603848,0.00524803263153558,0.994751967368464,0.0140136376745911,0.980738329693873,0.336626014585308,0.644112315108566,0.534534526801533,0.109577788307033,388336,575541,0.0257123907736297,0.0494879973574057,774996 +INF0207,0,Ctrl,2025-08-28,Male,HEU-lo,1373960,1231782,1089637,986621,0.917642134112288,0.63901299475902,0.63159830565573,0.394152634572797,0.91575499086456,0.337731048165626,0.578023942698934,0.109443130485467,0.0260914095506337,0.973908590449366,0.015567789015491,0.958340801433875,0.651952374855972,0.306388426577903,0.247727563692229,0.058660862885674,39055,356852,0.36098700524098,0.36840169434427,905365 +INF0207,4,Ctrl,2025-08-28,Male,HEU-lo,864640,768455,603156,581744,0.986143389532165,0.971151315273418,0.956406238288393,0.818066772067501,0.970326712989894,0.492044720878053,0.478281992111841,0.372480082503926,0.00918716999696812,0.990812830003032,0.0178766539480233,0.972936176055009,0.451521374757593,0.521414801297416,0.454879325435189,0.0665354758622268,174809,469311,0.0288486847265824,0.0435937617116072,573683 +INF0207,9,Ctrl,2025-08-28,Male,HEU-lo,1155280,1020738,803205,743244,0.981793327628612,0.965042372881356,0.952004352402044,0.778534545135615,0.96670867760594,0.315897033300124,0.650811644305816,0.601995050219501,0.00591233256432074,0.994087667435679,0.0177428456974769,0.976344821738202,0.702509086337015,0.273835735401188,0.238192147884338,0.0356435875168496,341997,568106,0.034957627118644,0.0479956475979565,729712 +INF0166,0,PPD,2025-08-28,Female,HU,1421024,1265409,1081320,999289,0.913050178677039,0.909845561326654,0.902988927017835,0.662145262883316,0.743515597326456,0.0731665734214804,0.670349023904976,0.475618314899477,0.00287811346100974,0.99712188653899,0.009069363578466,0.988052522960524,0.838769963214439,0.149282559746086,0.140460289342628,0.00882227040345791,287341,604142,0.0901544386733465,0.0970110729821646,912401 +INF0166,4,PPD,2025-08-28,Female,HU,895072,775403,609274,585499,0.990645586072735,0.976435376589164,0.957963663447249,0.793280254886884,0.965443797270277,0.420251238807268,0.54519255846301,0.498737285925411,0.00980917643880268,0.990190823561197,0.00757367776572148,0.982617145795476,0.681099359854279,0.301517785941197,0.251665729761765,0.0498520561794325,229479,460120,0.0235646234108361,0.0420363365527514,580022 +INF0166,9,PPD,2025-08-28,Female,HU,996616,876933,700861,676818,0.985086094045962,0.980557172083201,0.964765030207402,0.808679453566993,0.94496500150232,0.279680098522533,0.665284902979787,0.638831083562391,0.0074672798429897,0.99253272015701,0.00825697662265268,0.984275743534358,0.704746309909533,0.279529433624824,0.239013924212336,0.0405155094124888,344436,539166,0.0194428279167992,0.0352349697925979,666724 +INF0199,0,PPD,2025-08-28,Male,HEU-hi,1516328,1353418,1204623,1122951,0.855110329836297,0.90664797703091,0.883277948277891,0.726175661053875,0.292509192494565,0.020824370292611,0.271684822201954,0.22272797673338,0.00813212285107205,0.991867877148928,0.019490052153757,0.972377824995171,0.554053183954671,0.4183246410405,0.370826089755972,0.0474985512845277,155310,697308,0.0933520229690903,0.116722051722109,960247 +INF0199,4,PPD,2025-08-28,Male,HEU-hi,897696,790855,670560,632602,0.937085244751044,0.939225913542802,0.909882220370377,0.599200070175202,0.859586100499146,0.233278060398584,0.626308040100561,0.548494258277568,0.0174050064415462,0.982594993558454,0.0131551257769634,0.96943986778149,0.267480713856767,0.701959153924724,0.548701681987794,0.153257471936929,194829,355207,0.0607740864571982,0.0901177796296234,592802 +INF0199,9,PPD,2025-08-28,Male,HEU-hi,858968,768197,633815,610401,0.98810617938044,0.973886703109223,0.953236473726707,0.773676470344414,0.952894761655766,0.188153078630881,0.764741683024885,0.707733651068499,0.00545943425363508,0.994540565746365,0.0140497919782955,0.980490773768069,0.311602584677248,0.668888189090821,0.558709357040339,0.110178832050482,330254,466636,0.0261132968907768,0.0467635262732926,603141 +INF0207,0,PPD,2025-08-28,Male,HEU-lo,1232224,1105088,964965,866432,0.912570172846802,0.669899327161431,0.662423483583751,0.437218596650984,0.927630893838588,0.339022273647671,0.588608620190917,0.112016199016488,0.0265210205557277,0.973478979444272,0.0136607788451606,0.959818200599112,0.65434872430534,0.305469476293771,0.245945666769962,0.0595238095238095,38724,345700,0.330100672838569,0.337576516416249,790680 +INF0207,4,PPD,2025-08-28,Male,HEU-lo,964456,862394,674289,650158,0.985832674519117,0.971358006200201,0.957436418299797,0.726423557642052,0.962862892746763,0.463789655905618,0.499073236841144,0.370627943788539,0.0095095153102617,0.990490484689738,0.0172283906260866,0.973262094063652,0.403937090007186,0.569325004056466,0.502746806981757,0.0665781970747085,172564,465599,0.0286419937997994,0.042563581700203,640947 +INF0207,9,PPD,2025-08-28,Male,HEU-lo,1131528,982637,762643,713953,0.983508718361013,0.955307692198143,0.941492126651466,0.919422255578706,0.941057839308921,0.299647304286407,0.641410535022514,0.565919401981726,0.00585728479268223,0.994142715207318,0.0182533795712139,0.975889335636104,0.679510725126383,0.296378610509721,0.256338321148904,0.040040289360817,365357,645599,0.0446923078018568,0.0585078733485337,702179 +INF0166,0,SEB,2025-08-28,Female,HU,1550664,1380306,1200328,1097863,0.91635112942143,0.876639616392387,0.869641799234216,0.617185605172023,0.785068915423591,0.0850933957797154,0.699975519643875,0.529613178162234,0.00253922880428172,0.997460771195718,0.00601508332319669,0.991445687872522,0.822019827271621,0.1694258606009,0.142005230507238,0.0274206300936626,328840,620906,0.123360383607613,0.130358200765784,1006028 +INF0166,4,SEB,2025-08-28,Female,HU,775352,679787,538754,516822,0.988949773809938,0.976631299267674,0.959359121599809,0.795521912069981,0.960580423020167,0.423162813575996,0.537417609444171,0.494367929168716,0.0101387990647231,0.989861200935277,0.0036664842545147,0.986194716680762,0.640256703646585,0.345938013034177,0.290030346748918,0.0559076662852594,201010,406600,0.0233687007323262,0.0406408784001909,511111 +INF0166,9,SEB,2025-08-28,Female,HU,1043248,923970,742880,716921,0.981115074045815,0.982730578831986,0.967342070169552,0.814757841400548,0.945940050882416,0.303301773206814,0.642638277675602,0.6141730909497,0.00777898367493053,0.992221016325069,0.0048838834686653,0.987337132856404,0.680834379812145,0.306502753044259,0.259226533778063,0.0472762192661958,351974,573086,0.017269421168014,0.0326579298304478,703382 +INF0199,0,SEB,2025-08-28,Male,HEU-hi,1582712,1412403,1263938,1177939,0.869944029359755,0.866133979220115,0.843422874658084,0.708885464717426,0.282640716716408,0.0414248427915377,0.24121587392487,0.187879255090691,0.0113936107854631,0.988606389214537,0.0120896834701055,0.976516705744431,0.533514067995311,0.443002637749121,0.377667057444314,0.0653355803048066,136480,726424,0.133866020779885,0.156577125341916,1024741 +INF0199,4,SEB,2025-08-28,Male,HEU-hi,915104,813472,701070,665961,0.932535088391062,0.95633880379755,0.926079493488258,0.603382756444112,0.84911133646456,0.242567783945346,0.606543552519214,0.533737190435525,0.017189828101719,0.982810171898281,0.0044249557504425,0.978385216147839,0.242657573424266,0.735727642723573,0.579969200307997,0.155758442415576,200002,374720,0.0436611962024501,0.0739205065117418,621032 +INF0199,9,SEB,2025-08-28,Male,HEU-hi,333800,301408,254051,245249,0.982495341469282,0.988259267252112,0.96349125981507,0.795941997709125,0.948302022556273,0.205358027394975,0.742943995161299,0.688774525906344,0.00454208239337462,0.995457917606625,0.00611667095641115,0.989341246650214,0.31760511135672,0.671736135293494,0.553104513315872,0.118631621977623,132098,191787,0.0117407327478876,0.03650874018493,240956 +INF0207,0,SEB,2025-08-28,Male,HEU-lo,1196056,1073884,953274,871433,0.919260574249541,0.604085265531025,0.597713819197727,0.39015496695686,0.891970064919067,0.385367773394381,0.506602291524686,0.11529933481153,0.022005772005772,0.977994227994228,0.0057997557997558,0.972194472194472,0.417637917637918,0.554556554556555,0.39005439005439,0.164502164502165,36036,312543,0.395914734468975,0.402286180802273,801074 +INF0207,4,SEB,2025-08-28,Male,HEU-lo,766016,680078,547528,530330,0.987837761393849,0.981113995571505,0.966207910208445,0.830596701534703,0.969487490031783,0.511599901639269,0.457887588392514,0.360494377581107,0.00866361092163225,0.991336389078368,0.00758623767236378,0.983750151406004,0.409236084991362,0.574514066414642,0.498772814494176,0.0757412519204656,156863,435133,0.0188860044284951,0.0337920897915553,523880 +INF0207,9,SEB,2025-08-28,Male,HEU-lo,677136,599173,485830,453507,0.985559208567894,0.957409868488762,0.946164964045839,0.899464826672752,0.94905764098074,0.329227432261338,0.619830208719402,0.550475967792887,0.00663340924700864,0.993366590752991,0.00992752051476702,0.983439070238224,0.675970610562846,0.307468459675379,0.258983118244587,0.048485341430792,221304,402023,0.0425901315112381,0.0538350359541613,446958 +INF0614,0,Ctrl,2025-08-30,Female,HU,2502056,2240583,1939275,1791189,0.875958371785445,0.859828541236591,0.858035050194167,0.720463324892751,0.868600121017824,0.205269406198802,0.663330714819022,0.198508154548961,0.00489313535000624,0.995106864649994,0.0189308187311717,0.976176045918822,0.539608549172,0.436567496746823,0.383946237900854,0.0526212588459687,224396,1130412,0.140171458763409,0.141964949805833,1569007 +INF0614,4,Ctrl,2025-08-30,Female,HU,1391096,1344752,1105255,990319,0.672744842823373,0.908350244359322,0.897685791135821,0.636089230178076,0.813475292779559,0.300045070236418,0.513430222543141,0.384902178709387,0.00855224841369586,0.991447751586304,0.0171044968273917,0.974343254758912,0.342206418784293,0.632136835974619,0.525016092940563,0.107120743034056,163115,423783,0.0916497556406777,0.102314208864179,666232 +INF0614,9,Ctrl,2025-08-30,Female,HU,985816,886942,751813,687188,0.944112819199404,0.96687644404986,0.93044823924178,0.507858559795802,0.823181280160248,0.305544933078394,0.517636347081854,0.383501775471183,0.0226970560303894,0.977302943969611,0.0197293447293447,0.957573599240266,0.266927825261159,0.690645773979107,0.576155428933207,0.114490345045901,126360,329490,0.0331235559501405,0.0695517607582197,648783 +INF0622,0,Ctrl,2025-08-30,Male,HEU-lo,1419968,1254039,1116059,1024019,0.917274972437035,0.785139469843193,0.771036519476593,0.350359360677606,0.912788100700406,0.0960209058174691,0.816767194882937,0.492028137771768,0.0128146537881969,0.987185346211803,0.015544329438502,0.971641016773301,0.670499740619056,0.301141276154245,0.202070106963761,0.0990711691904844,161924,329095,0.214860530156807,0.228963480523407,939307 +INF0622,9,Ctrl,2025-08-30,Male,HEU-lo,918688,813691,633925,594892,0.95913207775529,0.997215114444951,0.975340881208595,0.762248939675418,0.933758541722232,0.252400419383616,0.681358122338615,0.669201975517562,0.00334304522903124,0.996656954770969,0.0180139631406072,0.978642991630362,0.721925978862884,0.256717012767478,0.199417973420557,0.0572990393469208,291052,434924,0.0027848855550493,0.0246591187914053,570580 +INF0627,9,Ctrl,2025-08-30,Female,HEU-hi,1040808,940435,782722,722083,0.842248051816758,0.987569326490982,0.956834650666833,0.52995447019187,0.823986050436855,0.177313964455917,0.646672085980937,0.593625893566322,0.00370567820705804,0.996294321792942,0.0216225539387857,0.974671767854156,0.711500669008195,0.263171098845961,0.229224159558455,0.0339469392875063,191328,322304,0.0124306735090179,0.0431653493331667,608173 +INF0614,0,PPD,2025-08-30,Female,HU,2167928,1927832,1630916,1508441,0.901599068177012,0.899544047134982,0.897743323757416,0.776620595893115,0.908680178487064,0.223675951112041,0.685004227375023,0.185058667254933,0.00546912171737584,0.994530878282624,0.017650579911082,0.976880298371542,0.527435140513964,0.449445157857578,0.392548897222464,0.0568962606351139,195461,1056211,0.100455952865018,0.102256676242584,1360009 +INF0614,4,PPD,2025-08-30,Female,HU,1324872,1244577,972809,876491,0.785615596737445,0.948302678681644,0.935248371660724,0.680051119324412,0.859840306829563,0.3080638858102,0.551776421019363,0.414792225902412,0.00831977594266768,0.991680224057332,0.0176383368685517,0.974041887188781,0.343659259869437,0.630382627319343,0.52646265367903,0.103919973640314,194236,468273,0.0516973213183558,0.0647516283392755,688585 +INF0614,9,PPD,2025-08-30,Female,HU,1181336,1066572,902472,813387,0.935030926238064,0.937837752550155,0.912820067793758,0.477232026633638,0.668151699246463,0.24215123086884,0.426000468377623,0.311675001033186,0.0230631872988932,0.976936812701107,0.0201813938686751,0.956755418832432,0.25828294614759,0.698472472684841,0.58343057176196,0.115041900922881,113124,362955,0.062162247449845,0.0871799322062424,760542 +INF0622,0,PPD,2025-08-30,Male,HEU-lo,1269256,1125016,972593,879358,0.920196325046227,0.800979260537184,0.785547627109847,0.413038105148162,0.886671473836331,0.082516762760193,0.804154711076138,0.486926393455866,0.0125105995993659,0.987489400400634,0.014691966425385,0.972797433975249,0.669956126875668,0.302841307099581,0.200796352508879,0.102044954590702,162742,334223,0.199020739462816,0.214452372890153,809182 +INF0622,4,PPD,2025-08-30,Male,HEU-lo,741976,658809,504597,468821,0.970803355651731,0.996280208202877,0.982264524875146,0.819419817943326,0.97596160291732,0.177267425491694,0.798694177425626,0.765994985855823,0.00438611844270042,0.9956138815573,0.0175059683415362,0.978107913215763,0.71630599914588,0.261801914069884,0.200399756365648,0.0614021577042363,285674,372945,0.00371979179712301,0.0177354751248536,455133 +INF0622,9,PPD,2025-08-30,Male,HEU-lo,954616,852281,660431,621750,0.931760353839968,0.996385429864566,0.974601344330096,0.757045304683751,0.935292414261708,0.259471057269827,0.675821356991881,0.664087848545168,0.00325149098200521,0.996748509017995,0.0171123875969525,0.979636121421042,0.720845593663198,0.258790527757845,0.200030214488534,0.0587603132693107,291251,438573,0.0036145701354342,0.0253986556699037,579322 +INF0627,4,PPD,2025-08-30,Female,HEU-hi,1274376,1221638,990572,930591,0.858136388596064,0.979495951533609,0.966596708633139,0.547259239594577,0.906030977491093,0.356671326943187,0.549359650547907,0.521679438570157,0.00289050300893029,0.99710949699107,0.0154043195255891,0.981705177465481,0.796094531291121,0.18561064617436,0.150854430934961,0.0347562152393986,227988,437027,0.0205040484663913,0.0334032913668614,798574 +INF0627,9,PPD,2025-08-30,Female,HEU-hi,976928,872861,706543,648987,0.869935761425113,0.991138498380203,0.960790113660316,0.559101769997715,0.856188382289581,0.187127759332945,0.669060622956636,0.615128494310262,0.0036360078076315,0.996363992192368,0.0211568272999294,0.975207164892439,0.712137364872868,0.263069800019571,0.228496824930859,0.0345729750887114,194169,315656,0.00886150161979682,0.0392098863396844,564577 +INF0614,0,SEB,2025-08-30,Female,HU,2404768,2139021,1869790,1725277,0.909617991777552,0.851620710067844,0.849870933250411,0.716843927681839,0.850154759132211,0.209923073777705,0.640231685354506,0.167388757429061,0.00548038320198823,0.994519616798012,0.013132739979183,0.981386876818829,0.510089852794358,0.471297024024471,0.398103107674661,0.0731939163498099,188308,1124974,0.148379289932156,0.150129066749589,1569343 +INF0622,0,SEB,2025-08-30,Male,HEU-lo,1313704,1154243,1022408,932997,0.914149777544837,0.799174345379699,0.783710615207662,0.37059135958654,0.884101026015813,0.0979349968520329,0.78616602916378,0.508100874154083,0.0129515127740521,0.987048487225948,0.0107846250599319,0.976263862166016,0.655259372723367,0.321004489442649,0.203008736044434,0.117995753398215,160599,316077,0.200825654620301,0.216289384792338,852899 +INF0622,9,SEB,2025-08-30,Male,HEU-lo,611904,549416,424379,399846,0.9352450693517,0.997323200179701,0.976015766645095,0.781454403482781,0.95273211328141,0.290235706366262,0.662496406915148,0.649376514228616,0.00375725893995763,0.996242741060042,0.0132004679447319,0.98304227311531,0.715407396477767,0.267634876637543,0.205200088530084,0.0624347881074587,189766,292228,0.00267679982029878,0.0239842333549046,373954 +INF0627,9,SEB,2025-08-30,Female,HEU-hi,688488,616891,512153,475077,0.865657567089124,0.992228647016199,0.958218035569259,0.557577555476664,0.834356711119639,0.198455339153794,0.635901371965845,0.586578632918458,0.00385112931765126,0.996148870682349,0.00725618188036221,0.988892688801987,0.690489643584673,0.298403045217314,0.256196749587379,0.0422062956299347,134506,229306,0.00777135298380072,0.0417819644307411,411254 diff --git a/course/04_IntroToTidyverse/homeworks/README.md b/course/04_IntroToTidyverse/homeworks/README.md new file mode 100644 index 0000000..2818b5e --- /dev/null +++ b/course/04_IntroToTidyverse/homeworks/README.md @@ -0,0 +1,5 @@ +# Turning In Optional Take-Home Problems + +This folder is for the use of submitting your completed Take-Home Problems for evaluation by course instructors. Please see [Getting Help](/course/00_Homeworks/index.qmd) walkthrough for more detailed instructions. + +Within your branch, inside this "homeworks" folder, create a new folder (name it with your GitHub username). Then copy all files you will be submitting within your folder. Then commit the change to git, and push to GitHub. See [Getting Help](/course/00_Homeworks/index.qmd)for details on submitting the pull request to the UMGCCCFCSR/CytometryInR homework branch. \ No newline at end of file diff --git a/course/04_IntroToTidyverse/images/00_CheckNamesTRUE.png b/course/04_IntroToTidyverse/images/00_CheckNamesTRUE.png new file mode 100644 index 0000000000000000000000000000000000000000..cb71c4154f8e5d7b8087145a7586c6f1b9b8ec7b GIT binary patch literal 51798 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 Hxo!DhgjR{9 literal 0 HcmV?d00001 diff --git a/course/04_IntroToTidyverse/images/01_DataView.png b/course/04_IntroToTidyverse/images/01_DataView.png new file mode 100644 index 0000000000000000000000000000000000000000..10c6e7f1a0d8d990d5a4bc2fea5992156a999307 GIT binary patch literal 200924 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
0(%vdbl6Q@1v4K-)r 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 q;bH;yV4y8$9HFi#G#Hg+|0}? literal 0 HcmV?d00001 diff --git a/course/04_IntroToTidyverse/images/03_ColumnClass.png b/course/04_IntroToTidyverse/images/03_ColumnClass.png new file mode 100644 index 0000000000000000000000000000000000000000..f2fff2a4f7df2f6a696a89f7255f3b7f60a61d97 GIT binary patch literal 219665 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π~rF0m?8f% z%Pie{?Cjaym#Y>){n~IYUB>j|G1*IYTVCBYaL3g6y?Zqn?Oy?TXfK3-d+_8*Y1~

`~3ywzbY= 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 w4*i*nb2M!nO&dX@qmWH@wh}_f-XnW&**xcm z?)!P3KcC}x{`eio?{RxFRwO@^Sr=~8Z`_T)JHu@Goj<{?&A;9-4;w}R zUxfH%b2g{nqNFJ?uAhGE_Zm%j`kk1B=)YH9zd?g}@-sByB|>CkD3s`HY;25^?`R}2 z{Z76?5#Bf>cKRLmrT_PF|CiRzEWT=QKC@Fnq*5V4*m|I_-)noA+I#0uM@NSv-#KKt z=SYL<4Cj_HP&A=T%*+jM$Toh`2CI;*v?n!~CV2If*p3!Dp1d%~54N@={mU1-weh-* z>6Yf^X6-Kq_w@8eI#OiSvo!Jy>jK8d#{&Wae*OAYY(3~a*OB5d(<d=XA_0ChaC2oO4^#59;k%Nsk^zkl{+szc<^9cZfAe=c;u@0ZDeesW!Tss8$AxU zdhfrzMwZKO)%V4`^K(jm!n|RgMv2Yv8Ksb3eV@ZGwfM3-RmR4~sd3H&unCm5Vv>?C z(5vc$w$+DOng!#kxEC()J1@R(@{UQ73?vcS>Qdew^*R0|85mYrhkG*5PYM<$R}`9hr%V)&FCWKWq+jj*ZH|Vbe5Gpt zIfIVJQjxHt5&^6dfzYNREZ*BYR6ZKNzw`mM-#^Qjvh?&WowtbRgV+#@z&GRW7_ZU>q=J+3#92?K!GN(qH&t$HDUXZ$P&2Pbx zN-hsQe%g9>1~b*TMZv^m+PY+zB)6>JB$o2&k4x!`r@I-OCXkZo_8y|ZdC;0PHzqc= z+;ex`j60?&@wub!Lakz6=caZUahvJOdorQQ{&nnm z*XVUV!ym8tMqFw2wjeGp3X?g7H#IfM!`XMIPMpX2zP`SWPsxv|L!>$EGU`RTnq^^@ ztyN^vKuF0?Wa0I<~R{vNJ7H2nnhQs49{mX58*oE3-F^`PPr0b4p zN3zWRa=EP#$;oEM+=jD4EgQ))*PW?eVd3oT{P^)>*c+vuwt*r`*dS_-$Bkh(AzPYRBikuuMhU8vYD+Mllo2RRHU{ytUgAtO1@EJn9t#YK2PLZ!S$c6 z7>^;IYVz_PD{E@H{kU}hSG-U;Z@6vM?sTcc43%9CM!Ole8>`dOz}6eC*7qVlN03Yu zAQmRAPcRd=?%S&`OpL=*-APDEXC^0;6T_#Pqg)nxSPj0%@L0musrMRNy3LKndo1rl zghKjshtrNx?sxFIox-+aO~GeRIVc56=WRZ|5~qb89yKgHa&E7^O{3x-qanLmJawI? zb@Zv$FraXHxp}BA7qm{&U0?EQ6&y7sNWS=x645yD>j!cS?9~VMqFb+N-=^K?{|edQ zy7)^gPRfH?>LU)f^+~)xk+mEX>1kXwI956(kR z8|2~zOXXsD8O?BzgP9n4?e>KhIZaK?SYB&5e&cc)MHZ?Md0_*!-(TRC^ce=ac4uW} zegFO){#Pr9B(QE75Cja0-Bruk`7fOE>X~>C8^JqJl_2HNkH~)a{4oppd|dbDPQPiw zQpH9qRIsV0h|u|!ba(P-z_|TdxD08B3)QN zmNqsu@lU+rIz#^>@CDJWoy)&(KdJBH(b$_2IVKbQ2*ndXiE76;X*wdpcP}-)y}c`Z z@Hja+kxAm|!*JaCzC7lU2RN_`K^@kupHu=hPwulX)NxO!0Li|{0*KO1;)t2OtUB6T z(C3Pue~C}I*R8I9({@{fr3dQU6=t;`v8!9X`UGU0$?}#t@YGk7&hPnb^@6%XY3~ce zzTLfhw_CO|Re_+7xln-+a$MY#hPT;y+!kGF4Dqhxy|zdyf^wK$AB|Lcs6!v#{3Wk` z^7ig@N|fG(_aSj{m1gaqAU;yFQVN;b*x~_=0QwQ}_`3+_!vs)fASt_Em8YAGj11H_ zfR7%Vv+Yn5FwUO0f|CgIxyE52I@220IqdWR3WvV;?o=$ibuwJRq%HpNaC>xSYU&CJ ziHVUBoc25bn3W#eBadHE76WYj=8I)p(89}eB!3o`1MNphD8{9tso4+c>G|{LuEdcn znjJ~^gXxxzAYm;7l3UA&<9E^myeMQ?3VEm$mLw%5MYaC;05)b$!DqnERL@D@bFI$S zdn4A>@+B7yM9w0h-3rWY7z)6;L!U!l5s_-yD7LjotqRwtxq6jEqlObCp3j%hBN^fP zt7~Cl&K>E1RWfs{_8LTv)_!rdO-@a9Z%x6-g&`>9g?A^jOGfzrRO&jk@Bqg2s+fmD zJaO2O))2EX)3!2P?oxwm3bS71QH@*k-3#!z0arR^<^`BU^>_gDnUUGtw6wGa zy_P|UT{3pcUq65L!JBxg8e3Yjz3moqsk}DZfBfyC8*-fp`bLZ|wE25F4nHy~%I9FM zAvNCJB2z8fdDy9UA-B4UYR-U;NVCFq%@2nd!4R-3K7hget@A&9`ovQ8Bj+vzH2I9W znpzb=HK@JAXpFNtrPDF|DF{GpddCQm!lE~47?MV{{Z!N5)(KwXAtDsp;6^~`JYMk(ddgeI$CPr56;w;WP zHbY-sH*BGdeUbcP*^^aze6;U7Be?lnJl&jr3#l8h_oWc`9`NZw-WUL-^N@X^{@-<&=C(U5UoOjp+6sp$SlaR`b$}H4xcud6gt{J1yd5Oo?ZtjBo|fc}V3DJpgyY== z2%75ojLZwTxZ!zqklIGeT~?AuLSpC=AfMKc0_n#grnf2?c7}6f{i!%DD@zc@Odz~7 zhSvXrj9bwI@M$qy&ou=(pC7ux2_qkJn)d{_1k?Kq@1(N* z4zqNwyP{qJhYY$>h$L5B6MaM;BL_|#;9Q+D^k@F zs=~#^WuOHl?R)S&`FMbHs==EGb^$0l>ewk)^bm_SR2s565XuiwKk=!B1zo4%eDoID zSRgPq@zEuyt}cK3O|eeEw1o9$RQ18lME4#|)0-Bw^QJ)1)*g`RIzFOLLOUEt}d@^NK=ApkM+jOBG1z)WZ9MG{w` z9Ch2S)sI2O@t%rMFLRtz3hs4Y9@>T6geYLXsY0L)ZCT(UtBUFOduS=YnGGZLjqu@S zXI)(#-l*~J`V_{>7J{aMUEA!ibqy}|7XZ?r$aSwLGwm`775dvpJ2skPlAwA3x)6Sv z4N!okfg)K=F7r!4QVCvv`yqWJ+MB>qp>id`@j<<3L|#bU{*_n=L=b&a1~yeBR)?~}UCXHbKNvR0p21=SX!%Hro9 zE-Bl^J5~9BYaoy4iua^G8v$$q6qH<+jEs!-{@biWC2gxb$r?G2mYtef4Hl9QDtK2p zXpCF9xf-ZEtVDUnTx2I4Ar{Uj;A%0nn>ilrtYHvW9jrG?EFoHwXc|apyMaC!R5uddGqEsVjz4`G4e492=th3 zr`2zcbZyfvNq-Jc3}=%Quoa zR6Bxt37HW(8Blu~J#)wfxOdpOwCB0$|Mt1eVx-64`d165;KQmb~J_Rp}o_YHx$;Q4*@OZR|f++Um zr;RtGFje#+{PtM)k<;m+90s{?k=CoGg^ke?oeiWp0q%Sz(T?i0@SY-Y%KE*B#hj`LTTb zi|Uj>DstPH?sjScmYo0P3x}Q)(9fm8lH7$Dy5CN{x}>>|JAYnb=~$7lkO%1jTUpD1 zGqg>gP-1D%OQzhtqWO^53}lirZE5tR7uAiOm(BF=J|bBCw<|XGb&2}7loX0y^XaMc zWdQwzuPP#GY@v(>rw|yPg2*Aap3~6Rr+AtNz<}PWgPiXH*^4~imA0@E3-bjxUc2CU zHz?7JGR&sN#y8E4;e%0PvZC16^ATld@|w%g)BAC6GniRf4_82&bM1x<1oc1D<}g%| zK;*!#LJ6uAqJX_*83B?ANsd8p3$ly#&+(w&^to5F($b{m7`U~NLmj4OLxsVFJRt}` ztr#SMeW+K#>VSy5-;i-xR1chhA4Q{I?{D|__d6{F|6pWiuLe90LRtA@{>#y5QoE*E z$V%Qo8_ws9rWIQCbGnKFzOdl`*gg*@q3k5U(E}Et%jePW_CSMJ1yPk%Zwn4z6#yHH z(k`gPl!}xf?+)|Renh|!df_@Eue`L)11xK7Y8n+8*`wjL`VEUg{zKoYF1f$lc|U;U zcpE{naNvNdfzJ^O#1ty$SE%j)h|Pi1LskMwP8G(odMOJK0;465+q_pg12Wy@cr@X6 z>|tDt$`$n94I3stTBzFoUrEj@rsIyAt55&^hSW{5j+L(MbCXM1-E$fMTW)Pxkdfg#Er7!j5Vd&TPaH*Z4X4Gwx? zJD%gRNsm4M7OdBe*f1b_c~{J*CV0oBb?TpOeb36ov#dyl=v*{EjHRuBwRB(u|0fYzy8_wq_Y`- z0rjm(cANE&h!iP#EL4WwZ+xTzU^#|kjH9HfN%lpyM){3gJ8-@;82~967wAN}$>m1I zp-A%$*@=TT^;US#Y|g;x?tA=w zgj&_)lj?gu6&FatI6B&{PAz|tfq)1!cNxwcL<{I|z&j`8T!H*yUA!976dA@u5*T#t zuKn^*Y3zr)KrjHGSV0AC26=j5S`Q>=Hf)6WtJawL+kyl>KAaRye8Re_`c zYu|xS7>0R$kaDAz*)rT=-V|+dukiqx`D~Yuo_pvz`|%Z!mmQk|F+2;f<>|u0P@`|kM*i^V_GgIiD|1@-vDs@B zL@B^KcB{@k?XXARYfH7}nBTk$JHaw5A?YnYQzAcTT0ky7XGJG7!6}-cKE5hA15i62 zo`~?NP9h{MLPXDqVdnyH7f9R-_Blw}8*65-)>%0xQ#|%cKs`q%x^L3{375$)?7lrj z^;YiaH?v;P>f#&q2=8-%40i})4#pI!h(EiH16$AEJ{K+jCNhaitc|Mea!KM0oP znDB7oTm;*yQCC2w9B*j@3lu_|sFTd81c(!ydVamF*`(lQ*rIjkQ7E54d`WZ5K-~tq z$M062`q0K^`S(Zhv-A%?+_`PsLZ<*I1~i(p^ozhBi0L0nkG-9mn!?dJ0oi?YaCX$e zZ#Wab8w=vc`cyL?)$UpYH7T3URof%r4V?gBCH~&mg@lBQ(fxFy{-)Em8TX$4@s>UY zF~Uugc|$m1z z-HLM=>E9VdmSIFTR3%Si5lU8&`chYVCm`+*i&UUUzDLi47nEl+TxPT#a^^m@m*c7* zF56ccSl2dKfwLKil7Q%SJ8bYdxDPa8Toq9}gQ~rtzE89)f_V-( zi>RN>={BfFyBjkNnR-v_t}uRO&H>5^vLgQbRp5O$%U@lF(5r4(t1C8**X>+3}2^vFXA9|D*o36f$joeXpB2C=j{IoYVT7pe-bYmONl zKYt!Tsl?cu@*63vK`zwG@RSNR+iOPo|--h*_LjoQxM?`og6!Hg)-dwb4eE(`4oGuF6 zRuG_LcH+~D5NSk@k%7S!P?(%C*SEGX;nkY6)l^!8$#_(PJAhR2;tK#9vFlab;W?yJ z10_I|CoeS>Y{zP#RX92)%`Rzp7}p6AIyw;n=3P&YZaK(sVCUDxa@kM*oZPJY+!80? z(vzjRmVt0w#C7Xe0Iva3&1hXFOz~*%p@p&w6mpQc&p*7y$k-2A{zP0VdUxv^0cNg7 z-i>D-h~oS2IHlc$C(c3SfKPfYmmlmL@U$B;f&PA^2K27|)-9Yot zWPl(1P?JHX8^SN z-o%VyK6@Up85X7EZ_w8&p%8a*_lOECe|;jlHJ6%zI16V>G{ELx{ZkvoraMsMbn^VY z)8}`<>Wm&AZSzDTfC;go>pND!cn8izU%>tx^IC6oXy|Q_a#eT>@<3O(o9GS}E#_p5 zoGd^v5ilV@-H~gp0Oj3%d-?D*mOm%vy}Syd=c*r=C}5Fyc^rZ;YLS^;90TfEr8+VI z6uGo0_Cc`7!5;!fR~-L*a8rR!aO!P=7x1gGQN~z=0xF@<;+NWSRasftQ4sl6{)Vd@ z?r$Fh?6=_J5)nCu7M{hyk`>URly!7IEY{CwgARmH=Ndnli6>}9Theaoxq4op*j%LG zwWq`1(eH9q$on42-5!miC44I-RZ20KBPzpQEJcCZUPZC8Yc;My@9 zkjs9lXvh}QaQ(I5G3gz}2!+5A5Nhzs%@X~XEm1wnA zL#eQgejQ>5bq2&~?FtKMA~=s=2=9zRh=0J?UqNst&qQQwaFaZ?m*d8B!c5_{`;c#3 zz=HsnVc=J8R+i@;Ll zSXy8RRsgK%h=BRPXF){n!owI8;t#-?#^gr)yZEQ|WJpU8SUqv8J||n0D0N0`%m?u( ziU_d5)Qame!R7!#JS+@qLS{}Gg#TygL;_2Y4X8Ol2*DA*`&4d500q*m82b?i0uT%w zBmgD-PVRp|rKN(68M`m0oCQuj(o`aU=Z~LUs}A@wJiQ2U=(YPChg;EaB8wL?=ZaL*htJvx;lxhe@=0D6x>`ycVkM7V60gNcJ8RkFL z&=67U%rOEIkPjHUix53fT9rEqpjk-;@yOOP5HCd7)0Jr-rx>=S1e7?vEhux)t>wnF zFOve91cX3SPzJzrF|e_*As6TeYK0gdkW5Rca;>{Fx`E0ddb$Kp0W?FgYkV1l7|PW2%ZBrQ z74iu{)OYBbc-O9MhYMsztC)=FL}N&vb%~NL9<>)iJ^BUL&Tpmxc+7cvH=$qJ)ia{ z3A8iTIEXfkZV_2(p48J1G6kj2@{Wgqotcd7ed!$$@Fh)4o06JsggP)(nMdV4C;mpho)aOq?iy*u~>SP92 zN}wECEx_)9uxx2*S%O0iJ&qpWrUJ=81UgWPAqD^n4(|w88$mvS^sonf;ImxpU%*Xm z2_imVe}m}&H4f?81SuZicQ3sAaqUYyO8!Eh<0Cdwga)DOrT*JzJO26+vaDc!{oiSz zW$hS7q5c#>UnfAC&*gy`V8wwG&^dh4eJ7gl`urpxfrj*d-s{`0!4kPlbvj)1F3X%kjS2ji0Uw_OI00LO)CXcg|Zf7dpkiRNUpvqz;UCUJDl8D={p{t z^>3sfJ!(n$Q%ifaKow>%aXkB%mppj{=@5h_QAd|c{$R+q031T zLy3kU7AZ6(!4E=T(@G)C1c;Ujrr&AM6W(YgeQ9!2K)?eO8Chrn&0phTpm1>I=XR2t z#{X{KIX-gl>!3}#^$TgE{`{X6Zah)EgDm;G)Bh&7#zxfI=)d^&iAA~01s6iG@X!S6 zXs*<0rMCD`@5AT%OZZ}DkxFaZJJrXO+xXu{59%rXLM|@T_+5rv1&s;zQdT}b zF`|HKkYPO5xJ*IgdoKue`a4AJ@ z^6c%Z)4&aSC4gOP2vKo;$o&b@B?`0U-w~Q3|oVOVDRfwp_L_^Z>i&n4E`6Nik%Ze&@J&nAaXW;3)7bin6;TO-zQ0 z%bn${nMG$oh}!1sST0X3zC!cxtpFR*O6^d8f4cQK)OShIt0d>FLIqj|u?pc|kBDl)_hn4i$q{DIqC2_*c8Xs`m70B#9^aW=V)D@y#d7H@7D9kf_x zY1FIRIV>@3Y%IB4Eix>JlDGj~N3)96p=j=}d-IMiDAe_vG#3Ns8HXiFb-SQG?`5l{ zV$F4YbplY&%1SBX?YXrEBFFT1T=qq<2P4+tIbL9SAYEfCpyDw#1bBn{09AbudZ^|H zxK379bmBUEDyUgZwD21QE^dtQ6Zs>p$N&md&))}+3m~)^x7LI#u##<=!^4gg^z795YC; zv$A?YCm8Y2&C{V=fPgauJ3v(`LqfmBegT+BWfS7|gBw-e=xFB);i^*YxC-r6(8MSI z(C0KZ7#Uy&OpLmqb6Ajt@eF5!^?+DjOukR*-=ueL1R||4(ACdN5 zK&L=QMakPb!vxQDnTT(|k;4tfE8@ zH1(}lq#!ab>}3~&=d3~&E$C){7Rt-X!?8b1SIcqcH}*2n6BJHers$5Sz${ryWWFXSN!yj5Vs`E z8DtEnh){PC*H#QX`uKswz%01dyJ$^aS6bL?>ViU(7S=!d}O$_2g+}?d>K2AvXIN(@ia^19yMK zNluh_lyo4;oDEv#XIon?=ep$s(!e^nF#}&cx%&EQY9#&=&?#TwL6+L$*dQL@~fcj)Y1Hx0-KyrRZ zGh_{a_aJVB@cZy^U8Xr5P|OWjZWR&R4Y(vTFqsKmHK|CeaML@`mB2(s zxU(-7!CR@MAfE;Dv)^Hfde*0SGN=f1v`Zk5c5e|R2Y|;vmFsh8DX#Wf;s#LM?p%F! zAZ$JsTvnjT9$ps>2O)s>sCdu3TXf?Ks7uJ5Di;j85pV>+(EyYjqC+9?2Uj{oy{rzX zhx0Uk4Vr~mfr~=nqphbGpCg|^NXYAxr(p$b08htgq{2;I-^&Sz^zmk@2ylhWP+Q%J zOG!Wh@XV9yi620*hC)D*Z)I+7UVHo+j0AXk6UD-xNdk-*Vv+XWZ+0!;c8>Ls3dMXj6B zNFyxtsvThZwZOLZK*%K2oLd2B3Ho_I-G;%?mf;EF7S?;_tqI~HeU>5KS3=EXxRoyZ z(=CcmphT7K7#1Q;6bPpRTLTezkWN{ULcypfzhgHBLQglGXoz_@R94c}a9ax6#GsKq zl3o7@u45so5KOL|r!7F+tH8N>bt)_?+L!OBw zS=J{7mu-hXN#ZrSoF%RzPk6AYaUJGF$R80pyJpv*029Og9U5oP*2or@HA+$qf#?3#dwH{44`9kXg&M1-=64$h@G`ilV zod|y;ZSJK`9)RV!odNg#U zu>gS`u|{wKb=KOWI)0>`1FnyqB~4$ac@h`jWz}&e{sLYb^%-t;ievP?|I5#<`u&9G zkCtCfXEcpYw7+P7v(0(K7*D(K2GQZ2m{RTn`{Sn9!FuBSJAo8R>Fr1FaIn*}Vd0km zXr$S9Od}*8>8;`zgwbjRmD|iSr2c*Yq z_w6&V(hyVH&x3e7EQY&Qu z$4^T$tL=q58-go0#mXQZSRGh{fM3R+{(a)03%=`tD*zc6q1icCr!+tBB+}-6p_2e_ z?lBy5s20#|6LR8B#01QK@;kXnM8v4CsJCPIIN83F3j^&(OsIqf;K^m{8z4 zSe!lkJxJts$v2QTM*h9sZ#KrPz8ps$i|piwjc0gb7OBN))e(y+D2T4WVbP4=a5^&>6Z2Wl?T?jga|Fu*S z#GvZ=CwX+&INHau_qSJ|W*r^uZjA_$1gf@?o~wzxO4%zw}p_nR<>ryz*Tz zP`vas$u`ic>7AGfr!&ZI0owebh$6apNsc$h;~$rjkheNSt?5b?(#>H!286YnOh@K& z?F?!S8#~>1{*o>o5tt(4a3VllRh5GCp+0e==+VSlGWah!qZaUflw57rSJJYKJ2-$urB7Nz+*<~hDHF}T0VuiT(p$R2_7R*ezJIs?_kqI9Qc2s%g zQ=rhliC}W!3<|JyfKBHK=6S-hx53q7!uSK$7h?W&J1s!RCiq$EWY?gu>h@wJmPYfj zD|M1}B{$4>hxQj(va#yN52(!pYaVotR``83y~x>mXjHoTAZ$PlUH@r3)qSK}$%E`1 zE|>bR!_gJKBQNFXO;;k+_g|Niy3`&&{sUbJipJop5m*&!A0vh-T%f6^g}Z3b`2SSb z#Rr`K%r^%jf0qS^^7E^R56gR~+Elm{&xu8#u>;UVR#z~&A6=V34Y#)@hPhI=5I@;0 z{TtrS5V!2O9(=o(&N?;R)%w+2Yx3Jq-`u;DOL&Ecv-k$ag}^h60nhn6sd~$N(27p; zi(D&3JtO-YyRRI224=i`iUJF^Gq#4Sw~=B1I803dA9l9}B|}Bhj!^>(m#=iZRDD?T zgy5vRCaz3{sd8R5SIcgdmU{PR#^?C>_@n*mW3bit`S#A;5G}>JBza zJo|$S#^!JlG#WzRhVVvo8v?x$r8nZ0ws{O7+HC5BF|6&SLFn>vsoIEZ{<}JLXNx$e zV!a75Q12S*FPIeUW>)WI`s}>&aRuJFy_arNvY!|1wFul!%gz&gZRDQWg;d0wzpC=+ zb#Mn*+`*g;RYyuq;4*2vf zW{+~k^?p+O4*Yx7Y(HFhVi{m}O;)cMzmn_LV%fvN17okD32>5A46$7YIUh{Xl5<>)yD4dl(bsf&gB(vImzo1vAhme~!jF&e!dHPMAD@u(15MO$L|R{9GVMjs$=3NYhLZhM%d z&3)-i%@_X-HsoihTWOQe=_qB9jp;KuBZmAa@s*aeJ_`*d`Z4V(-En`QAQQf^1bk3j z^3)7qx#?vS6aO)o5cTra=^y0Kkf&WagF*-WdrKtIFs0bG(s-vxphT};%Mj}Tq(C92R)z`}L`Rr}9#*!+#(u7~6(q!7Z_m#?$W zZaHp1YUwjO9jn39_TVCdGc|RH5(jhdqEP=vYCo4# zxQ-jK?(d}&omEicuv1NK9|;%P{~lzbSEjgkub7whS>qVGHfqIV}BZa-s**&lEz znh_QvmGFZ=-utR{2bmWKUCi||)_^00%am`+J`T3n&9(I$n@8B(>SoU}<)uYk6#5sF z%I_rFw?EC6KQfz9t34>%h)`xu(LEg6B1B2~-#n4>(RGqopLTre+W9sfVu@p4$8*sC z^840*&()XLv-^)covu+emcJzw!;ahMUlLfCW5h6kmTn9f3HrqVU-5+H#KjVF9leP? zsgawgnvj1-;J*2hY{6E9+K4JkS7~mikYe%=BGmcF(`mXY&D@VGZEKm*tsB=WA!RGZ zMBk%3-B+q8-cDGvm)tA-?z2O~jpdlAtLIPGZtUrXew+e6gPVH0vZ)Wl)vKq! zqVXdP6PMYjH-X2cQ-s~8g9X$3@2|*@hi)y7e^QYC3>f~uKTlpNbdqIWVTz36#Z7p8 zM)c3WE&N@T6jy9yi{c={JWU<5L*0$#epmc09w8H~Ic*?7ecVX;hK)VJSi+5AP+1X+ zz7%7Y1@w>k(gU^+zOEiTD4$X!G%2Q*QHiE>6jk3fpAaFYL@`J$KcOKyd5|&aIV3 zej1ih2l2UYE9~BEbJuo<`|6%dg%34iqVb;ipE$)dD)D--DRru?X7q^_*dpsc=p_o6@1 zBY#S6Wm!yomD(2NTM-j`{k<=+ex9^v3;&F$$iH|e6q7DDS7DX7!M7EtoRT`|LWtV? zSGW8M<66D#iyibC;Jw%%9mN=ty?cKeQwH5-1dfB-h2{I@!@k2t{5aW!p9ocxTpg~h zylz%tRFBv4FR6EnDpfKUh}-?~a3)?X*%u{R{qM~w9lM2)-!`UA*6s3t_N&GGqWe?z zyDa^R*sTPO9N}^;p;Yn++&mjoc5`Or?WVRqo!`uEJTUF7lE*-0g`5UeWK?ly{Z`O4 zUyQj&3ZuHIPijGR=hvJ^)rEQjxg-~&i9TmLPTQLDZ~x_^WLaYA*4IclEbp&sg_7}~ zPiXJ&jjnX(bu$Xh`DT2Rt8vJ5Mr+hkuEOTVh*Fm1{Z1494G~lR{k>RxwYHqM)%F$p zq9wVI>X{i%)*qe1ZEMwfIH994I{!Y-E3WqVaP`L(Vn|CAD!uM0EsoO@Tygu6vRHht ze&alrtMpkj68syMH{ah)D0Z9T7KQ=$>4GGt?pn@J=-XQTR5a&`+Z~Md@0C|c&>RlI z=v9448@Idj(Dayd&cIzPrh*CQ(QBKa@z@EDl8&{cwX`GK`6674M{*q4s28Vr0$s6pU z#u4)Ei)SEnDgH}#8n>e5O^zSS4K8Pk4#=D4#td&Z$BIo~ddwds@8ejuKL(TEO`n=y z$XMES&c*tnJ>hCuQC52L37MXxh~I#|#Br>!VNSa=x-(4eLNPk^=p=p@JG1*lkC9+CCEe?Hv)IMwkD-r{4EPd#UV z9eMQ}`phX@stFI9OFs0C_gJycny%&+KlZ>5uWj7C|G6A1N*1dv?cvd2<6?;3H(!Mp4j=1c1poFji_XUArFXl7yuseJ)Nxg_ z+drX&juI0U@FP|P`CvgdH=}3?>)MnJ^MRo;>3okb0*9ejl6_}X81%v){~PfsC=q0{ zHX0D#dH;8K>DJp0dGd%P$mk{YYm?#Wy8Kbj)XSgYGvt%(FLx)oT3%Dwdb3qV;AASy zAO4Fa9KWYEGpO1^u=BV4|2otZ8GMXCi=!=UcZh=Sr(~xPirL?h`Aq7+_sLyFI7R1f zrIMEv54i`Y+XB^WtEVGMH`kA>}~w83>W?-%-}!<&cRSy zU%HP@4w+7}neJ*uUM>Q0`fQXHiM&VoYgP}mrRi|~=Ni`yo@b@;d`PZUQWEK^<{0IJuSG> zh-HNdh5mF3R%*hTO!2ivHLBBu|8|~}#&RM&Bl`F><&VigdRqIjI>eo+uS4ze2&3a0 zU{mxNMkGpV3EQCGpDvV3FlWrIn%hnt>~19`NA zN{Og(#eKe_-P~U@x((;AmK$YxKNVVG@*aPW=IHlS>N0;xD8~3B_AS2g#Gghpj6^gh zzz@syt=t)1jQd{?*5S_|xRK_$7ioRnX#I!Q`;GNN$E1rAGI*-mrDr-Sa5ZyX9YPI@ zpPcy~t$$G7P<3mG$$BqBPP6wciZ)9+>f{(Gq8_m_{rK#)z^Wl-E@_+;lLjo~CmPT;v4q4B@_dEUmuFW;0LYBh_ zb|WF*k-dieV)m7pV9efbx|yNBjwPya#U?e#aMITIP~uFD;=f})K5o6%75jO-#n+R7 z6)(<104DaqknTN-ga7>QIHI(m_Oc2qxt*p|+!XGvi1p+Yq=S97d?0%+mlgsT6zyZSNC*gn=*~3I$MCLDc=(aV_l^H}qp1o4s(MoeutI_e# zSuqri_GyOF2z6zmsxp(a{C0rWfFEL z4LDdlVW(&=54plDy%7Ju4#$0|0#_q1P3^TGM}T`23|x@>`z|hacgCL0PvbLa|%F9;Bksr?sPp#+u+^ulDYw{m4xg_{%`DsH;T( zhFf$`(~vtuA|>^5m9HHK@*Apuzp2E~G%Q@-e4xU1Fdh#-`}q%Qt63}ZV_UZ6OzD2V zbRj|IOwH?mF+X3l!Deu-i6OGt<3csYV{CK&tLDt8i*O+T8D7@FI;G#a*+`20xx5P5 zJ6gFj62jQ1{!=boGtb(4Peb_TOi$%}LBdSCoZvTU+-H}T)ED1VnOH9Vfzw*Xe z*LIp4HexEHZZU~!-$b1fJ2a1mw|~3*`-773H5L5r(N9|3yDRib17pcg`LQwnyE&Du zoHL!y84!4 zlT>cECLy>bt6Xa9(+7Y54i#|kG;T9Xbg&+qi5!i(YFEr<$7Zyp{Vh#Ybh9v?KaOd7 zI#D|X`<8e$VDIq_WF2mOG2W&T%&+6fkR*;$P-)9)^)hF3qw8Na9QSu!Ol`=RQSqR+ zJNIaH9c5tj-xbg|+3s?pajVO=2Fv@+ki&7^b4G z>h57IENoNwbi10*h)Vhf=Rx7PEDowDGI$Pj^;5nS5Png zPXkTOx?c#J6b9>0ouI2OdQ}yR(<0D4=XQ)WC5mGm;{GhVOc+Cze5a$04O@d@KutKx zH>dONe0U%H0klWlA=|=eyUiC(XX4}=w0SS4sAU%YSP{M$F~yG^u9p8JR@c;|U+7{~ z$1JZ{!l-oluuZPAr8l*L$IWNvc8^j0W+e#+tIxq$eg+OFZ8d9aN$0b!%TO=-2)Mma}bsC?kCFmTTtA!N_& zeMI&O9UOb_kv)&|f8OZx?f*NkUZ0WUJ)Utt*FCQ5K3;kZXDu%&`8jX>;4ZLGFqo&R zR%>UC71rYYsk3P&N6^yhR`dzzH7`UvN#3=6)IXYToaw2^EA#i!|hBXqzN?rDLoh7i9 zejg$ebq||KkJFA;U()ATI2DwWr$=%f3M<*aD9(%eahd5RD%tY*Xun5TrRKmRn(Fvu zdfas@L-{p)N88ZVl~ozme)FS;eZw!t73Gry zXa==#?d4yw3JvulpYa*$R*|t~Bg`q+zQ2^L(Mw!$!zlHZk`1{_tJz9d zW;sj(Sa=OYb-f@Zn=t6e;h#LY?}$l+d@qm594Vt0$-?n9I}*yBiCFbM?e4Fn>vVta z(9rjTP;^M10Npv+FQ1D?U9s*OjQ>CTQe61k+UL=fmVLvDa0j>5LIus^$EP;s{N&;@ ztFmq#H}CLps&#t73Biyb=dK81@x`kNrcO88JXHQ_b+$(4`!#laSPGCqfOd1X%C{$0 zyM0Bi7GaLW%yiV3{BW>Y@avno@~mfc>#-MT{<+q-)%wfctLtUqi}mZ`5F-9-W0{EU9(4n2RxPU$ z{I5M#uDc^Ch86F@YGid4Mig>xS~BAuF#;BkGj3qlwq)Ro!WgfdA1qJr^JDcrjTLzI z2VhCY^B`c(Go^ve6{@8<-TG(APjG+@6MX~%s^CMTZT5spKCFViSd7spgQ`(`Dx=ze zB`b!~o7THn^H)6;!~X_?<3jJRin6}il+m%_HK9SgX0D;e;iK4w99gboxp0c_8&k8T2{jZQdi8Gsy3u-DO2jCa{32?YUQtHKV>&6cZ zSo>Mbh{L=0zCnCBn1)=}SW8&Uubob|zgr{pWmxuaH{eZ7 zE~YwC=u{MkcOB<{2Ds)jCXdmdAXTI;fJn3dEDqd|nI5A#kFIZ9cB5dlnCB?$>xpN!NF%a<)!3OR*VX8ma^_nUDz51m0!^ z9xB$^(d7H{7|k<|9M?RteHGS~UWDd2+UG&V8m*dlXG%oYH(UF#gCHcN$_!r6@RPt7 zE-TaRH~t_z+i#f*_7#{nPh&4q={= zcA(rJ;PECCo!az!w|D_e z{oj?tn7kHJ)w#~4T~^k6(3k>uFcsdFFjK!5-)f~?SF9Os|6;ZynndpC%{+$AQrnhkH?nePWihT1U-4@>M}K-i(N zpN%pwWjFoLvQ3^nh#L6t{!6-bCcAzRZQ$-B6czY>+*z6NpoP*K8vAqmQ}OwzxuROO zMgKt@uzui7_M2^hC*fgXc;cP`_7*7+O90{N>TE{uxuDMC(57kT1)5@js|u{nR`+HP zxPjwUiO|yCe%9PbdqQ6sboL^(Y~X(jqvi3C+^}QuR$j6Qun?8PYivgab32`DsCMC; zug;j>W=yn~JXb)>7h1KRO23iA()uP}FC`WvvJ!5qEl6=6ZFJYU;2 z34b&Kjf^Pwd$0#u&Z2pq6!rvHv3NwU14Adg_qhT%f~_(dAh&allSS}*eZ@^1xZnd{ zYMdPkI7{ELQNga9r71iG2H)F=l~`GKf?ytqxHpr4t&e*?IEt-Ro=JVx-;tHMk&eW& zg+Cc#M35s6UX}H3Y^vgfG@&Y9-Enf(5kO8IMVhEc-EPm3n0k*_YNu!!`=n@vE!z5x}pUC zcnF`oHd|*i@{)4cwaQ9*pI*CI#<+yy(fjF)VPJYb?_&2r5V5oB<75PPUzZ@5e+@uY zh8Y1$E4ZzQkU8n^O*TVQVlJBEe_qKoBA8hr5K zm>mZcrvB%I{SZ%H+jr1+%RQx1{Tu6{3+>d>>gw>GV5l4xO=i0`FSPueKUNxA3<8cAQB>IOGq@I<7i4zCd-9`Ku; zNbeuFF+^{%8Q%Z*it%8CW+v&uFX_+zmH~b$lvh24&tS6nbG5adqB)Lbnj>Wxh-?Y! zQ^AYUh=G5APhnqecD&=&hWx`7^RYWQ3I8m~K>85+R>S3hU3D%JM1pR6l|L2ad^ak# zboyh!{MYkOm^wOG+?ROV>BRe=w)I<<`G6EA$RoH}mH(-?$kzP+l;Iee$m(vsHD@y$ ziB!87SPImAU3ZHD68YAv|0I(dYvVQK94YdE1vEaG`a-EBBRWNDKovE{FjXNI;-<@| zadm*&Hh*)~nqbG-Hxi@H6f#CRt<=Yl2g|HCl;IoX$S6@Po-wj9)LNqgs%xEyk7h-6 z*DM{dG37?>WV_YBIaZ5_v|N#)LI@4&r|PB-9Y|PGG0 z(l2#r-@tGq&Brd|X7kEbJ0#nIfDK>NDKLcg1o+(aYj)Feo0dSBPWeB6avBfwKa1Xp zNKUO@sK-+qQjK**8C6?~Bxrz}{oO`^5y9*}Ad_6ZOopu_c&o}j$HBext|+X|{CuxG zQ3-Bih~(dM*km)3$G%}1RT`buo!OtD9FXPJAIf98bD^%_d}YQjeMUUS!{U^~oL;r% zOH6ycs8CC=5mjDXa~f|fc{ZfkmKOn~X#OJ2Pw{QYNE>-9>9IFC&jg4W`jEuBW10zX zQQ}X;hMtO1Bo`Xsfqah|BNWM|;olI~0Xb+#;%pM@wry@L6Ke)w)j@V8Ne1)7LdXT! zMftNGl(s~QXb{N_y=fiLCs}zs&HeO2I6bFVzi|Z=UHN-Hd~_ghTIJfxcnW**?xrx+37`cs?iVl|2n!TvmZWeNva<#ax=$m_nP*LoxJ*+O{3=$}^v`!jr+yEK; zqGx6_jwoMN>_h0$6R1vI66PrTUhWJwz~4dfQ9_GH%ni5$0I7b}G!!9A<^Wi3asL^~L*wVig&S>V4J1x%;QaWz5fo{d z0owVv)H4H5WTE82y*W7;&}`nFJF6>!1~>fc;}NyAU91OihghM;DXThtWIp*YljyFV zpc32$t4u`)g4ur$^>-}S2qoi4TBDPlxpr`rUqlDvO$Fuk+NR2@TV*AvcUFN!Z87d< zdNwqGWPE}b>v?}p3qGi0{H?E%FOc%Uqto>$*a2-mEYhQ)0?*L%uyP{=B>RAW!N33Q zcv&&W4dsorw~LpVWQS$Lg?W%D+cJ>CT;5e1dJ>($oZ!!Fq7pl9mRB7Gd0kqwXKwZsDN=9jaK;i+US4{chQ|MN^w zn-qSm@DDCs2nJ-g2Jh~_uP=MayC)3~KRQgZ-&S`>rlCd3TQJp$6b4HA?6nQu4sHx0yke;HZqt4zP(c->A91Dg1&m$~E zqI{#AbpGjwZ%DJ<4QmwWs56U;A{On^eEvDo6tM*NXadF1B=aD(u9`5kw_tT_JdH|t z{wp;Tgh2|=0zfn#i>|Syq#+-{{qkJ~RJ#|~nNmP@CsKiJ?~VUELxTSuQwPgPp~3DQ z3F;d`d-qG3R#}2-jB-4t38Db3Re1#_9rs}6RGI5QHq8aoJMM^>&|%jhmWOA!tn7%( zz4}ptYlD$WKhNHce^$sRcpyL4FnTBf?ojLE;n*PME(*>kkjil{6UHY1#{MrDK8eD{ z;;}Spit4!gIx+4Q`m4UKSIE6}HU&MQoAL{k0~8$y&(BEh)Cezz#Tjdv_`(z_euj1 z_<<2GcL9x0QW^o0_v9t|2V{CW`KKq_?mp5!v!@&U;nVALA5S(%5t&K_bigBK7N zfY?rjQVJk7?1)hx{u*-UmhXcqIH6W95c~5*_ZlFPfg)L`Nsbs6!h8pj@4f?cCGOw9 z|2@wRhZ8C*{3YvLZX!}li(z<#xe98OcJKN4m;D6U&XO(j_XyB{{2;0617Fp?v-6YJ|^>dYgd!0 zy?3$(A}pwnUqSk0hMYl`KS#7!@62i3m+Q-j`TQ9;6*fTJj@q^A9(8h()Tf!dm{Ns-_PKTj=Nnd2pEhFynhw%~8dG4Aw%5amL7j|thJl_+7 zlIs^2>m5NoH0X}CIV8y(srJ3VJsWXYGk#R_A|w&WZmc^GR6%vJmzyDh$g6~V`Tbkvin7Pb3u-_k*S7hin(vIz9zX2YOS}a_#q91I0id1C2=r_?$(_Qe zK4Da5;$fz9jS%7KYcYQp7a_CMa_QE55C{CY+=FKI)PvkKPaCJR;ll*C;-=}iJL?Q| z*dSGRcHVuB=&{0AGEj*ys1Vn$a8(H$H7|jBaJ-8-oscA>N_I-`)#0I}kT?P=!GY1$ zJ10Z}ki!T(F$!WxJ>@+ePIA7`!HS7+)kMqS;2{6_K^JizFC3_fyeLB*%`gZ*0+qnW zNB~MaiDd}(Q|ff>fS~ZFAJt_ecCux|f}2l>B!KGTM%ER-WHAe=H2be*;=TR6b(d-f%{xv|GHsM%@O06$T zK^p(&C6zQdk_K@GU_;OS6C0`pv+up=S% zWWEUhORvMNZ9+Er)6^UYYq!*ojEuae1F4bay>AeC?|XcJg3C}}Klc!zVgprj9!jSf zAoS-p%dD^2fy5xY3M`1BJ1CgTcamQ~>%l2z$6Oj5;Z^&YoLyMmZzW3+IT~f;fd0^^ zATQ?~T}=;F>y>(V?Dv=TEotx;h`XzRq_w&QK}L!GlTqd)m;0`gs=KLO^VCS8xWD05;wS51~&< zX-^j*T3nWb6b`M*w3#BYdHG>&Vby++4=QGT?np}21JO283S=)DCkLXA{|E&_&aXOCSS!t@u9IW@T`i}u zr{sfcj|RX5D#6KxyFczYIm4g>oNf|IG}#z+*4Q)ec~Ku5{0N0em7OVw0YTs7_1?p-?zaUM?2@U+G6cV_vIvPOU+LWp3)vaQhv)7UhSs9vV9 z`Q>!o;MW^IDYu_4fD04PUh4KBDy^msw1va*$#MD^shz7QOIR>oddMjvy%A}Vo zp4|eO9ZD}49k^`IH&&R$E7SQh-{Zj>zWDwyc&?fA@A#9md^ZKN;2=LsEbg*f5#xv6 zo2hG*qi^sEMdx#>hTbnaxCmJbh`xPjw~VpwvIR?}q-hv^YHvMW-B!Gt zsuker0TLBlryJDn1D&n;mayu~s={})MH5U}yh|7AZ)dXKBqZ5&qc!Jtx$K?tCt+;W z;loKc*2Ql_{4_eNIA$OT<+dk-*gh%u_n(+CYVA9))r{VWtG&Id**G-~*&1ZDt#&hOy zEdwGLwulJtF;iq4fH(Qp6Q0z7#U*^$6T*gykq{Oy?YcZgBEL@(&p3W&Z3AAqpuODe zUZg!qO!So?xiZAD*w<%cN8L>QpmF3e43yX3k^G=fBq6-TDGUu$^0lvk*vzeg0Uf53$>b=xAmam@ZX+(5-U-5DUm1^Lv zm>>~T_JNL%{7z)Vd?h62{MtdAYzo0(;LE!%9 z3wU-w13J{%4<}i1N&J3#Q_rLlaS`4U!|-oay)(V^wGJu5C;U`l>UV!Ub;<^kOr95h z5j_+IR5C#7f@c|1fCif=YV@?nap(APr$l!xSZ&M1agpr-M%~LDgCwgsI>q1F&&O5! zxnGaHE1hs|T*BwO(e&h>pUV5LbvyLkqrP_qb|vJk*KEziW%hk9;eD?cA>)wrH;|Z1 z7JinE;I0mo;5i1sNFweOs`#9+-#_%;zG(&+87e%_Gp2jjmMaaHui!qkvj;{L0}D$t z6ymNyu={&6MB8FH+?SxMbf~IHxCJP1A%f+mMFwX;nHhnfgqZ&QR^Lh|)unf4{LW(D zn_`p%tsuL+UbJ^>5c8{V5Eh61B+vN`jbyjm+G`w8g9?ON#x{Z-DXMy3=6}r7(mndH z{qiM=`!|l@X$f_?PRCu=hp--_MawkqQX zt+N&~?J9Kg2RQRE7gD*n`^RJP=aSQ>@C1cGtMH3X7@re$O8-Ia2Dd?&C;fNk93T z`H&{F3NinM@8RmCyP~Z5o5a_ZU5`{<2L2qmg_%2#3zcM>4;mn2nHMi}ntiPC%~GuHz2iYwPVr z%?8)rfv`6abbvQtRsb$(;_*78|4Wl3%WzK{hZ8K0++cjHxX!t^SG?oIJv(12i)a)F zsV4)o_U3{xY1-U$&iJ}D5n+?903}*7<~lh%w8@sj`p{hPE=>-?TyGRNZ+sQ{xr^kn zw5<~sJ1%PYXf&=8#eYaUyi(dDssjHuR-SWB_=OJ14)(9*9d2wa$IVA$etb^6wrs{qkiBDRPr$`$nASIVr^GkM@UWRwCsIPBg+#|`HnRB=h#mtL@t=K9o6+vbpsstE z#nsiW9e02uyIWbt;%E=dhJgrj)3-v$cwiyAJ6W+RL#-+!YHw?%mfnpQ2mWT(hS~R~7_n*gtFRX$;67h~?P}J43#1~a*>hBwfU;_{$|w-ig<3ld zQ=vd94&PiDgp5YDqxkv2{W!k5IyJ}?-o8-JAYPK;pqJ~AuvYE^lD&0gWYIE`ck3(3 zCn?5Vwroj3+m-v#fa2)EkTMQBsW$5rN>8Y-Er4s((G*5LW5&AI5VJ-DgK;)}CebF8 z=-D_jnL9Xy@9?|7syXeQBsTBl?pj|aE&ktcHGp8d=XKt`=dXIX1n0s)?bjP?C!pFx z{kjz}Prt9)hKyg}uo#*t8tH+YlE)b|UnH=xFbr_PuiykL0GiV2(r5yPyX$^5bY3nC z)zkD_5;_Bwd~5q7J1NK#UkPQkrXXa~Dvf;x?nid9t9bDJ8=OU`AIuwTKqh72iR*m9 z<~s2Xvy^8WVg|op19Vtf?nO=gv)8*iTO+WZ1Gkkn{(e1pbjI7v@bP6>lc(n=)^ec7 z6b%0Z`daDkH38bQ+YX{x=Pf|(mevb^RJ812*qRe*vOY&7@0$i~B^Y;fcpH+)Zvk^$U08zae=sDql@*X z(S%oF2HuyvalsyP+X&DXn5!SCo_iQKGFt)CU%&-941<;#KzHLyzY1TgK>FUO7`1j{Ag^Ny&AMpc`3JlB*GS<$icG7yIbfyp7Tpe(I zUa&z|1gA~S0j0-cwEJR=Y#v}312I+OKS|?&(@U|H|1o(X62t;%_E=B%!Nf-aZ-%}) zE^h(v&WobN-hJ))c^C#1D(wldlpUx?#_PnRk^GaT`~;waGwk9m&@H?f8ge`f1X%7z zODSzbTxxH}aj5q$YNVU8FK%1-1TcZe_G$r~s$r-;g8C9dJr0|7fNNCyCOn9s*#z2v zF`A2FX6QV3JN+=hSmO|5C+8LRm=rCdDZF((Bnacd$Y>d~`_`d}1FEuHm>z#HAy5G9 z--Khw)-lBYjR!8yG$;(KUq4w}PbhHxV+-VG2ilxPj;=*yFfLpqP3=%3k9Ie zK4>R^j%jxU%~PYws*OL{HXEKk$2}*WbsbPP;}I2&HmX4RIG}gkooNJxC~;|LPy*`~ z)tE`1Hvac$E_vSn`rbwj>QWI>)?W>}hv$_~`GYP>3jimNgVw6Rubztkg7pWQP&{|j8z9!>4Ss` z6niYYCKn6{t8(cfuJra*#tQEls&`8!W%aetS*r;(L`iDHHbbvpH$J@_;{*uezUxnp zc8U3k@5=4@t__Xngjqdn09!My8z8Qy)x^EMV%`nWVh z{B~(s&1$Z-+cJKn|g$Zh5C#$y^28kyC|AKPLwF|`Czoc}z0#}2!9yrQ@dWPRUUAufwn;|Gs!+8GnNTJxMhxQI%z5CN}69xbI_LH&p zEeA6RJtSbWWER+p#LR=@_pdbPzZT}$-eKKF8J`4Iya!^OCAhurm3Xr+XVHAQ()03; z_vNmOu$OUXrAP0?cOI05v=3}rs7mr4tbjr)0G+VFL)D2Szf_rf{)}WO(K4DxKrFeD z@qd@|6Lq!IncA<>c4-}z_Pb$#bqPpSTmk<8A6zD(q7F|E?_Vcbw?UT`8eo#o$PEUH zh}T)OPiZO`q^V`v<1eN_PT1d3RY5)4=^Y4n=Gl`;z~KKbeVG=f7*VJIAu3o5MUShB zi$m_nqiuJ3nlDD=nBGo#AUlNpcfMlPx!U7J95~w53hn0Wb~FFECr*}$>Z@+1ijTjz zz5Ar0y!;u>s;<8S)mLGs9@*=4pZ>>8?a{D1~4jE88DIi=f9~k-5B)z zO4b*h%=q;8HepD>$!HQu!kfZ?r8Vc4`MP_cve|05EH;ZwB_}6-6nLNy)j{Nv7q$J| zgtLGJM|l6op*muDGC9CM9*<)fpBf*uEjm$k+4FTf0)KNOvoc>xuq<{YKG6B=oNQd& z9l1bwN(BY+FVulfei*RQ*@yW^j?lKk=jozYiN{87 z=lKWVO9W_+;~r{a{yQP9@S$o8J;9|GE;wfoACI*ZSDJFZK-0ZR_S3*>`_I<(&tJ;3>fYiU)__|uc2O8 zKjRD6F>!j+Y*0@W!!t6lApYAa^2Xl_w>?C!R479}#G6 z>Vlp=unr%)FAh!(bhRXG>p^=%3dnk`?D_7dZOww*y7=b}x}BoVp`tMht9u+Oz-q%ELr^#}T+QM0u3V!J|*;6eXd%jQKqv8#)$%vP7$3>(Y46 z+^Q=BK^SF++8F!+T46q=Qs#dDbUEzry=k_sm-F2%9)4?ho5Pah=A7%GWJwm%`1{mI zWJCx;*MiCP!-1Mp4{fTKg3z2LDk!f_t%zgc#8)nkF$@@t1Lzb3^Hsc}*nb$O7V4+F zo~DPELJdijG~wJr6tOB`z=%3;l7a8k;kMT=NvUtG1@BUh_*RGS)s8Q_!PQ6A}EMa0Udq$D7AvroSEK02O3t0n5@>T3vZ3PWfW2lg@moE`?+ zV~72PCUr_6QSj%>e1xE1Znj!O)tKroJxmmf_KQoN7)6MarqWe zg4ZM`GCT{=Bl>TL9_E|+X3xBbDPB4s;hvbXjTN1NR<)-5i%k3^66B=5bN?Li26Mne zvJQH4E1bb;@6ZZaWN?YwjDo-a13gR*bkv4sw4;^(24SPU^}-zLY7B$eH1f*dbNOYr zMj5H#?e$p@{xR-;Z#eu74CwhWXfP+f)B42h&=CODV3L&o_A@7gx#SI{mdKIt2*Jy~ zP?6#J!sl>dO0w&{l!If;j1;$sZn1fr1>nvNo7<;&yKk5bhH&vKWww_M z*=YX*2rrd(zO-UtsS-XV2d`~_E7#;l10EgL5XNc(f>J2zz4n9_gS$qtxQzbX%(Q@2 ze#SwM!E;&|?^$;(3LlA&5RA;th!n)YhRW^Efk&FYoqpjivSd4{b-0_|+^RP$?CQ+H ze|9Ct+)U%>SZi;1v~d2r{D!nGQrRHmpYxuhWK*s7P(8c#;thoIHe+O}3|IP;1yJMt z58S0GgVlO`AmhNn>~ecpU9foy@%!37FtUGlrZ4;YOtwb_Uk{-CC+)6iA(g+10Hb$~ z13mBkJ{(p%e4@3>;y|AzQG#>XTUqLVsM6D{59LtiAq8L2Tv0*!>|~@-&;Ca4-|KvR z6+oS{>Lm`cpQBs}_Qt~N5Kh~Ru@Ioo^u>I`oU)=YLT{xj#3k#%D> z;-6zoF64yZ&{)CHgvoGHon%URs&M{C%M*7nL{J0+`ZR<(ZqB^>wxVgFuM$KuR;>v5 zMZ4mRe%K(xeulXWWay6=cqwyOR7u7P72VPhS!U^{h&26FL`nI!8yBk!_OJ@PTnK%5 zV5+y*dK0Q}`)gmWBPVlK?pbK=beL}~rIjXg8Udu#4FHeg*$Gt_(c&U8&)lO!RQSoU zOu*{*M{`odEp}6t?(YH*UqtvpNbCy4zvf`Y&WC5Qs5zjT@@A6gYlP*g<%=R&)@PN7 ze4I0WGdZ=S5E`RcwnY=>L12>i2>5y;Lxl$h(0H4^MQKV7EZOBqeI zM*MHFiNDeBaTA*6yzFh!a~C7&bo|!-0PNXo?&IopInc+aptXr9P!vvGIl7adg%C|q zTCuniHJ^k4-Zdl8IBx8^5@RWSoiBbT|JFRuvtVVUZstm+QHZfmkOqIc+MtGmTG;U;Vwf*@)h-mDfYbXD(K^WI#TdJ|^ zrNO9`h8DQfKNzi5;s0PXhi~q-HLp=uY}X4^yK^PCZc~(6FNS!qK?qHEJCEUH`d3nc ziNYl31y9W+umphp+RlJ~)f?0Zn$Ko4UN&m`&l2^~2|diyRTLlY&LBY~s_T%oZl4Bo z&(M`zWJUHIHd!ht5C3^Nu;J{y{QIN*z;fGzmN*Z!?wnv}V4oz<_mbtDo}l_8r{Z=Y zB{5pE;cF7X6fnlbQ@6liNPNe1gEc_O&09Lq^OL3B1ne(JmrL5exiJOT2+T^6d2z|x zBK#uef5#FZcuTfgH(PP(g#YtPxj^AX7hcOOBuI5ghXWw+-RQF$#i~BdTd90GFcSH? z!IFoG#wd=0_kSsF4k9iep>x_TM8c*0s2EjTScsJHusV@c?7v+NlVuCVR{IzO{hRwe*<5O zr1u;+P99#Kzpi*&#J%|6aQNa<5n7dEBtd6o7(kQY+b>%tSS5Lu*l%6(Uh)3-tKcF9 zbTmenDER+-drqTY*!5j$tden}RHg0TFaBrcn7OSfoL5+R@@Q~_lH~n9LubH!MOK#! zb)RMrM8>z%;)E~A6~EA{e{tkLW~BMTVqTzg)Ae>@=+*dLHH(w{m|zb&IX}v3I!ZKh z6(QKw+uVy`{dsRQr^qnZ@b^c79%XCs#OaG;_q(?y$h>;CUgD>4m*zjfpp~n3hofga z(#@Pf6U6HbocM(-TT-58cA!OLVR}Jrc#%bl8ZIV21y<;|1Zfu1oYl$(F$6y4?rh?t zYh!qMAQkqj{HcpZ<)~HJFslnm-L;*_NL_Lr1Sl@ic9J?}f4^cZdQJqycZ>^spN-C1 z%^R4ckeBuC4!tW$dKx6%yJ!zWvfS%me0hH|R3kvK*_Qn;0rJ5Ffo|569~mGevao;_ zbQXl`Xa$}ktw6*(Ya~um*+$6@ZHEt%=zx{-zlD?YQ4O=}s&WI^Nnpsh0<;mUF5+=8vdA)e36p9wBu}SAxx1?o)DzaY2qB4w(8(Anhj$7MM##nLUoc; z6%|2wSp&;GY3om%5~yny4N`hC5atbED8vxD%P(ok7t(4JJG0C*JZ_ZF<-M$aJ7qZ& zV=5hHQQTvYtMfI7jf;eVaUeIhET~E=L^;lH@P%?Kb$?;! z*zPKp;gl+q!VY$DvZ({f5cgFqllc%>-_n9-0n#GaM5J8$(x3(RWp9b$w|6Q55uf4D zYeRFPE)bZN#4x02?%S~TzW05D+>D}mBQ3ul#B8*3=fL`@WFEaSzF=FUxTp?tXXLU$ z=6!{|5z9NyX)L&I{fN67C=z9?aK&4BtL9=8^1g89BWRkY9}s|j0h44V zK(-modeM3d%w&_V5tBYVrT|6vpr6R;wh=AmGj-{qE7KqQ(+`K7A&g^o9 zVs^8=VKzD%g3O3|k3$7xg$prqPFRK+f`@DsKlyuE6d$*gzn#Kb(%Xnrs4Bnq5Ivf3 zeeNQx=!_^n%}UVfC2gl3wxUpYQL{7*B(l7Lc1hc_)WWi7ZZAs?bIf<-#y1{;nA!C6 z6gozBdlDE&yQ>ozXwUnRWm{`yRiorp$QR2qd`|2N1m70l6{Az!v62eYd&_fr-YU_> z-WV$gu1=g^o&3puLDZq`+9jCrDZ#mJur<8;wQjnL8_zmH>;gDVS6>asFY|RqbCa`M zimT%M5$G)7rop8ZmzN??2a} zvf-v!v{^V<$eUmTezk~%CII;TsYf+yZAa>*(fC65_+xUbJyKo795srbW8-qts61}L zx3sx5TLDGSrplmr9S0kq{&F#VgsSU>vEl0az-CGHLE)SY)u*dG9V98cG)5mN9{-*5 zKp!v$VzQWtzfPX%g}I3 zN~9$NV#}Z5?XRw_qpd^2IYCpQ1430KiMQ0dzhB_!3_A(~?)FJ8s#;yV?l!n*GGp5S z-bKI&QY6xcmikvCCw^W5j88v*lG!%)&kIIAk<_*Qgj!yGtgN@ja7L=Da!B8_On5+TUg&gdYZGvBVu+~wzu`|>+Bza)}t~~BFP80 z5436zlMvPXY}aJgKL`$M7gB=leZGlh`q0uze!4#z?&~ZzEN)V>o8;!K_zB3*S3X5I z2Q!zNLYgoCJ{$13qBT2u!>*K1Z*gL}U#Lb+gO){^y_-@N_?f5sJ%Vn1 z9yuwxm9X+%?h~hN@5RM7wAP|)it?^FcZ6Wn8+Z>mn&hCf;Hw3A8lVs(^<&Y%&#Ta~ z6}bH#x!(xVjTL4t@r^Icxc$KQ@=p%BA=-QmMwG0z3$TQzU&P+libxb?*QQm1i4%y> z;6M=?-jfb1HfgcAv_dcD9^FT^OIpr zj2IQ{?&&qio`BTi{HyqxcSc)r#>|@Qb9&$p7d65?jU<8c{p|BW5oeF9hPo>16`WTK ze;t}K>&Jb|0C|E|mx_yl?*>7jwC&W+KBaNv)jitQvKzme{Nu&UE2nj8mq=^%dScqD zmIM=HT!zTb4(zs{9 z&KDASOZ`y#KqZg8h9)4Zz$E*3Q zwOjg5!rfHuV6N62eRs#S3##dc4LQgY@n%~Q9JcCF!_RB@YAjp#csb>^RoBK6tGH^svP5j5+SIh7U}v3Y^;P{RMQhMJ9@h)76lfJ2PvB+$pj}$i-@I1&RCK6 z)@QRlz7N4)WI0d>NU8))0bg(>2Gnw&?RnnY3Y%lBDeTm)It+4qqK_dchG)bZ%I9Z&xti+*$LIS{?_>N>ajhQg*r|8FR*T zmA&*x`16Tl^Y3kRnLPG}c{f9raNwBNCtp49U>67a@D7vK(=@g89^Dut??= zRy~715oxId-&N%12aCd@-8k9@lM00J6HmCr`watj)IEq#I^mk=ERc==gXy6NT-E+X zZy>mi&U)RAH-4!0z33{f_sl!d8&x@x#vh8>tc10V=2V_$c^~0W-WOUFXO$G*$^6sh znCF4WM?3F#qn#F%V~IgXr$Y-F&M3NNEDskoA&)xQPHYSrv)#VagZ>yyA?rAD&0(F* zSPjO31HH(w-Gs>7nb1OpA2;~o@e+g8vH_gwk?b2Q$sTl~2&L@6rn)Z}gN^n1@kXY^ zI+n(x9dY(zD@PC~L?Dv7O&sj4SJE(h3r+6ZZE#LC;gEwkn&0Nn{Ke$mq>P<~zC7p6 z5mt3sEEwHPHqbE!QD0gDq^CjLfEm9&1d$1ELeVjH+HB_62wHL&?5q~RSdmc|1i4!*v9jk?-HzBL>=eQ% znGQdYHpT(MqN`+&#CN&MCt~hkib3T#3^bzu#*P_<`B~mJL%2+D&~#^>n1@7ad9;_= z1)FZbRk~>7cBcezLr=AAKt?;`7BLz{WBvr|vr1bTlkdpkxH8OqP52 zdg*n30tg$)-AzQFg9saOW5*tSLM9j2JBE^tAfJF^ei`?7b@EMn4;Hbpw)9%K>AF-6 zf*_v+?!npz0WB3ipd{=eWw z@Z;uokdQ>)Fzf{pxU+L;;v-P8y!|0SAt>b$j(11iendIIH%~sqc%Z5`e-s+E7d=yt z&Yxwb)>=f_9P;QG#kiha6hUI6P5|x*EE;ku*^M6Z!BcmOTBqx%tWfW|vq#@rLzh`= zuGf>3uvM(CIo8_up?6y(Huq%`spuW?pp3$*>xtK!4;a%p`ZmW{Q1V5;4mFswBunOr zdU#1;p7C2gXYWIo_eJHNMPJV0)>0$xrRnVJBp$}Lvlp3DOr?+&wSDj+eNgfSvSee4 zyH=~I1XjE%hVo4nSDn zB-=jBGOl6(6BbAbo%??xn!34?C9efIM3NpnxFDtCpdNLCc(!8^dZ3cY(m7S7+HO5EZJwbPo9Ooyl-5t3nt4JsT** ztz-&}{wb6CauozxjR)lNDvgp}*W4C;`qK;si?F<_po#(Wlvk;*k0VJQ%7|JkOzf;T zYjDbNWmVW^KvD0wlx-iD?S#98t=N#PxHr;+ML{}VssS(8+Z9jft*VLMtH~=(ab627 z4O$%=?Box=$qgbMo`szYnb0fw?MJ)?$z3({%Qp*#+U}1N;5JeOu?$WiPjV7+2o_#x z;ZxG8jBBdhS^aDoh(zrW5*CpMp@p;emwv^RZT3rP2cVz#ygyL`KUyFC4fcic6S4Jv zy=k8y5D_KYa=&nXzAb0yYH08K`1FsL_{LnDo1Z~umyYXjy)quPwg=#JZnSeQ0-(rv z6!=r(p^+_IHs*@_$e&jKYnB$Z__kzc1qylB^tmEico^d!0FBYeMwwDRNn2~fL&t4^ zs$tV|P>3cc|Kz>%??5eTYrNDd19zna-OrYC=)6;k0gCo#EeKbr05->bg8-6;d6kC64^{RyqZgWg)j1AKO_!+a)5i777PD z5RfQgFm9Eqg3|50)cxXki3^BNx{=1})|`|b_$JKMI%Xb8H6`|c7)Qw~+t+oUu6@_) zG2a>JLtte2W({8UXtsgh? zz5)V^d$ARTCQ898Up+qsLGa)dy-tWv{i;r`IC6CC))iDoa{h|`2ttVLx!wAli8b6f zvcnYI$iy6wgsSEKrWfF(adcF&R%YxC07TLT-Xx#?8pz+YDuadP;a;<%89}oi`2Tpi z%BU#6uL~-IgdkFalt_ah-QC^YjkI(lAc%A~NOzZXNtb|t)X?3X1MeMw|MkwA53B_| zar2yg_T5{zK&Ka`_dRF^POHKhkSH>LYHOMGa<6gKuDD+3}W zbAm!p*-Ezycgd_d@2tJ!O?|}_(d+)Si_*D$QP!91P;e9P`({p$D;=9pe$`~3rN~)D zD)A$B`rv>uzbGj5Zt4J?guf{*uGz?4*5Xs{2Nks_R7YSHdj0HeSmsFuNTdUKYTL8F z*>h)qVgb$C(?D;_%>#sLmo8G9@fkk-VIbUVRmr(2tTq@A35U@|sz(&8P(Zg($>Cuf z=K3>oCtcX>**!i4px352+a0ofn75=xN1ZVNtmSjNqXNVU&3P3&4Iq8v!f)kzm2V3Q zYaRxb<~+!CTYpj*tkkXuH3y3LDyA59Sil z(5YNTfxAj*_E#zh0VuI+a&vc*?HizX9gg%kKkP65eT~7Sc3Q`y&DXhS<#lemI|9b! zB^`y@TYLs<7QMd`L=w0B`@jvWwBqxcXgJ^r#P>+j^q26$a1X}m|AH}S^X=l1)1B*i z)r`P8&~0sa~lC)mqE0g5g4Z_9x#B!TN~xzI+J(~hXFkOMxM`jos#oH_lEjg&>e z9pldJqcTNa`}W!dh~{Hd6GZm8U9t-qj>^>&czY40q17HLiI0`kh)DlScbMsqwhqSX znwJR7jK^#m@MMXpJUY2s`Oy-wcqptbs-FN&2M=GZMhStR%I+@ySHsRvyV6-4iOM)w z^ylb2F~eX!5C3IOHMHDuWj-dX-X?#Of4LAd@G7_oxY>7|;^oh;BLpH&YW#K>GijFFTnr)TO65bK>h~({i&Yo-lp`_B-NSzMrs`4&AWi#;Z${?czD<76 z!d}jM3yP941$UF6e#9MRib%;|eTIzx{dEJL?$uGt$;m`Zwx(w3x$Ob@73I8-FeIpu zh`z<0w73}681Cik|H5$tZJ!g|?#=*MxteEBbEV8q_pw--f!>8iTd~NRUBXzCXMK-AgIAZKT0Kz z;_7>f;#wvP{$prjBqOAa3qz$Cf(0zZ# zMbBqiq5Cd%=2$ml(0sxoV*3+H6s4IM48WjK=k)!mlVV(%40rca+N1g1Rw=g;xjdT# z!JnF;8g*d8Ls@-kQw$;}qp(VsxBMHHdZ^fo8R_Iac&VF&C?uW2PURpg?7?*3h ztqDPI_%h%P*7xzj(osX+$iCxK!976=qJf5)KOhy^wxc>B>iK|03HtnDa-&YZEL@xG zr%g}0S;2&v;?f%X-%kjJUaQM&eB^o_TT0GL7(N_&v#Of+bv<)6c>$;cziLSV`*2f* z2$U;^=C-EActxfMo0gX3o@;XEfvd;2w!K!2I=pJ8^=*pb;~*jw4gN)I!6Bz1`16n` zF!ile0Q5Agx}^HNA|Zvr?$E@c&_~jH#%>>9>UY1jq7N#F@}B^LBXjO!tk1_Ak*&S- zUeoY0NQs9TtH{@cmnvhY>EGVfwoe@Xi^YQIk&Uue@LWR23z_UMm0mcikAcn0wfq2# zDm0G@kYh}lt8JBMlw|DT8ECWdNu23`agWt$2?EpMs6$urd7X2~*{o7Bz@!L?)5YEAV7NU7*B%X*AaBpClr#Ny%YQi2J^i$6Yib^3@{+Gg z0_H9Jk+oxpBxd+nPj&gF0a>s2ti?ZQJ@9DQ5^2YwYN;2LH(GL@ReV;;^O;CkYBiM3 zmKa5aBZon}9dW=WZicTlVL@4CX_OM6JuW2kyRH!yd_YtP0=?|l&gw1bsWUI}HL9KF zt4p{lsKLqi(d5;tY~z3bbRRX<^~~a7$M;y)sK-VXLnx~jXgF7^4#KMAj6$shp0vKz zN?w4Wd*9)LbCXhGAr>Bui0;VG&%R5VlpNZmkb zbc-f*`gM@G-{#n!wJ=9DAb7wHKY^8c47lp}XAZq;_Pw$jAYTtK5`>9Ped;n@Pcein z0t<;mK>}2uq*)k<0e0GR--V;cLjLcPsxGRVkF)nwL~kD&I572{U z1+)pH+5-Qm9T;`%A9@C84>x87_fCvFb-RSl+4kn&4nwnpvwyqar#P{e68T0JzEK@3 zpB}9kY4`BC`2Fd&KZ+~?tdkFCJr;8AXgO2O?u%|-t36;aw%1n94)SR?wBqEX{vi~@ z9>Xw()hGWUNgcHSqdpjG7|IX@>FlR(MB&*4+1q{NetX{Tl;FXa9u@gTV5AJlP)+w! zrzHZ7jLpR(msAEDHMwb$=vTW-A7gH3KC8+V)3xcg@jVGp!LZHiDMS{cfH5Qfdy}1* zplM1iU9~*|d%g>LlQ#yYzoEg1#zOZN$ znpN_?TxDJbkqaN>SrRFM3AzxySTYlV@BOCnXUwN?lmF!Jl=IHQuvLM*Sip0mG-^R*w(G$bZC*QbA3XZ!r5W zbIv)+Y`qLk#`^pp`6kwtr!|#tzhg>*{-s$lB|PBONcTmUAm< z5R@gpjQCB09jFz?q?>I~g9$|Y;CyI67&V#WYRqsXbI_y(A?oC(M=6VJIMsvvZ25SP zXui8adb9zKA52jdi_5zV6AV;o{RA2MrgTajidCu&cCUi96?&KK?#rC-TVYk^Flm>6 zxNN@o5k-&veAVSn-JnpOi(%P*2qS#8u;wFhmywU*OUn_< zvc3h?8>N6Ko+nsJ>&>F;{wQ_3O-Iq|K9(w36*On0;;TrJ;YtD^L)ffmB*%iHitZ_w zU8>J3k`?cl1I8#gYzOpR6m$L{T(P{riv_fI5XinX)ucqR{Pszag%~haPj(zG(mr|3 z{lY>6sSNBd7-i9OZ?wRnJrGO0>hWA1q>d-^J=Pj{Ar2@~J{GLngd`2gVh|bRdPDkU z#cE(z?NQ(%SLY#iaYF1_LSj;FbI+E!1@VXb@lQ@S3FkHdRTLA90VGmys)Hp6I%y!s zpA20q9Y|riKCRn_od8QfK7^FDI)4uasM`B0ipWRtja(_{ga-(d2fLDp5Wy_>shDpr zO605dS)7bbwGf*s1Y_%jIeeFs+}l`Ic+XC2_B0GweEbclv=4Y|rD@??MJV(QC;OKC zVlyZ#OO)X}5ZJ4f^lg!G3VE5Aa+d}B zq#$F$w!xMDCPTB!73To)8*EhIN*5YB1s?ilW-OBN%a9Ntor0U%ltyhzLZE65R{@YN0-R5{IJ!qa%K-|05u)be z#y#Z*E8ak9!-ohQE0SqTcPwr#<{I0Shcz}r*%$gg$e&ISw2t}%UgiNqZNucGbF8Pu z$3cchXkK-2luP2!FvomtngTG5u{J| zY2}&fg0y{D>rT4+1@)x(MEq4nET3$vaqH7qCoyfUttNF z+PqahSNg$my9ir+sQG4Bzx2|FBL#2TPBaNNAgNNZ0oVb!S!U$Lq6rtF(XMAx?K-+1 zeM(-p_Bd-bYW1hM!sW4h&`R9Z%H!UztK5xsfF|r?zQ#LI|G^48tJdtrC|G~$Z@6c` zx^zi7`-P4>4V0@P{rZIg1F8s}=P92wG46fIhE$J@baH9>|( z%31rIJ}ST`oBmJ^2u~Gsgf|4XI2bSM4d2g40enxt>?IWUxxA8K|F5&lr*N>Nt$_I| zO)Tfhe(Ax#Z#on^iRVBA7M_a=HCMoJv+(H~I?=R%I$L4svUsvz0X7?G|1ADf3Q$H8 zuL{?P465_DG@b8BD|(~&9`9F`x+;Ug%i!%)^W+yOth+drJqCnO6PIRa>bgxvZ?hMR z0tcGCv65iATz=Wfr%gHs}q}0Zm+blW08eCF(M=Y75XUu)uTflp6NRa*pmI<(B^UH*S{N{JH1QD3&`7Bnmt;q z&e?c4U#UI2SecpUB}cc))IuR!YCrl`CttBKfQ0J`S~;d!4lCa*>uhRtzcgJt~46$nM-|nG*t3ZI)y#=BSKf?cLc5rSXbLC>h;VBjQ&)FuM zFV5#M*VxO1mD%PMpQm^*idrU5m9E#X4Z|^d-Rm)B2nUy;!I5INvL*nM++nE!O0j@B@O~>@+~sK0cXHnD^>;_2%iH;- z{&d&P_MJi6f%}`w(R_m)mSi^iM_F+~(F|`kSB<^jM)JM(tB|h~w3BUXUgQfO>m~*_ zv)`OQZ91)b7xAiW{%e!&6qoh)@=4ms)x!NH(WQ#MjBh*RDc{86jsg0O@T{+gCaJ>yK~HpfE8#I+Z$jLs!?UAT$Ct+l8No-9bQ_ZXeRhjUT?-RM+<% z9A6E}n+NGDoZnnt>~$B1Gzp;-gL93RwLoE=l}q_~zO@=sO=U^yX_2=frJ=}dw#3@Y zhJKlrxWc;W=D`A~WO&jlMus4=?T@oe^Eo?8ezYIQ<3p7ZNf=VJ!8p}JxN#5NmO)BEgPejX0}P}ZNN%2!jXvFx#iO? zx%$I)p&(G`mHk(NSRo zvoq`@rf#Ldmq~C60elJ>6HErkB@4{qTYq0+5k^{i?w7kwUTWZA9M&~AY^{jPQ-X0DuunxPjLbwvG z5?%Oawrznkwl|Mbm+oM$t0wju=XG;G@gN&6LsKwBRZrj>vQYE(-GNVt)|DAzA?p7w zhkrZ%xU1ft!fgI>LJ)SfLOCwU3K?$R7gT<7NuL?}4lFl|eDaHJil?(cs}3X{SH~?j zR@AFcHlNDp%UnKw2v$1#^F3~)*(LHbu}i6-1ui0lr2gpD4-Oc{1(&vYgWLrZL;$C~ zT|E9f_@k!Cr>gN}%e|Eps;6})qs*^-Vc~M{5}S%Y3O5LO0x#s~(S0ECK%H}N&%`}l z#;xmWttTs+LksJ<>UQDpOLC^SJ=wj&#S+nEwdvreT48g259|`|75^l13q2q& zk-)i8$Ca#f0GH5Biv=4zL@$vVY!{m>#^1#fFT493E;Q=j462KT;f=TZ zJ}OZCa(J6}{m5c4f-Gu!WB_(^% ztEHtD_p=0GVGRslBKtTatbhuXjScT+l5uZ1f$RCW_!-a3LU5f9!`rs~ynVP*GT-+l z&42o5-suRB8$Mr3q>RHLQ0HCKcFV6^*dVe(ycoyKC?cyTQAo|KOL2DFP@KQ~>%XQ6 z>mSCoDL;jo3z+Ap=h*;2`|MvmnIv^Z>F9|!Y-Gi(D7Wu1G<_B;$ z0e1~#^TSTHTRz@f3zqwE#w8VfA9jiH z{6!$yuX>JDOv5O3`D=kP0ayVPjDTBjhoJ=e6E_~$`@hDK-g{*YUVNEQ3$OEWr3^6)il5G$t%@qWIDP=VQBGls#GHKy+3(U!{S(_QF<>PIR@526 zO7}sgjOyG^hc$36TRmFV+0|9ugnL7y+5|XeK(tR6)ys9H`WOdNz(GjsUO7Fya=DbmDCZhlsREuQeH)FwR^bH2z^#GLGg&wY zHALiHO1`s;3$U`k)CVV5Y2v+UOctA*+o1<`V6PI}+xpi9nD3Xhf#gVxCKSvGE~nY;2Wag`qYt5xr) zZC@zDQ7+f~+cosiU=u%uo5TIoWS&wf9Srm(l}ZK+TLHJT5q5NZmcrVy6E6ouu4+1% zs7&Kpj#zlpPJXJEwsuW#flM+?ZjM2>=^SXl4$-{vI;fkWkk8<8-u+{=g$i0jfr&=3 zJYy0as{x5cK$P)o9z+7c91*1*WhwJY_A*aBzbq9S+rq$X`IzYL^wUEASMLw`R9LuO&B9R$*kmwTZufo; zrrNbNdfl8N+g8@pFk6|Nt`9^@2H4HsP2W3 z@VwB+DmQp4se&;VX15ZcPnS*8kn63{?C$q{`=S=sGa4f$@LBIo8GbH;JBphr$>JFU z$v|^6{Slzkn7H)Q8R#NvlGRUnJRI2h4&lFe_JkecX8c887$~Yb;u3moCY#3$n3!(D zA}9qohq!Od*ULYQo&rB*em`{Gx5aMGNVqHalQk8r>xjo*%4i#;aXC7|v z#|P-ptij53xo)Z^nj}(IoLnkfSz)+>RQtn4g*h7E*)Ve$w)c0~8uP>CK^bcC1~I}= zWRJ?Ulf@wp??H^iv9;s7jM#&~;e)R0?P7Ny^@IZ^?&)ro&5POtY~A+qUai_D@#Qdq zZD~^Jl#|sX*g%ED>L@`}d`&4gj6d7v-Au+@^s=}Z0+bb#$>Jt54pU5@2Ue#oMiv$o z6{Vr!*bc;yYm%9#If&Uh&grGQt%hilfk1T@=+F$j{?~pu>U}rzHI~@s_AlB-MYpc& zMloMgXQ>u8=gXyNtYB*7SN@_6`I~7hV;G1*Gtq(jB!2O0s--9G8;orK-+~h&)SsOL zkMvjAxwXRl*_WMxKglvn#q+>|OdpTw{@tk(F!-I_fN*XN{uhXSH=6hDIjJdPpyozE zU=(n6`^=_6()$-o`a>p>HgLn87nr)M-TY zu5Z4{XaxM$^kOEyH>wQePKhU)UR^>yCh@uix8NAT7EdKlVzE@3mQYt$=OJ=6VbX(z zM?mWKqoc{{uMlSQ(fymp1p9ukJLjd+v-EvtJ2gping|?W+^@Uss>B?$9Sv@GZ#k8d zkHBf+hTZN*oJ~Zo`{uaH=Y}|0sz_sKDBUz^7scFv{$?71){j|s7sM|OVVAg(7pG9c z;HtRpP{*UOAL-2u*5jRg%KAK$7u;IzY&Y*Gcr;>Ok8=<~F(b~DYBHM+Vin}CD-M{P z0v*5MwNtMoiqqf#u01_Q{NOz2n@EMekkU@zd*NKN8N=?K@|ig8YL?4gZhHuf8Y{ zZxFbZGf>td1{x;d$a7WGbr$7d@~l|&8KuR(RVX1IQO*d`ex@JNvv>- zyS#2C=^U!nsd=H$P%@67_~BQPwo3l=uxF0{r@Z5d)+Dv_y@b3sA8lDeVYo0@i;&Ru z)m?xljcGW~!}VIk@UKarjg(RPu6^FNnI4a4VMRoBh%4ym@Ng90(!zquJOJVLdM&a> zEP``0DW)O8by0*)7|;jcE?Wj$Xgz&5(-C4U0yfo-FadiPMmHBm zMqU!xxWF$$hn?Z}aU`hcyR6a4&bo9PPKV^N=ii;KgcrdhJ8J_T0Z15k%l4-bX+-C< zs57bRVqdD&Z=z!dj?%XID=ZbH_I$59VSmDd{=Y7>7vOL`Tqup^zh6Obbihi|sJEW| zj!nxXZZ?v_>T`cR{7RR>$~zP&zM6!`>GZ0{mF_AD^~3aWPp9vF+Q+tr@E1U+Hvr>D z!%-!3h=qC43kj=w>xGkb&USWaemQMe=O^PfI{!XAh3J_u>-e-zHk^+roZ&kzD><0p zp>k>hYRQA;GMWM5p}Gav#K- z844u3hu`kZR4jq8F8#t7tUPy@2SfN(lqA+xRzvu2m`o%%3EncB$y79hOTbkIGm5~L zmA8uN>F_sgUW+YUOY8eXHBw|m^vD4`nj-zIgnSy4%BJ3w6&yFhjdz{4b*;aZy3V;R zp?=LiU-d!)L{}^l+kii-6wbFS|KASewRq%#j0o6)%QnFY^{}m_z>S0CeIQI|Rug58 z_qgLJL;HQT^4SSS?_Us}Cu2V>0$or4C~wqZ4NZ00t>=MX1Q5!fvG?H(9X!rXOel@A zIig^I$*(o~9Co?E&aaKf3-;GBj7tsM%$;7X((*)(q#xW|Di2edKI1eEVe>F-H`YYy z@b-x=Xb8G}gOmXTDjrR$f`0%j!DGI7Gh1yr_2#!|*73$lzdG4UqhVW*^HCzQIb_N` z?@NIS8}HSnB~c+c(cKW(rWL;Gc!-*OdGe(Lrlkwk!{N@^8uRx1(;@x)RowKHcuJnT z{hCxZo58n@n<-WxDx+=7866!hjRt}T#&ke?U#ZB6tBeYnR0K=3eTf+LIk_Z_c|nm% z#%qi$g~BwO%@65+$Hx`__i~gGI6aC+t4AT{%{zL&NysWZV&{aw*4Hw`_h-pc4x>gC zg~Wtg2y#5Xem_tru7M7;Q_{AX?jZ?Baws_(3P>Q4;)g)VaoXO~MKFaX#W{bM-pWMB zUESTBA>^{5kHF}8m0hhFJ<~rZjy#$EC|a0#3RM);&}CUmr6Lt=+y1Q&vQaoVxmrXbH-m@!o8*8Rvyt0FAlMER>uQH(3bnj1XU$P?==$Hj0jN$Ir(@~gnG9af zYB3yoty-{b$)>U;KePTKuneX)|H-e{l(H#ts_(VFIdP4>U}|qK-7w$X-K`d@d`=2( z_wxz;xs(02f0SF81d?I{?%bORnzx4ZVd!T{{2_KLJ*4l@v^>S;ePi@}q^Fx?<+__g zSuVe!Y-$YN=+N+st&a7Qsf);b=bI$H%+PBNCYnheEZFRX2WM1oMlGo3@tv=6>`KGx04?@H)(4@Z%&8F$ShkdF!Q??4<3_m7w8HkOj=Z z^v-&3B zSGl)%>OH*uL0ZWh;|wn`8WtNHJHdiTXVIfs3S~kcfxia%V-up8+vvnCfkQ!C{p{U| z8r$Vfl4LrBl&IKD#IM=amp{h$WQ2>hy%|8BdI>3JtQ*-8Xp-3d!0L-W_PM=YJ%~fG z^!P5X5+`SqdjvXv072Kg`luODS?h;^&ZnZFcm!Ro*AZ~1GY(t6KsA7`c`?^2txgVFJ8Zdw&zdLZ4FFUamK!fuT6(XE?h6 zNd;$MkDPU<58~{W2Yl{aG?;Asr)Qmi)r?W<>b}l(-MQ0;RAgq@k=D6@Og+P^{E&W; zE@=xcW6$L_To{R<X$u71rsE7j|iyCy3){>!?G$jyn;3AMci! z#m$D3K7w2_)J44$*F#%-{{H5y0;r2>)|g$~cDuJ{eb&(ocRO{Vnqny%27Cm#7HLBM z3)}wu+

&jYwB~M`IAbCR5WkbDsEEr#8L1>P9cS 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 literal 0 HcmV?d00001 diff --git a/course/04_IntroToTidyverse/index.qmd b/course/04_IntroToTidyverse/index.qmd new file mode 100644 index 0000000..f62f7f8 --- /dev/null +++ b/course/04_IntroToTidyverse/index.qmd @@ -0,0 +1,581 @@ +--- +title: "04 - Introduction to Tidyverse" +author: "David Rach" +date: 02-23-2026 +format: html +toc: true +toc-depth: 5 +--- + +![](/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 + +Within our daily workflows as cytometrist, after acquiring data on our respective instruments, we begin analyzing the resulting datasets. After implementing various workflows, we then export data for downstream statistical analysis. + +When I first started my Ph.D program, a substantial amount of my day was spent renaming column names of the exported data so that they would fit nicely in a Microsoft Excel sheet column; setting up formulas to combine proportion of positive cells across positive quadrants, etc. Once this was done, additional hours would go by as I copied and pasted contents of those columns over to a GraphPad Prism worksheet for statistical analysis. + +This of course was in an ideal scenario. Often times, the data was less organized, and instead of time spent copying and pasting over columns, it would first be spent rearranging values from individual cells in the worksheet that were separated by spaces, all the while trying to remember what various color codes and bold font stood for. + +Today, we will explore what makes data ["tidy"](https://vita.had.co.nz/papers/tidy-data.pdf), and how to use the toolsets implemented in the various [tidyverse](https://cran.r-project.org/web/packages/tidyverse/vignettes/paper.html) R packages. At it's simplest, if we think of and organize all our data in terms of rows and columns, we need fewer tools (ie. functions) to reshape and extract useful information that we are interested in. Additionally, this approach aligns more closely with how computers work, allowing us to carry out tasks that would otherwise have taken hours in mere seconds. + +The dataset we will be using today is a manually-gated spectral flow cytometry dataset (similar to ones we would see exported by commercial software), and has been intentionally left slightly messy. You could however just as easily use a "matrix" or "data.frame" object exported from inside an [fcs file](/course/03_InsideFCSFile/), or swap in your own dataset. You would just need to make sure to switch out the input data by providing an alternate [file path](/course/02_FilePaths/), etc. + +--- + +# Walk Through + +:::{.callout-important title="Housekeeping"} +As we do [every week](/course/02_FilePaths/index.qmd), 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 creating a "Week04" project folder, copy over the contents of "course/04_IntroToTidyverse" to that folder. This will hopefully prevent any merge issues when you attempt to bring in new data to your local Cytometry in R folder next week. Please remember once you have set up your project folder to stage, commit and pus your changes to "Week04" to GitHub so that they are backed up remotely. + +If you are having issues syncing due to the Take-Home Problem merge conflict, see this [walkthrough](https://umgcccfcsr.github.io/CytometryInR/course/00_BonusContent/PullConflicts/) +::: + +--- + +## read.csv + +We 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: + +```{r} +#| eval: FALSE +#| include: FALSE + +# For use only when building the website, otherwise keep eval to FALSE +thefilepath <- file.path(getwd(), "course", "04_IntroToTidyverse", "data", "Dataset.csv") + +thefilepath +``` +```{r} +#| eval: TRUE +thefilepath <- file.path("data", "Dataset.csv") + +thefilepath +``` + + +:::{.callout-tip title="Reminder"} +We 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. +::: + +Above, 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. + +Since 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. + +```{r} +Data <- read.csv(file=thefilepath, check.names=FALSE) +colnames(Data) +``` + +As 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? + +Let's see what happens to the column names when we set "check.names" argument to TRUE: + +```{r} +Data_Alternative <- read.csv(thefilepath, check.names=TRUE) +colnames(Data_Alternative) +``` + +As we can see, any column name that contained a special character or a space was automatically converted over to [R-approved syntax](https://ssojet.com/escaping/regex-escaping-in-r#understanding-the-need-for-escaping-special-characters). 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. + +![](images/00_CheckNamesTRUE.png) + +Because of this, it is often better to rename columns individually after import, which we will learn how to do later today. + +Following up with what we practiced last week, lets use the `head()` function to visualize the first few rows of data. + +```{r} +head(Data, 3) +``` + +When 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. + +![](images/01_DataView.png) + +We could also achieve the same window to open using the `View()` function: + +```{r} +#| eval: FALSE +View(Data) +``` + +Wrapping up our brief recap of [last week](/course/03_InsideFCSFile/index.qmd) functions, we can check an objects type using both the `class()` and `str()` functions. + +```{r} +class(Data) +``` + +```{r} +str(Data) +``` + +## data.frame + +Or alternatively using the new-to-us `glimpse()` function + +```{r} +#| error: TRUE +glimpse(Data) +``` + +:::{.callout-tip title="Checkpoint 1"} +This however returns an error. Any idea why this might be occuring? +::: + +```{r} +#| code-fold: TRUE + +# We haven't attached/loaded the package in which the function glimpse is within +``` + +:::{.callout-tip title="Checkpoint 2"} +How would we locate a package a not-yet-loaded function is within? +::: + +```{r} +#| code-fold: TRUE +#| eval: FALSE + +# We can use double ? to search all installed packages for a function, regardless +# if the package is attached to the environment or not + +??glimpse +``` + +![](images/02_Glimpse.png) + +From 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. + +```{r} +#| message: FALSE +#| warning: FALSE +library(dplyr) +glimpse(Data) +``` + +We 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])) + +```{r} +dim(Data) +``` + +## Column value type + +As 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](https://www.r-bloggers.com/2023/09/understanding-data-types-in-r/) 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. + +![](images/03_ColumnClass.png) + +If 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 + +```{r} +# colnames(Data) # To recheck the column names + +is.character(Data$bid) +``` + +```{r} +is.numeric(Data$bid) +``` + +```{r} +# colnames(Data) # To recheck the column names + +is.character(Data$Tcells_count) +``` + +For numeric columns using the `is.numeric()` function, we can also be [subtype](https://www.r-bloggers.com/2023/09/understanding-data-types-in-r/) specific using either `is.integer()` or `is.double()`. + +```{r} +# colnames(Data) # To recheck the column names + +is.numeric(Data$Tcells_count) +is.integer(Data$Tcells_count) +is.double(Data$Tcells_count) +``` + +:::{.callout-tip title="Reminder"} +As we observed last week with keywords, column names that contain [special characters](https://ssojet.com/escaping/regex-escaping-in-r#understanding-the-need-for-escaping-special-characters) like $ or spaces will need to be surrounded with tick marks in order for the function to be able to run. +::: + +```{r} +#| error: TRUE + +# colnames(Data) # To recheck the column names +is.numeric(Data$CD8-) +``` + +```{r} +# colnames(Data) # To recheck the column names +is.numeric(Data$`CD8-`) +``` + +## select (Columns) + +Now 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. + +```{r} +library(dplyr) +``` + +We 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) + +```{r} +DateColumn <- select(Data, "Date") +DateColumn +``` + +This results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object. + +### Pipe Operators + +While 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: + +```{r} +DateColumn <- Data |> select("Date") +DateColumn +``` + +... **"What in the world is that thing |> ?"** ... + +Glad you asked! An useful feature of the tidyverse packages is their use of [pipes](https://r4ds.had.co.nz/pipes.html) (either the original `magrittr` package's "%>%" or `base R version >4.1.0's` "|>""), usually appearing like this: + +```{r} +# magrittr %>% pipe + +DateColumn <- Data %>% select("Date") + +# base R |> pipe +DateColumn <- Data |> select("Date") +``` + +... **"How do we interpret/read that line of code?"** ... + +Let's break it down, starting off just to the right of the assignment arrow (<-) with our data.frame "Data". + +```{r} +#| eval: false + +Data +``` + +We 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. + +```{r} +#| eval: FALSE +Data |> +``` + +In 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. + +```{r} +#| eval: FALSE +Data |> select() +``` + +To complete the transfer, we provide the desired column name to `select()` to act on ("Date" in this case) + + +```{r} +#| eval: FALSE +Data |> select("Date") +``` + +In summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column + +```{r} +Data |> select("Date") +``` + +One 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. + +```{r} +Data |> select("Date") |> nrow() +``` + +For 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](https://tidyverse.org/blog/2023/04/base-vs-magrittr-pipe/) 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). + +### R Quirks + +:::{.callout-note title="Odd R Behavior # 1"} +While 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: +::: + +```{r} +Data |> select(Date) |> head(5) +``` + +:::{.callout-note title="."} +The reasons for this Odd R behaviour are nuanced and for [another day](https://adv-r.hadley.nz/evaluation.html). 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. +::: + +### Selecting multiple columns + +Since 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: + +```{r} +Subset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`) + +head(Subset, 5) +``` + +You will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object: + +```{r} +Subset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, ) + +head(Subset, 5) +``` + +## relocate + +Alternatively, 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. + +Looking 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: + +```{r} +Data |> relocate(Tcells, .after=bid) |> head(5) + +# |> head(5) is used only to make the website output visualization manageable :D +``` + +Similar to what we saw with `select()`, this approach can also be used for more than 1 column: + +```{r} +Data |> relocate(Tcells, Monocytes, .after=bid) |> head(5) + +# |> head(5) is used only to make the website output visualization manageable :D +``` + +We can also modify the argument so that columns are placed before a certain column + +```{r} +Data |> relocate(Tcells, .before=Date) |> head(5) + +# |> head(5) is used only to make the website output visualization manageable :D +``` + +And as we might suspect, we could specify a column index location rather than using a column name. + +```{r} +Data |> relocate(Date, .before=1) |> head(5) + +# |> head(5) is used only to make the website output visualization manageable :D +``` + +## rename + +At 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? + +In 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: + +```{r} +colnames(Subset) +colnames(Subset)[3] +``` + +```{r} +colnames(Subset)[3] <- "CD8Positive" +colnames(Subset) +``` + +With 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 + +```{r} +Renamed <- Subset |> rename(CD4_Positive = `CD4+`) +colnames(Renamed) +``` + +If 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. + +```{r} +Renamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`) +colnames(Renamed_Multiple) +``` + +## pull + +Sometimes, 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 + +```{r} +Data |> pull(Date) |> head(10) +``` + +This 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: + +```{r} +Data |> pull(Date) |> unique() +``` + + +## filter (Rows) + +So 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. + +The 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 + +```{r} +Data |> pull(Condition) |> unique() +``` + +In the case of this dataset, looks like the .fcs files where treated with either left alone, treated with [PPD (Purified Protein Derrivative)](https://en.wikipedia.org/wiki/Tuberculin) or [SEB](https://en.wikipedia.org/wiki/Enterotoxin_type_B). What if we wanted to subset only those treated with PPD? + +Within `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. + +```{r} +PPDOnly <- Data |> filter(Condition == "PPD") +head(PPDOnly, 5) +``` + +While 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" + +```{r} +Data |> filter(Condition %in% "PPD") |> head(10) +``` + +Similar 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()`/ + +```{r} +Data |> filter(Condition %in% c("PPD", "SEB")) |> head(10) +``` + +Alternatively, we could have set up the vector externally, and then provided it to `filter()` + +```{r} +TheseConditions <- c("PPD", "SEB") +Data |> filter(Condition %in% TheseConditions) |> head(10) +``` + +While 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](/course/02_FilePaths/index.qmd), when we add a ! in front of a logical value, we get the opposite logical value returned + +```{r} +IsThisASpectralInstrument <- TRUE + +!IsThisASpectralInstrument +``` + +In the context of the `dplyr` package, we can use ! within the `filter()` to remove rows that contain a certain value + +```{r} +Subset <- Data |> filter(!Condition %in% "SEB") +Subset |> pull(Condition) |> unique() +``` + +Likewise, we can also use it with the `select()` to exclude columns we don't want to include +```{r} +Subset <- Data |> select(!timepoint) +Subset[1:3,] +``` + + +## mutate + +As 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. + +Let's start by slimming down our current Data to a smaller workable example, highlighting the functions and pipes we learned about today + +```{r} +TidyData <- Data |> filter(Condition %in% "Ctrl") |> filter(timepoint %in% "0") |> + select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |> + rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen) +``` + +```{r} +TidyData +``` + +The `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: + +```{r} +TidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count) +TidyData +``` + +We 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 + +```{r} +TidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2)) +TidyData +``` + + +## arrange + +And 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`: + +```{r} +TidyData <- TidyData |> arrange(desc(TcellsRounded)) +``` + +And 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): + +```{r} +TidyData |> filter(TcellsRounded > 0.3) +``` + +Which is we had wanted to just retrieve the specimen IDs, we could add `pull()` after a new pipe argument. + +```{r} +TidyData |> filter(TcellsRounded > 0.3) |> pull(specimen) +``` + +And 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 .fcs file. Working within our project folder, this would look like this: + +```{r} +NewName <- paste0("MyNewDataset", ".csv") +StorageLocation <- file.path("data", NewName) +StorageLocation +``` +```{r} +#| eval: FALSE +write.csv(TidyData, StorageLocation, row.names=FALSE) +``` + +# Take Away + +In this session, we explored the main functions within the `dplyr` package used in context of "tidying" data, including selecting columns, filtering for rows, as well as additional functions used to create or modify existing values. We will continue to build on these throughout the course, introducing a few additional tidyverse functions we don't have time to cover today as appropiate. As we saw, knowing how to use these functions can allow us to extensively and quickly modify our existing exported data files. + +On important goal as we move through the course (in terms of both reproducibility and replicability) is to attempt to only modify files within R, not go back to the original csv or excel file and hand-modify individual values. This approach is not reproducible or replicable. Once set up, an R script can quickly re-carry out these same cleanup steps, and leave a documented process of how the data has changed (even more so if you are maintaining version control). If you do want to save the changes you have made, it is best to save it out as a new .csv file with which you work later. + +Next week, we will be using these skills when setting up metadata for our .fcs files. We will additionally take a look at the main format source of controversy within Bioconductor Flow Cytometry packages, ie. whether to use a flowframe or a cytoframe. Exciting stuff, but important information to know as the functions needed to import them are slightly different. We will also look at how to import existing manually gated .wsp from FlowJo/Diva/Floreada in via the `CytoML` package. + +![](images/TakeAway.jpg) + +# Additional Resources + +[Data Organization in Spreadsheets for Ecologists](https://datacarpentry.github.io/spreadsheet-ecology-lesson/) This Carpentry self-study course was one of my "Aha" moments early on when learning R, and reinforced the need to try to keep my own Excel/CSV files in a tidy manner. It is worth the time going through in its entirety (even for non-Ecologist). + +[Data Analysis and Visualization in R for Ecologists](https://datacarpentry.github.io/R-ecology-lesson/) Continuation of the above, and a good way to continue building on the tidyverse functions we learned today. + +[Simplistics: Introduction to Tidyverse in R](https://youtu.be/Bg4qxVNaDck?si=QPQq8TzOZ1w6XSy4) The YouTube channel is mainly focused on statistics for Psych classes, but at the end of the day, we are all working with similar objects with rows and columns, just the values contained within differ. + +[Riffomonas Project Playlist: Data Manipulation with R's Tidyverse](https://youtube.com/playlist?list=PLmNrK_nkqBpKf7j_ewpUm-w33R6PJYtD9&si=BVmDZPIXjRuHjERP) Riffomonas has a playlist that delves into both the tidyverse functions we used today, as well as other ones we will encounter later on in the course. + +# Take-home Problems + +:::{.callout-tip title="Problem 1"} +Taking a dataset (either todays or one of your own), work through the column-operating functions (`select()`, `rename()`, and `relocate()`). Once this is done, `filter()` by conditions from two separate columns, arrange in an order that makes sense, and export this "tidy" data as a .csv file. +::: + +:::{.callout-tip title="Problem 2"} +We used the `mutate()` function to create new columns, but it can also be used to modify existing ones. Various numeric columns are showing way to many significant digits. As was shown, use `round()` to round all these proportion columns, but use mutate to overwrite the existing column. Export this as it's own .csv file. +::: + +:::{.callout-tip title="Problem 3"} +We can also use `mutate()` to combine columns. For our dataset, "bid", "timepoint", "Condition" are separate columns that originally were all part of the filename for the individual .fcs file. Try to figure out a way to combine them back together using `paste0()`, and save the new column as "filename". Once this is done, `pull()` the contents of this column, and using try to determine whether there were any duplicates (think innovative ways of using !, `length()` and `unique()`) +::: + +::: {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/Schedule.html b/docs/Schedule.html index 836bece..30eb6c5 100644 --- a/docs/Schedule.html +++ b/docs/Schedule.html @@ -30,7 +30,7 @@ - + @@ -813,8 +813,8 @@

Future Directions

diff --git a/docs/course/03_InsideFCSFile/slides.html b/docs/course/03_InsideFCSFile/slides.html index 12225a8..b31607b 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 new file mode 100644 index 0000000..39bcd4a --- /dev/null +++ b/docs/course/04_IntroToTidyverse/BonusContent.html @@ -0,0 +1,1128 @@ + + + + + + + + + + + +Bonus Content – Cytometry in R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ + +
+ + + +
+ +
+
+

Bonus Content

+
+ + + +
+ +
+
Author
+
+

David Rach

+
+
+ +
+
Published
+
+

February 23, 2026

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

+
+

AGPL-3.0 CC BY-SA 4.0

+
+
+
thefilepath <- file.path("data", "Dataset.csv")
+
+thefilepath
+
+
[1] "data/Dataset.csv"
+
+
+
+
Data <- read.csv(file=thefilepath, check.names=FALSE)
+colnames(Data)
+
+
 [1] "bid"               "timepoint"         "Condition"        
+ [4] "Date"              "infant_sex"        "ptype"            
+ [7] "root"              "singletsFSC"       "singletsSSC"      
+[10] "singletsSSCB"      "CD45"              "NotMonocytes"     
+[13] "nonDebris"         "lymphocytes"       "live"             
+[16] "Dump+"             "Dump-"             "Tcells"           
+[19] "Vd2+"              "Vd2-"              "Va7.2+"           
+[22] "Va7.2-"            "CD4+"              "CD4-"             
+[25] "CD8+"              "CD8-"              "Tcells_count"     
+[28] "lymphocytes_count" "Monocytes"         "Debris"           
+[31] "CD45_count"       
+
+
+
+

Pull

+
+
+

Case-When

+

Case-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.

+

In 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

+
+
+

Quasiquosure

+
+
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
+
+
DateColumn <- select(Data, Date)
+DateColumn
+
+
          Date
+1   2025-07-26
+2   2025-07-26
+3   2025-07-26
+4   2025-07-26
+5   2025-07-26
+6   2025-07-26
+7   2025-07-26
+8   2025-07-26
+9   2025-07-26
+10  2025-07-26
+11  2025-07-26
+12  2025-07-26
+13  2025-07-26
+14  2025-07-26
+15  2025-07-26
+16  2025-07-26
+17  2025-07-26
+18  2025-07-26
+19  2025-07-26
+20  2025-07-26
+21  2025-07-26
+22  2025-07-26
+23  2025-07-26
+24  2025-07-26
+25  2025-07-26
+26  2025-07-26
+27  2025-07-29
+28  2025-07-29
+29  2025-07-29
+30  2025-07-29
+31  2025-07-29
+32  2025-07-29
+33  2025-07-29
+34  2025-07-29
+35  2025-07-29
+36  2025-07-29
+37  2025-07-29
+38  2025-07-29
+39  2025-07-29
+40  2025-07-29
+41  2025-07-29
+42  2025-07-29
+43  2025-07-29
+44  2025-07-29
+45  2025-07-29
+46  2025-07-29
+47  2025-07-29
+48  2025-07-29
+49  2025-07-31
+50  2025-07-31
+51  2025-07-31
+52  2025-07-31
+53  2025-07-31
+54  2025-07-31
+55  2025-07-31
+56  2025-07-31
+57  2025-07-31
+58  2025-07-31
+59  2025-07-31
+60  2025-07-31
+61  2025-07-31
+62  2025-07-31
+63  2025-07-31
+64  2025-07-31
+65  2025-07-31
+66  2025-07-31
+67  2025-07-31
+68  2025-07-31
+69  2025-07-31
+70  2025-07-31
+71  2025-07-31
+72  2025-07-31
+73  2025-07-31
+74  2025-07-31
+75  2025-07-31
+76  2025-08-05
+77  2025-08-05
+78  2025-08-05
+79  2025-08-05
+80  2025-08-05
+81  2025-08-05
+82  2025-08-05
+83  2025-08-05
+84  2025-08-05
+85  2025-08-05
+86  2025-08-05
+87  2025-08-05
+88  2025-08-05
+89  2025-08-05
+90  2025-08-05
+91  2025-08-05
+92  2025-08-05
+93  2025-08-05
+94  2025-08-05
+95  2025-08-05
+96  2025-08-05
+97  2025-08-05
+98  2025-08-05
+99  2025-08-07
+100 2025-08-07
+101 2025-08-07
+102 2025-08-07
+103 2025-08-07
+104 2025-08-07
+105 2025-08-07
+106 2025-08-07
+107 2025-08-07
+108 2025-08-07
+109 2025-08-07
+110 2025-08-07
+111 2025-08-07
+112 2025-08-07
+113 2025-08-07
+114 2025-08-07
+115 2025-08-07
+116 2025-08-07
+117 2025-08-07
+118 2025-08-07
+119 2025-08-07
+120 2025-08-07
+121 2025-08-07
+122 2025-08-07
+123 2025-08-07
+124 2025-08-07
+125 2025-08-22
+126 2025-08-22
+127 2025-08-22
+128 2025-08-22
+129 2025-08-22
+130 2025-08-22
+131 2025-08-22
+132 2025-08-22
+133 2025-08-22
+134 2025-08-22
+135 2025-08-22
+136 2025-08-22
+137 2025-08-22
+138 2025-08-22
+139 2025-08-22
+140 2025-08-22
+141 2025-08-22
+142 2025-08-22
+143 2025-08-22
+144 2025-08-22
+145 2025-08-22
+146 2025-08-22
+147 2025-08-22
+148 2025-08-22
+149 2025-08-22
+150 2025-08-22
+151 2025-08-22
+152 2025-08-28
+153 2025-08-28
+154 2025-08-28
+155 2025-08-28
+156 2025-08-28
+157 2025-08-28
+158 2025-08-28
+159 2025-08-28
+160 2025-08-28
+161 2025-08-28
+162 2025-08-28
+163 2025-08-28
+164 2025-08-28
+165 2025-08-28
+166 2025-08-28
+167 2025-08-28
+168 2025-08-28
+169 2025-08-28
+170 2025-08-28
+171 2025-08-28
+172 2025-08-28
+173 2025-08-28
+174 2025-08-28
+175 2025-08-28
+176 2025-08-28
+177 2025-08-28
+178 2025-08-28
+179 2025-08-30
+180 2025-08-30
+181 2025-08-30
+182 2025-08-30
+183 2025-08-30
+184 2025-08-30
+185 2025-08-30
+186 2025-08-30
+187 2025-08-30
+188 2025-08-30
+189 2025-08-30
+190 2025-08-30
+191 2025-08-30
+192 2025-08-30
+193 2025-08-30
+194 2025-08-30
+195 2025-08-30
+196 2025-08-30
+
+
+
+

Selecting Columns (Base R)

+

As 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?

+
+
colnames(Data)
+
+
 [1] "bid"               "timepoint"         "Condition"        
+ [4] "Date"              "infant_sex"        "ptype"            
+ [7] "root"              "singletsFSC"       "singletsSSC"      
+[10] "singletsSSCB"      "CD45"              "NotMonocytes"     
+[13] "nonDebris"         "lymphocytes"       "live"             
+[16] "Dump+"             "Dump-"             "Tcells"           
+[19] "Vd2+"              "Vd2-"              "Va7.2+"           
+[22] "Va7.2-"            "CD4+"              "CD4-"             
+[25] "CD8+"              "CD8-"              "Tcells_count"     
+[28] "lymphocytes_count" "Monocytes"         "Debris"           
+[31] "CD45_count"       
+
+
+
+
colnames(Data)[4]
+
+
[1] "Date"
+
+
+
+
DataColumn <- Data[,4] # Column specified after the ,
+DataColumn
+
+
  [1] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+  [6] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+ [11] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+ [16] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+ [21] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+ [26] "2025-07-26" "2025-07-29" "2025-07-29" "2025-07-29" "2025-07-29"
+ [31] "2025-07-29" "2025-07-29" "2025-07-29" "2025-07-29" "2025-07-29"
+ [36] "2025-07-29" "2025-07-29" "2025-07-29" "2025-07-29" "2025-07-29"
+ [41] "2025-07-29" "2025-07-29" "2025-07-29" "2025-07-29" "2025-07-29"
+ [46] "2025-07-29" "2025-07-29" "2025-07-29" "2025-07-31" "2025-07-31"
+ [51] "2025-07-31" "2025-07-31" "2025-07-31" "2025-07-31" "2025-07-31"
+ [56] "2025-07-31" "2025-07-31" "2025-07-31" "2025-07-31" "2025-07-31"
+ [61] "2025-07-31" "2025-07-31" "2025-07-31" "2025-07-31" "2025-07-31"
+ [66] "2025-07-31" "2025-07-31" "2025-07-31" "2025-07-31" "2025-07-31"
+ [71] "2025-07-31" "2025-07-31" "2025-07-31" "2025-07-31" "2025-07-31"
+ [76] "2025-08-05" "2025-08-05" "2025-08-05" "2025-08-05" "2025-08-05"
+ [81] "2025-08-05" "2025-08-05" "2025-08-05" "2025-08-05" "2025-08-05"
+ [86] "2025-08-05" "2025-08-05" "2025-08-05" "2025-08-05" "2025-08-05"
+ [91] "2025-08-05" "2025-08-05" "2025-08-05" "2025-08-05" "2025-08-05"
+ [96] "2025-08-05" "2025-08-05" "2025-08-05" "2025-08-07" "2025-08-07"
+[101] "2025-08-07" "2025-08-07" "2025-08-07" "2025-08-07" "2025-08-07"
+[106] "2025-08-07" "2025-08-07" "2025-08-07" "2025-08-07" "2025-08-07"
+[111] "2025-08-07" "2025-08-07" "2025-08-07" "2025-08-07" "2025-08-07"
+[116] "2025-08-07" "2025-08-07" "2025-08-07" "2025-08-07" "2025-08-07"
+[121] "2025-08-07" "2025-08-07" "2025-08-07" "2025-08-07" "2025-08-22"
+[126] "2025-08-22" "2025-08-22" "2025-08-22" "2025-08-22" "2025-08-22"
+[131] "2025-08-22" "2025-08-22" "2025-08-22" "2025-08-22" "2025-08-22"
+[136] "2025-08-22" "2025-08-22" "2025-08-22" "2025-08-22" "2025-08-22"
+[141] "2025-08-22" "2025-08-22" "2025-08-22" "2025-08-22" "2025-08-22"
+[146] "2025-08-22" "2025-08-22" "2025-08-22" "2025-08-22" "2025-08-22"
+[151] "2025-08-22" "2025-08-28" "2025-08-28" "2025-08-28" "2025-08-28"
+[156] "2025-08-28" "2025-08-28" "2025-08-28" "2025-08-28" "2025-08-28"
+[161] "2025-08-28" "2025-08-28" "2025-08-28" "2025-08-28" "2025-08-28"
+[166] "2025-08-28" "2025-08-28" "2025-08-28" "2025-08-28" "2025-08-28"
+[171] "2025-08-28" "2025-08-28" "2025-08-28" "2025-08-28" "2025-08-28"
+[176] "2025-08-28" "2025-08-28" "2025-08-28" "2025-08-30" "2025-08-30"
+[181] "2025-08-30" "2025-08-30" "2025-08-30" "2025-08-30" "2025-08-30"
+[186] "2025-08-30" "2025-08-30" "2025-08-30" "2025-08-30" "2025-08-30"
+[191] "2025-08-30" "2025-08-30" "2025-08-30" "2025-08-30" "2025-08-30"
+[196] "2025-08-30"
+
+
+

However, looking at the output, we see this looks like the values, not a column. Our suspicions are confirmed when running DataColumn

+
+
str(DataColumn)
+
+
 chr [1:196] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" ...
+
+
+

This is similarly the case when we use the $ accessor.

+
+
DataColumn <- Data$Date
+str(DataColumn)
+
+
 chr [1:196] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" ...
+
+
+
+
head(DataColumn, 3)
+
+
[1] "2025-07-26" "2025-07-26" "2025-07-26"
+
+
+

By contrast, when selecting two columns, the structure is maintained.

+
+
TwoColumns <- Data[,4:5]
+
+

Why 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.

+
+

AGPL-3.0 CC BY-SA 4.0

+
+ + +
+
+ +
+ +
+
+ +
+ + + + + \ No newline at end of file diff --git a/docs/course/04_IntroToTidyverse/images/00_CheckNamesTRUE.png b/docs/course/04_IntroToTidyverse/images/00_CheckNamesTRUE.png new file mode 100644 index 0000000000000000000000000000000000000000..cb71c4154f8e5d7b8087145a7586c6f1b9b8ec7b GIT binary patch literal 51798 zcmaI81z1&U*EWg;Cd13e2>G!8b-hwMCDo4XRK@H6cH^)odz zZk|W>+th>q^}3ybt&x!>nvtj+3mc)7dI}oaeKZNtr%KM+s}nBn(kd4}wt5WNB@Ca5 z;)`Z0o0}s8K7M}2>qFpn^Y z@J?G#ug(Z2yP{5S(-Ogr;SQ;VgpKj>xCFNi-UDV8DsQ~gXYTo{`Fw2wvJTwZ#K+(H z)WWGVG=s!Aj;_&;YdS15ON3KPgnzBO+9jOvh5nyEz@Mo{7e32;M85gwpYu_}XY&7k zPc2dSfHdI0{}4_n?$GdFGCAU@x+8AgM{c}sl>XHM zRA{wA>jSy-83BiG9o-D~S+r!|co{jMeAtMw4ULTza?~F?MF0Ddqq{Ln^3^s+SL16F zI)BgSZEXd;C77H4{_MOD8~qAv?coD?d3n@Q|H660=P*)YKG)lMFMrn`j6Kw4pO`p) zHp+W#b==KIv*u}{@^lDUT@$=X^?W{WnR(L1i#xUX^>l_w?ex!iqdd`*o%2_X%|@9K z6sr5H8{a6pcUmJTvLcuw+YD!#h;-&wM~nU)BY5y7)_ysQdxxBPJy<4xq;>|?ys+ZA zUN?-5#iMf6)zU6(|B#q;)5)`bX3Q{i)pnk*6WHqDJlnkCOixe=k`_ZUV34CAz-8zJa#+2i|d!-YZ{eCx2M5XB1s}Asa%oHDn}B z+wrThDk|P1KJxHYY*&+4D4wxpdSe)#oBz9NO$RPC<0AjvNR8;^m$ZH1mI{3lqJH?{{x(PF!dxvVBTIeG+AyDxv1pt2H4cQWpZxx(Y|S0{ltxpDRR zNsfM}aeZ(sc6WkoWtN!Xms9uKF}YuDw`^~SrK%;qE_=<-y0!o6Y2$eN+(G~K<<%Qe zkqHI|i?yCRTq=2KSrM0ByzIa2z*{mvKGsOxu^}N@TQ<4cqA_H+UM#abXItes%e9yq zE_KGgw>lbOx7ba%lJ;NgMPoH7wcL7IRucQiQh&O{ix;0gPWDktG#NT&jL*Z< zVwm_~C067xYfWu%jP?}zk6{Yo4tN{d*QxGVAC>ct{p5$!tA-5iSSAkhQ>My6~D3^i+2T9j}=_zH=q{k<(v#D9M1itvz%@{7bX@wghAvj7|>i!N)7`+8rWb+0Uo|F^a&sI6MkPX@-vc$rMlS#8@-sW@jIbeNXNXx7=^qg>zh zw$OTvg(rRf7cFX>sc5$9n#Hj`{s!~;T_TkeB7Qc4xv)>p?+=87sp*&!WsPxWT4l5T z3LUbbF;=*+&*=naoNUhW@bTH~oyyl9>2f+yc)s(a@PPSfYkkveClOT9SSdR-m&TwM zD=mg%aq&54?G{V5(LGDI3U}f6FT1n$CBTWLJ9*@%6Gfd&4Xy0V;uPka*Lp=}BgJHA z+6g|Wl^6P}M%dR}jdZXQ1zf^EJ$|K-7LZnNEVU!F;iQd$n~9fS@Tjz=$Q>20GET=bi@Mf7MBMn}wGX=}3dV`) ziw`5Hs=4+hhH{BN^qMZ18fJ&bWN};5@CEOZM!b;dN^?kOJ?dF(i4~sc!*jC!wK>@s zvg`JZElM!40!m0?vR2bL?m>~Yu}am!!5~|X%Y0LdTFE*=-pfKx;y@DezJ%_c+y@US zrOdvrhkT%=;t2g{LUD;X_%HbtmHrF^!H`w*_kl%JipFcxM=^DaeO4FEO{2#jJ?Fy2 zd2D99l|TJgZ&FzPrTD)7M^hkCl$Qvm^PwG6Zs5*>3$r#W}ImD*K=iK{v7l0ziR8??yFR0`Sf^8?_!!1&6G15 z{R=AV(vz&gKY#z~4!*cbd^Da~Y`PqX%6gh?Vz|2#8Wv+kz3tS2r|I^3;@0!fhtV6k zZt1?Ko_ud(HH=s{Q&9F7_wKE)<~48MDz|3vNp#EGlsCm)9?XEMb>_zX?b#Sw!%#9~ zAx$8i`p{gBKiTGvO-tQ3y7%Y9o0st}FT7j{g6TPbEV$I0MrqPb!*FzSS=ngLE>vN( z|L*(xAg9MFu1;28-RpGSyr#RS>g&I}(7z>nZ7}UyGR8`saQat|vL);Z{>P0~pR(rn z7K#iF7q*)Egq+Lyzx4AyvQjq*SFk;Fxp+M9;p6V^{vj|>kxuGAZB`*pa!p=ZLPD=I zmJMYVc!x#7({rt4m{`EsI&8d;rdd11lBy%WB7FROO7ltbr<;+SCPdr zyYVb1*yOF|R6FL*iJ8wh%sYswUl#V{PVO+lmH(Lh{=HaWo8jl~XQ2#i>N!*-!RR@u z>t1;dJfvIyp^I)O+0 zON`J-!}iXaQ%8232sQfPgoJx1DiXoL9dnHt&PF)eCtR1xQGEpt;skjiE+T{;2i*x$ zS9QBFPSo;uKZlb$@J5+yH`R6Qzm~dqsF^^vwP&NK?dHm3ceI>%RF3{W&dFrMsLQvX zI(;E!(EJfe7pIw$mVX8&$xQ+7?{}wO3;p!AdEMHXkTNjJVdG@~>FzVZYuYNGe9}k(KYWQ$^=egUjb=?(7_M-9jVx&$+#D z|M>r*c-JO}txR)lwDM=6b^9NA(x{}OYIg%4ZUQW)rTMTNYsXU0q;JVqTZ?k2jMWqw z1%mzJJIcEpJx992D_qG&9iP4w-^lhyW$E<=30h1!q^DP=VB?zAr(E1yST3=bNs@Si z`FCum`&5LIIe8Jv|GoVX=_rLA0LP68q#sUF#N? zOTkQZ#QV!$kzy%dp2*s|bDrWKKSgnl4J)%9Y36AlWk=Uc2Ub=!m`; za-o#{MKw=bFytPueiVu%wYT$Nn&|IP2CPc-2np-MVPY=N+bNv*c6;a#wI!$hqlZG1 z=`}Z-`(tBva!{T}d%J>+AGjFHQD9e{Zp=s(TTV~%l;}66;JM1^Q!z?IjjH+d~ zfNz|5D~t|MeEhu8<#k=>+!zHiPmF#GSRQFivSNgc>*`L?7F#-`Ge_@FM3&a=yB5c> zz9dyKnK&>xI;^AEccY9tA5PVb9vM+x9w^YB6Z@9|SujkVIZ_la zZ3|pylV3gB@OnhDeXF6fB(M(OZje2uvn!PmSNNFVq(PXDpM$Wdt#Q4J;)}yT@9LH% zYHT}Ko`Oh47H9p~cZ|Wt(CDk`d`wgQ(?D?}iie4lfYXDTFE^?DCuz16`=)Uk&BdMZec!b8O{H>BR z!Hl_?R;T#xkI}hw{OM1Y;Hrkoq zrlO`c(rCJzAm~;)Qp8L1pIy*)r;0Qn+3TD)n3NkuHa{xm~_`bgZ(V+ z$o+RQyuYJ5XZFlAYVqovpDI}1YD3@oG^UmyN5Z=LbK zGR3h`a^E=A?cHcz>9_mBG1@&Z9~Ke@iUpJO=IcFs@ZiCK8k*?6>h1`wTEp?iwL|AB z8;cEMa+kyI)AF9^UE|qkJEaT`ik>%eL1K3PJGZqG$d2^QD26Nq-uFBU+}y;S7Yj1d z)_Cu#9LGCvCKf#QPNn7=C#Gh5>tg#li}F~-;*D$9Xe$LhOmZ2X04XPTDX(N_F8TG! zAbBoh-{J4TfrdG^R>SXLlkDwFLa`IUk;R%MSI;qUFXRB)=gj5k@M2zkO5(Jvx!3di zi}Rr$yGwJD{>?nM$9C=gfA_>Pxi!80E(C4&9Le4H%G<|w$Ng99%%0*k5slcv(CqXFY1KhLo5Kdb2Pl`gv{=4@A zaucpJHa6msk-ZEh7tHSa?>P;o@3~s+X2=!)LaO@u6R7v?`fShBXj*jXTYrv~S^6Il z)|9E~!}n>UqB{)>{to&WMp zQR1V#I@=sPTd|mwYS0q0Y$3rIlby{BYoe(yO=|0)uFj6ud97}UcgnlD5 zG*rbzB{nDsyRW~0u#Ki~WsjPcHZwvhGA72vDVzH2mNe~c_$^{=bcdlUOL?VreLAwX zw(PvTyukAlS2`4uRs!M1lG9T1%F3*!YFCcyc6GDzePLc-hIdnCwBPO0&HdCxV3j32e!)IPbPQt8$a%|gY_9=^J2@l7UCQeFKMpLa(L zD~CZdwphr$wvhsZqqzv#)~+sPKjreR*_I->9f!g$I}d&R2Xz-r|JaB)q3`rbri)~bx0@;rIjR^__KsF*He^t;%sGm$?gKR@5Cvf#B<1*4SO z3DeomNahuy%nvIpKVU%-b6F6Bc3?D;uXm5vR+LPEay4T|fPVFi^i)|%_1Ue@AfQ-G zR7T;D@u{X+jgoJ)9wgiStJ zL`t{zvvlf&-ecfG)$G!Jgm>%KQyCc?e}DgjHMH<^As8~aUzS%x+46K6Hcn0^e}8>( zb~$@YuBLG7gp`7!r_uj5jHJBDrF}1W&Xc`ioeGDQJJ+sV6BQLDc!ie4WAiRX#}iQf zkDVUjo_<;3E*LPW>W8QD7Ktmkl8KsMEIjJ^YAWoP@E5xi zul#|*Zft5|a9LVff-8ay8B$fnUw68V1;c5uFbhSiNi<^WUDDA(nxsm;o{;phf?Ipp#JW;?z#$s z95J`B5T2N*HB<00DM?0Mo#gSWp|1*QlFJro>>L~tFJCrIO;IGuq<4$u4c{gr5+BS| zma2I)`g=+Q#u<}xb7x1oE656AfnAp(YzxDRM+G)&jetvFRqE3@10K1osjg5zwx2@7wNsn>aHU8trCor-$ zj*cjkOCKX5o+&8cKYaMmDCzy{#1w$TC?=K2Vd1mg+h~Gr`%12}si~_Fzv4l)0 zRpoaodD<_Xoq1eqk_HBpjt@3^)+egk+S>G%2Qut8CduAFfi><)>I$P0k8GYQx0xm8 zG{r+JC@8=tDAN~Ciymkw}Ql4YYALOVN`NFl)qT3byaL8hXJowjWoixu_~f=k0F+03=x3KFAQ`(0vC|L&S8Ckf6yo*$76ijjw3p7}8fTaA|&bYeyB zw(vTw-?Oo?kxmjAWt^z5ug|pA&FWnJT@v^_@D7{p+>6@t<5!@5mzWRgA8pUWa9)Xy zCyJnbInx=(0U8rN0fG0Z1Ms! z=si9T<^dI~a#~JKC5G8>C2c~Rnrp=DhL~lR6AF_%FhXdLpyXBBFJ1nTl~>yy z$6@ko$sS7m<;$02dF^O#l5nD}@`sKoE*6MG^FZ!@rYW$zvN9ajO`YdiERRhJzTJE~ zp>cOY8+^_$^AcxQS9ZGv>C0EHTGScv3N_hvP zrv~F8o@g--i{t@4{fpJ{3dO{{nl`y)GUs0esgQZE8BYz}c2ijd`i?PdV%c>~Y?`rUV3xw zz#)J&FR6wL z_x5TyS6LqlJXUDgO;WB8o@d8VuGNIiT}gr()o1%-C>N2D16Z|NB1TBD4-5&p11^vV zCZ$XQ4<-KX+fmi6tuNpXm9n*ai%et-oVWDn_d2ozJ9!S$hATv8=RY!Bey2~L7zxIe2TYt3BD8=jI{DH8rjz7#z9Q5tjUn_evP^^*ZpMf&0wC$6> zVYR7ZdvWY^K@E*V;QVkFjnnkkle^>!k)ffu0CS+Q|H@Y5NOE0fa9kbvGWUv;q*(oR zhLg>~`b1z+5l4^kg#Zo?4yXCR2XaBz??0{W?Y}}HC@(Mnv$pm!3zaiK8E)8winFn{ zmTNcG;~g|FY4SCXj6^9-c9Jg-ZrG3zv}hbUV4A4<@#BfRhez*{ zeY=wuJrfgFerG5{aE*}|W<7L!8(Z6kmKHy**S~=erQP8 z*o{{-byP!cOsV|dLhY6_``09AWV363&j#q`w6{E%3LlGBY%yBcIDKetX=!O_V#1W? zw!bRz9{r}Zwe{!EpWjT@xGBoXA;RyallH;pU{bT*6dwhZt=(Nir~m*oR9S``xM9tB zj4EQFVoJhC_=pGv7YTC$2?Q~O4#w>c4-a*@;(JXw?N^3^v4|eZ!M14};R}t~ce7Zl zQwIz{PEOvADbC8u`n&XX)*Mkt<|j@w{M_7JsPF8KtEzyfbMAa_osUwnwzHdkk1M1L zLoBd2pt!p_s@R5ca*pmrq{Hc{ySaIIeV zQ6x`t0p~I=K8z2I(DD;kYk=&RqQAtXb(s~EbwaOG>)Nq%aG;^3MbGDaQB+iP9TQV- zn@J^CI*L&_a@dR7O*n#i*6Sq{ILT3T9*<+rWRLy3h?n~_anH48yNIQ?w-*3X))$+j zqoelJMnK&v)av1ksOJfRrB+kjze`>rND)+0%B#A(I5$FL3cF_sGh~y6q(5=`LyPV$ zG?Icwu{2pzRY(CBgN;Ez+MU^JnvLRew6`~0=!^>@X1i=p`!V>_w}uzJ!xU zhntf~_<6_;**Tw!gSD~Y%*$7!tBm&XMIxQ62`%dciq&~DPV;hMeZDbz8+W|7l4Z*R zIF}}|Xpjx}#($nm(8a~&YkE2pRu`9f#fs`rL8 zP&QrzF4f9eD2w04{;A@j_;>HN0X`ZjGQpLKd3cSvu1LMae0OEIXW8TIc#p|ZaRCTp ztTZk3t@B&lug}A7HpO#WscV&6O;)Sr4mO$(Ww!y3fxaYZ)d?L}Nj}{E;;%hlkXR~T zMFRn9=Ir#;^mlOvVK#43E;*)y1-3&L(lp#N)6`fb3bQz>?}p zN=jiLwi#Ab3shj0!60D>y6z${M><(35!l%H#6$+L71+yP99D+XLL4uFxK9NT*Z(%1 z?NT4jx0mtF0fbEFLyBkt-18gn0R(m@@}~#&)WJ#vI#HF5F*q6c^(!^Bw;;TCuy6CN zri8NCngM=Bw0#{PgvJ8HYlJBQZ*J@9G3omB7=|ZTyGGq&GMaiqw&d0D0^|rZ>paP7 zwDYj<`tZ+}7`ww=NMOb*=etuNme_$tAjFomRKdf-Q7|84R+0udmSQsww%-ERLwdTBbJTY=T z1Qy;iUu;Td=AaKBFag5@A!^^G&d=){Nj2$7Iz6bnpkZUX717oR0}v3!ps{!?0yTcT z)+3%uJOq%u!DDgk^=etn4#t@0I?tLsXqW1(cNSjCBn!P%RV4;1WG2oeNq&J+IZvA` zSS(dQ9MDx1^xX2lV}wRgSupq8D|vN=HnU=YTtzT*b?RhPRaL`SUML)W&&yjLCTxPL z4Vr4&?Rj7^7O)@*jp_=Q1@@t)W56I_FemdeG6o<-#O_X&{n9&BmJxvHcFp7BVovCh z;!rbnfO<|eVCF5SeZO7$BmtK`^QB`zNQJiZlIYmPo9RIt zuSW}MsvOs5fLYQA3nzobqs}6B``$eZhhGFjPk5=Ry@z$Y$e;{Qx~{O?Vb$);RL%kv zdldtNNJCvKd_4v#%`M=Ab3)C518@#Wh>?}b}FhYaw*2+EQp89o+{nZdNu)~&o zy`SHeGVnoMI6OYSL;90~n7H-Lr7LJ10=_^b=zmH;m2c=^t?LB9*(y%qA*!uS{(7v` z=x}qo{e;QftG+Mw5UR=Mpo&g``5+@8Qg?yoD+}{6I?(-KWiimxKf!#PmzP)gwNlWi znH%m`xsh@M)tiCzG0#p*w}`ff9kz`eZ!NILg4+|#P9plWjQRzd1&se zThPIt06joy#3Y;?8(wc29gX92SbhYJ2Oa0$_c>sofxW5X98T++LdSopZrr%x3^o{# z+rC8@i)y5DF4SFkKO=}9CO}Z2W$ClWMHbRXIHf+wD>H(U%nyXbpz*^kK>IVRtDS%9 z-yf|O^$dJ*WXS3^2;Eui;qW?lhlUO1-O0&m((A&*$nZ;gI$a_r zc6Me1-@~?B^Nl*90bgZct2o%&>JMeB1(6GWie}O1gQ`1!aF%E)dTqionce6HXc^p- z&R3kA4)k|Et%gNMH^XDZaa)lCTUIhrp{KmcZ8h0AIJlSFa zG$=VaIs4TMFZetL=pe#)xOqJt9aNN*mjFxw_>r1O1_WJLRJ66f|FG0~N?6|KF@Xv2 zBp|G4QmF;iPBpO207=Pf0|F{~kxMOs`zhsSQ{C})&%b^}$qiChK96I22Zah)8lyb_ zCH%F~YP?E>SE_4j2HO;Pl~hAhs3k6-Rl)OEJ32n(vXJ}d3QL~H>s1>A5~xg6j(G{X zzmn(wOA-v5K>PQDKu{zES@M5$#a3Uq;=eyMOlv?1zLb@vV`at7mnLV~DDw2iqo$^& z&!g}*(MI0ol>`NMe0&^mj-tr~M`~~DKhz#Hi1Ml`BL9zH-BO2F+B!QMhlf=Xl_^tF zQ(+UJ{pjfESmrGYx6cEO0)`k!a?GLooLkh#k3ZJN$}WL~@WpbXa_Caul`jn>0Z_{4 zU<<<)cR=Co2kw(~3N5t2b_{(HLg(r z+w9Jc9TE}}od16D`#YRR0gR4WMOu${s?JMzbaWJSv4~4o(0^4ryrTK`05(1yp)v+~ zM{woGk9eqT)u$kR4~`yKK*0c94FXw6SsB#SonXGNnw}?X+~&i%9>d(ymQ%G|u<@V- zF^i>!y?KKMvV#cxP6y!?M3V%m2edM!3CsR&K4d|lZxR1K?e<(57onmGK7?8S|Eaem($wT zM#;toJ2nL3jB=$R?=fC`r3p_#S!st4r>CdC|KPzpSTGJBCXV;lq(C4UXd`Us=m^Zu zf7H;>Frel%4~4Vy(_^Vbi!#_GaLMnQ73`j#p6zuhHS(Za%vWvHrUL%KrVvU%zexhZ z=J5lKx6m+wEFkb=X{t^b;1q(gK&4<}+b(C(dai8+w5|uPJlICK0L96)ov$Xh;ne`zr|kN_pCe946hHr#n4%fbAb> zxLCJ4`|Qz2&(DSm(>{9i5r9BO(K+WoK^_12_%RPJViQ0}85tReCnqr@9#-seAN>96 z+uHmgJC#{Plc7W#;SY!eq~L(W&i?*>2`Q@9l#BMZmEOj zgQJcB7U_h9$N{$@#eIAV7DcqPxB!eU?6G{qHvA;#nd>xX7v~!n0iyLlp3#47&v)23 zI9y}CxqfH2?-;Y+u_ZM0Er)1=)zHV!>#CflV>j z5i&C|1)dc7Eh}>g-TRSTrgvEsd?5sr1EmzJ1wZ-dG6$uoUyue&%;q zTeFrm0D&+{hV$)F?Jhe27Yi8U_Zy)n7V0wI&b5ZQ zUz{CqT1}2Ku0OS&dgU7z7ni{25CGo8ShZenfo*b@UM^Y=};blt6cP0g_-}s7;9A0J?Q7hY61G z#VJQfNC+k+F`NEXU}&h)TVQ&?uIzv&27+dJMFksd8zas)f-P^UCxQ_S2AV0b`(E=B zpc1sQNzx$PM8%pUx%h&FkEZRhH>m$i)@ki`Q_Ax|V%Q2gUT2Si9RM>Z05@xX90sTj zy2sDaA`_5E>{my^zJI3&vS6Z|^t!@!{s!!kIhbZ3{4jlSpu@g>`}QAW2?!tKmd~?~ zu$)GU%_73jr!LN80KpT(I0C}6c5s+4>Jd`(eg8W=IvQPW^_y((N(OX8fZEukT+$h> z1dKUs52Fya@_*NIi(Gb$qnXt%t1f6~_$ATO(6H(LKx+;m>ws+ljIIfG9`rV*pPD{+ z?wj=(U`i2+i;IJ6v2}1Dj#&@1Ag5FXz)|O7vRAk7P10YcoRWzq?U4-dELA;wr6FSj z0|WX-IN2TPf@}clVSw&PQWboJ1^d&2t4O#0GNOn@P63k5hsI7r%g6V7nN~~UnJhxM z$4X!GdYByqF!rOIljDl?V3N}Z6-5#^X;ckpU%K!z%S|R z>mxci6!P*HGBS5Sv(N{xQ6KEP21EAil+05vq0BeJBzU(Og6wct|MYN6A9SU5M<2Wg ze0=KA46jpqBXLRC@x|>i=R(-%?|JP1egsJqHmlk_VNXr62fzX!f=rAE(@h{uGK1aK z1bw3k_&BK8*;-X7(8pdvR09Pxy1?zg5=7mvb6Av(px&~8m&$-B@K2wQ7a{M_6;v$dn+_H9~eJl2}saQxf1ZvAslI21z6u!2Uaobr(CTh*O8 zhOwwsA1`Okq=pJ9(80~9*0`4Z{aun}dtT?b_6ZrOk!qJByoPhTnw(ij=-4Ts>C6C< zz)P1NDW+eIHB7Y!7H6q$$3LoN%+?I<#5c)kZbJgVUOVNo(KMnOPZqX|=wR~*8r z0pMmJ;L4#CvX=ROM~l*Vyw0nUwGPe_KFGzAWDjU)o&zlp1dUe#7WgePG8Xs@<(Vyn zEc-)4&5ZED+aHX;>UaerTO%kfpR2jzyCj2hX7|B&N`c*mSSxtYGvtKC<@X!G{#UNv zY`_AuA0Qe*Ud{fe4?#f$up{q4Qm6tG2j`A>D0xYMn_TJvt|~-dWEEU;`sv%f{_=2FHb@#6=?!*{)@SrS%qxoAP7dqiXehA645;;?4Cl-%z!isED#YE zK>PUt23+JBT8A}zekTiKpn#>6$%<=ybhNLZpI=|m%KZFu*l{`fuwO`mn;Es%Abj() zqXP>78h9Y6>{HmPp8%Pr^qT&KYFnVq<(92emqhu@mwwm}-qDw*BMi;v(uh}XnZvlR zxA&&k#evr;VACK{?hq&r2&T)b3=(7mKb)(BbwsG=RB<%(N_skoyMMn2RnxC7DJmxa zly~gdpxbLe3YK_26A4=>RV;x8ZdVtk|J0N5N#=0IhvpM0;=g6%Sq21!m z&;yWT7`-CBE>5Pvx{E;4F?v6J32$CJ8_3lf%S5|&^=dw7t`BaN?g8h!I9(JzJ(;=? zOYO~f+Rz4&qU=EIusk5|`7q%b5?Mejgpd%(FKFCU1FS2K`4rF++`S@%wQ~OAEu;V# zb>1H}$?01j%IN?kg4U6*nEx;y3=gnM#`_y?h8uH;OniJK7#M!~f!Su9pKK@o?j9VZgPw+n=YZ?p z8Fzi^1yx-?isudBu{*C42+V(dz67!r9ps51xDpIJ$8p!3cg=EBZE=FYV?xN~A2mXXq9(25c9WPKC`ZI`o)q zjj|9VZsfS8ZuIwi4lyj|UDukzu0AN6JHW!OM1T1kK__br>$tkbn?%q_nm0>%q;A07wnhv> zGk(4XttthU=T!`iXwA?MA3lRhJCLc2^#+X8j7du6NHA{-%=&3V$OR>VL4yB`L~q$bd*Y>l46`0bOj02gJYiH*8k^{CNWL3A5kD48U;oK-YvWlhxGM9+07& z6%BI~78661rINRBxHSvtCSh-7xX5yX50$5_HKWgIRG{oRIIn#6o19Qt_F<2WM!F0c zz@=xpy7z%s&5T#rHFfu=HNj0v-F@Dz!Z5*7RegM; z>mU8T31xPg3ReGpZ#l+xV8P6#JmS+@=&8M?QQECdO+Fw36?&XFLe*S?2n{$Q3Vt>q z*&7k2!Z3ix5;dg^^&UjjKtUPN@b%{~aplm!mDPLMwafKK-~poA!QXob!gl+wa*@)I zD-xB6@q6{^RXlwB1`G=K9}qhTQ0Ce20Y@0@Xw3>+AMlSZM}HCb!J7MCQCS)7OjHh{ z11QsepwY)v5MNTYd=u@E0NIyM+*UGB7VbVaCxG@k2YN#jmJ55>1D)@1jAD zVh$uYBjBl^GI`^H*HqJxv_f;nfgF|uOl7w<^Zdv5uSMX2^iFe(;K)L!gW5s`*8=+o z(susfFlMADF;+5E!IU$G0+?Z7a)yi}z;#RIBSH~fQ1h#LjEhE>OKOrl_SKNs5CB6l zNy!@k7FbG%(!jn0bLuuJsg#03xNYx7Um6xzF-Txy=K_wXW(z(00va76+5s>F9jqYp z5OjcTaA6qCU_8F2rA4VOvA%@#7@}eU^8>l%%kYX?l_LuT&QQT!phAJ)cpa6i>93t9 z4!O8nx9UM&2(Wlrslo5K`UiH;n=}it=g;LUY>l!8O|d#GrYj2bPotHmm0;i~0Ey~@ zfCL^bvPty~3?hO>)gt4YP+~AC!4*vqa8Za$Rc(dH z9Q0VoD&8h1&%GxMSuz^%)!@h}eXyLHzAyIOcVek}P(>mAW57v*Xs!i|K9Wv!kO{p_ zCqr+v1^XJ4GW$H*XTI!_7}Nxx#cogu!^6WH3Jh8fj~0{vxtnHCMxdL*%aL|0k$Fi# z*Iwh03%r0~cCDFQ{-n23K2c^x0j4@a=z+B=C@QLzTHIYGQDe3wILXw8y5k-s*;F^2v}V}t`YAG z+TUlKvu9V)(FuzivGCo*QI;YpW8vfATiCMc|FoYsN+0$dO<0m%^w zHgKK~fFTs+=U)kGhe`Lnv??Kx?D)Xs$57e`aRh z)$9I&(J1@0!46&cn{-?QC=h}0_U`U(={WXlva&r7GzvF(K7QRsY(i+^A4 zR`)T6HTYESNAof5E0FY2s%Qn*y=b7S&YZP+^D<7qR+#AoLOF$gpvrQlF_jX^Z#(s;MBvr%R=Xe2GG2N z!LI^zXAfn5M02JPDmNY}X$MnY^*g-FlviPrs?U#CP=UPykOoE!Y5-9)6Rm3hl?4#a z)~vt>u>iaWP=#0vA1_%Z3VS7iLXz6Q1kwlMRY23$xH*rDgHxKRM5NvSOhm-_Y;QPf zw-Dkh;SfGW;#Hf|eiVJR9&UgGq}-Eqfgr$ooi7>I29Od8jzw>}EX5Dodyqk8H|wM3 zB)JLtxnvY0;mY-52L!yLKr{z#o`6U*f>fb``>}(m+^hZ>s2md5>@?sMg4_i?Cvq0z zGaz|GHc-?>RQBo9OBct(b=k|aKq>RpsaL?GL}%_fKLP6^a<>rf9tzOCg`VUdfYIMo z^2kB;$agiA`vMD=1Go!t!v+vRmWFcT*}d`v_T~`eV%qxv+!JYF{DZS>7G!16bC5_} zJFg<<+qybo(0%2T%1mV;ub_8+dW1v*VI9#gn(w{S6A!sJ-5N#()ItIB`+Sb8rhAx0 z82(~PatBBR6Bc^)Rx>HwRt!%;)#i~8gew`h^b`NT4&ev2B4a2-h-JuaIsT)oD@SuS zA&@;z8p7a@tpEJb$L(i!51D}q91J7~Iwy1x)t9R*O3p3y7Nyw%2cLswqt8D<4UD|; z$}DOH;(MSlfWXCCU?JIe_AxF_0{nzHT(?|$5G5*jhk=KI7;ZWIh_>W^9KQq2BoQ#R zz!_Amaotm(=(Ci9MG3D!@Md~tMZ=smW7J{+IvghDcllIbfm$XxFp|NP;<`X5{F2Wt zp5D)9Gb0Mfbk)-0PE<^cxTfYk*i&FiN2_8KH4WLk;);jM$%owD3l?`XxIqX`a&2u> z5(VRgU__g!h{$EJ)LX*B!tpg|rjUN$563R(s z4WOul#hyW#8EkW8i|+zuW$Wx#GuV%^yPgl>f-T@#RyzClkS@FDt->9?l_LcKeMw28tziSJ*OU}WYmDQ zS~aO9nHCO`#+ZH_;}0Oexl?~+Mk^hd;5HjU1)cJ`NQ4?Rwcq{;Y8?nRrA=j`MrWuD zCDiZcwJ?SzZQeMIXK4x&Z}T!EF3u0?kZAkTl7zWADycX*Vp(x zmkcQgoc{M$^9?omNa)@F{Z$}>A^@r2f4;KwnU>Aq6McMq&_MneN1cba9=6Fd} z<}b@XL&3@xC;j!?H)N$5xnL?PD)z4I*=m<#d<+lA?@khABEvvOpNz8C=6(R?3pn>6 zAiRzWlJ)`LRY6k|TUEhyg8A%)Ly#9cE_o)xno3xT=Yeg{01Gk!2m(|K=HS6#8bA?H zI6aT%iMT9Ao&cT$Lzcy^)PtRdh6YSoZ(un2V3cUPF41JUx~bK93Icgb19T0iUeSWZ z6d$T2^qNxh@qI#qLSW?D{P}SSPRv3!;XWnh+X}nILc2v7fRQcWoow#!*P6Z9gTOSR zghRHDt}U+1Sm^N26;Lho_8|IT>>vy-mpil*q?bT&$re1i<>5Tm!HxkWP#nkgngqHa zoUC~Z&@UQ1h73eA|~Av6gn9~P=fnG4yM#X(RXn9)4o|B{?a6NrNQc6N43+8s_Z*b0A-ZC{9l zmSqUQI$OKu6D)CHFxm?iuOwUQ0QJB*H8Tw@8YRa%_5<=NE!nX$s~(Wj%?2~0l#f6W zLU08jTcB&IIX5N)kQN2%1qfShrOVMs{t-qS?H-Ty8{pVku3&NijZ`bpzXt1I#)n87 z@(fb#)3IS;PobK@X651MFM{brvIH=tIk}4M6kezG&~{$J&mm5rP=WUj6lw^1LEY|4 zUV9S#=~FwzRxbgtBcPK_D$b0_Py+%BIzPz1R4{I!(W(tzfUX9&xCua9!U&vE_#RGC zb-X~yz^N>FayUiWRT=;y0Rl`xK%$CjYHUO#ABdYNifz{$0F8Fv?G-O=QkF3?=>6Fa z0f`FtBle~ycwghk1UL>QWyC(@ezI1Uty<7fTHYRZ^0Y~bEB$o0UskQwofjxd31c26 zC>nq{m2xD#j1HLWHVQiSc8x)24+UKgIgB!#tMxkT(uv{v9f&kw`YVyg(_Jz6W9%ASK*ir3j55lOI^ zx<~d0NE#Lv7D8jnepL3o<{%!tTIi}Ub%QhLxEF4;pka~bUcN&}2yy-(R2F3A(i=>| zE7;Perh+|N0CNIK*xcMKUlN@+USkBF0S*OPJ}eMqODB0AFWI7Y`$`u#HgvjURV3kr z7Q$KR>A&|yoq%}OX>8|nrU%|m>2p-%xiFC2LF1;F3gH*BvQW*hgHDTtU{F~(zoH&P zsxKww0k{ShS=8XZ;E6=;3^5`xfQAMUc(vW-W28P;JTm7ud@c(M*O_;?ne-eo9=vx8 z4GhEr3$&D_)(9d~Y5N*luO+`7e|Ih}zh=qxg{g@=uBr*ZACl<$N*xV3shp4wcEeUY zMEC}R2CKtQ>3qUzYO9qhbQ7T~VGlzg&1hguLd@Uhwv{PrQFZ{!)HkT%-CbU0jh{v6JrP*W-XbCPLy=_g>RBOnGK zv$jBt9t_-A$hAt^GNH0R23Y~PhhoKM)J`Drr8r${v=7X0AZMds_Me96HSESn%4P8fWPzucZ?*GG00)3B(p`Ul-b?N> zcT4DOS22sN+mM|Nm?AuZxP-)Y7WLvk6c>jWuoCm7`{-m6TEP^T&rpIe4;cPB-TW4? zIT4o7*(t5WNC@Y(;4jr`K?GJu!G2^7>|0raGV=yjl&VXBGFNT;*`LXX*jQ7eU+UmE z4&Imp@fWfAK~X4U-wvh_CI>^O&0rDqF6nqKB-sC1Ap?wa9WN%i$p8=S z$;@VkLBoe%MAkfNUaQjn7U(2VA*`C^_bVOO7=d0ig0Rw_sHmXuASETG5oj|L{9hDQ zY9u!xYGYGC4Sy#b6vW%el|(RYV0qeJY&?VItf4Rqa;`qu`YE43KY_@PGMu1P8w>?` z79Q#)*mHp(I4NUNHiFhCs-zT&JcI})0?Y&96~wy)9K?*6naD@OeSnt>{;fRR3*;%N zkQZUQ{6B2H2RPP!|2Iz3kfJgQsqCF(R7RO)RCZQqC}a~!Mu|d{Sy73c6|#4Bk|+sD zvUiywE6MZvT-Sa7pXdKPzxz0@`#!Gg>gGJZ-_LlzU+b-+t{x;HC>Z`X9$--ry1Njl zW2PW(z4iUO^4AjOC5Z8>k67I*sH3V; zdXPi>sJi-Q$i5jZyl10%^xBr`b`ysUVTUhc)m5XC!N+-c$k!YyK4lQWpntLRnaK9| zC@3bz^622DE%2*`pFyezOz5uO+F(GZaMniA;r z6H#=X!KJRWPSXO1-B#S65w{tm@2D~emoLx75tEsKm{`m=7ozGUZZUEq5xzY!GgF&T z61t`=O1E$-1f!aoLV36$vX+NDvBzE$2eLpIsXxnhH#qn=-6T)r;E{E^`Hnvn0NBK} z13$f;Q1einspCO!W@i@$ASp_!(;JNBA7V)b5vd})jyn4KJOEO-peVc8VsV2p5%Pq8 z{6%q&Wt+)*z-QB4V(Rl9&j2sj2V2)3*JlBcdIiB!a|W!DOymWaI^ENZWXbQ|5-lg z0VBVJHsm{X!Dz*I9CXVJ&z@Y0F7lqp?G6kKY(gqWYSwqu0Tlc=v~n6&Xx9azHGsCk z*DOsJaJ{Fe$HnU{P9p;j4i2Iz>#4Yg53n6aWXoDw+Qw2Zk0=dZXnU(08t$NYsE{yR zh8u(U^$BGK6dD)0ppX!kw6x)?x46!a;)J?Pj9+eUDtJ~&>RSb0+>&q5|5nCK7w{{r z=+TtH#99wEgL*-G-{Nenk){*_Vbl|R(In+-VBihT)r}Q|{&@esABQ%;AOw05{t-Pm zhr(5(gBd9kC!hT;Jlop5b|WfJ(@nprwXws-*P3DxL0>l55m}e0FOUdzN7b%%^)g7mu47p{CVUlxA8YH5rDh>iG!^f9+uQs=yc$7 zu`yr)K8*|EW!)Iw@uw0`*SX2=6Sxu6m?}`5qJ>TCc%s3-5qMNn*H)}c;q5RJLH5SG zqusR}Jr%^2Ksn6S>SCejCL%cKZ;8(b`n)7O*Mf7~G_NKNLsd_TinRfkp?@3{3#2 zd?jo~)HE|2L&GKJ_W&^)CO`oAPwZ7(;Hp_Qi8@dRAZekz%Ft2{wt=!~HtJ zrwNS(|A%niD9-RG4XYxmXu1F;+j|lWYow0r(63w91A$n6wG1UQ^X~22^fnb;I7NUw zl&t(+q5{xJBMusa`~cb$nG~E;C<7v6VhkN-dlTN;1@0-oG2i7sYFMSKk)3lO*Ky|> zN5|JyRWN!Te%kn1OZ7L)kIrHlFr6vlQMu#u{5LWWmN9G0$A3)^{OVO7{4yec*syx} z_tH``mNVcFzxeo_uw)G2(G)Nj3o5OHl;!e7(eTSU$a4f{jRTY_(Vp*zUJvC9c18@4 z3~}GTe_WQnq^#a;*{ifLwom+lWtW^vciCVWaNfAQ^}AI98qT-#Ik<N>rLUC==Pr90e%2wPZm&Ma7?ux-QFjUJ4Y9l+q9>ujA_PAI}Nbh4LS8VfzSOP-tkiowO!3 zBg*e8&^46b;5uBP&gb+R%W{eNnQivUZGCiIwtC51r$vd9Ut7$&znZh4WKQ#NJkHD0 z6L$}=)Y>bhoOvdvCaU@L9z(Vk1?7ieo~9u5;typ#KBkO81vNOmCgymUriRALI(xjl z7vc#ycoTr#fSDbgrKI}h8&1TXZdeWs2*?7Mn!1w8MZ_a`7myOa?(QyseOQkzbSSWa zgOd{kkx$WKhJ37RV)F$ALlRr?KLjK&$PkFt`Z-^2N-x^F_YQka-j}pS+-3s?$wFwsiVjx%>$pa#?VyraY)@*WcLOrDEOEJvDT|a|gLQQZN;5SD#H32Z( z1H(*wZRj-gT(ACk`ZVEm6p+IN#A`=D6^jpqpQ=sOWkIMMOCa(mNhC1;LCuoZbXGqQHQIj^Oc1`q z&8h-@4eSBg%%y^J9T|u}K$~m@^9$a~M!;G)zw2iC!7xD%umGME_i~QGDM3KY=V4BP z{vr-nA-LhBU)#t(n;xhoK5Wz~iH51bgbX8700Wo(nbrhF7Y3phQbkBB(>oO2%W}!@ zxH5M`-plUd*UqASzI;4)^^9&+S{}}5?f$%sLI+pqpK(Xuek_Kw;3}C|ScrRj!=4gL zVG}`uj+4&=nEn~Q9qc zux2bpoFu|D#>jxewtZGucptE8)PZK7hmRg1w4iCh1X2X(uWjHdC*lA;t^0>@sH5t^ zDU84IOHEDXX?~%@t?=ikGSTb-CkfP`yaqJ{;4A4vG#W8{`Nv2&{RR2djW zNA8#fStg^it<|v*_UV8NBYIzZR6?GcVWi>aL~Psi`c{Rl9H@ zqT?qN2~lITkC-YY=iW#w-`*nO!y&uo)GNPZD)n2A9P!~i7}ebRloiSp(hEjLHY?}F z8nHY&?$K(v8U3%&qYCIY^wSidtiovt?OT4e1OwywoCnbL6R#U|H0T)en2W3&B!@cb z<_aCUtUFRiF1%`7(F^Wi;1t8*k&?9WeFyuPF4J?Z2WL$62d$w*RXlKxlQC?EKdZ%! zLw_^V5>!&HE@YT<*nVYXqT|RjK@CcDc5B!6kB%a=C5MUAOl`>h2Xsr=62B(9sIF`xN({MZ=SdJ znV>f(6X)9t5#ixk48>+Atj-C&IhXx%*YU^n)z$fVNuSf}_joTwjPzZHY^&oHfPL6M zD=fvIH2)Y-M}~*CkaMD$%e5NNJXCCOB*A-tSeGMoX58F*{SRbW>v*1s@k+@({GOm(tDlOnnkRs@;aF8) z^4zgwhZV2Rzbx>xZ+Dqhw{KX>pmc^yMeX&hw>C4^4c^!v-x~+b2B;*K{}{YHKR&0zJB}dCu5fEd2Ch^P#!P6A8LOKnxx~eoXXjoSb3L zpAUOy)$N+`<6iwPRT*G`goKP@*ET+yi(e`#u4(HcYbnub_;^$+_fum*x7PH^(G1gR zZo`Vn2Dz#j_i=G^hRSiI(m^Z&n+K?*zM&z$BYPslsWpE-KV4P9=PO)M8zXAmO4*>c z`xDe1gM++jJYOIaolur2K#3}D&-Q2GDP^OW=^B}LH~Ige@3}JszPJSk?-HSph@>Qj zSoo+TkOI%q3{AWavy5ZlX6}~*8nuYyQ(pP|aQ#Nr1nnoSqp*_mfysa_56^+TJbO2_ z?GH@3gx_z;<>PysA4mf|={_O497gmcWHWBu2-zFGf2FpVS?TTDrlVeAxKE^3D}uh*OhZEhsefdX`8)O= zt8;$u?}`4{W5>0610~{-{~Bi?GB+4?f8R%W4oxTC(oK%-3oL-Fk`}Jq6(yfG8c4!= z$mXNN@RKG@Y@Zbew%N4_iQ8;3Yq)cgMbAg!W`Ey0dO9v1p4Fx1dxS$;4x@Gk!0QrB z^F~$IOK|JO= zugOyWmOUo9xBlfZz%TX$@jre7l$+t#;|8#RHuNNC5fBRnbYlLQmR5!d7XIUhhd=&o zwJ@yaON*IRzUjgxLQhe;2JR2W4zg$PPGG*Jk@8&W3)y3h3>i?q{pdV~&?LOI6u%3_ z6>53=YF?mX;QPbvr|f6o;0ce2P(rsy@Dd=U#RlGpPC&h~x(Cu}6l(1wo$kW=UmPdb zw-=bsRdCANn$q|gCl9nSR0D-1NZ(9o94ngU@PcY!wjn$yY}cq|o6=9o#_baxK0hz4Hv<#z1=RkeM1gZG z1`hop);{!v&|IKAj6X49fsCSTf1{5sI zgjr+|eKJuMBAq}S0hREuoye{iiuvDKgOoppB$43%(;7$wr3Nq(W*)@|g-ej z;Ux?jAWV*+Y9vZ^Ts<0n_K*)yq+_9Mg;f0I$Q_OYP?fF%G63>qFStg?hg2cwi|+7$ z13djc%qpaF0yX~!y3c&B!%}np#g&ic8JP`^tBbfepKiIB;Vj3qIzZ_f%59vOP(DG6 zK3yRgL`Co-^itSIfWeeOpHtc9k$jFHlkm3@!slSR?Vbo!Sy2Gvx}Ex9(KUi}065r1?AKh!|$)6kY<5ee_aXZuA#ES>)!iBOPpKy?NV)N`7Tj)!J^R8 zV6CNYYTI&$>zLPwptg{+n-erCA-FA29H38$Ik|Zf1Vuv0+_#HVJn;5HRZFULk`2dR z8;7{G!;pl6*7)=1DgcD{MZ?s1Q?5u|`Z1qoOI$zbOK^`9rar%gK>^oiPi4$*=)$3;^AZiKT+A*T5$W`-5-fLS3p3Zq*GB)HpGPimFSIPdE^Y_S7pFBP zTjyt^ctv;lS^S0XM zRDldTkL&9*5iW+{uebo81F}aqP3#UJlQke6KyUvH3OcG^6Px)$0JLE?BCxwx!=mC1uxsuq^)hdJ3g;EHBv>N|6$!&7wF*@tM9!!2z9P)95)hfI;QME4t!-W`h}92Pw@=vS zy)t7Llajb#Wo1y5XtZOE?e?YQxdNB~SQ(W_^e~bbN$(4BK2i*tZ7tJ;2*T57y}Ado z8{S>JD%29?a7OU$-P@SI@C>c@6d^6~yIo+-#Ve{~cPy#IVTKIz=mBuGx5C0=qTT=# z%sEpXY-%D{_~=4P)SW~5qPq(dCl4p=O1C$4&$Uqw(g=8J7y^76=Q-(l`un*vxD0nA zn-`@O)U*EB3xHnoxdySpFMwdj-4UI$uIm=S7oUaRwM0Y?fPpwQpq!P*V$Y7H!bJ{u zkQ{-;P%>3qr`-VauE>ScCG7f|hhB)?@C({1Ja)lXer{VM&6>Lzy1h>f`yrvlq6dKo zV5J8|kXIc|HS%=;1)^~dz=!FG>63;rLd>F!@1eKrrIZLH4T{-Uv7t!9r8Pf@a6bZISEC{<0}7PzimVrq)hs z&dN|;yGdb@hgXPs6Wc~e{jl;h#LCfee4qWjROjclr>JfJQ*8lKI^hf<8HSl9{lLzW zm}9Y9rl1g#aQm)Jb*|%-^ zhoe(|+9)R(ScDyE7FJcy(wH(t=)?{E$t0AH^e4o|mC!5{h>Mji4SM zf4MJ6LP`eaP)%XJxh?3abd!1Z@85B-uxNt!CkoXxcu2q?Z zX)zm}n2@Xv8Z2qoMjWL?{{dPf5Me$-JMJO$gE$G#(If4>AiS{D$E$rEb)0l%@#O1S z`2+d)TWozUwndyuGYQXVF)^e{U&}EwH5JaJLX6QI91gWkiM$K^UZ+ld=Ey=I(Cgq{YQ< zpmcHh-B2wNy*68J&4DHbOF~faM+{T7(DUmCn@s;&H{GZ|Rea{N^-lq@ zxAl#i?|jR{EmMi0bX+-}%u@;px%HhI?CCF-Q}k0@#$}Kz@cX5<0NVQ~nV|054>`WK zGUVH3rR`2Xdn7;CA=G#sU_8=Pp|S>zuL~}~^!GC7d5u!px`~7=WFv+HYDaCwAI;3n zy!*zk0|(k{o1C5#FlJ?`e1&Am6IlcF=gacE`mPc+&N10|gQcVIA4 z*AW@*yayi2!6Ch+xVyf7BQo`V6p9e01g8{Pg`lXL@=bTu{sH8fsNUC|C^KRxQ>!aZhFKKJhP(R8ycmAKrtr4S`Wt?sh1i%qLfOGC)` z6V7aiy~z1LF(D=#RB(&&I;6Qo`jk42$_3?|m4W;7l7+sITzKyxJIwT5@gWghB&!9* zgM+Z`&ht4|hk64yetNd?%!ocyw4j~uGHoQksbR9?rmuq9Hx&PBXeD{F_5kf7GMx=1WCVDIPgKHm&Kh!J=gn!d#ze+KKOq#*me592?V zCdI88^%>=5yQ};!(X4fm7H3pFy&FWHl*Bhjn2I4TABsL{-V0+I>Zb<7H)2SievSQh z49|Ts=$=mAS!rdfv#uMTd@H|(lZpdz#ZgK*ZAgp?%$4)mqy8`LX~@D145H}6b;`aD zF+@2=DOi+Ug?Pm5V`o0tIS++7cgaDZ3w3vn z>EhjF1@KtNwt>)9%VbBUeK}v`kNi*xtM&}W>*#<^TI=I_qxWq~@)3A{%D&&Aeoy(~ zqqhc8MC7IAIsKMYQH#;rQqQ*W;?0d`9sA#+b43Y?Gjj-}1UBhvENWx*+ypnNOv%rl zs_66e%*?c~iRzZy)+ivYWN?n@8&DI6*fSUld!Ha8AmADi5e8+iz3SMoKZE6;%U?^` zpPhJaIduj_9VCc@{4d+ufXb+-RAgH*3k5w;Q1~Nhx6OiK=SK@4pNP?mxU5l~5eoz| z7}lcI^E~9q4BgiTu%$e-dAJ?JM^N+QNdj+I5h~VJWSS!08VL4C(j|)Hi>9JehwnV{ z*t%P!vg)zVD<$43v!`kzZ1S=DsHvg&08&LLDJ&J}VA!%^jWm!vKtkq_A&bGEri1Km z&d!zK$49&$M@OrkKmW{)p5@*jxHy}@$`GhaY3X?Tt zLca$D;ofw%S=rSGxX^6+Q<1g-ten^jPrd>mRUv|Mp3kFJKiG|3CTeVZOoJIw7UzWqSp7}b)d8U@33;BF?- zCl4$xW}XSK{~_uuEgV9;#qjeP99)b@=EUazLbn z#YFmMT@J?ps5TM1evR=u{3%Z3-=v5k*mN&uV^rd$*oW{se0dAIIuHjC+@gtRsDAsAmKyc#Fzj!K?oHkJj>!eU0pNl$(aroAf5_tW@i*Yc za?pC?Ln_+Z+6MF+{{Q*fx^?*=yKwnZzrQgA@Xtzo zwzZ@Q*S;^wG&$!LY3I$p_r0D|@Lniye0l(S^!?U(fLDQR@X$`-Ba(R?xRs0240c1$ z3?ooB_*WN)caR)BfAQiLv?@p|!Aw_6Xz2_k@FEG5DL3C7;iiQ z#?HYxH;*4p0fh4fe}gv$VL?9I)(r@29Zf4h_!!Aa13i9pTt-&5_(QZvN9`Xfk!4;5 z1@l$>cV;K4*KzyVAa)n3%!0a*Sqw2Cxw5dx z1QID;$uu2KPBB;7B^!*xh&m3!6p3iJy$bfIq{8p}eqf$uGaYTsc6|sjFzz>S{nDWCSq{lqV>0KVfgu(Kvlo#&t^YS|Z;- zb|EDD?eRR_e%M07sxlaI15qI(3yWdzo0atG{yQu*?=NX>-;U%tI#2`n0*&_FVP`(= z3SrKs_gq8Mh{Rqi85xwT__c5fFrtWs9~H%W_R`!j%n%TQV&OdELy7&=$mkuBW7Fp1 z3+^RsHArsI%8Yp?p%^tyV)2S1tnQrte>l)ijiI!Ht~2nJlT;!=P=v8Zb58}G+d2FU z0EnPvj-nWSAZZiPvgp2h^=(djomHA4Omty|MW^xEcdtGk7G~|U%-rSMovm?-nlCi4 z@WSKMCqh`54(@-_XzkQG3Pw%$2^%g(kOf#H(+g%B@r4j;ScA0t_k$MF+vrPXKFX4* zL%^RC8m&ow4-y0-&p}wp08t0BpIi^{y5MQMujP%TK69q0nzeV@s+|pN%fjH|aM3yO zClG#q8O15E8~MtxLDn)aJ+7~v*bKEKvIcR!Su*pyjM~ht_7iGP5~U-_cC6^=Fws+Q zZjkn!f#}`wm6DGvaZTgFYSd6>0@&x6cZ&qJo8&#Yt}i)Q=)Uo7sJ~-*URq_;qxzlY zE5{FOGXi+{?)ECS)m-I(#l2~)U22Fcagt(MO_}}4WE`&%X!((pA26{8-0fI*c|6>{ zSr-~O+eeCn8?6btNMHb0tL&Ria=|2c4||Y^OrY`fa%f?GAG5pb$_A?|2hT?b%axYB zF8`Aq|L9R|^XT5_;~E{Eo?}@xm+=?a;%Suu1(kJ*2uENto^k&UZ5)})055MJpy&wQ zgwF!sa<54^1hS&NcmHLLljZWC9>tEDJA3YR$Z-qYGN=j+pBT8In;aGOMtA;DskueJ zxnzMR=txKtaTM8n}xqT9tTS)7%qe4&FBq_slKXJ*c; zwC6M5xv5k!-)*{Tr$Nu0P?W}(JKGd>bI!|6zvBk0K?R~F;qSCKG^hs;9wd4pVs!&| zFO>W3TUGsadPqS8SB)%-Z*Q>{Nv26zb@F7ZORf6kb~wGd5@>1|IC@lcw-kALuG_6G z6pfo4-$R44B|vGnx4XVjW2*j(7F(MYO=O2akZrhSQjdvFHF|Kfi<48~h18Y#DB+V8 ze5c+`;ksGImDW|bd7iH0T*T-X-YY*XU7|E3ZAs?hCvD9z6@=Zh*@TvCC2Vp2Hj5+4 zxk&;k4ilH@8|niJy0V3YoSaWzXwNUaaPHI8aQu2%r;3y^5nuV=0?4W0scmP6vk^EW z&_4n?fWF5V4;&)yY`5|)Zwf%0jlb&#UF^5&1`DL=7$ySBKP>> z%+KGWG5X5PceikS2<$3VpPN>)(DrMzPLli?&X}lH?>+v1P}XeHojq$KlMmvEJLutY zb>s`>=<~=wwJo+%K>3hTpmtXMf%aT?c07hR=FPoKcy52HOEu9o8fdBx?|I{ZOl+>H}{?Qt|%gHSx zF2bRd8VLp&aP$$>32II0JH|Q$cbH!u*nFFg_L9(7S@)O9Yo$HD`!$|Z0&oB=JxVtK z5HPK`6u!73VYT0L3!7ASVcn@C0!&N?4)$I4KbpGe;4pS&&UllI-7Resvtd--Q@?&e zcgKiw7XhA>KaLU-4DySMEUcBPA$AuJC-i97gpJvCvPCLgo4aE991>>$^hx$xT`WA` zEe;<7zw1oTa;+juN*`3Gk^UCzqM&?Tm6c^_>eA>0;`gLq>SYi9e$3@e) zV%BsPchk>F7-;#F@oKm|unbLBR21 z(9z=Q1GPa(TG`oI`nJsITzbxxyi*#9+5!ttJzd=uX6O&J&NuFtJplBCL{oqeBl{Z* z6F^j`hXjLy?-IMnDLTK!;z@yyqOH-9TcMlv)p*1hBe}Q#ZM3ErwNsf6_ZN(v2{R1A zazxAiuM8q3>%f+aA~0ZyCHiXBgx%of`E+UA#7taegsa(3Hn#KaaX%CwH!3LWR<6u9!MVy0*~ zX?>~IMn3+vBVPiNc-q;7KZ2f_3)`VS`wNbPgce&&@~f$-xd|2qXga0TVEV?%p@g3A zItVFFP3-rYPb{9$9UmLJEx}D=ekJ+!jbXmL*sq-O`#(Ox3Y$=S**vi6bML(cYom;U5zj|_smbH*%V%x)?)%rE{W~agWv6> ztKtgm5*FTVE>urC{($ZEk(~x9JgZj6%hr5S4PmsEQc8RKvN^mZPZ({_6a+7|wd#+5 z*2$TDh`Vsf2!TwK7e4kpy0_M^`5KMDk=p{SRCK$lTJOcL*~HWKenXx{09bBNo4_zM zg%4-zPy+XQq(?`rvn+I>Ro?z6ktspnrSO!jd%kUePMX?i4^hdTyN?NYRh^wX9v$Z| zNErQ^m$)DPMZ^~Sfg&PcG5lt$L=<)YC!W}H&?WkR5*ldETB_e6)3qSF0TNw0E*Jbi z%L%>~x$*-OxC*JE;rn-Bm`pE;qt^0Ao4$n9Aw;<7gy#cWJ{7$oO>2zY?>cTls@s>bu0U%P20P! zT`&Cn7EEXdYZ${5Zr$b*DEk@A&M2HnU%hG-oi5|*q+P2hyS(yp17h-j9NjlDdFTGc zh#2XBRR$l2J*PiCbakoSk1~{c%w)(< z7HG9*DA&h6+srZe?uGdyQJOVQE!{gQx`GWW(hQR_4J#~zX?aZsVhKd+arG3@ zEr7iSfOi9eMiOL>c1WSz<>PT7gQeZ=eFLkR_utcqEb!QaKR*Z@oZ+0p zD~q}mWxwR!S@`|PXiK8pg(Ly$TJZnW&)A(|E#(FC;fLUa>+rykDH}!{gN|Sg&Q=FA z0~bMjs@>Dc`|`7U3N?onZDPdoY010%-NbOCu@Q~enWuSv zjRbtGU7u${iVCoL;spIe;42C!`JbUGegM3R!kqAEbnRHEB-lcU7J&d^aIT7j5<}HD zF#dx_oog!N;4R$Am@|N9xECQ1Uq|*6Qx8@nF^)hXAA_@GFHni;l@aFrlb(|WW{%~j z9JqCc2i|;C@HU$3a5bBq$5fo{*d0(=BqP5Hp9No5No#vifb4HINEH@w1g1%I%}r1D zfj%9C9t{@*4bkNgsvB%JAcm;su8Ux{kWqllxi{Q*}U;%I9>YH^uX}F12S2XSNQoQURM>d zZLTc4zb#kBam(c&TM%P`@S~8r5L#F(fUpI@qk||mmjxI<_8PrZWBph7PIVahMI;Op zrmtaGYNMK|pr{Cd&EylvNL+wtm^~~G?B6A7PJj08lZA^J--18AdNuw2?41O;OLXcH z$c@~(_#$}W`_nsAmoYS8(EK%mcAw;Zmv?t}A6hI|sfcg{2Qd>Dl_xzgaDXELML1{cv2$L2IEpo=8EP;Y>$X&jRA9WjNFx9hgm6%1=UGRCAg^@9YFo`|_O-wR7!~01eb|-+K!I=D-t$E1-@```Cf8KI9-if%)x=l zeKhdm(%kCRYv4kt{`ps;Lq{1vabrsOI%F@eI}EpbhqjxCM}d}0H{$Jxs0`^Kmxmr) zpwg=z#DzzsMJ}(ff9`_JuQNSDve>}M67%%)EH_a3SXyeBMryDB!0zTHVlwXUuR@Mb z+H2a%mssXR@CFHJQQu{-%4{+YA`Gq&;qgzF%xnU$igFwmKdB60^;SwgI{`WmaVyW@ zCa1jZ4jwOJU}R!?g9FvxfAXt*>bkafuZ(65PFL$gVZTf?84(kQTE@8;BVrarc3B-ruz zCP0>@)tt9qFJq`s8zKe4wz&l*Bmv1YY^X=`wH@CJh7yvd?{b2>0p%0G(qaZrayT;b!h^jYOx%0*6j4M?oWbl ztF#ms6du3VAI26;X~Q@jbQyBLJ}Kwx%o7d&;OT>a7vXdLAXJ9eMq;8s^rNoC!NAi8^DAZhnMx~Q5pU7v%gYA_8Bg1A!XpzjRohX^28q#RATb0sS)oF$DA7pQ zgE|8ypdO1ak5xR{?;KKc-kWQ`fg;K0@Z*oC~n^n>&N?0z3hCyL{LYVi?t$9?r~I5&cO!{qO8ihD~ZKt+YD8 zNB}#!xglUJH#Z-ZI(`+&-rBa!XsCL=JLP3}4{${)<}w8`kq8_I4F3ZX3mC+Pl(M_T znUC~ZeulWmn^8bh_e)OGLgt`R*zA+yW2x~S+c0t2@XCpE4#X$Ds&=gM<$wPZ4(6E;S(mu7Pv-!vII)_kl7trM#LAOA( z#g?zK=HV73y4lUJ4MU>=DlQSV1MkpG%=40YFHKrnr;t3BF@q8x`8H8gY;b>wazz~t z6}}7QC0xcpDEI{sSvBEZ{Qj&%2eo9rvCnp*{6%yMoM=MxVr$l{0ZA@;AawBhE;vFk z`62||HOaJTLXORWO`+NEEa#e{xdGSs=pb9qX2Vc~3Z zGpstWs9L%XCxbRW-6dyK{KakWVu%UoihOU_-QX&L4x@P1jZ#e(zB7$FT6)U(gvBx$t6;;02uc*dSVz zhigwLsGrxOzd1L~JveOzQ{7#j^+4m`Q!=1Lum@t#L&FMd{2=kpc6D{(oL9Izv!m|! z#_7MYn!4ddnLj-;Zb3T+9VAY;>B_Y`GhtbkEn_$PvQ(-Efd|RuLtrRSQ=p6vOeWHs z?5jR_jMb-3$qNix7-$>rNR*h~bKl2t=B^&Hl7t$yOX7y9sp4ef9M;_Hw_E;gH`aRR z>dBKhcm_ioxL4S0g#y>d)ML^aXWDt=3@P|dQ=R_O>T%{jRBlJjk6{fTpuxHZA_YeQ zWYNX1L(`_aCPfd(#<9?AqWH}+)m2#?*k9v`VO&sCWqkUawN{g~<*4iT}`6MKk%+>3VPoK3`R3C7GFrZpg{Q<4Bqz)CFOXRO00jd}M4)M255a z*>}pm`BmTs=w|a{y)J*quz>9nR$k(BkEu=JaLsrET5XMgf=d6Vm$`vYb(3@JPP|^e z@W5C2we$)xNa6KMps;&?Zp9&lr7h5C@BV|?ITugrjfYRNpRUu?COBr;6kbj0+BI_4}|86peCNmUxhvDzZ^d4X#!~^vgky}A@k}-zgdn`>v&UMK_k|k8i z3zjnO<|f|d58I(o8c zaP#a|1!%@FKA;9+BFAwN*gaiw#>oq;9OJoRlu?5%LnzwjfO~8Cgo`X-KqLl3GxLzY zer8L6>AvnyWXOvgM*}CAqiL6gA^Qg;DGI{T)%RKQK>VG9`h}>XnK}Qu$sE|fKgyIk zOJ1hFG??p&h4GRsm`w(s9<`R~Mrwib*{Il0({+Yqi zEsuN`u6>M?F%8h%>2tKJ(qDjvW^hKS&>NgN^T%>3&@wK6kvy{+?UNNo76EjmB57lo zFgT(+9MLTWLI<_V5%5j2w@K6+Bv(5(>PZ~K=4x%;+R%3fa|Prwj`-DZdeP%$5{m_B zSNP9vaA49s$^A!EZ#a7pE)FvUX}#f0h~Oc4{0HG?7`n>f%3A_^3U6REIUtDMn8Xw( zU?$^!OeS&#|Lv%%=;eLag0PO+%Q%K${G?B2u*2JRd4)B_n4HZqM-aJmQ+qtT_#q& zpWQ1F3YUa%2;)WH(pcVM4Z<6k1&kR{Mt6T0BA^R7RlOt=Su5mVr-qHQRm-)>s2tog z4Du>Zbb~IMbE-YfQhEC6YQ4LY)7=%R?uretrtRNfsKjl?De3W9TLkMDvu06lHa*lnVu#AMsj6~upbcr=jiCg`L2NIWZb{#!gAmYMhM9nsTFS6+z>zjzxa=D zdBO-YwuG61CF5^9Ruqi9gL7{YuN92)r|=EmFb2|}#=nL+2;NBk$xf(ybNUp`8VjNqHJmOddr8#Q!Nu<;vmc>{xCVvrd*xfGwM2F@^gwfZ0n|DC>7f7&OshL>+B~~Q zEofXA)Un-&ZUxWnog?Z_#l20V23=rx+tu_ol$gvIuTof4{ZI!2Xy)A8|!b2nB9~&uh z6;XjrUs**L@H$1u+Cd=J@n`Ic^a*~Xg9yx=U-X|q?}6N)hw@%5;^W-bHY7)mp$e}C zs)rPgf`1d<17NnFbgbU-(!doMA-EoZMnJ-WK^*U0r3e z&Hu=D%~sar7LMCNy#+({f-dfA6y4q*Bf+R>upvp!kGx&Or0hoYjKD<|v1&9vSj576 zL@p$vmVMsbh-!+2$Vacys(Ns^KlGvePNzlI9#Hjg?6Js2B2_FY-__zOQiEYHVqnGvr~Q0@<#%{P{a zlkdaB1CbalmWc<(MAxi6`(WRNIvW%{q#{HAL<0TMLp^z8vTnZ4JHz*Ytny($n+91~ zbvoKbTd4!)<{Wk{!CL`Fm=zQ56O>y)-nJ0SJ_t9E>k}yKf(IO~}v# zw4kt!5$mB#MjYxJ9LXd#9dAQ<0wXS~StmUeaJmwCG-}|Yd-)rc-;Wj!mJi+ho*)*d zlzmpN8`vbAv$v6Zm}lbMYSIOdBvDPEX!u7p@!d<~Y2#gF)*_&?vvY=l!@n|@_H9PF z39UuC@z(g!R-JoUjc#QHGHbu(4{As9eb*O)3K9k=BHjkMM5yff`I`22c3dLPTqm`i zo%iA@CmM{e8G4K<*C9*CNs0jR-DI-ex-EZo&}_h5ry9WnfZAaxaLWJi@4gL5L0fgY z3a@q52AMH1xX8=BoB1WVJpM!daW!{$6-{j=^^qgZ!9RxH9tNs~`gW7Kxq06jb6#k9 zkzVw!-Ps_DM;)mph$MyLu`FZQk7v1b+kLAp#>Ih;Z7tdlL2dxhrO^s~3-xeYQlaa? zM;~oXZ>5I=Zi-*TO_FF^5c86m0%NDK+l z4C;-#zH8m}U4Qm5Gch@#O-0nD3bb^PNp zhGDob*TlN<^=BiIBd8e0M!$yZG05LY(nj3n%PWkq)ec5~_#l7l-=FOTtp>U)M2ce$ z;;Ltys;*BzbwpY_aKzqBj2jMrFdVo3x|3s&Ns+d*W2x0i?kTw09$p>W`)dtNOZurQ z@O@`P*$iD7>y@>tIaL06Odh(3uxqhJHW+lG72Pv6cI*Mycj@m)JfidBej?Y;Iq6xU zu0T`~?@V7YK^tDpCH2o|S$ADqHOOk{MzFKn>JV>!;kvUcJ{{6_71ok#m z!TWsxx~6S|$;a`A@f;maMs9Xa_8oqG&SKl|xR#MMM}y}?#)v{~Pt`1BNNkEkE-EF( z49zZHUNulyXBU_3gKrVnU5o3o7T=VZ5OMp_V+MR!>*y@zhJe%{nbk=7V9ChuM&1T8 zIV}MOlL%!5O=DJ^ZL}KZA_La=*HN__lOa$qeS#d9T+hMG!rB5%M56}ui`03Ey|IY# z2a>G_GoDa%Fn**2Ku{9**3>BoZU|8mxWk6)qJ>Eh50P&hUq9xN?F7b=h{lZMwjvOx zt0nZyBYF8L7y>SGa-JI=3{P$a{)lNU)8#|uyy{B3)de=Lp$`jtaa+wyk`2%k5_ce|Uo4T4 zMf4ah?}QTP->`^iO7gALACFfE)lE)9<(jYK=WW$ku48PagLi~+id%5kk&!ytp|2d# zIRF+|jj5~oIt;nU9>LTWB6YN9qC!z%hh`EvI(P5hMa1DC?ADpb4AZkewgai1hBJpC z;qdWL1LWNVHU$Y~0hlsr#5uB)Y@*p|f2pgzLn*k{$k(7Oi^G6Jst$5*G-(KxD@n8X@D5%XWVjV|NG|3SA|UYcjq z;;*}yQTi4+{zN*6v5Rn)`QfZw^{lHIOc|oNV32|paT*t7&e@txi`(FyBV+TRRVA}p zKr{Vg=|W!1fMoO_?jX`4;O964jz0ca&L(cP-~YwL(bDFt3n8kA%%H{$#U}6@z|h_y zg})A*i_(9NeFphoj6gzn!Q=_&ffD2$>lpa)&>*V9Z31(MptEwX;`8Pom?(k42=OF0 z22sg10KI{-X*oHGgZ!VKwA*fI3|T}FMm#GhbV+M`L771wn6!PY{b!ofun&Wis*^S{ zG&la`Xkcjk>&ftTFEV@t>F*WN3)c$J!;w&(c1vTp48ft%YPHrw!5hakCpcPy(5us6 z4oMWcixF5x{QJ`JxOM|oEMim@eV~r=b)r+UefSgHth~!3cxq=iz>kc@Sr3XCK~z}} zhkQ_S5^yJHW4@{JaGKMFu@RjTW++U`mgh_%DjF1r{k3TUW;=DVf{k zRV8YZXF|#acXvJkf$w2~>@o8X@b?%of!3)nEKq8AV1UHL17_V(YSBA^dEeX+TERGs zEs8M;hbg+o6rApO8ofY~$R+yl!GC0-US6=iS+S#4Avub;rlAh9duj!W9GSa7y(ew& zJdqzBN0Ci1Dd@v-__kXY4-O4Q!2b!nrX{cI!yj|RhE7_4HS#Q1G-$*k1=Jd>_Ea&= zkn96;Rs$z@h)(D7gd~4FX3!Y;2kIdRi=qx_yeM(W%7#@A@*H@)1TM8q*NKb<6mx@r znpjWx87NB+qLoPkifj1egJ(l)D~9R+htldc3jRCJ0d>#O2%bY9M5;b0>wqRg)q!Cn_-`-1 zPF@0(ApH2Df;SuRJHS2wbDx4l^0SewfET9?P~yY*8qBfBkS-AhJ;Ac230cHC1mg%U zEZl~Ik@zuj$efSM)f)7EhHr)&<}J!<#Ilofpw-;#7$+@Yt4cH{3&;h0foZE$<$tC( zz+r3!D>nZ3ghT_en50F{q4K!QjXh3~}#&eX*?a-C8EDk$&Yym^(}(pU~r zIcOnqb5pU;@<9k8cEO#CKx@M6pywjt3t$XE_<`>w4r|0tV_8joF?9^bI>4@gIY=4p zN8ZJgWbBW@ainv=7|=j;O&}RadU8wdEp(G4j+5AAw$T#=6_*le|0Tf{qn7}vWXq$j z1VtU7aI*2B<*r-S0+X5qYRRPoCZu}&1#N~+Ggz0kmffClu>WHW(tgC+VP7IQi=>qT zDFY)>ULLA<7@DYivS%-FsgCmk#bg$IuIf_S?qB&FT@`6t3FfujJ<0I3V3hM!$Uq>l32QuIbV?+IZEIHsVfr2R4c3q5t*aYSc z;*6UC?`|w5fw7uoW*Q7D_ue1Q0T`hB*9-4rIyVmg2XS=G$Zoy$Z>SI9p3q&^{t!-m z$vW`}cQvH^P`{ZD27+i9fMN(tgA{t$qA_>@QVdGxas7}eM@V3K)QK+NaB;1ce1LKw zeJ@Hc4uz}R{776QW&o`EgdqUnl&CN?*DhK4glgHV1|C@=QD{PuXXmdui|q5GC=?|L3R8_TTUE`0r7VZ4VsZ^F80s=ktEQ z-mlBd=T}=}?GDP>t1X2I0rj1iHh52f7u*k#c6ZE8eev$E2BmqQX=F38B_n|sTdFf0;r>j_|MykJyCjRyykm?Bq9Z)c z)fvxW!O$ot8zhR&HAokK%H_A&M!QBzlEg{9$MF+Sra@EBQzqL06S z+F7sv7wYvGJMSfxOc!f)yD3dnp>pOcRuGH!5}b}ab4&tYnCh)WUq1rKczAy7WT)cg zsl`B=auirznAxjF56gY|UQF?aj~HRe<%;hG>QFu@YmU0pb^@_jG4PV%)HHp=XC}UA z3H7@TnzBfdpD*J>2Jc;+_nWtaa6kZ1nqF|7flV>KwE&EX{U&_85M-iPh9unXYp90 zU(tH7DoFNSWdXNf{j<~u$FNY7BK!$Gk6svG!r5=INIFLCVHxi38aq1DTx=^`-w>3y zQqtu1iXG*)7Z9wt3NPTY@M~^+sc;Nhz%KAgii$aY#jnWCXePHzCXnPzEDRSm5K;aT zIUBEfc|7GrJqWmXsMZjO**0msamQ3V2aiX@#TnMGnOIM!5qB?h(?7h5bdk8#}Rd8y-A{9R+2%|t)t zPIsez$0&HD;_+qI(T(3XOxjS9o(AA-SPv{1Dc&Z}s*`hCeqAd&h#W1G;<0SRtJ=hr z0;lSN`O8}$u*QXWjNygK`LpKs2$9aWz$I`S2mB$pEyldKR&yV{X<&EC%531=$bRql zM@9xX?HUQygH@}n& z-JgygJ=*@Z?d{vD`|gc6%i|U#vL%)2w}FyG*`>CK$VLt&^c}66AQ1hGJpu8|960Wj zc2s#w@TdU=2<&&6eHP~rVJ0!c1RYY&H8IIWP=AwL-;7nvV%v@lC^~Pr$ub?hv zP%FsSb*InxgS?!BfGZD-^HgmXUC4Hdn|f_ktO262tt${2KYy zI&Y*owDBsVxiH5$2$k!C#K2VCGXel|1Ix?g)dkVwk}ZmcvE2BRCyzHsEAB`T#Prx z)jls*EqcqM7Zzd6u2hyad`PH?{Ndtey-&&b&}^hNzx(CBZzh&MB9p>!pf-dB*nnjz z9=l@Hg|GV9m1RBUwz*VWcnRvJcDKQ5ADQU)pp`Vke(!(CY%WhKi%xDd@!eMLKV#Y) zgP&-(ImSgCWZ*K5_Q|H_sQ*+s4UA1ZDH&8|qgx>a^#*Mle{m5_qRQwlWgd#+K(?qr z2v3kr{|tfbIcU%(*B$pYv(a;6Pm;s!9jAZ*TzM|s3 zV@p<%1HAa+`fRa}83l#V#xsS8X%g>*6`n+a99Dxk11AP6XK#7G) zm(?w}Zb`*ac@E7+YmF+Foz<`Udg#zoKGqcANz=`5`kAlrf1(K9YWzn=Vq$yG{{24} z95}FBJoQ&`Sc-9_Nti*<)Oik#lYMFRM2*&O?6RJ~{pc|*0LoI$O8VXDSl|%%&A4%? zH}Z=R(DAF6X?yNT*|_!OOacN}Ht5$s80stf1*vvNJ*yi9Upjs%%|dRn@vhywl{Ag2 zKCvo=`DTEXUV{cvr;K6m67h6c^<i`lHXg9G-jI!`DOBl6`e4`CNr2 zmFJfB5XV#r2&o^}+-9=S)mK~dQ-lw47hfGPbRG8z`;wb7ExmMI($|K8*%Z_5YxTCx z@9kz_904#v|IZO_(&z%^=m}%13)eg(G-Z<}IgR?25XtTbYaLN=0SyN-x9&G_jjnKA zqRu^F*!KsC`I{AAd9m4A&i^XUQNMbva4*tdn8kS1WZjFwv>%Hp65B~skh9xe$n}kG zGk*BWKKignm&zYPAkq$4kS#TL%dVQNW*`Ki*pT0y2Ph3gA3RkwBUYM znIVS%r>hP%FW`Z%xzz4?A@J&0c};!jqlh!ZRi*C&ZgtCHS}Ra23Yq>Bd}6%E@_zBF z$zfbGb^ws&>6exXlZAsIziylT$O;Cb9OAK06CeEMZQGu7zES}#n$h{<)Ysq30dnXC zx9r(dXt1EB_a{N6Cv3LDg(3sX$~oZ_#qVaX(HhN?lO6&gJagvm_=TQLU38g6wrpY3 z7wSgww;y2=Bx$>W7HUhBd2g+2cRhmUt_-!J!x5O}URm*a2`BuB4rlh?lXp`7=VGc# zWlb~!%#RQBZFaHts*ZPY-dgF4GJ+qT%-+EKQ7h>20YO#<2~7-M+BDj@P7kC4utiAx zY1>pQydS=e@{uJ={3_Q61(guf2J^v!TPNVEE0*z-@6^qu1`l~RFQ2=C>D3jxgU?!j z!;K9|ys}PxYxM=+o>dJ&mxKu0(qLC(uJJ4AZu|On7^P$90)Nl1$NIpUBMv-p3(vSQ zP7?DZkpfaaOqIW*IO7TMk_cU=^0cYV-XycR-?h~qXa-+g;j^*%8`mJ9f`*3mdHz** z{9bMzCS{ym^W*v+zM|JobT7&Lh@nrE(YGH#KN2=qfL?oJVysz^G~JsMRy~LOF5-zI zZ?dHt3<%p!2^9Tx)rEWVfr;~%-aBEV(wrkVp%WBjT&Ncp!m`1~s}cYtDKB_o|5uF; z<;S+D9klPm+!PQ}#LBCY*`wfm?lQ0D2rn-vL8`q9o+m-A=d4sdIar$P8Yf)y=w(@F zmM=BXE_6$EKm-kbdkynQLJpZpD?5%Jp&b_S5cGb~_s-mlo^DpJP#AmG4)GVk8qdnh zEy{;ap8OLf%3!G$`*avw1yGoVJ%5&tUoq#$h~&GP$6JFrMd*chU2_{eWy<>tJ0k2+ zdN6YoVp!w^HDlx_&rT?ei04=krp`zl}Ylu~@bcytGHq?$Q*FIIsX zkeSiLj17}`n(!P~T(tsey-7}7TGhsA~zCxbwwN}=i)G_$c++7LM(Ad`8T_UNmcgC-6YBS zaa(UMu)FqUi>{};`|ZB_fR2kKK8%c2Ka`3=Jy`aO8@=a<(6m*neicVC)w_N2rM}Fz z1ZV&Zf#J>|tob;L&d#WY&m;tysFu}rv zSTg#vPu-whh=DbXdW1W#sa}&Lri8~`!Ff~o(bGn#1Gx%7Dr;=3;7xD=I_ODJ$3I12 z5pro(%~_gNE|VTylw)G*xpu85N#XWRuLbc7GZwTsQwbH70`|gOln-?6#qRi+HlMeO zPTlartrMG5RJ$GM+}ohMKLz58y4uf!_{3hwUz8%)2Ol};rJ8o`;6H%B>eQ3`|0tSU ziX9@XW9=>zpoPy}Ave-S*E%m3@6L#YPjAE)zN9KWyQJhYCRTjNeF^@7)umS}hEka^#@em;c ztn|LYtB750m%pu|zvnm($kQ24pK#?(L!!RZh1~!fW*G^Cw6wM`U&XU!apjdj;UiB0 z#|H_2;>X}AVDE;HHXzvXWB@>efsd-lT1rwJT^bv>9lIxVPFu_l<3PcNt>7yiQ#9^o zYzPwmfA9d!xw;jE) zecip~--WdGdNt;`7x7^B4HjkpJu|nA+_&$0i=#}mPnZQb<-(!5R1!zJ8p9Wivsf4@D}0KQ4t5y2RuxaEC}1bo@sW4)mJJI5 z|7Ob>bRt3fRc(|C0u&Cv!X}?t2~0DUA_qv8=eZD@kR>{HLoi;TY{9k1%DMg2n7sAX z@5e+gt)10mm6#U2K)3rBU+A~AC+iP&t(eM`8;i^wnlH6^Sl2})j-hWCDQr{IoU<2+ zVR~x`5dgKdDug)xRHkglp3yf()ox!bkga=@DVn7{B~TPrwZC5NLO>Uw;v8xP@BK`~ zAKB)Xe=I*p+2B1_J`cyJ)w&uz4ys<++9k~IG2ie9HDOXIymfFRrKkACqT_2jS>Z97 zYZK2j#y#_@uNrPUxdJ!FKHAzuz|Gldab&QDw&#L9{42Xc#4eW))|)bAN?OdkuiGcp zx2*p{{klQji-%V6B}1ge-g9IptYs}xP4^(qagbf~J|m+=oxd!0-`rGikZPrJ*zudr zOEMbN)IMJ$o&KNs8e3L5O`m4N`~Kt4nV~+TJ15$MHSGWSr2!vi#$xiXu|+%GesX?6 z!SNF(G%g0|9g&9L;4D_w0aO3$toZteKiO9oKUh4T$GGMn6J_N^>Lx#sN{S8`L4qzS z)Ft*|xfG>9bK(f*0XO9a(EiQ+@v{<5yt29rgdXn=&dXDepQS?lV@(Rh2x2&*;I;$Q zJIaw|66g{O*bHJp%jQ8M$N6PNTVT+qz{F=Dz?Lh-kJKEI4_7&-F4v~Wf}v(V8;)V% zlduUZZOuB~zq7g$x9JcSE@^YZUeCLaTa|C;yD}^FXuVtV=b*E6<|jgMAm&lL7Z}xG@JqBjb&rC1`gDp$~@e_9AJ#_T- zo=@ofj1MnAx8kXn!vTGV#Vw``DygIP1OCDzRx8<_jK9uEVkNlAj`GY0xDDTAgKZOo z4k#{aRFAMR9OXKw2>86!f4$mTDV#(p@rB2HyimoW+2DNmojG4_^#Kl9JFnU;)Y2b@cvQRIRceRD!x!5yUXij}V}|E+mZ z{Gt&EcE$=h3%NM)h43$i_7>UCVg<|Kp}O5|I8^-+^e{;ImCKMb6cW>UzhFvgs?)^~ z5Clt+J%H&%=E8wpz#bN-Ub@8o$#VpsJnNoDSV+ha3P%V8!jqT{BA`G5e?aK_XBEji+*S-4!P3B?8R806K3DgU|V|3#IMwlR*KNDal z3THT1exQ;9?TQbi!Q4A6ghG|{^jzwyLQZ;-fxA5Qm&eO$U!A)_b-=6D`OLEj&5%c zppGFe0%s+$gDmU1=5ttNZ>2UrTv7S8c!XJwg!yV{&u`R&VQT`7*mg@dq>{(+Ro2R9J1^ zlcGD&A~|)-9jD(+8Ck|1hUde0RMvl@e&@DWu^=H;2v0y+XZZLudHedVPNV)`&0;D4 zbqpKzK60v<^QqCG{0A#5@=a;}Z+tc=SS^bnUOa2VYOIn3-1CSfwfIdJ}psJ!MZ3{% zvzgH?eRTY}FT1T88sT2r+UCeam}^i0i+T;T831kno_R+txkWXH9)!vEY#&?XQ0q-^{?2 zD*Td`)3P#Akk$nLQT(hCoe%WX2$-EQNbLV+b{ZHqEIxp{A%!{2NZyO= zpyASFb_`*QN!{3#JMb3x9a|W6I}?U-i>lE{_Ij<3XeSQ5u9QgVv+;|7+W=^EE^GwU zGw5AZtO-u5Ky$pjcV?G)g^b&l z_tN|GJE_z3r~|htB4x5|_KB(8E@<`XGrvJ{taG(!1eAPPXw%21kj8yB&YF}_bci9_ zk93v*tuaq+`gHF2Jx}dylKfde_59>o=rUc+zh3B{6_lzYQxYf%Z3x(>#y?W?+0##( Hxo!DhgjR{9 literal 0 HcmV?d00001 diff --git a/docs/course/04_IntroToTidyverse/images/01_DataView.png b/docs/course/04_IntroToTidyverse/images/01_DataView.png new file mode 100644 index 0000000000000000000000000000000000000000..10c6e7f1a0d8d990d5a4bc2fea5992156a999307 GIT binary patch literal 200924 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
0(%vdbl6Q@1v4K-)r zn%b&r>0$6M(rkl#!K6hC-)%860mAqHvXuqMlSJ3jbvG6|HaPVily_pnFj7pad(k16 zYuDPHAz=~xJ=7Qh_)57_pZ>a$9Y#{I^+sIJqpgXoe zNIO^<+g|PIB$T3H`RCbRMW2DJ37G3X7|8uckEC&ga+WZ?;t@(CbwrJ=x$dGv0Jni6 zl?}NOlMbvaz%}A!4AUFGzP|$}A!k`u8^#XbsOpy3!@Q zuAE??W0@PL3nL4ZG4>~EIXMi?GABCm;$-CHc(RWi_xBe&1MN}P%#7&j1>5I%ez%S2 zY5c=>@occ*rVuZOy|AZk9t~UiaKg=v)0efa>p6`(1kKR-I~-MWQ?w-3e{s&W7?+0_tr-jwcvP@T7$epVGKn znB-L#bP=%tTM!2qbtY~=37UDvpC1N|(hTUj>pxlmOoLZ*Uc3;>44LvQ25#Ksz&Wk5 zV>&v8H&{Rf7$$Pm#O#bSQzK@$AlLs<+R~iKsVdwnna8BoAeIw~0B9co8ywSC8b1< zKR&-ct@HT;+jW+)<8v(1pWphDs#83e>D&|+UHPdZ(yT;o(KLujFnkH<7PqfIWz!ZP zo@HGAh!#s=v}mRZOw%dv@!R&ilrm|J!W(^IyN>l-B(DWZ~c6b_HfG{^qafRTAKP zIi)VJF3WYV_|X+9~pQaNl{vD}!&m=IX^* zK~CX7c=o?YJ77UfD*D;bAo3o|9i5+=$#lITK}#tnbhCj7FtCC2L{OMfAmiLU)Na_Q z6&a_jFfdRVm z3A|n&w5Y;BS#)j-?q&-g9EpDw$F0&U`4;8vM>Ar;2O6RYB_Ckz_&kBE@G^REC{ejKgmzY>|t) z=Ie+9ob&NSs6u@b3lmKDBtqM!#9kv(dWKjryyi43LRnZI)A)ol0Ez=1Wde92wdMSh zeH@)%ik))K7TA*I^@h4@rR4GY`g#Ez!hB&|(KSB9Jd-+3Q$P)@9+NM*~1 zs_)#T3!?`9A|rxqToE)&M=-VQ6#6Q2hzQL`^@dBW`>FvX7JjOE=Y0cb7SHe=5z1eyU=$-4)5ZLlPC3UWvGnq zim)awHD6DfIuODQZRSMW{w^RgbhV_p2x39BTkiece0+#yyTA7K{fM%u24zoYZTivv zqmk0efra5LHn9&+?NC>5J!KHNCQ)DO$J)=;Q+6BIyluCBbArp25SQs|G@iRnJ{&te z$U66dTWpW5<4InQ(J$>*;TOol3cavA^@S;=BYPhdhSQzu0Nsi~CO3Ba0(=RY&{?m` z_b-k~0p)Ms3K&5GeA4MokgAWeLzZ~IE4HdSHqJmJ!uM+5vE$26-;0MTo3qS-7L;~o zzkFmLR&9K&@Z)$2O>AJ{?y|c53U9RD#Y7cd`M-3!qDZ1UU)E#79_3Tp>9eA~?hWRx zDStVZZxPzjTa2Va#=jIpK)zmRJVS8`3KERkgaUT=Ay%0k7hHteMuWn6CpXT`tiL$hxuAz({F~W#lJCh$PjUNG^pd7K zSBP=MEMui%T9Iqy}{g2hjAh+uAsJ_aOXDG50i&Ff7@3Z~A|?m^)s5GX#E(E3oZkwGTS!~+jC z(NnG91)`9hN?WMSIj(Rwrkb&R*diakrbKmw{XCK z(ghhxdg!N_n{hlDtC?-_J2MU6OB?6bwd^=z&^TS&z~Fw?T>1D~lfF(tAA@6(qi~;3 zK~gL*ZC0Kz23rL7d51R>4H(R9Fb@{*%Ml1M6xz$Fm$~QKA2oChc*mI_B~&ofT$iyC z3Oo@Bnc&eu$;5#2{5PX(G*CCM1!96%?+zEvhr!8qyQD-46&yE=h{O&L*FP0>9`~H~ zPd_UoHRR%rml+vIMHlmX#M=w!HcM)$xtqJspRUzgl65>!nUtQB0oRa)*6_(h#W4HZ zvo$mw&nzV&l~NazzD$m|B^Sb8b22IW3+SH)b=0zrt$9g~@<~yDp@VX~<~QfM%9~R) zm3M-UecIk~VMdYR1+|MuW0is`UhQ8yXJ`DRV}E{snz@@j$6^Xz@&!~^G|1`!P&+SQ zzQn#_G7;=nh{r>Z*$$XCe(qfJ!FDfcOUd)NL+`sDZYm;EwRi_w%r+wblf8eO#=|}J zST3&^*&VJ60kfO^^IeFfRoP2zeRFefqZD#@BrhL7ADfntm3)JCcU9Hr6V;7136>dM z0cyapt|Y6+F&{}F&%*NItmjKdBC;Y88`_Wpfe!Wavo)S=gfJRjO}H2j_8KvcY!A{N zM7W9s>Ec+8+cFEGkHwsptRgkRQXa zrZhNKx-{3%Yd22iW!D{kJ2o89aikPnL)^Zg-l1xp$P9Mwml16i++;SY_Hy`929t?l zX(ZG?q@_aadL;Sqg6xT-Tz>_q#yGU8FnlB8JYYSg+b%;vA)0yNWux|Am9KXaIRo}E zn8&|~)X!ZvmIEH-SSM|lEAiLqI56}548ya3?+sgra-_&|Y$uy^*6!k*sxrfM@(_t$ z*NRpdqL->tEvNX}G)dWK!~Meb!&aG_no8TXHCf-U_wAP<17~cX=2?)kCehnl)z*3r zP38C<8+MjRt$SU0`_Sb2ZNZ^(v&}f{sVZo85Lo6B{mbUorY>2XPAPIydi1zVRf)Cq z$Tl_y(Ve0T90^Y>X4P|~u#(xF*{SQT%ZBTjnLChq;F@K3;bQfRf&#r`g(~3_E`4Rn zH_XJg`T_%l?KTv%RA8Y+Z9+$@DxP(oDMg`3f?nT2gYMx?Ibs$oqL%y#4*~ayxH>iJ zf9}DC>d4s4QTwJ`PKdkUXyIB`7VG#mU%6{HkE(GCRy}@yg~y&Z&o7Th1$y_+oxNzJ2lAap zTbY)Q%&aymfBjk{C=LRs7v4g~Y}&A(;MLViuBao}6^UNtHEKP1)&@;Q5ZIFJM^?X? z_3rSQ|EzJlsfbd>O)1^voguv+uOCTfo_>CQ$FDDU0EfuwiEa3>Zx8-I z_7i`Hk<(tM#wcV4N4`xg{w3q|QdDb{U1qV1RVIMKaw^%xO+S^mL$6}z#MoH;N$8T1 zp03lLY=10kSnQV=2W7Ksr>LO-kk3wz(fS?5QdPDYd``@wpx6Uk-=SRNe~~$aNgM1uvhF9DpEtpB|jR*(c-h`#e!P;VX`l zgI>PsZYc(4l^>TM+Y{bX*6)==}pl1TeE-nL%@QEQiAkN|F^AyZ(`)T zL1w^^QL{=HneFN0wbWF0U+;5~Q-@qicyjJqZm`$izl+=7eL`8!m9|NuvM!>e()*<%)mkgh*xg? zMM&5HD6o`umk@6i*@#)+R1pB8j)?!V4Uw3L5#o_Ekm8gy=X-86@}=3Ld;ZLxKXNfyE1V0-$!&XMr$rPgB(EZsw6rt`Og=Z!aZQ2#f?|^a0Xa%p z7E?X}OkQ@X)I@+4VSH_}Ag<_#wTd8vHX%V010Nlu^`26cig7If)8**R5nnE~UtYRL z=7l_>WpC;z9+aq4@eWL-5|IFU5cL3pTsR~VkqEXev{2Ok@t%T|0@W!0V;+F0OWEP^ za#=Db;EBM#?y$Fg{`AR$LX@&zww|Rg^Yo{KsGi^`s>*cqzD;W*>{3EZhf1G$brgdY zsA#UOTiK8D%aHUa0e>J(Qg8TuoOKn#P-i-%tE%szR~i7{B!o^1pBEVXaIJ)Y{E@}s zI(yY!I;eqGEI2g8+rT2dOF;6frgr}Trl3&pS-GT2&?+-j@#GV03Q!S}f!cAPguqyk zdV5a?WfB)iZH>Sw)_Y*u#A^^kLfqI*{<_c*3G#;6z)JG2w2GLM=|_k~-IHbV$4{QT zOGJY}!;u&5#s!Lg|CTT}X@38%yt1j3bfeesv&G130Q)Y(z%`?&t1B=t&!xl*4d|_8 ztXf&;LC}f7*#NkvY=EPhNSP6)ID%1gK%xw>g7Zw^I@eDcfT~0`_WA-)0hVG224 zQxr0zyGKRs^Nk^D9`T*c27G_0m^0z>NeR&QJ3P}{92nB!W1IibQx1w+LtQA&P4@e~ z{rk6{M?-z@!Go0v7tg@1TTUGkVGtXbtX_OeCQm-5wVm$u()GJ3STGramdJrb_9^R) zv*IQaUJRo8-&RKHPZDML&Yjm)|3;8H{rZ&%K9 zcq(dYYT`$qSB^GKna<5F=Ptqs;OUC$8?;7sZ)fCX>JNv>M0v&>MIl&K80!$1L#q|X zhHM!vXU86oGeX8yO|N2_6ch?BHPkaxM2gB?x3TYpQ;GgTjs2z}t)+1;^Kn-9L0#uM ziw=C8ii(u6u`vej!LzqbL6{Pw^Y|zGh^W!oWuf}OiTRHL%L~4V%Ecw+N_!_5>*$>D zA49*MF10{k7#g)hSWRLlMOdM4P@;`aK-@+;I0FO2XP^~4UY%xHBLgBCd+r8`-}JF) z8e1NNa3_KJGa^)Vy~rbFK?>ax?`_tjTjxHy??ayeU?zOptP@-9FrbNP@DL(%wm=U9 zky!q3P{M;yMY<25mK`;Fwm&CgJCVH2@j<06Uw@$yt#A^Rr!WHvDJ4D)U8O!-`#7hq zBSUX~J0O32b(RXgFk6$q?_@)j$7e5{odI3C9|{C4^AYPi(!W9$EkhS^!W}~V3`3X% zn1Ko)@@a(xDS#>O3S)zkBeU{jClbL!!6$Mbc&Sy1px;I;F`JH_o#AEi+K^u(a&kKE zJ-bNaIR_jv$arBxwl5Kx9ztBeW}xW8*u>T9feq!my^Sno+ASr3NDv+t!V);a5SiyNScMAp!AXvq-BXrs9`5vgAyY1M~sIzy5h1sn2R0r1^D*PlX^-$I{Ao6bD)E0#g1o3sU zW%PaylS|$uf>xOhN_`V|qA2=GEMQ2GcCX+V6DT4*TGa)sB6M)z+G5%}EgvwoNTAlh z4#uTaRkXrb3-bMcHLfn5GoifkSAg1+R;Q>{B1;g3$XedRDwzyHRac!+SDpB`c=ssK z;UUs*-P!{(7n%)71eL@~#f6ThBBHZhwQ&St%k$>#b_tt@I9If0K>JW3kTA&iwR07qsmJGh7f#<_}I+=FYeAC+2g_<9>CD_8p(-n)sdJWR>|l5l`C>l zM3BN8ogab1%t2V^x)e)p1ty?{i`UCX*#>enaBgzg#0 zQ7{3ab{ZU_ggHO7;E=77q5E#YkRWys-Y~XmksA3tJ~Vl~FFU|)6!0Q}uN)yXr<{@Z zZ!fO)nmNsbjyy?d{HZf#O~>xTk6wLt^WLnb_su7W$0G4i$(M$Wh)~nRx{C))G|CZn zNH$U-+@>dkCWC+gvRDH43V<(wL)4YJ@I5S ziU++jeXJFH36&TlC-?B&Z2n~_aqxG8Gp)*PeNmf39vM{;VfXyz27OpD=hpPG?HOgS zlXk5%##S!;ic_Zk&Yex`dp}!Z>iojD?z8Ub+t)tdS&{bUmDZO73oLKzy>xja-Ep5v zcF5kA(3p-E#ix%W1H80F@40(rSK7e3dg>u$$li%@qzm#{itk4^{=%4DTO1pO@IsF2GNvRq`n59wXV#=RWguPjKbq%J956qmr^ zv@HanMnw(4g0kDCW0nW$ClU`MGRI0d+eC(&(}qO!{n6g(%yk4*hV8|OQIRLKp3pS$ zXm!j2c`WU`--Ve&Lb_*WOk4kCA7{%N^)GNGvYUJ5d=?mw+nk83@Z6ExFT=#yc$vefr0hT`?=V5cU%u9OOqoJWG$!Qj0v}3198?JX#o_?TPWsZ#J{t3(A zkGTVth%qHNz4v1pIh8ae1;P)l*e0K+8zt&GIk8b25-tPC4yY1majPxku9u;1w77Bh zIiF8*vI#n!p5!vEVIz~A=s}R{G6X~P&ESET5O+c~Fs#k<%QcbXfr0bBV$STnzk}^X zv^vs%S-X9S&t;tElpbObZ*cCq(=(lA_=aeDcXLUX@o>8TiOHLeIo`QipY{#gLd28h z2S($9qXTF9s0^Kqk6%?;wwCX%IQZUS*v-U?rr;~=*Q6i|i~erq;2(E~Ixw;70cu26 z>Av_N3>G(=)_lZ4Ca`GA0g+FLfQlO80u+5#Y2*@ASCFk*Pvz0xiF_g9^pN~WtNfhW zi(sIH39%Qmu3z9uF?RY6n>U-IkSpLPqiZm|G|Cq63 zqPT#dT26N57nOL*1rAyfV8^4e=y^KYBuOXc^NWY{HQr7-tr*F%Yg;Dn5AD&!D{qw4 z_uzE9d(EE~#-pWqT3cAg_J^8TOv@53Z^Fv`**pZ9E87A?Bci?d-iJwon)~ak*LJ1y zNZ-c;AJ?C)=`Y#;Q}Yj{AFtjdDY@Q#a(K<+XJ21zAELDWSgf0?bA1oT@1NE-yPXVo zpA^2hd)HC6glPBd^ZLcQ5u4{uPB1-OeC^=M@yBv6s>)^u&DtB~H_N%Yp?8v-e6R2C z7Lw+f*>gnM*_zb+6q!+qvhI0}E$Kz;($6QwX(rFuyL7KZRL^ZmrNw=&Z#{8NcfmEk z@bC%l-t&>DULOuf{6H>i zU!tK{ft@Lm*aF1t^FdSB^@issqm2}kNk!=NKXEeFA+w7^d`6W+OQ3D7q{|ptDJ0(3 zU@wB_WWXzJW0?Io`;|WL2QFN=P#GCb?e)52C(hUtnuFQ0ZH4bl)%g?ZZQvO5I``-i z$~qTt2)?D|5gYO@^x!}KjM$*)gZjsd8Eu|)W~b@abylrfLiGOOSGfY0%*iomYp$o~ zTZkyjce>pWVF0Jmf@Oet8gbwu)6`gQTefV%OMsh*%YL0hc zU(1LMw_keD-Uy}{!Pf5NstaVvN|P`SV@4Lb?OLr5qeSU1Qii*qH#}>}cNk^WPrYf!3X^pbMx#5k(>5b4D$PMwf90 z9v&JIN;ec06xf9CQg4cuJK59t{{%ngy>uc(OcTmE>YmUnb=rXmejQmNKp&MZ!r zzX4u8p)b>yz0|)?pIZldRFqaD@&UC#ra2TnjKlify52GIl}}LsiL*z7GJegcS827K z2zfie<|fA3%UD@x&QE3WK|N45ykP)*DATVb?I>8Y*(*TTAgtYK1k%qnYZ4QDm%${2 zBlae&X6m}fBDC#ldi^#kT>V(HM^JWdD{mOv(N*yFT}|&^_o5XL!7$Ti8)Vme=z&Pp z0x2R}K|#eaz}A8IGzkGNSp-pbngNm5V-h$vEw+!yHD(PGM5#fE@Fdm{^gnQllIhHncW`ats6!CjuSt>XsSSxqwgG0k*D z&8_!dnVm~-bWrNG;=tTl>Lo`*v^yDoDN)+CyiDlYln77FfF;4opp}EB+;4&@2}Odw&UdQ>-u_FuYG@3W|c3)ld^iH+OejUja&16 zHa8YzOuHMsbi=XQqCE})X?Z8Qw8765Iys(0Z<6F91JaF8jOb8yOgp#1q#w;9?71$~ z=A;DMg5Z;?nCO~=SXnP<9l85NIw(>4A_}Sf*^@KPu=a92*?qdVnc`J#bRpPSjZmhhl8X$ z`ve4tS}xJj%lCY)tf; z^gF6hj3`EEjyO_LxY=d(FAAfp*Zp+BU?HGfvV8gV*V87}F2dMyjxzIMz^qfe8_v$Y zWW$ht6#ewql7yijZGbqqyw#wmRguQy6cziWnzH}i7oOUKGp~4YOPvz?{mn(^#vEcC_ivNI$ZJObh{U* zC2xlJ+57ye)tZR;p)HMX(j<-sHH~W1qaC^Db;W7J^+3$?z1w2Js!Ur6elP@#DJe;r zwb5s2KMi}$$uTiC!{%;39em-@;b))Se*7q?e0F@o_HTo=s@56FzIoL0*N1iELx%sB zJtk`N{?JMX!BXhYx&-YYoF_h+2n(iCg-;e32k_|1tXR_&5tc%Qbru9deaJ&9seXO> z%!eW%Co`0Lj2q2j>JVk7Ss28a+*<0CBFZJ37wgkgK83=JZ>Ar=)vb5k!Xp(#X5wWU)yJ&NDu-h z5U&pZx=ARCkHZ{JN%-$Zf-t>(ICmqrOqdde4k^mUkO;IuT zlQMuGHH7rB!KZB=B3Ns~!B42FPvNeRU(4waXfqav<$VUM*N!z)L8eGY%}AC{6y8ix z2>ZIvh4orlOr@cUTNCF)#$ zk|H_9GQBhBpMKSj(e~~3@9(RX?6JOUH^*HquE$iq_I7S+LdQq)>xKLsfwr_0>M}o3 zlE#>)Wdqdu{Dje{W8j|-m&d~s1(c4#U?u5r@6(%n=5DpGG#_K8Wl(Uat}=VV`Z%Mj z_RHShP$}ptQ_yQ&XN%@3UAmXuyrDwv5MeZb!EL>bb{{*h8`ODsf=7?$Ha!yi_p^Jh z)meMYMZ1l1YD+jjsk(@i|54CuH_u;yH0* z11F;k`%sr=^XbiFHMWQ?r*$uN{Vqil5&opJ zrM45wF4Sv z(i=#SR=|;#@${)A;DAV0A%poor)>_$Wdp)E5k4%zOHzsPuYxnYoMxrdE21t#K#A#v zM4lE@w@5lf+a|s_5Lth>A!0M9oq-oPg767s+7hNix~*-fSkK3f9ox3;w3|H0>92kJ z_N_WOz@!0Yt6S|j-`iiF~J+i@iFn^^k56o{!0#_ zlC|);CM6wb)&-D-uyfG=i=0mhp@hM7|A?`uonz+wcZ=_3GbN@))I zPkc!InI#+b^(AS*`iVpcw7xr;J*YnKJ^Rtyw3c7;Xnd_Hgrs#gHq&p2sdqFa%r?1= zlte^XvUHV-bHwih{G;f|;E!D(F(=5$t>vna&to=Q09ph&vBNh{0QkjRHk#Tg#PafF zN8OSh6?t#n)H8X7zZ`Zi$gNae?^-=K;_hDc&jztmC{G5@-q>Dc`*#C_(o2c5r0Ave zdv;FCxZTK%JorZJPAS~=?I)l_Yw6aXPvLW^)L5VUE<|73X>A-CWJT|yp) z=;YX;JfH$W6GmjH0t~Gn%9-bM zlfKh?S_lP!U|!%l)wL$FS@YtG{3G!fcy-L1R-Akcp+Y?UBi4j4unETuP>H-#bP^vR z9x9(&UGU3<3SkvDi!kUkF-v%Tv8{T=eA!wnfaaaOpf;>>ug2p5%ONI9@VgLf zw1?i%!SIE#60a&NGlAJ-+WXv`?fwqf6v>OwsIqN}ZJ)zKC|qY_{e7u-|{th*d9E0aFQaiR%I3GVM6pNhP>VMIAm~+PZv2U%#jm;LE=}-&%(5K>}-b{FP2H>zMt~w%>MU} zlyc2(T#OlT?X-53l~e6Y6Aks-3=2 z+fdkd%9*3vTneSfsCf8)kduhNtdM&u?xpYLkTG{Je4NoYuA6amm#kyb28J=YOG+v} zeyWpEUZ^erBzQh&x8{cN0QQv}r&4Bekgir5&kY_e+gFuP*qxXniOz94EKRcj^F@G#f~P*Z!c1Ak`y zu@;uFVbZkn%sK+1qhA#s$8Cs4yr)`*4xaU=oCu0zOTPdwC~d7cz`$GcB_s@jF9E-b z5R}<#-twKx6!!@3SZCrh*AQ3D+J|u2TQ~yTMiZW*dZ-!uCw+ zN4ts}Q=!t4p$?fo)#hMZCy7h!+YC*+47AG6vhDM%|FviRR{Z_t)n5P3y($6GNg186 z!S|F>mxa1P8fL>y|ExJ*e|8~c)$`zy)4zXMdgNfI=^4isT6r!-pPNQtj)kW289%?M z*&XX<3UMcps!XXz>Mtn55I5_-_8uFkEvcXmn9)(_oxdpS+oGE?^UwO@Pm!$M9j zvva?iku+nLqxrfO&T)wknm!qvNd6~TcfP$E9s_{jZvY<>jI^pbnA%|E*xt zV4P{>!{8G$O^s}AZ4cMqz=!8!p~g{(te&~OG-@k2ss&qsTkPh#sZa2DA>0y(0JVn- z9ii~0hOxH^`_0lgeSdVprQ%b%GcMh z%vmzxol1E3dS~6DYW>(9=Wpm2_C?R7x0Zi&uGoL2*~Pp@ZS9Q@lF z{!kE`zfyss^J-S<*m*e!rFrKBnzKAD7`( z-%SYEyk4nVtC#CU+RaEP|Gl?@uMD2CDL7t(nokV(;U@`M7eWXWM3pj~re-_}&0Y6+ zmh$V|cxm5b$DWy`X`j2r%u;8J=)X@tD&y8m zkqA!Hzv<6ECvW|;h9V*`V};)yZ#KbEu8)RiEg#MvF4DR-B-sP%Kq1O=8mgF*cyLZ z?{(hExU|CVjZH_dc5;e1*=XY=`*U}nT=%FRq-XX0^4`5SFP=SC{fDil+v6>fyFV7) zZl69%nag+pmF{@&x;`q>{P3Y=q73yw@OA)PY!Pmi8TO!3Vq%m#eoa@a^a@%Nm6wO2 zI1s6kzDY-@KPWF%KaNghR{V}+T+0TcH2Hd)ac4Thx|_33GLZ+mqV@cnVqD*uGBjwR zpG8W;`!C7ZceOf)2|3U zqxEC7`_U1@MHho>!7h^zTavd)84hKN0-xG*Z`#d{i>sh3TxRn-D>vW-Q`7nc+BG_9 zHTLS4BER^-9!keLW=CTT24aV=)^^~G6Q`~|&TB!F3yTASlnx`PUw? zSGDrE`>W4exTpIk_z=YRjnpO7@;4|ge3CQ5;{&tG79DEolG5yK|DSKaC#dPRwTr%b zGd(}Rz4c{-3>_`Q10&QYjcwib{r9=s(}!$1=)CjXgmZ`Xdf9z@`0!!Q@a0FqX<^Ic zrajkH`t)#;^J1agc(}*%7X6);`>j!!;jKFaLjljrsvWV@qaTK7POo+XULCdf4YC;& z3kn({ncI?q`ubbNd!|K6jB9S>@TE%=dS_D;HDN7n=Grrb{+i^b&xX%i}=}k_20c` z_ii)(WV24ARi47fD8~BaDy9PD?piO6wr`u=2T3Kv)gyNKw`BD;V+%PEfUUBrSJoav z&|EonAy}sXES5&_5&DYGxVCN7G5(&wUbu8_WgOMU3l9Xk#&OU734F=4OxQLL?;rM@ zMc|HXVf2>&V(6MvkD?!ITe`T=bLWdFl3AAFPfitYBZ=gUc14XqkfVm)%+O8-F7wCv zjE{U(&B~j0l-k?_{RNQ)cMy*qAqVJqezFaXZckvd&!zB`tIP4G{$~l98*^z2-%YSG z89D_)Ve5099Zm$M%uJ0`C-yY@cx8>5_M>3l+);mYaWNd0xaiL3&AOe&#ig@$lM03t z9nRT<7@EeqZ~g`}GmkR6Gs)e$T3`Q<3y=(-d`ijNXR>;hh3}42Vl$q^X#S#^P?jZK zm(S#Go5)ev1f4c8yX0?o_fWc3=?)o8>-OArb2a89P||9_vj+9)L)##ZSI)XPOBc(+ zb6S-`Svvt65dCPg7A-be1P4){&;oZUPb;4Tdlv8pn?5UE<^j~VO-D=glHpX--J%C2 zSH;=gErJ@t;ybMBR@CC#Fe;O_HSZobGng+aUYWF_FMQ-ydP;zp@qXd^`;C7e5=um4i?h&?K z)3f0XAQhQbzUm+@8gwXxfRJC_E$1$MF=-a)IiwC zpbK9W7gF>!|MSVy6%7 z`=xx;VZW9*w(854)?iL&%{k7_!zWH`B~m2zy0N3)7SRgV zJgZZ?c56{+slBYIGj&zw*|RpzF0cy5Ow)PfXlPL3U{Nu!dAlo*=Dh#;VZ>ji+2@{z zpYC$~^7ZfLM<7nqBPtVpvwuyHx*p!>!+D#2C`AC6$B*r;w<=u6I*+(i&-U_gf43COLWhKdFAaQ&4V9aO@}8AG|mX4`EH# zhbls!cC~hL(m{?R#HNXjBL{4|y@uz~bY6Y?qCs5>5KgV{y{~jO61H{}MGS@fTD>34 zN+cFhVA7@5Eu-s=S-o)-+Q3?ot)A=qrv+S}rTExN85+O|zC5j`&qTF|-U<($T*?}8 z_a*~$JQ~&H`5HJyKaD3FJ-Fq)z_ZG&Uzd7JHxMpC7^6%Y$9rNpAehce!j zZSPs__F!($>Oo!BOx13*%Jkpwo-Rf&zx=n7>CJc$9E2e8d3`Ob&i)sbiG7L^yz z)-QLc{&1tmecZaXCMHH&1!t0ngSw9oSNq%5zC`w=R|ljH+_gQjRJY&H=@T~%H|u+G zlvaJr#+i>9 z*P_m_&u!IbuU_-+P*u;%eb-NOE&kzAvF)GR{$&r5*xx+-w*Qm$XOEUtmwD(^OrJ3W zH~!#d@p|=q4W^7dciNZ&V@j8<9SnLj?(_3>o+C9Y47w{|f_?h*NnLM}+pABXl(^=8 zi5h);H>`<%Vy&Cqy=iGgarV%J?X}x(@waMZeN$OkRWcw$*+kJS-#f7J;#3odD`gcc zBHosL`}dBr>Ce^4PLmnzA?;F~M)#aIPvgyGPBXG+70#LAy@tKao77%FB?5U#WD2BU zw=-?9T_x_&*@jYu=iXkrs?}D1t4o9T*V|BUonF0lfd&{5%?yd$ygA)7v`v%R&n{w} zMAm7Yb;?6ynRyeP9*z84jBOG)W6WQUSrzry={@XG5p9YKlI$Vt)$1a|pi!gnmL9DW z@#IMR@W1$>--88c2jX*WnT-oJX{yczh7fyh6yY>CtkPyMRXOpiy`G+mIK%+)7z}b6 z)7|eQ6h5m5r0pVXZ;?M?9C2%2Tx!^!rtRsnnSv}S%Fv{Z7g9aJ$8L~v$3wu_4&>y^ zbi#bSXAI?*w>FtX^QZf^mr zPZz&`KAdhda!I9c2KVA7yewAUcY=6_Q&?uNAN7z7J_nn^CTu6%N7BH`l2AV~b*e=Q z16xcMhH)3gr60gLYsZ98yX(R?hn``{;5sXdccKeJHY&c8(6B8>-W}cfA)$;v9Bez@ zFZoSj>F^hc^yGhHyHNhzwZvnz3Z1HGplR|EXS4zY5Eo{PLz@J81IQB?l_y|VBLLwj zz+dk~KOOgJOKH)|mnTrJsvvqyi?ojtXTwAXUZ1@5OHVG}y(@b-Zr-|uL)wT=`=-yI z|9xbgeL0byS97CB>GOvS^%f&(}eXTe#> zOZ!f-dR7`l>?5daOU`GU3Aqe|5d?v0<4aO@dx(fIJgh2I#P>!JH9Ay0_+%TfZJbRP zL7X9%p*7sdnIO^*H;X%i)cfcGAXr-uNCC1Yt&8R_U6x` zE^&z5xX~qHl%=Jp1xai3e99uN15AfhAW>eY=yn_UxkdKl-()iHs z-4`fM{ylYSHU%7iw;B4`N1H!>_%M+XJw8~%0;O_k!m@AORmcQKrAby(__g#1Qo=|20j)d!UZTGh3Cn?~anVK=>Xt2I&N0=_-M!Lo$ zAoSFjDx&|x!`;E4f@#1yyND3HS_E&{)a8ULQA#HnU{co4m_Gd?S`ow9yBsD@KDqGG0R1f?)X>Iw)^uD@Hp;Im>GRKET1O^5 zFt)S1#Cdm5S289h^wm&}I*p0^^y=zNSJ!QHkI<<}pv`o2c2ct+w+_ggdt9lotg+UJ$|HeExff+rC~^t4ycX7q4Bb$5t0g zp3oD_e*p$UGS|Xb6*!8aF4N?#d-mA+E)6L)uMLSu`^%K@0}GT-HoBKB(H#sc1xF?i zPm2<_(LByB%^S$v%_?+Agwk|(;0*!V8E8L#{P_F#k9Pnu=hgNV#g16@-?}xtyPs?Z zWfbh+Yvv{=^D;aq#VipqN=Wm+&>D!OsbI`T_3=-%LM{#7oMcgRXEJTdZB`D|GBh&2 zk~6WBogwkhu!)*lPow>rIS-p$c71zp*XEW^E7pR-3b9%Ss~wL#2)=~zEV`h-ajq#> zG$Oba(t~BKDRnmjq*k5FrJ}DaBy|ky?l%*rC1F_c_SkrCv|Z;yCb^+YJ?VW3mn9D^ znrKg^I>pzOZe~g0)kbd~r*?H;7WJg@mqMmavU)gWA}gYAkR|T3pi_mS{W%Rha>^40 zW51v#WWnfdVqd?%pNb<@_QLii7PJ=Wgn2rH#wrS5E5_C=31W_~@NEEU?+};I&k2b?QHi=l_fK=8Tlm5Knq(R;9B3^8uSccQsWg&w7xUY6TI z>;%Lb6DEj#iq#3^5#DW*Xy4hxVBa9@dXZR|UgTka!-H&lM1)IX+YLryqzh+4y0>3m z=3U&sYiepvpFKNloRkHSX~<~DlnQ@S&jG|Z-@GPWyLHQPjX4h?!C}s4tyZn3kycZ6 zoqJD;IoXw2l-K$5=Mx;qX^(oA$&D8lAtQQ|s@Eq~eD?3>2T|0>?PUx^j@k~O>HXyu za~&BFK*chQjggfRvg%^~e6bVZ*v>*kf??7>1C7yCs@? z-gGN1EukL}U544%*aR1OE@JC9l=C^b9Ebs6K`swyXk|)5f)6N^fU*Kdd|d7=Fa$s8 z@yg=1qsNR<6{7h4^J@mP`f0%15#hSjgXQhbcaz+<&l@JGMMuL(-M8kttQNO9tXI9q zJ{U2EBhEgX`sDor`@JYll@GLH#;#Rz3keQD$5$_1T8EKrYE}naUDyU=!O4{wmWZ>c z$o7>kUC^PP_ZZK%8MAu-CgftFccJ=m<1d%5T&cZrNRZ={MTG3k?oD;ZfwIa(j<(ct zZL- z$dM(AM}4Fj<*_fo_34J#75yA0E^iBls)5{db%=(Hli+^rHj|<3*2$ zb=nut;v#Q1H8nLLcf$;MqVi9;Q|{C*k`4Y2kX_sO&m%TVr*llH+%tXJv{9gEl!q3D1AMN}60HzF8(tSgpxOZQ!5J0! zL}ehGYK4;)TO+qwIJ)PU`$?@*+qa?cclUpuuj~1y5M!CYOii6;Hj2;4Ir&+!XkJwL z0S>o{VJ%y9`znfB1HHAB+H7LsddUKKy8)9DY4>N&nstR280xd1ncRrbEYEh+e69F$ zZJFU`byOz*BtiQ%T%y;vZwq{VQrDlz75~9sy+@vQbl+aRR28!WA2$Buk3Rz2R~)EkHs~NA z?mg}j+>eg*)CIX@KJx~vh73P=7HN-b?KZqVaZKeyyofpdcyGqMB~_mnsNlO|l)=3X zjd%1n{qkOxq+u9~I5x;OHV?_8?2vZs7EyK}=j1-hrI2}3Q!RWvE)1JVbYVe@Q%WmZ z3Ahci3nj$Mj!h-Myk1=s)t4;!=$hS%37~Af0`aZ5wz`K@8S?PXA6h+VmON3L&3tuP z*o2~eCHgw~-#o`p-_4=DcIex8KcBtU-^I7v!ljwFYA3Cg#20acPKg}9Y11Zg6-5J! zCp_93lyGrr$##%rWdLPnRAm z^E4SeIDm2<*1&Pw*shK{!8XPUA)f$dt5go-F>!N_Q&!}vuhOaQKY9}e3#D?yh7EULp9LCe8GK~x*81?PgyYl!h91Y4 zF+|AyM#;U6jEYbf6hQ=@Gn-ty&3{0tp3i_mM-Nu&IC7|I7DfILl1!_Mc4wVy{_M!Dv0vUx9wbKU zzYFc*xYM%JzW0394?qmP*~P?1MPVgJEo=0J^Oxa!+`_q&114c~#k;54`4)%R{laW> z8rnS{KR+ywhL8zx(RvP{!1=ee7Sb>92=Q@XJXw(P`{LCO(pIO^P=sI8jlJz_Kr?O9 z52=uL$?{K`rx#7-(nLXik4ZLauQP(&iFnbaWpz1);V3QyVa4Nk=D4o<`p?KT$bn?- zZn>-3>Av0ug9f#g>^%AYXo&G?|aeJT|j9vd-^(dIQrihd2~x*)AlB)0@c>FAV+O-fNlRGwSc zptt|%Vii|Mov^B;wQE(G*JgG9Iobcffu}EDaG9;Oaut>(#P{OC)zfJzs~=dlEj6Cv@GDu@ z{NErAR9!vs>vD;STeFSYU@?!Oe1`do7u2xtIV&zL2cKeaM**F%Y;iDRU4b?T2ZCfc z8q~WqSWHXz@8AFR>(?Cr1!mp-1X*AB_-urueb-*&EWf5}w~T&rsAzS$|EIrq4AA@) zt|@>Iq@qie{aB(Ombq2M!FaZyUZ?!`+NQNpIxPqjAPUtnW$ST6{1=Um=%^sG8kLG) zJ{YcUrO`Qx$Qn*0JF(s>eJTh1^SK*TSru9K%;v`NkpvuFjt=A8sS35El^;9NkBfMd zq{-rhT*XNpYfR`t@2NLLd&UIMyK;m*cp{|Lm!x9$M2Vqt%^xo5B3(2>bm&v7gF{-J zqpv+=yoi~|paT0fDfC7k2r4S?;G1V*Tp!b-a@5F?a`PD9%$s1e4f7-BuEQu9_gtSv zRTu1}?^(xug$cjI*1;hIXY=|OD2E8xey4)kmoG!x0SHR_$a4=F;J77lubxSm&aAtm zYv26uLC)=>uC6Y%BH%&pz<-$%j9#_ML<)}}8_9EQZjh-j7df}Tcd4j^Xe_zKcVi>{ zfcgYLp=^(;?W-6Up_EAsW%s-ZgZ?fkhWoya2IGgpyz`-9VQ!oYh!i142LzR*H}LB* z6`ap5*pv6a=ISleLxl?=iNpPcbby+Fh3^~_bRJVql`Yk@A4pV zUQ0&oG`=D+7W)wX(*4wbjImq@S1JGmzS7G9Ib^4dd%sxrRur6GbO)R#Hh=U*(8w2V z{YljY_8!@*ca@Zp0VN#~m|Z6PSilwTWo#Vx<=`dY+W<;W5@iEr!=50$9XfX&5qanK zZRpbIoSG>WzRK9H8p@^{>b@{nU-{nyZK4BpQ7p>?7=h;uq-}GN{cNG-vT`1l_(?z^ zS-KeU9Uw?FROD!Bo={n;toc#V61lm|t(c>btX$}0tU~vK{E~TPGcMKA75=}1sS7Zh zy#(SbGC0t{Wr-(;kZ**#hQ`M(<6knD)sd6z;?v`>GC^a|+kVg+Ov7R1?>>6;Hr?RL z57#?m{-?#82m=yeIUFmY)`8$4PuQzdSM%gb?%`JQAp^6JguE&4#TPDJss&)lvbZz! zn7$RaCFgU7`2&ApI|SNJh0vdbLCxbcM=HGO7vKXgcu2C;je)RKj)1*K$_n+HHvnDU!6;VP?UX{|g2RxYd4oDaI04GR zsn)SUtE=hh-$V`IIv)y{%u&HEz~-J&AQi!=T*ZSDlqDg?k{cxl_ujn&j14WTXOAfk z96+}y*hHbjmTlYU$<+Xh5p8jbMuggFXliy0UEI5G-%b$chzMCMxAfNAQCWF@N%5be zNMPuJ=ZbfrcpdU9>0~pR)f4>5r&Mzy+m+xU9C)VDn z&)v6!!tQv6v1NvHLH8jW>)|$aeEISv??VKU%sPiyT5et1Bf4be?-3nM&NpCO{jObu zVgHgj#eH%yBLn2xuX3aOECv{C9CDF@5dCwjV6qPliPbB5EM-1@p2qhEqC@^2ny@2-erdTM-m;ut&PHM{B z{xjQArxPl{%x(#*oGG@f@kltd_~XklTxVGrOd3#o%3QnlH2PIi*j*qk;s*AYGr$~b zSlohNgDJsoSkIjRmEt7SWh_A~g?;{v#TCz41ThUshS~7Ic@*bTqw;*EBo&$=&n9wE zU2ZQ|P5c$nT?oPbKFJ_$U){%X3w;0M0#IXHP)NeQ8a86YNfH$kVi3}2VE2OG$9>tc zqm*V_jo#CBoVW9=S<3ne^c0I_p;Y_wBd1RrgK!;BN@{gxic?`_GeYC{swdU6`DClA ze|(YPhF>RfFtXcC7ffO%_r5k_{iNGd9Fb!2f0K9;^<2P*Fuq&_Sxj5jWq8h`PLg&zg)q<4}XfAi<>fLOz8Tvd@ffu3%iAon!bZl7OI5*jp9 zzO~!DR&gJw(TG4FutC9A?BY5rQ3~*F8&#&6 zO<;g|z~A4crL;Z105o%34%&~ZHF5ifx}(pk5AobmW^s3Ol9P_X^NOZ#MgV(~9J1y< zsLJIzQB_jdu;!~4d?{3xp*tO@KIMJ@C#{5KA{JqksHl#|6{Pb@LqGHDP@AHvYUI+_ zY78o;o8m~+x9?SUgD^EzwpO|#SH>7b9H~)ISSzY&B#^!R#U2`P16qFB8oYx%7{glwMap7q)?W}fZa@^ zscF@!6)V2)jOvkkh0*0mIM6b{qj{lGlNBnW)tWUcq`8vO!)&DM;^xdyLbf|j_}Mv1 zd^$z&0iZBD^Vo2lG&jK_&PzI%%Qx@mUfP_d1nbZbgp7Hgf?VqAyULszO$nP(y_cp& zFsF*Ry2R#*(Iv6m=Avwlh|q^dVN(75qgcJsDyU)ydU6p?1Aku1l=1*RUbbA75yV zZ0;lR_UheRSX)BpqF7RS$I7mcY?14QR}E8g9OQ+hFUzHg0U}~xjcVE+gF?U!f`6{zGoMPHS z`D(|Ar68A!V`Nv{aLr-D>c}&>8_#d9tb0=L)zB%%>rAgye3+{dmtR<9Ubo(wZ$&M| zm_*!Nru}G0({Gm6KF^gKA){FkV)iRK6-PHh;7{^rh|TWi#%HFCUAFAhvObOEk1?w0 zhE9~D%k1PTKPQ8z?efUsw2|u?OdlW~^jrNsNts7U8|##+aQ^__?a-i$eI9*q$y?q9 z8cZ|rEMg9AsN37egLwAv@91yyR+_lN1EGf^Y+WT!an0M25=C5%u#Ya9IJ9T>lnAAQ zA03(KceM|Vz1&|2b|v@XJLJbrP3MDIg&sf(OTH4vL_kK)UvHMfO7)CMM{wfl24bOd zb^dmVWlRks_ML@Ez%*2X8Yf1IN5Y@%JrR>Fg7^lGAs&Vn=H{wQJ7~!ojT<*kqB_q& zTxNYNq6bin%%r;%I2q()y#FnwKdmg66LSM$A#u0_`~K%Dfutdk&%TzG&6ob+yGRE! zTwNO|Ll%RS!MGJ0I1?H@Ei3EV){j9vU0~MJ42X&Gl&d%mLGIpg+ojc_$7ioo zAIl8{tBXFdFrQq67%;QdtS3BdD!Yyg@{0$J52zaL+@eJb=>vnKV~eNb|6Avjz#+?) zg;9@W^>=r7_tnAT><)BiamxDiv%5lpP}&RqK6OKf^8B>4jet$N!Hao;B@a%=9cZIh z&$}DY94AmUd`ocimMup;u!+BI2iT1-&Yp9vOM(gVIHVtA%RA-HM})(DD|duap-W{* zf8u^L(&0W}1l(&qa)()(cWy>TY0&uyU<0b`$Xme)sEo@{2APY`plI`-LKyP;#Vdn zB}B)0j{goohak3m_&-uhbc^w{^CLX^)6YC!UA4gb1G%-#ko0vC5S5 zs~u;KzeE@aJ>U9Je0(qL$Da~_nb$Rg41z{uxQmOvO=e3&X2UM~eVN#cY?w|cyjOUL z=T0`QM@D~Pywb5wAM!ACT0^EpmmfYn%pmG62s4JEwhCYN7in^RsfuX7|DXU6b2M3c zL6K^ypQkwa@4pw)(>LF}dsmU~)0dq*`Zl}${LSf9iP5< zaYal*c|7!$@QW3ykr@vvR_@CEVmi(rYN^Fj8^7Wp&)ba}HZ;6_rgBO|z$gfHWDolO zh+FJ<3{B^deMI@yR9kynXlO^~+M$p#gEoNTUirG2C+x$FAvolIES4wTtF)*dv3 zZ=`A7@!6growVYzGTE&oxsE387}Y-FCFxUwXx9^H;qgg?pKuIXGCAm|L?BgfwW8d>39Wv3V361g6g~c@B0*x@(&len*}xOUUH_ z((fcjy`9VzW?*^X(4lM^v%ncSX)*!IJu#bJqxMsr<}T#t`+*|v-o4w4eH>F)y|1H! zi+>2lzD@r}7=(N2+dLVWhGEbxhxW;!1 zZJa>c2yR9cAvHo+m|Uz}ZT>X{b=Y=lF!mA3EyRzq7{Z3xaF1Gm4vYms?dpoGX8H0j z1LkPIeA&{i;`G#4Ps>N89Is@e{_JPjz2iOZ8^^iziI`z{^uNZsg5l6Le$Ly0fgyGg zT@(t!*Lt4PzYJKhqnw!ZcRK*StkG@Vii)byGbO94 z;iHB=z0D8CpJMmUZ@eLxURlK3jK(p!Z1dv~#x)-)(o6{;u#eOfwY0c~m4Oio9-i=l3&|W9!A)f{L9aOEHyXkuqCV0%*QIU})rOtoD@K1m(o?fw-OV zO6;20>r(epvhAt{>;^*w+%s$)6T2iZ29$;O>`-9Ms_LqkWVhh?+G^K37Nve9BIGmZuvC96 z$hh+Sk$6%H$v0Lw{RcO z)Oyj6*_9=iPkBy={n6BXUU9X-DxqZ7{IgnHvHcn)$#v;c4Gkd}?`JHz7og}*1ZK3H z7X?6NLd%>Z9Z1j5$-^>OcP5sQ(v1n8#DYj!dm!x`L2)BxDFvg@#ayR~#r`{tGVLu7 z$(iTt^`qeMRnCi;+6=SU&0Jb6;R zc3JPLs;Y6AOCgKp7|$lq*!2wJ>5AsB8}kcVMk4YD@=xGZV?z9S> zadBN8yU#il<*<3JFr72hE4Y38Po^7WsLnAFnxti*L2nW`Jq!-xeb)S3Rr17kG8|6= zbk>%S;#UOu#kJ2@xTNBQrazJ{^g2&9Wa)}ZxYW-0*GrO;c`vXJh1;a0zo#E5HhVyI zw}RlTh2#>Lj8?zo?5T;K8#io_)m2PcEdXz!SA~B}o!q+OBc+aWNmi)58g^-DgD1kN z?H<#1e8889j$iz#R}d^N<6XR7Q1XBm5OFr{OH5|_J}T>shNn? ziMF8&fGsHU%p4rF*=faNZl?_U=$d-HHB6jUK`IWKXGf>Y9G$;;7n&t1xA;+kQChUIMa&#J5$0V0&< z*)to_!G^@!LD1adI|2C<|FZE~e9;&n$)li8#PsvukFYkDn$25l3v6V8Mj4|D_Uh)= zp7_OZmq0GaEc>PDIFJ7G=8Piyz3SLDKi7V?E@`ADpj3^8jksL6vGIL@6|;W-HN)Yj4GgL)Cu0f|BXJQL4%U|56#WZyaKD5V0udQYZ0 z%X^NP06OaR^596mG@%ugAu_tiZYm7SaAl-oZ4aaJC4q4;!o-%A*-NKRoeFXXOr1<^ z@t29o6steNw!=E+KY{>9e15WN+x^yf27{mHRV_KseprS}-l}^m?YcAvX2I+sXhMT? z1yp{tvFo>Pwe*gQGtJ3AA0NNix6C?VN#NsM8#fL=GHHai71L}!7}5l#W&i#-?m@A* z@9|}3q*4K##}vrL*K_^PxA6sU`T$3DX}-+I5t}h0Kc=Rm~0_J-mCjiZUc5>L#q?ndYfPe9JY<*)qbcPH4w8VC0nG z4yi;qvoxR21>xgVVX?{WC7O)?!+gck0|ySweKBEtgpx9UCX~S}qVA+k%i*a2m>E0X@N0twrd?4y9pFq|)^f`$fLq{$v<4^HV` z40P>#3J4{G#3zB09lStR0zX7xO!U7c66U^jW@l$--~V3%3CoqwDqK3$Yn(-^Ee@01 z;IM>Nl|Oj7!g%5Hi=qfha81lf=wwqVN81)Fj05>D>LuE(bJP?R_4H~pJGV+DA)sxjrCCfKLL;x#$!GKcMTDrJw zrM{+l%YEhZ@a)Qyp9Y%6&`c3TErO%FyFW_L4Sw~%B@s69c_IZEIcn5p*eCeZeIQ@C zB)HULVkIjoSn~kmrL*rE^Z>xvrK=hovXWi~{_zkKvL#b9xJM z?HLG!+`i*Bbm(Q*spCB9H1f()MmRGyY-Dy3SElolf100PV)J0N_9*wa6~y?1 zaC65`nmlSM6>Q?U9srNI%T~W|Tj{OkP->U|F}yKNqsuK1Xqh@hc&V zsqCvrP+VNhG2Y_uuf-3?s$0WLU=Qxm zI0pxX`-W>pA6&C1)mr+|b6e~40imH2ejHEA?^Imre0bo5F?HIROo3@i*gO^zvH=%* zMm@~0^1r&Z)zDBiqiYF0{BDiNMD7Im6)@3&Q+kme-e~m!Z|tB!OIHN#jmD3>UgIK;?C!!(puza%2?cXP@H&ImB|#KO0+e8zRx zE(MD{1xs<>bGoJjh5@k(krrOYqL8;5AWPCR!Nd?|2MyH-t}0266M)lKI@wQfEV%4Q zQCZnIdj9-qAA1!=mL{`b?>`FxVS$t*^++O z+kIMVJILc;6#~|`oVrQ_B$k4JqO50wjYEq6*%A{IlhA2%<;lrSbP}lRhR*!^u!H;B zc0sF=s}3Vjcx^ND)q5CMzgefA;Nxc1cNW15ToYN)LDOR-2AFz!ftj_ed?VD5W9w%% zZ0i}WW|Hf9KSj4xYc$oq_DSyqNBCFf)d4zX%yv|0LD~>(h^R6lr&q15XpvDXvUbF$ zprhx)l!~%J-h2{P+8c{o97A3Pw$K4If#|%w%IFShAEi1*&P=}X+NPo$Gr0Tw=!18Y zQ;b`#-g;$Ab)Ds{*A0m{=J@4k(y6&g8q;<~qW+ilF!T^I*T;SiWMN#&{U=xPpb{V! zFqQaANyTu)IzJVsJO6(uS(FV`#Hwms*yxLBn7vrfDg;7tP49Kt z(g0utgp>EN9du2sa<**WK9d1}aL@;w*4R*Yc#w@WcLKW82q#9BmBSj5>0)hlb*pdR zHaFC=D>SR+7#b21s8qP%#IelxUA;r__$^A0$jFCon$oCC9bblx2td`?onp~xpQtfp zs7oYk)!*$epjlRnn{~L$Vzyf(5FGz<>wOT~58u`DL1k8vX>4jWL}q@-xWe|Yax;sB zd?HaElMX5KeRUqKklTn?xwX#!M7^JMhmtg_AnmD ztD0;$IQLH9mfB83Z?9-tJG_-o;HYF%7>Cc+Xyc;J8lJGRM+#o4cJv|u*SZVm)1!`M zPDwMKhB(_WdT6wFR04)!JP@|SjifaP8N$SDnyahqiU?f>3n`F_g037J{xLjUQiiI+ zB2Aa3P1q#@^t`&;4!-Q$va@sZI<4 zIBA>S>zTupf27Paw^~e*$>!~yS^T%Tjb3)#K7Fx zpup{w57QgB9k9XA&(A5qHo46>EXff#(%S{wMc62O8~^o67G~|#9lVoq`d}P9nPO_2 zhjMSl{1Mglo*PBfFEUD^1GZfdw)r54?RpwA+!DMPkb^p4h!*`g;`(op@>xI_Kt7VP zqswfAZFh~#HnNU7#Vn%Nvkai zZ<`5+P+?F|!jF*MDJ^<9b;~uFbfPx#o--@te+q-M6?v20mkr2!$;jX(`4c*3Gwk1F zO@XVi#)i#fX};fm`V@kIqaa})cvk*B9cCa@l)0xgb-KB$SO(d^7uUU?Sq%l2_p%xI zvp1bXx$AW%9ENtq5Q%YMR201cWDsGG?1E(@3bjA~eP_z}LOofk z9^tKLQjhLkYA3$8@z=_o;E#T@Jtm}s<>6B1R+eYb$@=I`@>fWewR_v=@FC8AeZF0S zir~*UwmllQVu$dZ;mpa_YE{iLqsY3AsIUM2_Q6@qzZjyqrY?g{x1FFtILqxqoAZ_w zB(^$?#{`nKuRlN6;z`vCIzH5Cv*CYe7gYp#j^;3-kCXjo@Ue#gK!U?RKeGHWrlFI{ zG8+|7t*&gzFMdhJq5xN@&Z4^qO}1b}(CZh!hryX_f@ZNyOy;Rhztug|1s{P%gz7@E zCH97VFZ(>-rvG8tk?Maa23fHM4V{qxvR-7ctS2&#Z83ks19J7%Q&CY-S7!zu`}j9Q zXKm*KU~}$aR(ExU#e>^qRxtFr6IAU3^5NY?w%PvqBkg8?#4|Zvnr#@d7LnPJvaR-= zYFRbjMUCkOXM`W{4QI=QC|xaP3@_0-O+&$nas`OR_2$7NI7$ExF*8up%r6p?=T9;8E{& z+JZq4MJLA3*myP3XvMo}oDv>aBaY7;f&?x$2bl4{GFi`C{mPAI0vSYP)h?=xd~<-@ z$-;(-@5kNmEK_7dX2BJfVxDL)5#BrC4g}jKx!FA(=Be8qb{DL0`iv|< zbV8d``JhSwkpCxTkd1>w1KCI;CLGG+Z#}0ytt_{F9oU|(rKTF zp~!8Chw@&5!(N-!n=!&M+lAAnnXz)#!vF5O8a7L9^Y#CuQmkmXP0+oExX}+p&LiyQ zNi04@PNA*;Tt}0VT*^Y3%SG%gJvR0qAAf&KR1=~U0;!={<}W2Uzk05Yg^Y5W@3znvNuz{ zbq)n5JwKh<1;V=r-if!-6~(wa1yN^XVouGpiyJekf0JC?e3AcUA21Ik4ayQ%jxg(^ z*I7J*hc6TgBo|o&>}te9b}k7~2t_Y(|Ew&wfp0+ojJ54#cos|pDO=5HeWvl(I;+OJ zmz55nz)jEOhobIK8=RS_lz*xQ7w*+DU)a2ydZ483%Z$+cG7%YDFkazHX>4Cu<$-X2 z$;+ETOdurL*{xi_lWb(;+%pYW(C}2(>|)c^jQ04Q;s$7#k;}AuEO{z%dq?-S`#hG} zF%Mi?K4#)4y}ztMYlC6Q3bX4m-zk?hR!w>kt_jID$$LscnLYW{E`2!x1;x_uq|`OUy?+va&b{pz5oj?ujopIaFXZ??qSc)xN~w_d&Cue6$cEdEM({FNa)j#>WesA1Hg)Lz+5 zwa&na;aNVn?N+aOy{PzvTD>mXH>y_Z1kAeAzt6ywflKxedVBcG=%dlEgS#!*up)`$>s<8FX<%4K6nu`9bAl~B>y2gVF{KWH*f9$Q1AJR z?*l^Dqj%4#+O$N939&l>I|OEc?$TSYvbk9LGx2QC! zY&R2xI!%42iY(41^Sk7PYw!hNgb8B696-3Q%ua-$rLd0_I{*q^i2R$U6#nvl^1&YO z%91GN^Q_4oR!8ie!0c^W4(>%If84M4Tt;BB{*|##=slx0W+_fr;gRR2g|eW17X;)P z@19DoAdqe6R69Dhm9W4kOPM;w6;~mOyjRLS($&bfUMhv7pp4X@DP# zEfRD~d*f!-;iN$FFE-2mPG?e52GZoKh}#oWa8ve(vjP|U6yn_)YiCj zjCmF%R&H7~tm%GG9%(QCc{*wGFADnfdGkhblyY;;?iZN2Qkil#qPA~Liu-U>Y;iz* z#5W`)qS>8YACC42Jp;d%Kg3!uH86H}_XtLs#6~(dHRS7?t^B_J^{H?GA`jT@(`U`v zaPs7mGjpm+lrM@Qz6^!i!k242C<9%g-n<#^SoJfa(~T^PEpyfe2Y2Ae;Ge9sB{8vLXdO*x<~Ig4i~Y;m zZZN6Zi&&lfRoB_o)uG+Igtebj&a^)l@XN@5#bc9u(0aDxrAH>@<6ogU>iKmVwDQ+8Ybeydmd6f#DU`3z&M zyBO1|i1lD^=LX!eLR6{kd2RqgDm5%ZP$B0k;`tI>?vN*YQ>oki41h!ok5AlJndeTN z@4xWDCDAU^-4XLJ<8jijrhY7e$rZG}=GR)A*8jC;TRy{c-9!ktq>%!@9rfvK?!eP8Z z)Bz`!Wpsw~@9oA3h^)|><<9cke*NkzOWOD9W$XB9G$+`m<<|7krfTo?UYyk^YFB(C zd$?&2+ZJ4>7Xm067VjJjN47bKPeL!nr(LRtyIE@` zljlES0@W;_AH3!$MQ`}$PfxWC=LQ%WF%|>>&D-xafaLIV$9w5T8e9melpK@>S?NtHAzs*z;+*eWY?a8!u$9y-<<( zv|>S=+V|Hx8t{J}*{#oTzgYgnGaUzB8Gh#Vp}r>OX#Ld=M~{RWM`)`%~i< zJ%F1pZ->qol)RX_!fV;*n&)yQ+hQI2?0>(J6~|D9_LBY0i_Zv~n0}CpVMZ6Xw)&Qx zD+ZCEt18S@A>UZp*fe2imwandsz>67YGF7*=5&UEDx+n3+FE!2ojz1-EIWFIj9c*l z$OgX5Es$%RCtI~{EqksjKbKFQTeH4z%klN*#8}n2Esd!-l9Qd-pW9*o?%nS$e9M{o zD>LAeIBr4-2fJJ1t&@6y^gz7s@hf)BGGF#y?`X)!mt-A4v#z_4EKHphX!HFf|8ls` zo5h|^bTt{T8>=vmry`mXzA?OB(7~2cc?z4G9ofgy6*%vcn1nR{awPYKC`4VRVXtRHb4Je6g$xi8mYip#AW_H3PAL* zT|;#e)cV2pdI1s+s3HrE4x;sVLxJJSp@?=&+0TEqiLmQP{0{AA;Rl@T^T4kf7#;@}c z%gVTD!_bOChJ6M(m23D|>A;~m2$sv{)heIAle-Qpf7g*CZH2H)x9hP$aS0}*=uJSJ z1aH-^kwD;vM&%kr##|uJB4hfrDdBYJRWW z6S%j@uIq&jW@rUAno+;qHdJ9d(XdfX2)V4JWNS)F%HzhX936asRJ%mji5nZq#+jwKXXS|#2asaair#c1@EvtGdK;lV)Af-Z}%ei&KfV3^4 zgc*{s&A|x!10-QTn)`<$?aGy&`27AVz(xfP@)-k7LRNHAa@nuD_PpdIB`eWT8dIQ1 z@pY5!$RyuvqLK>Yg^M%;RsbKef%zV0K%Cf%IPp^?$w&;>J0NxrDHEV|0J`8f(-?tg zEP-*VPB}=}@##$iP*i>6ShpW57WY{UN6o6dz_~glE;_D+q&JP&4&LEKI&IdnWjc+` zALS9xxu#112PnnUS(*p9rorEv0n)+Vi{5o_@*Sa5tJ|DQ`BnZj(X_4!QaW3)fP%Dh z8{2^6%ZuL+zD2keUJ;Wk7?dS!$R%Og8egvQ9(`h0Hw=dD_~-3!5D~yAP38Hjz=rP$ ziHB`J<`9-u6mG`LtTP*5 zKP&9`aoM5_WpT^eiHeo6#H=%jY{vP)Fvx4#(6OSGvnA} zKIZ{2GO8DWp}ZZinj%F8(?SrW4^a`vkS3qC?D_@Po`#SNu#=&q)qNt1%Y#!fdtc^I zP>2~960yoJZ+Af`*|Rhx`A|KK5hl-ix!WRm<L^-}E>%xl*PUC!GMFYjP*D+a>cUzoQ6o1ILkivniD3^zTEK{}bVxTe6V7>5D1;bG z11MdlvvV3Bw_^6eUt5UUS&g6Gb?6%qel9&-O_L!en{l22{_mP^mcNh9BS$$eCz+19 z`yLg@pJ!1Nu+Y()>!E^d>ncxEJVco0bI6)%YTB=8`9-sB+n9#E(QE8S)Ieh;bc#NG zPTmyYf#?MGc(>~)YwNmr(~OV%UbDE0bim?x6kC7w?75pxPVF5OY7NG06b12~vMy5; zvfxuP>kgsSE$#GNOAJ7evyUYbsmg-ah1vkeFDagQS~%53e|nMz?tTd-^tCfd)G#Qj zhmi8WA~3SFvdW6;F=l1ed)Q<0rKk_0Vim>}^N{Sz`ftX$*<2|;*HxPRGc09vy|JwV zoJOJvaeISBuzpjsSi8^$@^GQZ(YAWglCVK`C~nD4DOIT1XA*#OVkY~MJx;8tUM*&4 zWT>HI$L>r%^Q%-m)=IO5vesAnjWbKx68Civ-(wo^*NfufsHme8#rush(UkMCM+SYM z9{a#Y$Nf3d_1j=Da}nNs=iihn+HF|Dn6G2}!bbz};H*+sWTwfCUR21~lCwC1IioCU z_gy10T0Le!cW)n)ctkpAkMRaZJ2UFm8-<2_BX<_RL^vv&cnw`kRxhp6AJw{@P9oSM z2H4S4)L>p&*^FO4$Ye)OPEOVB*L`~Syg)_a?>+;-1oU)kpKeYop4H)GZi0hI8!GEK z9t|_;KqCxC{ZHxB0sFl^f4_O>jua}`Z%N)_RBaw=0UN{1V~F?)qrUMP^m$MT6+e7W>wfw8@p4Yir=aygX{liV#0Z*2dCj9MB&fC{ry-0r z$$DGCam`}iu_#By2sJhgqA)Uq25?fCJkAC9!R$>q?xkTJ3-CdrT3ZDe>iD;=Fgv1i%1eK50iQ!$to?igT((7 zyH~If8olFK!b7dufNh8AQjh&7PM}N4$gp}lqJ&3`ocR(q(`J^}-}U@arE|ZG{vu1+@XqH*ZJthpFJG}j8SPA>IGRSnce;M4(4(HD+W2g8d z{Brkw&ePCeHm0Lv1ICFa0D3!)AMZ@4M_S;^2!nYuwQEk)gk5W}#1r?mGixv3n^$;3VV8 zqvX~7&`)t|cJJ9E8b%tdZl`wb+_L2<#A3vv8pHDnTCdcM$8ueRr&Y zEGkJsz+yR-p$mqCy|)%}uWS#VprNaKhbde?IP$Egk!Q<-Fkpb3F{75U3P;rW@ZdjX zAl0FG&FtFj_nVJ<)x&4A_*75@Q^-7n^|dNweaf?E&!h|`Q0^ZX&hS~RCWWEREJdbC z;7p9~uR>`)w$N#M&Y5!~cC@+(W!@*9zbN~_=)Aj_cZ4bAANtqPfqWw2-V0%gsj+Cz zdET@FMI1ChC_1AII(m`ufK`JXZUXL(SZ;siQO?qJyL2x0Gv2lC#PKIR?7OQQ&M)7( zeP7>e6=$vR86(6JRN|p~Q2WtS8R7lvT)FC~A)^>7D3z&GpR|wIX%#&A4!$W{;SXja zmj)Ju!#aLlkn?o7-oWkjXBm~F;p3<0MnH_I(_wHj1bKJ@RQ$k;K%MOwRJ}n|uDp1+W^uz^)CV6vWvg zD&vY|oZ8qjKNSocWUB~5*Hs=C-GlIDoKZ z5ZN6kPO;?0rSa41TPQA3Rct4rxZ&qaAzx?i+uF4c7|m-Tv5VRFGg0)yb1*AO|IEon zm$3-ASbSgw=9o=FN_)Ig|H?j*N)d?k*J}}eC4b4erJHxnkM*W_fk&ePJDgdRQ|XR# z|F~#PF?m1L>0QqG%Sp%na;!Xb_;5kaGK1u0=^u~Tg<6RqXQc^xAPNzi7qM@STf#R( zTW!Bb^+FaOeY%T_CEx->8TEwaBQekSoo5ycYY0b1r?&%3X~Zx8aHA4i0HHPyld*OEuF`0tm~^HD-vmTF2nw~ zk6nIpWe^Y@+!1!&$!40veD!mK59dh1XV&_xew!UxKfJQ%8Va@qtBZQln$GT@&##|R zt9_@Iu&M&E7cUi>?XB#*hY0ljYvHa{c=P-g2y-SxF-5ic3~JJZQ}!q0<1b#mydKK% zW6v*+vY$r0qi^5Nn>QhE<^!fgfc z04)UTCR+HU*rD9Sg-{{FDNs=WAK!i>o2+`#rO}|oKb8(|aH`Qkx03U!Im3kFWVP8WZtGf?gee;>0mpA?ce$@l04^xzZ)Nq^Xb; zevil6{KSnT3rvZyc7;4G?W*pocjjl-pGcFUA6k?ws}#WqEh%~J3PckA!@pU#QS{(; z!|RrLpcq*)kGytal?wyT@F{0{Lu5XS5hu`v=?7JJ+r`w{Ur{)Hh224+1`$$Kg@(A} ztNW;$VJ%%GzSBR{NHMvR88;mq8}#Gn)A1c|>6KNH3G|_d%9j|8>&IncfXK%fGctl4 z;xhH%iO+@nHEG7t9hLd|*-vuXNB+fzO>hAuDl#gfQp3!@Ti>T2`;h==upCIT3Vl3B zj|ox2y$c#REgn_igAQpeul z5vr6o_UCnr>t9H`jO&PC5Vn13Af5gxH!9jZ334hhmPgeA{L$&g?wW43f(H~n^}H$9 zM_|Vgo}sNCTf)NyoRnt%>2an54vhRx_qMtuiZHnMe|K&m7FeCX_k9ev~r7aZ04@XXP78(FFp*kEaJ4@ph9s!#4(?VJ1JZ8c;2tpUY8t`s&p+ zS{Q%hMLI}F+aYjMWg8GHZ=4UENYHq``2S<>y~BF$|NrmI$aa>@oJL9ZC}d?+Drsm~ zWj2hQrx6v(IIWVpPJ6;xW0ahd_Q>00h1pY7C*R%9(z&@;XfT{efryOSKDn>49aBnREl!eokJw zmgAT~&zz1_rR+gFf@|=ZZ{>UE@x)>o!YvE)A&Yv!H(4>^%{9&y$!spKtlOb= z@phl?Jxsh-9dRpNS(LLKa6i_kELwuWXGO%(O6X_gpgv+fdRK(JJuuRffZlzG4ktD$ zVpu;TdTnR0Idnfv<(6E;uKt6Q+7wvGBY@`u+m1QR4|II4shTk#iKIvTo6EHNaIl1r z^J0m@7pAaW{nR3A0m2S*RiCIU9NeFr(z$IwZu^9m<)ap?Y4u%Nn8X~tOT zZ$He5>%Zy1uOaH^m$uDm>gGm)QaF*TbzP_zbM8Vq57O;*h99s*q=INYfxnQs3T~9K zPO_qahozSVQ{@&jHgY&cKs%jUOvJN3BD!41*#ZIhIq zRgHP9+wi}<{w7~W9XlENfQp@~Z`K!qsb}qXC!2VCR%W#(Cn4i^_5_KLn~O9+vIN&u zEak^B=4-iT`ds76lZ*g9&6|%Nse(bWh>q*Q>AA_>QToTU&4yJv$fU(f<8^l7qBQbW}Ok9{gn!m#=*% z!H89Su(mh_OUsjItJ-YYY?dpQvRtvS`{754Z^n(imvA&z^3KN7XOP4McehXDNnC^I}cElQUIlgF(qlc~QTU+?ft25w@> zc)Z!{_XpF#&t4DcN%H%sugpdd^9}UGY{vF>Vx6^x{}jmpvmQy$r0;iNgmoZ_HzT>| z9=PN~@;zFjk$Z=Iz19LSDrp@vrgnrRQSX&~RM>$e^FnD@vj!b-9U?}q>KMTD_j(0fai{>xVqb|{*92|VPcMz+9u(gD%Kx`E?}&x?yj z)qSke1t4?2PHVNxWQV1GDzT7sIq`t0_5sTH3&DSK`}O?y1SAu#gA|0aW+s*q1&DSa z!42=z77`YkOgSqYKuRWuC{?+>4c7PJstRcO-bsJ~bQ*Fri<~KI6k1=5DfdOW! z-!I-6`;z-t49YMPF~`)V5xv2%M9vxizn;Xg!93e0t^LLjQdx1iE|YI6$NJuBrl?&c zQS(6pf&v*@#d|Ue%8u~(4@Te4?OefU+iK{!nU$5)$R>ISkZ!Ryl{s1Xdk~y2A_^zU z&n?^OCN>A@PU$@8W+wtb_vqEju<2U)g26Q;gxTJ!#uZ3Itf9dVH+t@R7w@c+<=2w@ zaKMb6pw6;1+|_lv%=vhe$CHLI$=LWB%6gUnB?62zZ(%a!V$z(e^(lGx0EteXKHZZS z!|PVSc;23@v)yIICgEAmkFm$VvD(^>R#EEeMQ#(%&duE1K$`Luq&xwH-J|dF?i(xy zABbNceA)KrXVA;L(Gl^3l;y~^V9~~~-ZuINW`pHlM3Ja~!7u@SP&Ag3fgey(RKShX zJ6{%o^BVhX@O-A7M{{WR)yan6Dxpv$?i9sV?+M-GwzNfJcJ176!z(|YzjZS0+<{C2 zb03vg9-8{l%A;d+ot|4ebqx*U{^ef#USC&jHU4fV3$^8!M%lgo>TzaNzk1j3P5FpNz11T{hT(=z9xU)4-q(Y==FMjx%1qls*r_BZ5V=acjWgNL9 z%y^h8(1VAbT{jms8X*g9xwhFB7kKqN12kg`@Kj??ML0=N?4(dWzowRFh~Oge zAQ}!x(K17vWh8;poFSdr3H+qmVOL9H-@A9O556b)(G88j6EW#U(VX)t_t0CROWc7H zk1BOQ*Hww(Fz<|u2{`$;^65`UL`;3U3;^~YgxDE+ZTI{;99m?`yf6CYfc5vFV8sW( z0XEL(0+s9jYdUj&4Egx4Xy*t=_zM45lv}90dM(uvCabp}ey?jF-dA|mV^uZfsfN&( zxJG)s?(ghzV(={>kF`8LLmOj(F@=>s;BnX#AcEJQ1}=U7?zLky=HlczMmJ|wS%}g{g7mG9&k!T+oO$!=JI7z<;-;w__e=P}cTX-}{VVj(vTO;d zNY4=?f-wP_)7b(({E9B=L}o61^|vv72w-3tq>{7KhL6uvLa3A$z)6w5pVp0HDGY?< zgX)87B=gZ+ayojKf3L@Uz%pD}8^#r!QhTiXi>N(SS&$m^*e6e({2K;HE`XZ7pK2Nj zpaD)QLbt+4N)=ueYwBD%A>)LE`uKM((EGTF6aRW%9n%hF7=N)aFR9P^DZuLj^Oa1 zmiJK~NmMT#mAIS|Ovx~1Nd7fX{}{ifPX>}qK1RJxa~`B@P5wFv5rt0X2}};TNc7T|hUNacL!=pZD6d*_c+* zhw?Cot-kcMWdB_vYC$YKUVPz=qO{VAFR{3tnfZo3T)aZ?G?si}^tqB_%?OgQL-MQk zu=SL-n|IP<=ul-O0RVGl<-M5UpIWZ|h1GKZAM(V6B|xiabcg_+%ADgca3E4L0tm8z zboj2PAvPd`>eJW1FrBp*xf)EkA;k$_K2f-nA5De|#spn4wMS5@gPOPYY9 z5#t|2KDqi+XH-0qRBtFaNk@{DD?rDV&Wh&LY9wk+fhhP{oA@mKgM-uQA4j--4jugU z1GQB$I~bem%WnntGr~5)-^cLR9BIBx5foMV7=Zt2C1wPVsN_eZNtnQcOtR4&&KZnM zeGrB>RYL|3zJ{sR*Wfzw@WHH3pj&%O3m|e!6w|=Wq^77dZ*b*i(*tsJnWkUTxJJ>O zt=GAtiWM%R}h+0L7KskS<$4xGn&nBwWe zTY8;_rW|JYmG1=p`NRncEI=Gu3S!E(glR=dQLo;;GXzZyOp|AV&;>3)I%h*JPsyGk z%M(5A9GDzLxtD*GHiM#&6_Du6{{*O^f1jSTC@>)&j!{t41QJis^GK2a58)W5_$wqT za`ayn7vJVUyeGR7d_>?!P}-?f<7&@)@0G{YQfIj8;#3uuu(*In$685hy&#jo6=VU1{YlV@S zH6X0QfFSsA;*EMFI+!FMWuV4>+;30qGLo%1V55RUErI?d>H&O?axYt@iO!S77}A3X z4o}~(Uf54!w`topFfT&YU&lA}UxkgUT!AOKJ7mzNVw4q;@5S=7kmalEP@)Mnjq>ao z`Mc=1SOV(HF-9OEs4yW;ek5avc9CY@`$OVzdJcj0m^d_t4Fwzwz}9_|o=k6KGt_|A z8FtySypXpqS)~dfVj;K;^e;^K8w8{~G~e0h9zO6aI5@s{Ph*I?PENEwQYwXM7_iXG zcsXt~PM+Q@)NV!OK)E%WcL=k!!8b<<29B3o7S4JF0a~J?W5^U^p`?1@H%6f#tG{I2 zbx;@tOv#1byLh|2T%PrlESuxnkSPk8B3m^6Lc;O9qVt0mKaTmW;HAqrPvgezmw`zy zJO?8UAI9-Jp+(po0Or-H#o-jRxLN1-V3Jp#L`2-|56J^)oSCM#h-?*}n4v~82xF!v z9@^e6%nnV0^`;OL9D1tQ|VcP2F%_`*fWjq!ROCvfSqh> z>pYnkrd?V)LV>V}dCYwRY~zMj5OIP4`t*nxsC9UPQ_-zapw$OfAZwPzuJ!ZY*_~N3 zeK)y4`De(nXhAVYQftJVS5Fj*D3W?Fe_r^0w}?7@|r+1roaBq>Ir#0%wdUb2Ufxa2cy^k6t*azxw~YlQO$c{yO8t-tk7lcG>{!~ zCx)%%M2$I|F<0BP1F8aEd zM>DcKS3PFiy@}EiGm!EngwNU}@yV86mlx|&xyWGMfb;=xj%*>}s&@eS&M5bLfTCXx z8yXoK+bo1T$jQAUqAn8TfMizli*A42D6?NEAp+!r4mo6^rmVC`wsH)$yN-x27~gb3 zNy$CzNzpTsViS%|c9)9<00eZM1pPG9=)e$C)}cc#j5H|93ReV^$~agG3JCVU6S!GN}MMtrBo@c28np$JvK!l(+uN|$k^Wr z*iEPjD!ap)`(}r&6CF)?>Y^eBV%8xjZZ{2m=(iQo=Uzd*NaS0_d^)v7D#lKVc~@Ui zJ?l4Ua2_QVcn}ym&z|r`5M7NH0>&&&1+)PH&JYG!5&x(dekaND2*2bw#N&8JF8Obb`Q z6XY_82s|FmUiK)X=3%#`go>jKaKfrh@Xgft{=f!|jKwJ>9et19>U;8<$ZDCXXg(E~ zmj$7Acz7g_vm~LuAsd9YhQG|DVh1L8dmi={OGL_g64!&|#pUf_x|XRRIq!f@^p@G7?mg4Ja_U1zcsu?$a+h<)j_nyVv&h=%FNH zSzc_^uwm;C9b#5|bU61fEx=x-lDW!{6pxK{(k}aM{qR!qaFw#)_2p|3Ib>gG+^iz7 z;=<99E8pwc+aG$+RZVwg6FRGu0B^rNKswBHk~}S%ykkBNOP6}S(2i7#>-9@_RL}t} z$!M;Z=pTLhZ9UhzAU*WGA z-<8d-&py9g|A{RswC4&(J-Vm?TGA`Z0y-vVZqy;*GGbchP@whFf4Itg>g6$Z`_DQ( zL(=yi)Oz>0wPn?F`5hOx%4s+5cMzUbv#@NXl43WmRqy5js-Au(Be!~wyi2)mH{$L! zzX{{VOBNul@oOxw8KDWETrZYp^pR)*9xF}|9gpj&#ZRD$<8RIAQ@?4p!Cu(jMj2cVovY%4WL`nnm}Z$;?VtL?h?7zhY2xXz!}yB4-eO zmj)mG?N#o*$hD6^?>h5tQ_2$YRc+t7(?;zWeavTc5~a9;6z{jJt)Q{L5ikpoK>x1o zv&EWg@7jE;w(49qc`rRwR;+a&2wR9+&TPApGf$l4=*cAms z=Xo{UQ#%Dq#0v4x{>yg|IQZb&|Kd7Wol9z02-h-wU<2pu5&uu7gOsidx%3Vo2&GO@ z_Av-1JnuSMdg1Qf$GgYPM_&hna(onn(q);E;46Tdz7VGT{@Hi+8?QpMoTpv(9Q_No z3n08xMDnhQibu1Y(KU=6PGk`6vRqLlhMAUpGI>^z!)x!Cy?$FB4fOO=^BPgO2|PK8 zU7~w~o(1Wv0o8?JVr-@zm6nogjoYw6$|~fKOP-$FP3`9`Ux#hnhI&7=X7^<_2vcMO z^%H5r1^xS08iky6KZjb=Z`{bw--u5t3Jk>huz?C9iZifX**MAFWLrd`pAlVFhrlj= zQnELslJBh|FI)jTE4T2;JnZ(iw3Pdf&$B0{0|~rk?nj7j#L!L6U{T)An#jG zhC}OzNv*@;m;`*{wtfy>xq9rGiNauxviEUkM8(`+@N$L$8QR z8{kqh?Ecq_B<{_xBb^Ct2+$n_me%0+UD5F#9TU~FV&qn1-6?o9aZ8qEtQ^ z4~b-CRQR}h3Yu>&8^tT2Vej9+4=Y~Ye(_cfpoPGaFr1jzOfxc(Q-HvMC0iYNL@--3 z@&3qMLCVW(^o(P3%YwI+h*6sh4e|7+!P&e*ujh;OtZdmR2GX@fTPmC?{a7_NbfDENb z_*F;v-8TN|6m>hnF(5WmlApfIx39Gy)Uf&j?A>1bKN;5@^^_F z;zoLN_>-cF^NKpYyS?&7%N7E9Vbq2J9{1n&dHySauLqh9gik3R;Fu{j=;&6UPD>f8 zAubL)*r2b27UgKl<1p59ZE%!!GYbnz+Te!<{&@3?{jz=bVZ-Zpi&ZZ@KfUlb1ROtu zT&`XnS7O-8S#bzSn3Y#zJOMvo|IR+&nD@(Y!VfT{v6Yg^fd598K=|QJWjSyj*uWxQ~l*!DY(@f90Rq@1%hlaLS z^d=x8`U}Hr`xEy1mQtVEU(;?+!lk2>Pw0W##@#bZg&S08L z<+$+NX)Yh;V)V;xax*`Frky%S_``?rTE}iFJg0)OoP@Mk`m9rNOdgjIL`fZ~zrZzGxRXVg@r^el30WO#_ zy}LsetrWL;*xF%mdyHidEuE%4y;pPh$ex{F$&4#tC^En64^mR}ERL~1>Oh(pl`1PW zT|>J>f8s>p0T-|aXJU%SK|b&m#5KIxlEh_)gC(G9&(2n-({?dq0H?|}VlX1)8uE4P zbvjx4?b`xistknb$tpa^Z{8l}pST&rfA|Iw&IMY`V+k_(CqGngWbs?XXz%8-74{HT zP|;`JX(%qdvb#ToD&4+ghn1S4fq~XKX$$yruA}}E{XQn~?!}3+R}cZyV04HMdZU;~ zxnFvxAqEA@>ms@+>G+=ie!l8ErNRuv+Kbe_(3t|Ug;laH_1FMM=p>A|>b!(ypC zJ7H-A+G3&Sv>S zC5KO#&ZqY<^O-+adra-AXVWn_29mDed;y!vcqPL7lU)n;cl`0fG_+^9+=42@Cp(ct zmT@q8(Lau;jCm&|r40QzWTIxX0*I&(6tpWyL`&%~MVC;CoHYknbH^AJI8tR?^`_&T zl#DLBr4;bNOY*2kV(?#X0Tf4xmOwdf>1magnks9nk?nrIKen%Haa(2k_DM_v%)Q5E z1d$ux9C0Q`asm(BJTdYHc3l)&GpLHIIssFQLk+iYSL%{%tsOLUs1QgCu-gC}%WMvb z^PO;%GDp7|GiN5^JyPEmAr4+5?T(M?FOZi!;CzGRQAmWB25v^$j@~urJnG;_c!~mw z4VV4P8dckM&1$vT*Hgy)`NQ8o@b^qLt%=6wCcA9n&d!@{9G;Y<8R@fV!ZH&Jm-#Mh z3OCL?mD4Y_#fiw5L2XYxpRu%|dXp1Po-}G>G-Z$finkSpp1~nQo;2;ZPL5Xmov$@_ zd-@L<(#z@4_c1S8i<}hnVfuoPihLg}!8?JV7-D6gJvCfH=n_3O{I_#R;bTCKr<{5) zH*j}Az(gJjAnnw*?OOY7rEZ~&Z%4-y!>M6*%jW@GdcgI0f<)x2>7gYY&;)qzs% z<6ckKXIvEMg73-@Y7yzEBcJ=IvYe^njcTK+YKSIyU`JnR%#jT#YPQ#ZfwNnp9Kl-% zIa|PaDe~1PSE;si?`27J6jvxmB=>N&QzE;BNa?aGtkZ^Uxhl(ifvjyILit4+AYGCK zo}Y9rLwAdD^=PK!Oq>KAxZFhw3YzWM)LYgc(J~`tlOPPH`&46#GWOJgFApNZCDGDJ zU$!@kDH^=Zobj8!O4Ob-qk2!g()eOeEzH)S4#n7A&=CO&#s$ap9kQ~Aj!aTiph+co zgoN&*79YtxT+aGBd4tFcaw8_uMqo!O_`|EZ6VycyhAnwX^n1thPk@Im`oe|%6{s=+ zT0r|q>&~5L9m#5;Kxp}E&fq)T4-V8hvVucMc`u+bZ`_0a0DTZv z00RabB`H9|hfm8_(X4(tq@%CQ417=_$LW@CP+BXIAQ2JP$RK<-gJmgk*`Ij|Sr&a0 z4j=~czIWI_*CMO3L=)z2X_q#+0d;~l-=Aaxm>Euw zsY$!yjdF2o2_lOOs{N-z6ANYa-o1@z)%$!s)_q-U(PBDwW3Hauc)8Q29abz0BqZQ_ zaZvx!qwQD^6iEX=eN~7_ z50gI)v2?iOZ4z6cU*aHc-gtGXo9&+8=QO22P$zHuc-#3nUZj6BkJuYVmfJL*v-Q(I z%*E@nMW<(NPfASWPn^lj%yvE~kS#$N(a?Og@$;K%Eq@9zW8qFv*Xg;rKr)#pM(bZz zy7y{4@Q|%6KvLJ#ob>T4ww;hNr0bUQcb}%LdDOSRr3AxPID$C&?dSh|xv?Xo*?|O@BlQ6T;wRn9p!wS%ZtBFxfDnP8p~0!% zDWPn4cuowoAd-22Q1Eu!y9Q{ZDQ&|cXD3pwMm?l`Q zEx{qjfBrVNFJWPtjY|B9HnL`}j^H{pC0WR)6hDThhJVcax61mx-MWs2pVEob^bQjN zG%e;|66uVCyMM;|dJV)kwCKWi%YX`xptltlU;Ih=NURIdy5>Ao3oysAWMKtT&#BA_ z78rMOAM?}%5Rjq8Yhi|sy!3*lW_<+5+hWasH#RWXqVwa{`A74QY4JY#@DseVoO5)Z zC9WB&R#-J3Tc5xtGkitM(3gOXq>LI;zz>##oCefVnE?c==xD|z+msA4)@ z8sJcKP|KrB4M2GST$1zkR(5Qc!A-biRc1ev>F?|pPS)^W4&dMRQFd{eELlsM8^}3> zM@o7*IB?Z-Wv#+>NBbItpStsL^kkLMmp;9lVfTEoWe1ir(f0Q%`@{C(2)q4ZmuG^d zJ<?6J7)xz6?da*7}ubQ|;OVtQ7jOdx^FsSQlx`<^%9@kgfJ zK!@}@cSITN=vuYeZ5M1yjLq?mjBT=7ky93Hwgl#aJ*f_t#;Z$?Grk4q>#+#LmLW1{ z!tMYrKlaDxO}bUl5f)9T*sRXoX2wP~Fs!oPc3<3*c>xHr=3>LpyZZVq=OE{VT?jTf zNpqk^3bqbBw?C=w9eo*AYOydRR|@Qm$cRma58KMiCQ z`9k~VTjrVV0p|gprkwj|(P?mOAlLBp=ZNay!s!oubd=zHEZ}j)~jR%-1K) z#Nlr0c-@07!L?l~4?W4x-#h&3#nL)|d<)63@9ToqdoQ-L7z7+>UFC5-rON~d-z_*y zw32kkJ4~NB)3$2$u^pv5(`i>#*38}%`z$R?Yv!Ianm9BNl;%3HCTdMp7c!+YGa^(i zYrRhFhuhjaTs6AQG7 zpPv7XFEDZY-V%MIYVrs5xlLhSB)JT|KEFvgRtyfupRBRB_8>yg83sexEslDw4hy61 zMZcg}eW62n1=a}&rggw74>A}$5TeesCbW)(S=liQmTK|xqi{qOi(#1wj+jrn1{p!8 zGyNo^1b$N=td)60>+IUK)`Dbg|N1##?|tP8!`e>{Yi8Xo^xhLe)Xg@nK*R`qKJK`O zQMk+nLO|1NkpFS_-%#x|$9FVN=FWin+CD72*>5B0e<(h%PqGBpApFZA|52O@qA(sH zm`bb^(wM!jJq&hSLAc2@m5qvrV9k_=mAYL>iO@m4QM7gEn$d5460md4 z8R&ey;)7?=79YdgI0;312GnK#Td&P&3m~cl1#)uAh6sZzGah9RmX5Mt1LC9Ks>F!* zPgmnr5?mCQ(4Qm#CVG^LDis=B?`lu9u0Im;Y}{&xF3LfgXdvkmXlQbDjw8FJ4?ElT z@OnNop#+Oc33kbG|KY9Wa+r4gesLMLDWfj^hI;;Rc+N) zbJ#wgfHg(3o$ccdqq0$$&;Bs_R9~LOaZ%ZW$Tv~{IN1KBENl_f`{(OSgB zH>&zWBJHwBBq`x({9n>DwWdt0K>Z2K-}54OW=tJEQPy1vJi(M2uBpUr(Erq5__ z(HEF)_dlASpZ^bCAfUGcl`RgXIjj4xfe*oAbU|SUP#zD#Oql(=_ zt;L6xZog1Aok%yYs5$Aws9O=1K%EO8pX|mtB~0yZoC{}-#`TMz*N+MPj?0dK*f-a; z##<;;RhzQG&_|JNWdP@i`&zf!@9#e~Fz|Gn@uNHtOhvR9y=SHF!BKJQ4gKzou(Q}B zF>V%-6oA}Lmh^jaOZk1fI7Z?iQ4ggqRS1g0qKmb81si@@s4_kD@1}(Z4jfpM+)cGj zn+^8yQ52{=jnK-mU#S5Mqsfz6byJI@mk-rc0&6rkY$=bei;G=h#1bP|rKZiA^%yzw z!X1x$o44oeF&<)NFxPZ>iv575(S}xBi6}4}Sso51ZNu#(Yfby1M&uO)9W(PY-C0`+onSM%<11WZ$4j4LB1snVVD=86wx%wQt`f1~$q= zDE)|I`XTg}Y(LKp*~R_dou5SgOKPS3bmF&)iUG?8-zPvocG1!$OK6HjEui3Zj12tC z?LKNyu+L#UapU732@p$`)3im~Ph@n236bYXQBnS_q$09qnFrOe25+S3rx;@SHQzke zMH&oNjs+YS%PD_=RVv4Z<)((u<%#)0s0rk)}&P{KjT2pkAP}` zMTo&V`lsLEqWGyDXY~H#;ea7Sq_NL}`ABrrw_b3VXsjs^mclD}q#U9HqwQhm{LJl5 z4{xPHz5MXu4z^M5S6(N|z*+MOnuKyFq=#bmq^}(mJX!DRBu%c^G1VW2D2-L*VE8aL zj!65JLlph{G02J+AFpp{eL3n#@d@V%>UjenTo}J@f}z`x57njB<5JH~&+;_CZ@X>m zMt&r^zVUp4XtR3j{BgD9BmBLi`X*l0bvjR3cVlwkdOaoMD%x0+PW>MNCYWM3qveGQ z#Al((YPvscf__Go=AAaOJ48aK0&{*hmQAjQu@ZqXhS%`&J{itK2ZR0)lDT1H);vJ2 zilN<&x2>_>_ZexVE?xx#3uV+RqQy(HE7=ZnCbtF>!#NaLWLBZsh2DXGoj!GHE)BSl zP9%%97t7(cFA zdeQwe_Af<`%AHxiQ4d!ofAh_6z9^~KhkyP0Rd{=d;K;m(u(xQ*X2d9Jao{QmUlrH_ zA#JMjP!>8&>+3F3N{rFQU6N)T^8VmIC2Br4!#n%6eJD!Y$Quw0@rExiHp&I27N-0+ zHMN}pC*X~dLHQziqcfh52Cu!Z!T1S5+D6;{r3IKE5E?BJI_pbw5M$A^Y(?DRk4}jo zCZzulmKs>07a!^}smYM#JLEa{YwSap)<~&ntLnpyb_MrB2dD4%{uUUq=bSB6r{kN| zTCWCpeQ(BPkowl^zShE>+tRW)*JNY&7oXMe-BX{u(m-N^MqIKU2fG&B3r|QhaYuhT0o^Tw z$m`L*u|t94gFT`JFJD^3HJ`0- z{RZRlUPB~Ed;rNMmTP%!LO&H0SjJf$(R`M2=@7+f`Q>r)t_ucrTk$h%v(-LQ(sZoe z0Ku9Z7&39&R@10#8O2=A852`NnB~zH&6b&g+=*Wrah0I zdG>_Pj|_9pC<%lF_t1r(Y^^9l|DWNMG3`FzkH6DhB8;5uF@Qr~#6|)0qx4P+ZXgG*ns?I#O4cJ*2mx zo48s|9bNr|5OyBi)7@8rNMdVc(m5sP;)_L!E5Ry_`);-;&5=W+(U=0zK1fF{j9(?@hjQ0!DYeE z5K0?>{!d5>^w=g)*{AJHR?-y0lNx|E_KfK{QRP8#8E$8Z#zWVC1C3V(wA$ygGJGD5 zsW2QpqQ9C@M&)@^QPBr8OA66?d-qx2?yb6B(|WOO-Vv9S)!(Pxe?8r+C|R}V`G0+a zKhMRosgXwNU?hzJG%NIeGogK-Hgl#VJ0fToX$hBE-qJTRGEp%a|BglwB{KbFeI&J8 zkQ$+p5J?T}oJg)qOS@}oHeo^n8RuoTRKRVlD6V1x`2K`zyY!>fM5tqy*p5RKB-@b? z?AmypX&tr_1Fg*6JU0!bpC^0~`UB{N`NEgrT?AMP;vN@&0yAS+NN4wpU8*LWbN_l&=i4;)`(Lx+aA0=amff#C2HhV%WUgw}XvjUr@rs3~&6gbH?ZrW4`K_(_x zSvI%Fc)ZmvhNDhToT%v#i5@9xGu@y4ZUS$fjZbRM8HB1+nwnP>MJds)8HR5{xU{- z>hPwk=6_Dm1yi##?8DyS^>DY3`!3~Oq%RmBl^vYAxpnFjApgUM^p* zvPA5mgYG2zdbJk^gBdoMBX_pDdvKD`c%yCJsCYFvzeUTDVe>Rw9kXeH`d$`YE6Cz1 zHsDg*xT+N9kjTAsY5MkqHV1W=e;;e;p5QvtWoqEL6@`5d^;?@X_rKP0x4u@>E!kbY zGc+_*G00rYYFhaTb086U-jy;QGWMj!rG$x&itn3m^7N7?d$@DyI&;c#J@WFzgB{@@!T%bykSYG)%(qu zyX)MA3n8iCbYOe~eXMgBPB1A5+Q+jmf^nt@3e-*XGN>=W18>uR%EZr{PQHx0y$qt?#4GI46jFc=4Q8s;Lj^q z_~Uw>k&T%=oU!fa5u0cooe=Q=7&f9s%}X}K&tYXEEh7z)q=GF+Bl2_z8Ph!saYhPcDDz+b=;G?YbAR-S|mBLXrJTo}TxI9r&dacKW4uiTMau@CIw(0phfgGSGJ}(lPuSY#FI-T=Fc8 zgWfb$6YY?)$KswCb{^#>Hh4j= z=_Myo-gCz=f}n?Q!EKhf;&_;R`4G3%=x*4IfWgvz3k~l>hkl1!9FD05a6c!0_F<7E z0KkNljl{D=8COT`FSUVdGp1D>yJg`vGO4DRz9V>}vfKuVT(raLdN@{M?jDVTb9+7%>41HYu)d?dPR+|TVeedjXLV4ztM+?ZWi`;S^0=AV~mX@qL0JL?9za5#f(IgRWv5W4kci_gE8lZO*`b>ZP|kYTLEl zboB}|pSW?Da)k_?EBV}H+5t(_YoyZgG&sOEL{U1kV!c0Q(~tZ#r!{XL0jbDD(YkBb z*$Ygpdto<%S6hMihDPWw7-$4hPP90%3re#mfCWt>s$_lDa~3+t6&3BFa(QMS{&`em zzP~F#Gq>S<$jIr#cpi>RA#W+}QIS0@|6?+UmeR1Zd)_^$0=Idee>PrsMiLBIBd(>rwL-HeQRJZC$)jI{AZAHN$fVktt^2KS-vFbG`(e4L}R z-)P%bnhIGeFIzKVJR)5#If-9NLO7|kf&2S@B*~8Rw*OF|e?WkIqwHSK(b;bJ7#xiK zqLzEBzZG5={~K1KcH= zPsgN`G)r${-fitp#L;7{Aiz*QbWS;R(@W&VlDC$!bMe`(9Xh1*F4zd_H~nH?l_yb@ zDB5T@((KxgSiWF)QrFJhBCzNPl-O5(STLxh#c80_cd951;1|$oVS*I3a<#IdcjR3$ zd(VU0cKKIw?|7vf3{BC?1)PEdjbKQY4Ig=L4aaljw|RTBh1w|JsvEQ<4rIZ!wI6al zF~N{pvnVdXA&L6qJ0)sJC!uvgVl$jZb`lSiWcr91)f${42B(aS4Q`o({+gcZ^q^WtDewI zk{hbMs^CUbW~SW1QG}L?Oa&8{>%p*eRlRlF{zmxbxJ+|W^z&m}lBEAR1Vs~4pHg)p zpeLdqYL{*F&{;>kKTPG0Y`kd$brZA##?rY$@hFcE_Dcn{$Myt|E_!$gAu*5sJzj}B z4PWUi)Ec2Ex&QT>966_Ldi(R<7i7}Z0HML+z5Ou z9Z{!+e=MB@C&l|08q+j?!CN*Oko+~NM(cpBESlBS-0lJJ#yHDj)qcqCXquIuO^lRA zj%u|(Q)T`if0)tj@3u$ImkyRtQmhfxIuJXXwrqD3o0d!R9{_@3sN3^SB3Yf%nb2F} z3|g)iUye+OfIMygNZz_-3+t#1(N^PDddX#-y{e7hZpe5R;;E1ksIWdvlf8%*1mn@0 zj=){#9maiq#Qw6$ay*5?e|7O0Tl4KVS%`|MO-N9#`{1O#)CUVwO<8T8V(-VnrXNc+ z4jn(PKA+cw)VKRC{;z~3z>O?llt?>*f=^6OT;$3&8ww1HzD-x>Xa?!=?=%2)_0h+36C8mNxRrq(u>K2n+ya=DxWI(dPn#lWE&0er_1VpI+&&rKMq!AcYL#UTqmup zdt+zM2}snL@$~LNm10Ge7moVXS2q>T1gQHmqqgA7StMtN+~0PPYtO~wwTMvVtufo! zfrgv4-o4apW>1!jg*-?;mQN?smWTC_pYFjE zclOvoz-WgYi#$Czs36N}aPU54Dg5VK$&0S*d8_|lxIJJqiv`Uh5tO{#-s_MgWpld> zqRr7x4}Vnb6X>3g7oGmH;$ZWB3lF18VCoc^8j^^4Xx8~Y1XiRw(Oz@!n6cTYFAbTE z-vY`G&@pcMcd*kTi_7j)sZ@3j+QiLg zd;GjPZX6Eo8F=HcjnRteCfz>0Aex6hb^%ux7d7E9kK6vyax4Ux0K@qY zZMP{p&`tsu3}J^BQ;Y1Sf3SNs?QPDM8}k=sh3U__u*w&oXY_XeYsG*5Z$#Zi19p+g zicj)vW-d9A61L(63!_A?CV7E0jJe-K6fV_PEp{C`nLE&(C86XFV}E9be!o(eU*?n2D~Kf^efV!|cv{%*EDX4f#?*hxSVF;J zbH0ad)eK0f05+9>Z)(MzP{21EB@oe}1W#qq;@0ik-=enq1nO#;ypN@o>a~^6H(>a}WEfP4x9Lw3T$j;9u{ zB(4?x#8J4Gq62mgy(cGgkAWP9?FrMwHSk;e_Rj5E(M@51bsY3hX-Wr|`>S=B@rdEW@%fn2VxnMo zyi?ADi}7f<=ExNX-$rJ zi<)YNR@(FDYMPp(HQ?Z;{x=-lh}EACBrh2peD42_g>xI*w+Lsi_RRjV$WbMA2cpF_ z!iwpP`p`c}83p%9&>Lp;JALh09@0uMvuW1P$EfU_Vr*(^?N@VcM3_?7eQxIBlmubb z+3`P7aYtwo)q@6oD=!yE6lfw#H;(bmAEx@yxzB62b>n&U|A~sj?|&DjKF*W& zx5aw+V#y{jEy?Kg|6?Yul^9HG<4Ofv1ahS4`trqqru-mW;4R(tu;RURCsg@Q=Xb2o zFOT7Zl!$!_X6U2h^vp~LB(Ovd2k!gq-kxR>CY*q4;C3@i@n7#?gF3Fm(d=x2(B5^=&(K}r{`X8 zj5;TxziLp+5CCX89R)E7vrRxk50YkEAPd2zwI?{Zsd7MnrIsx(MYXXQ|HFd2{40Lz zM38OS1+sZ_Bku5NMw3vOU>?A^qL^t>c8LSj|83I`#T!@J*q&)4!!Dv3vGHPH`>uGB7<`AgJmiZ7$X}V)w zfVby?M5y1*w2~c=k`yJj8-%fgI{J!7(nReeQIHH0mWIcJqPkZ{WEbw^&C;@l0gzDO z*-dTy=bxWTsywlel?iGyDVH=ZmCBxvk*&i1i> z8EOOG@NKo^myBXnGev)4$Zdzg!IM~hF>++5)vGJ2wf5q`GJ$oa^%kj9-rKFl7Rr*O zclz{=>(|4lb-3gmoAIa*#uY$on0nV2k(Gdngt`%F5IHSoyhZYwb))HA-*|44;rGV; z@dp1bSC+P$s17t=c_&*}u*>4*r9DcVkq13q8l!0Pks18Q1!9dt0ps#Mmt@?$dDQr= z^QMgzZ?}G_{k2~3#;dm#?mPa`8~nOWWX87qd7=CV8s?ue)Q$eP&4B%X&M5x{LLR?u zxsj#OudDyxKP|unB>sQ>cVV+^^41Hxmd*5$bRcVM#`>N23A`-5AbW} zp7OJS`^#9=OJ<*}?XYcY?5L;z!Nu3Z76a>c*J#@snZzxf%eO zkG8nK4R&hMym>=eXLo~qBDks8Vg9Qzsv(jj`*# zd5p$`+6hL?@!bslgEV3&{7|+}042bLzNb^RUnuYND{RLyL_VOVGVH`(ELGy-)+t_% z(14Uuf>Z~ajV@EB<-C6VdIJRn0<=OS$W8$$6;T?+brAY*1f)4GaYTe*I&kf9<^KpE zIiB`Bv&w2SbH1dQh~0$QGPjbqc$H37c1!~*uG+0_9JG7)RjQK$-a!Wtv6Y{mPR};^ z^*t}U9Q*CmZRA6KL|MC3=8p1D`Ii=8gSql%Q1m&2gHM~jnE_rsAmv+InuJ`PKrOZy zNrVt1D~_fs6qM6;9I{dM8T|nMh4lj0VQ_-w2ZSH@G105eQ($<{nlfAMRggqT=1%mF zLO#d;06ETIGQTWr{uqfY=QWCUO@Lnz9V8#|XBx<+4O#9c-Y9Y7!y6~Ag3V9-xW>&* zmi9tx<&1$kV{Q{!i!9MX2SG1czznK?rss`K*z!{)_Ka^BdxREA!GF_rECABTJ5h0C z!Qd}AI|O{eQE&%7dzq`N1B8TQ4Y7N$oZe4HSa#s=%wbpo>za_?Q>~liEO4qsdR0_c zBRSVk>OS*uiyjLHi0t+h$eBGm9$hZ|!YE~D4?TM+g3ptHmt$%x=eu@N07^nV6k-?E zr3>F_K-!#vvcwFuLn2qi#zO=D7IVa+t{>NI08S7yiSy8QPb{BkC7YoRdrOW^7-dp& zO_)P|LuL0cDwcGEd06U#SZd*a~QusGVMn;~Au>w+l$94XSt(KuYeq?bkzVOr^ z$`|KuUo-z^M3p!B2v8zPK~>z{sj1&1S2VRoR z7VTj+^})+1>&IZYhc33di?;Nd7YWURq1qR(DJ#;)b#T<_4T#a)!NG2&>AjLn3)<)) zCFY~fc|#L05dW4WXHisINB}#la%8_Wqo+ubcyWRe%0dIlDdSu^h8uS2+<6*KnEeyA zsEd6BAaXsQAog|nJ~1`(k;vj>)bQdjEYm&l%oAh}O;RWp2gff7RtpYOyFlSy`VM<8 z&LsVZo`1??in3tv;I>p^8kvO<(Rfb>7XzvQ(WvuQWw`|gro{3L(muPhEWym|p7FZ= zzwV%ddnYpX7@L2dn>lA-YvKbTwA9{bKBHrl^eievpMzE%$;*F|dCprFgFwp&ho4ds z(tR_2JfM0p(IK-8Ym#DrkA`1%tI}?W2o+^@V*pb)bx=a&BL1L^GW_i@=)qG$ZJ&7| zX5Oc#ncYi2cZ)0a)wEur)nJ!jBhy1=Q76`n+f#h+gSdq`^Ny!r62HK<2dCD)2i-`c z-DI6stof5J$LWf&XLi7K({VADeBFaPu?cI(SUpLYfn?DjDw|Bb(3|`bpOkkx9DB-; z$VLgFA4R|77+x!_xo`}AendznPAbW${x`b&?BT<9>p?dMk*KOIAWK;_xK;4MGy;C+ zfX4{8&2Lj+>gjLvIBinaUu~5Gn!B!C*%MEc@4?~AHgajiI831wEF_LeQkbA~P__oE z&sHewwh`KJpL$^E-(ErNPpmww1%ob`UIjT>7P!g;qEdJ5&cX=a(_L=uJABEx9l!Gt z$hqXl3s9(VXw9b)AeTG%8@K~Ss-fvUp0OT7QZtDZgyi`EYYD7oLB+ww-Gnu1P?FrD zvh$FiI~i4rtoEU*zP!Hm>jRSkyZ7(UkVH^kf=KE_s4Qk#NS^&K&JbdwHhW!}3Wr^? zJvk9W_<|UQ+!f?%!XkQ?=L$__ONtX^Z_JOchwEO;@+V3@-u%Wi6yRm&=%8s1Yz^I; zd@&^S*aW#^ZpbHuwBWOUlZt`(A3OSRUESC>=HmTlY{^(RL;K(Qngqi`Pmj$U6qSDa z>&^Vcf?=!G43Q^wA3L_I<~bb~Vh9-)7JAftIe+e)5M)v_fMSlj*r?dQXogtMkMoQ+ zw29vTZ1-6u5WbG>4uBG{4Sf&U7l8`pVtmMf@m2;#X>)CC+CeIO^Yj;QOc;pqf1q+A zMX(NMLKuba9HUiOcY}#W^gduQsDhKBs6mRZy(7-t;8F24sVG01|TlM1IGQ!jguL0xHcR_C{S9eCn zY6`W=zSPvby!|vuvf`5KNgq%mvnoiWLh1g!$P`TD*ddkb#(5Q~WXFy(me}|H)q_u5 zX001#d4yxkioaW|ls|21T>uFNQq%>>2PFye^}(u`)AWQw2w?Z5sp`|_f$R+Yz_1FERp z^CXC=#am4ueoNbS?F@j%-GTQ&Nq1Kr>4juO!X2R3pz&i+BlBZl(KQGoBkS8Z&#-tm zkl;*Wrjs6}XTXiFHXa_yPkh@$Z8II>GfqQ+qi{@a$gI z`7d(fuetA2diNUPv;%Gxi4TO{7E;?jen9eer3)mVK@>zFjCTBTZTAIeHt2*HV$SLZ zxKC+f5r{(z?e-aumVDo**xmZK*SqUAz#mJ4dsK4~Gn85x9^?iE7%`cwSx@*dZhWMD ze}#mEJb6F%iyIgN5qbFMyFzBQQto_M!@nt_2&R8F_jRX>4(C`z+J_TkN4lVp z5}PC{5y9Pxg1>&W`nA`7qQ2GlN$Q%>W?kB}xypKy7?;?#@cBiGz5q9$B`x&byQo5I z@$Y~#OIQjBX(n0T*J#|`3M2Olu_xk=^-nI!wp)wKC6D5}iXg|ouD)PaMCXdE81;aB zqX3@u5vGJQTZksQYuCeV-+k4L{hU4<3761?Bo5`Akv-WkG%WnWStuO}ew|Z%YY>;g zIFooGy5d@+lt4yoM9Sj2u3N41=^lOLJ55MHlmF_|rzs4RsNPUz((*+HeMj^xIo9lc z3%xN|v)%W|UX5doT`z1LJUQ(5mo-$#(I*v~t2G8gMQd>t1xJ!;EFat6;Zc?^2Q3-e z5k6Iu5E+ac^M`gU8Ig{Ra0|c@I|B#$wCbd@gV#6+QXCwJO)9$7*7+QR(wrnWXVAV0 zbLRX`YZ=AqlE^)3GHUZ+tr0EpZ)Z&YY-2;imelRbJ_fNi%nkE#iYzLK_^f+?wG)Kb zP=qC4XWO=IZR4}3H+K$<@Q2NB7qU41mxrlnlQW6bw(tI^FN;6%P&ZH-(?bHz7lk1H zqa*(xJWRt9EskxL>`t@*$znEk{kGa7^5fK(b+ed$EDf9ab{%^Nu}quaew#q`$-QLF zbhxzdw3DGX+Dzkd6T>_zGp4ny!j%Z1RM(jGy$y7Bzi=h5Fg!AOEg z%W|5$dD%zn=9k=k6{c08xYKJ(y~Zl~t0s=idiub!#{|gXN%P)8821MY_Zx@y~Vi95byfk6V5dsa;5o@%VR5-^q54chYZ?Y}ldHy9|Wn0o_KvuJzrI zWQ0+Edi3vq;;EIPb?+`Ndx7Do^@Yz^+0fQ^d?#vxcT{EAb_+=c`*m zgcpfJ_n3i(Ls=eQ`L>ybo#Za@;X^U;h;{{GmhiO~dS}DHOwSH=jmYyg7`;7tK0KbZ zSbtple)DbKV#+eeFRdJ~eV^YG9jH2pJ!M zdfVLc@%e-Lkr>>+TxrniJ~10eHeB)q&!uho8H3^)!GeOaj=oJ2XB5F`-C9v05chd79FbUTJeP)u3X9 zIB$kz79aesuD%&ifZsStRayC|)z+sBwm{f{Qvw%J)`yhNV@#*mMo!++dbI)Ym@^(@ z1%bv;W+o+^;PkZSPh6if@bQmzkv3KC=H+ky3bCkK9l-0XpEFtuxfk_v2yLR$y{r7} z{5yl^oSMeg(FoJ4vQmRGl9jaB_PP7JF6y2=0Ff1Ria*vvarDsfLL6huDH6s*vhpx{ zu+Z$x)4JC3J#c-je1HF{hP~FnfuFY|4!3fh92xEp>m9ISEQ4j`ix$6~^_dbC&fh2+ z*v@A&kriS#iVU?fH`l|Bwmfm}bh?=MKl9}1V{)`nTk~PiO5F~2{eL2xH!`EAw|ded z;^@)m4>wxIFlRqrdDFqc;R}Y@ECMAQEWV9AvU1QnvK0e)PqxGR>029*)I647Xn|dk zHs&TBps3U-i;d9cf#R_>86u=*hAmyWf zcB5FzO6#w4P>V+T+PqT?06y$V8eHEz{!zZN)$QdjuP5KW^81tzFRmBXTv$}r$Dw3O zQFYSm4ecsEMIXrHc#WNlq6JnU$JFZ_ZJ!1+3$b&m!`-QrZmABvDeRD;n#z*|c#Z_}aszD|hI zlqsYG+|)qL(CpxpH0EsD#EuAv40?1h{tnsq;R9*x&4F8uqms`Jlcf!?Ktq6*k!Nr& zcwt}hz4aNvNYot>9XR3qq#4sMtsUW!V&D7u-YNB>$T9(4hLNx+pX%W|1xX{_KC8gy z4DC3=^T%-PURTr7wi>FrPjo*KE8>sDCvkDJSJHnYzrM|<>Ea*tsQ3wyA%Rn!Y>(=u zWToAecLs|FAid4J#Dz?bQ*x7{7!N@ot#6z zXbQ)X+(q9Z)iOAY8}@9RzH;U1i~q909o=s`Uh5P;7Ux24{tWZd^78(})_G%^0&Leg z^?&j9CU80DZQuVHGmK@j3}YE(Ep^(nq=alyD(&`Np{yyTB72c6DI{4+yF`Stlcnq_ zM2V(QhzeQrypJ;1J@eex{r}&u=ehs?>-D;>*NjVN=Xw6V%W-_RgY{R}my$?k)Cr6I zrz%(TPSPS}CJGukt_Hi$4f2H)17mW3vZ6NrW2kKPrSB{iG7ngUO~{W^(H(5Eiz5nU z4Gnd9>TjbOHf_3wo(Plx9!m$v0UMv!qkE?s=i3PbcY897&uS&l)o$1C$6pJ=u|1fgS@(X#$8fd&9+?j5d$BP{ zwmmZUqPq7NEDw0EBebCE=psaOAQz#eY#trg1vpCN3VrT2zLc7Z7B+6qs2$x^mgCKq zA;b#lg@Iq8BrVF)m0i2aH9sWbeoYPQX0(m3BaMdES=dSNw9bp)Fkg_~w}s9OU**eZ zJffc1`A}#WqknJdUkkUav-MzoeSIDL*}`PYj6j|sl~wwSwZ*JuVf?O#=nAln9^Kc^ z&pK+|$xN`BciF49oG3lPGF? z<^*d*VB%3%5JD<|`!9OlrU9a*+Ci7uNKMUb;ldtN$c2@<4-)O`4I4HrXydqe6W5Jg ziW~Xpk`9Dyk$uE-)}i$q=wgy}_G@7`QFKy_P16ZxG{`}hxkm+vm&8*d^MYZ`xqW7n zu7}Vw9}J?(l!tIlfK9wm5;lYs>y6Qmx=h7v(4ZAfO`bLA)+I306`@ES#Guou_>f(c zLmB5Ynhq#@ML@qZ=r@Ig6uG*BYmGpSPN8*B1JX!J&Kcp4S3$k*!LCe!@IsI8x5E99!T56qfI~I~ZdXDHK5SY^RP6-xUSXkw6yuXLAd(dlKX}`(f z0%=%Lrh~-%N_2lJzYG;_M-mz3Q*-Gx1p6ieGtk>4&*Nnm7)7xyi()c6Dmh_j=YHX; zxvtaJ9zQj6+094i=k&3LB7R+DT(@4mxKK}BzUpJa%c3;J-A7A%E&lsnyE`o#xmuc= z-)!w1KFF3-`qem1^777J)@@@mnkR-PZ%n)$+NpVu%55}QP#5mlu9F<5yqW9?yC8QhQhx+3A}SelPOuZ^v)W(2?2At~&t6HgmwmT>J-bxVoX+h9*HJ z?da5i*KO5)NMozlmC%0QderOs*T4Os9DP04Z?I`x5x=FRW7fWtH@zzt1#GEE)#;lU zNwUO${M}4fEBRaCN3J9O<4@(Ef;JcZASVCy_lE|}kX(wKj_lsdefrw{`i)m>?6%`n zt$c^8OWHdQzPa7g@6@E~SI<=Ah0$fLKKZ5pVZ-}fxLTMCJVfnxHw!X*PSpy#TyUyU z@3zmcogOwRA!S(I)zv@7xAC`kC-1{HAnYISm_LgSX!4(^)u8<{@#`Ny8#^OGwfZwH zJPX*?lINAam|c13$ks21R-c%RdDIylsRHz$pzk$vS62Ucg`T#s;U^My0riT0?xMlx z7vT)CRuP1XLLIKhPJgQ|qXxmF)@|7EQyT>P)T5J@cxiLxLO2Dz#!AiAi;}wy=mbRB z&n(u6Zy;uD(r&zP4S-5?wSp04sBR7j5NJ%SKR`%Co$cUx^lIrJFkL5DI6=BqWJz*E z3OxpXbnTU~Z$BB7B5#pPDTK=^I%NKOY*JjsjH#@Ls+Ibkqsm}Y{|`F?Xs17M%>(0a zz2O<30=svU9~;TEEwG&#)n`!L-PDOCT*1QPA$o%c;E0g$MM}kcn%(e#Af`k{VocpC zQ&71$6=OR8&VADnaK#v4nhSJ4HJW5+kmqOLS|C$W&9iHvr2dT)>DW43ws8o#XX1^+ z$k_rt29k2ihf$`%R+?YD#ZyG=Z`RYgwiP=RNE$>-0>Lb|3yrh7_t%9XyB=EQ-pcGZ zmF5%SvBc7WN#YZ;i~8}bCvSb!6`@AXXrAla($e$HyJ7qlSRij0Tb`C4WQ!D02mrMY z%lrpYUdCo4&TohR7$}1iAg~)yiH3L>1O=eK6%-n#D_y1l9<7O0N^Ua==HxvR%z0?G z%txZHyadio=${}@ToGxQiRP36fJy-?Z6f+Nj2TE3?YFj14GjSHBXwXtuR%3Y{48YJ z;W1(-mn=IZg83A(m*H2qc(V&8GApgYfRD=&*oU~gzDLvq9o}PhMhDleCw%Y}3A)J| zPZwC|m-0Iic~jz9{hN zbm-ah?z1E3va+%?qm~qKABuFG%TTO3zYxFigfjbQ zt>fRR9uWFm88M^wM)5U%55lOJ_EqKtE6#3YJHd%VR&!$=NF#2TstPIB{Z7lC!952SaBE zzKo-2$CddUp@BRSAj$0^8;>6CD{|YAu*QM(jgvy0WIUOOwH@|AXU&9Buuq&r!MKrP zBlAViSp6$5@cT4Y06mm4l)vNR?>+0`{gdCN3j-@l8&FBFVKUeZoknE+@P7Gh;w=|! zwpUATOxc_iUKnw2L2gh@syq=Hptg1$z878=tW-KbUM6OD>1Cnfq48_2QaO@sicUky zM@e$BsU}N`n*>WB|Im0w6?;)X5``Fkv%boj(Zgxxvi0RJeLLsYAJrLv1v$eTXAX?(maI2 z(GfW&cBZX_FFA}FoU;rRbtc!;DI(^JBgZdhpp?4%6BXAnGH!*NB<6s(gn#i*X|yAq zUb$@AxKWZ>>3I%|GLj%O*Y(juAVF{e%#?Snu#2-zp1t?bq0Mm7Q9K~ zD#+@QL8VX(J5kL)Fx^VkFlyPyr&X*Wmjh$lrlY?y@pMI)Afz-#w@aYc4`@B%+$GZ| zR9RKp3=M7HJ}7l*r)k+OTwfepr~Wu#pWBO1y#fvPH1rM>I^|G{VehE_g_W~6Q>9b^$o-c}g42N)HQyOC^SNxj{=K2dBBL;lu#2`&p)W zGSJw_%j;BPr6s!41q&8f7%lBR>$U=k2FRNIkx^QD-59lp2?%d7qvG4OQd0{$^#`m| zA>-8@-aa|65Qc!ML!F$Q(b~kQSMSTAxoznNiVyX(?d!Lt-8L;D2fu>n!lEqaERjU6 zp0Up+5iKM0BRKqvH7|)dZ|Y2!q9!A_dc||pq{&bK8!f=;JMTuwN(43)wJzpRE~KlJ znh+M&_oiexCeh>!z?ICqliroG%z@EI6zgu+!IVxo7uJ<1*pwJMzA75u%%>qASjBNe z!Zz+iaVvZG>4h~WPxrsmpVKF#DEFi;eJLk1DcB$CCftEwwgp0FzMsAOKU$8l2^aZ0kq(r+Cfy zL+%SXLvhmVo713$&QR^^fwtK_$aJKnU4q{Yfx z=PJ$E-c;JxphgRjGuw;$SDKIU>EC_Yu^)3*3I;7P&wM&Lz+v)kikBK{HY>)hKa(Z# zEl^?=M(W3!6nUs)Ze-w2CnKP$DHJgTSN?|911AMr zCG6dMF0$u!^oUHi0a>=2_pN^0c|LR(d}U14Q;2h4;q^Xiw1_IPRR@|S9Og{9H>>z+ zY|gCAt(2j6by(8HZo=z;ci$k%$8d#gdM|4fJGKJ4cA)? zhidL(Uf$$fQ}hONjZX6m5Yift8MC7?LrU%8C}mzM5$40!<&7Xc!$N22?6LF^N!eZF z;BE;-ZccLWgmN@^vq6fIZ;AK*E>VscAE*4*tto3}%9OqO2cnC2m<;boMWy|GSy4;N z2wl^h+4z0s6y)%{L!7wlq9lZ(8;F^Q{!K_V8NNCuD`E2F;B>oq%6=Tt<3EqB?wwDJ z&N|>DL}K&>@w(CQ3IEJ-{ET?P`hB9j9SjC5VcAnb?qd zBjU0ew`#@NpBO77Bm|??8QOt*q}bMUe|7kZO?Gby z_hT$5WH6%X7F0pJRSNAsOR(@DL68oPtC{qhbgeZzkykOIA{h7)JSxcCb>V!}V$a#c zk~hD@R1;_)FkL1|jCQ6V7|MD@oO#7DDUrlk`M}+&dFz0{hk@e7DjF&_?qoq4IG9`AA zDGzKv;3bng8hlmGAf`KRIPhvF+)w(at@yaa zHlnnuE0g%pNZ8p231AK(B+x^`g1tD<@Dkd1=~xTTv^tP7C@_W=l#O) zc$iq|ba{ZNK=R=O`{kmpyN>KFuvOanuG@jPYW$1TEr99~6Fvn42_?yx7yvZolr1$N~I?1D-(|Q~HF6Y>0}-D#}iY z3W}ms2O3$F|3u5-v!tUl3{4->pufzCChR<)!Uiru8u6MM38l0S;&GvY$1=AY*jh^H ztVz{7KH9SvC6k?2@W4|p2VaF8CY~L|5FaU}z1yL&@pc&hN6eb_Vs3K1evlfxM&7%D zbMi}?9e%Yz-{sNJ2J_Qy_j~8n(qwmolAIowzkV;zip1_rXtlPM);Wfgq8y>Y1*V>c zRHI3gCR8f>4|r~72J_UZPy3I3fVB9(!i7}MBuE}?B~?r(%JW&Y=$aST@H^?{ZH z-*?RUmTocVRlP!ZFUqYo%CL=`IVM;%OjLng#>@%e#|c@ z*iQmEM~l38{aQo{&7bXplAv=8D6vw{4FYka} z861$;e(>o2*8ypOGW;qi#;kE$V{~9h3I3tiL(&9YgH9|3oD{O zO@0!j6`J@|hKeG(I(~Y31x246afk_#QD)va{tAUzMVH*4wN{^4!YKmxD(w*+I*}5s z$%JLl%sOn!Y_t^w8i{HgHkxP4Hy`(Y*=djddoFq|o<6_pWsgNm+c(t--#77oo1IJU zf4krxtp~W}8hx39KX$@)l732$d1=;NcpL=f0ugs=zvo9%A_R{A9<9lfb2MmtP>1tv zTNkJA4xu3s=FAfc*8l3W$k{oiFmH>G&lR(#Mw$Fg<%EQ4(}HixfqUys6xjF??KdJK zLO#l)abxuH=gSlpx{iYjYd=J+c!3J)CbFO#)ZWR&gNrYl^Ab)ln+iig@zw$Qfx0IV zTmdo95cqKg+eNa#1ylvU7tBanY5w1fG*+UN2G%+DY33Z@QR%r5r=qoWl5XJb`PxB? z+y1l*GYK8TZQ7u{GtL*$AA5gaI`-q(Ul0o&eDdsB`)58K_vgK1zr_sS#Ga}KSF0AV zWyeep%Q{aeR3)+kG|Mp8rW3`RA=fe!+L|(p z%X(HaNl`6Znm}>M=M>Wh5I0vY#kLG2=k7b&VjVp2Wtqt|4DunuYP1@lY*p#M(R0FV6<-5dWi%`v>!=>x5=RF7b-gID4UUJ zHB@dpCP}5r&irGevk>E8xl+io`~h)TtcTOIb35)eb#lX2L)Fd!BjMzzAZ|yEYE5ub zZ9@l#$g<{bho+@;cQ`UO``Ea6zCuXf+1ZI2TyYZJMuX){EhyYmq^`b%eyfgO18=nJJre#%mf+&@cREhV3 z!nCr_+i_`{<(Y&zGlocoB_p!akGfHpQ`}wAjCwU-UC^KIRS-F&#iKU$|&kkDi_M(AlXsZH~n5qClu;NUMc+;c%J+ zhM;e#-3CByx$ymWiv;Q78`?`1Boh{2U0mJJUIdVo-qX7`kH%s~>6?lV+}|j?fY}>$ z{4TA8Xpx&m#Npb8AOePIovtNq>Di^`s=g_14L*ELP)zv4^!HBjHBV;b+#i|iavzDR zrBCsGli{)J`Wa2Cxv=MdP+{GEV09bEbyAXE-nd1JC6DTwL}a#Kg&s%JmK0Rgke~M> zzZpq96bs`rZS_@#FXA0B8PA!~7Yzmuj#Tb?IU}`#Ys}|qp8I}plF|uJGk37Xm@!xB zLYHuWPz2W&(*u-7kHxRXa74jbJ>i6QpooU6i2l$a_1iVdWFK`8U+{M-GahA!zI`8P zRzahcAOBQvTTB5z!N>=GiOTR{!M4IGtwNCZo5u~%o@MPLYp`Q&4gl9NIfJ;S%Ub%j z+*)pwxq4T(3VfKwziT(Fl8gEBsk@9#T#XXw{juKzxs@SxkF6t@BFAQsQTUy=5MYNG zpGEqDgcy-QVev2zt&@a_QfYI%#M+1R6{l zR{fY(pKwjGv-yl-5{`9emSZ6dO6U7MCdP8ixV*GmmdiAqCZg6x6Tv*S3##96e2+OqbUuSLxu)bALE zD;Uw3>Q}pVOWJZAGi7f`w#;8%yx6(*wuTjclwI7BHI|b`h9LKlS@lcj52$9on-?v! zQcIbe{~eyWr1-^aPMpA2k3v0fZYy5i&@Em}kkc;Jb=?8iWRt8n1raw58QziuE}HWn z99ltZ$6BvrNW+%r{rz;=M=NR$03GEcK)VCukE>RP%Zk5~0^Z~c%IJ^qV}04d;7@2i z1kR37Gl`rs5mSlmV2VO9#k6d>-YDGC8L%AXi7=zQ5b&KuRL$am3+`WMp(hmNI`3~U zC+`}tbSEt{${K}S;;s+PNGX;Yf_7ZEf6y6l?B|ECs9QTjk;njh>Y2nP3AXon2cNLS zQuIo+8of^)9)s)76W1of)X;O{QCvyFGhIi0bj&ny4+{_p35!VcIU5xqmn5pG+6tHf z)a8QMq|rX}v>5>853uv(#f#`yq6Xy>R6bJhd#8aY_BkBOEg%pm0_-(Nr9ptBI4MoO zQ1qwI_&$moipiDx^(X8rR{zZqQ80hN7@K+!K)f;~FQC`gD>G~B4s zB;ugBN%bl(ajMb?{NZo#+u+QJeEpmY93dmXy^$Dm3_r=w4=aF-RfvYjf`%B_iXcI?p~R^AQ7@`@K1!0i1h^|ceFE|hg2b)++cv~fkv)G zM!Rr{ld^CP03r>(s4qk-G29wt6{2X;n9nhVjj}O~Kds!^@0I{=ScL!=&1YLbWiD3MbR}Kikp&u;n$A~Ve)2JSKa)?(Wsz($5MIVx_WFB z?i&e`;1>_mZs+GY3f()=r3RdSbR376rzoTHM6Igs^>&cr2kDB#@)cb1u_;%U2~v-OBsdS@q@g}Khv>Fjgq9KFamPe!u&oc{vE`SgWwe(9cYR=o)b|dHPWIm ztfH>pb($OgMSEC8`i53|jp=w@n=i+X%6?17fTfU|l083zZ_VWJbNF6?TBz%6+;wH{ zEkzTfCt7%VdP=qkT1to$KPwv(sAn=R5D3Va&@A=UCwjulUf_6^OpU;Hb9tz&ZW8`; z9A@O+V6J9Q`9|PmJAyK+w4pghacS#tW5Ox-Mt+wDbIN6z<*WBW-AH{F_!@DU4i?X4 zUrUEaL^q-RXUA}3UH~^h9<>7(q3HNzvGRRGVEUWw%flk1x9Ay3X0xpeB>tCg!uFVx zlDEkvdx$R|WXHWYCJMTJDlLZ>SdOCbgEycS7Rly)7wk3rY6PCcDaFTn%hWMatKRBt zI`eJbyWnx8;0J8kvVz3_HJAE@-|qgbtIjXSd~^I3xh35C3uv?=lAQhg{6ruE z?CO@4r(b=n=a`Gg<`>JjO0ogN?!Tn>pT;*SUQRK^79TzN7>14;M;n>PsTkEN(@RDM z>WvMJJ%P;NSxI!W)K=Q|j^Bm`5p=kZQwm%scBQ>@@E(SM#@*#nP`8eY|FEs!+cnWK zG`DCo=NNsHDTmZa5V>oi_JUvSeDwbx2b<;G-iKjdHyjqCiAhj+fwf%Wc~5w%8^zmQ z18$V`Hrj5?R@iU(O6!T^nyz#6=7x&L%f8IzJcj`~H$#WK>|50T2)TobTg;!s@hU;O z-J5q0xgjM4*c9EzKJ%tk4=l`li>(hdLZ)Qi-J$#ky}z=j@?A$>P9z{lPwwUv>+kXI z2?|gf-RzGXR(z`CWwt2?@oUslFqc8VP#I#%^~stB{^)kn?~j8mGmQSy0+3(XQ1Tuj z&seL6F^TaIudqjEYCNYz5b-=z_y!sfL<<)v^~^yos_sEyvq-c1tyBNnJ$v>PLSbfr(q#E-t=6WFR3QVo?)o{T#t@ z`!kyYkuJ6k<}Su2j;w3=L+M={+0wf8UCIEN_zB|z$t*5pxhVjgZ8jZP3V~Nc5*|6G zO0n!6CNod8C%~m+81ochZDW%P*&tWb6}fRa-DFfV`YTBjWL~6T2Nbw4EwP7I9nwL%gRyljC`C`=zvL$*$y$9$ zK_iWhWax0oNJ=}19~r}%oV0S&zvF*GBN`ftn<2zNG{wpwSPSKaAb`yxqT-*K& zUF^7cyB4neq>o)(yvu4aUCM-OZeDV*xeP$#+NPa=^|hczE6z@CFJ9h;G4! zsFZ?|)+j$OVNsBpcdBsOtYKFI5jy}_JRo`%wDCEwa&g*WNn7aryPso&q`1UeHd?_4 zyAzQG39YydAHr?N8X4^j<*=6EU7g}MxEKsFBx=VOoPzP@BTYR#26-<9p&+{Qee8+_ z^)7?i?8${7fD3&!1O^dH`|J+7{WxB4%=p}o8Ysz;3PN^21L>-$qzzL}H2b+$E%Fmg z2M=DEVq6N47c@Rj#UwI*Rlxh-(d1)<4&z*P_@IQa8 zcdGaM{|^}2(b^LvP(tS6&OUPd_!Sf*z-X24q6RjC-k~%P?2{ylc{UwLVy2ns*16!d z9t~Mr-!gJSm$<~~iToInW2ReZ-!(h){@!?5$ko}3o*KuG*?tJ#$v_W`wYVPIGCg$N zWX=taT>F#nk`}?QFPkrNnTLnjGDPVKjUcE(Wefkyj+5iyNLSsNRX~`r#WaDfemSvx z`Es4?>L-`krSSU@NpPAs2nR6Qa+#9LX$U1UZr-=Go~Ulxf?d(MI$NvRM!59f#JNK$ zVvf}4@VI!fC6$yMOh1?dutAKDs2UZFqb`HI(1Fak%v1~0n9&v%Q|`8ShMk;MO~-U{ zruX;!$K~{t&=EHQBWYb2;?t;gYne5#pLChVYg~9t`#9%t%TZw^#6~oN%_x8&Ih_3A zVRrV@{Ct5npe<#Zo`L|$|5tNY;>!XR#E~-p1uib}_dMW4c9KM9^huWfgogLX*dYfF zWLSFIAJ3ZSV#>{+=(9$P1c$vdPM>=;)+W|;_EV{Exvg$S#wXtKwGSFF0ON-!-ek=a z5`6C*HBz)ksz0oN*e#LanHjWeSA$+VWJh%~=;~i3%*|9HKjqn=6NA6n+-#Ej zpipO-kYi8XTBxsxV@BO5DlAbb8qI-iU%PVU%9gHIgKs>m`)22H$ShM$@O3$Nh&1KO z)*3jIRYC`yv9N2&3FJ=N^&Wd;vF4-y`Q}YRdTjE4Nz1ydj=(!rap&K7r#5&T9@AOo zGLX8iu`MLz8knNYiFk9Wd}HIYTc~sP&iI^>$d%%BWTG8{Dp40QDm3{SXa*5@kDQ0? z`=6y`&t}BD0^CI3ej;Meu&U0Tkw`Z@uF~-PDut!4ucjY}K4T?kOSWk}7hUnef{gMh z8ZXCXCw8R&b3!(lyIAGzzo%qFmjWXFNxjl}{IU8psfE|J6G9hGS2zCyjIbi_1nmUXqfL^Z2OyZ3)`BXBYlo6UcR1 zhFI%SLD72;(00ptt4&>PpYLFL@CZ-?!HTE~=`om-wQ~FRX3#RWuS;)owTPWxQp({h zrzVX9VrQm6rh{2TESC=zvJs;q6ts+>3FCrn!}wbev|^X1z@Kx^$BRrEDfSQxU7Df8 z3y6dcHlov!+CKn6%@$P|oOUAp<+sLMbo1xBdT83>D5f9Y%>@XA8v?FqmP=wx_R-l} z^(RCy0A(x7LQGsGl_Mt~6szAY_F}^4-(8MP;%}TBCe(8T&v{r($AM|5ui!g!(7WlMH)_2BDp$ z+6liiiylKpS@l^$=YptZw*W0Nb(8jtE}DY&a9Z4Y8e{GS;lc=%CBb>ngbBO!&2l0* zb(Uv2+B4~@Pbu<+h(FI#DvIcx@xNNucg?8RF_Z7z?>l+iYGtT;f=yBHhjaQInRTZf zP(t7_P?Vm_zJ9DbJlO8?zcmD{A5O6JzUb%?+Fn^U|Fs{;F+tCzpNNW4?c+t|aYMI@ zYlcEFGbV_{Wtk}_;Z6Xk%=&JwGvgQZb{0`(_`7=0a`SFPS;ZIY^|kbhVVaWxRsw9Q zx4wQV$7Byip`7rHn=m(%z(0Ho+s1z%6d%^RU2z!K zB@Jli(}6i4XUG$PIp@X>8FF5&BL_xbo=H_~1zMoPqx{R+?`fO`9}fl*bC@P(FI}hv%1_c^#RD z;?FO-bt_?X@@t{MqZi*2KGGi<{r-*)&81{yf%V$S`N?r+HHY+H<=RsuWvJ* zA`)1Bu-dVwFJ6o=G+eIVIaSTIW8IS|AJ}mCXL2aLwmZLUowYhNbfW+83$}y?34!DK zvB7_j!+iB@-uC~^Xw$HwX_fZq@1Ux$(%4e6_x}E8HpcgC8t1F}jah7@R-=u>$M_q+ zcKgR)sOsDE`@|e@{|A9MILEKb#Zs}3r|KGQo__PDolmNo%sFb|{MdKr=JLYF|C)2; z>LYh;{s1XdR2k$;c$bjh`KtWXw)=*eJN|At8nMEn>ODS)sj2J4xgrf@@msa2y;^3q z{pWlC#nR8wb$cZ zI|%t(eWsQp1J{}V*nnyw+&sos!eBrpb{`DCn1~I)d@5?INSBdjW)X)Dy*)PB^Y6cv2_8jx^--xLf!c6lX0!2|-%h5fQeja?|O44gB)c)dy5Y z3^HueP-S+Lp_Yx@{Oe7--dxvaLmkt08^>>3II4rDgXU!oOViACcXrG*8m<-|w(i=k z&3pfBT<6$A|C%Pf!cMeR`u*aYey?-xo7SgnUex%h$%bp63`PyySS1^YnUVu&j09d$SK^x%cOE0g#x|;QNkfI z-^u?ITxro3&zysUge}-VB6Sf_3LJM2U0wR3X}wyiz}v~hQwi`Fjy^wsB_W7qIT>N9 ztx_LFZBI$Q+-pwmx)Ve64RZHb`=kyjK=KYwZ<%WfhsmfFg^ZdbdaMV5w>0$%1Y~U} zndnm$GIb7gJI>(jYT`){TAWD~+Y7aUSn)7upT(8S=(|p(+!aJ+UPC#>oNg`fu*7x<)HLvHa6AZu>>A9`sNkp%jjq zH5evD#7zLEo0tri=U0Sbsh~OBNA80H%`$9j_ntj3lEy|Y$mSxz-tt3R^#-=5yY2@4 zr?TD}5Fp6j4ud5+x0NHD#wVONrqw5s8~vcn}SH=hT$7#YYJ_ zYO9Gi9RD7(aD5O?)BW|TZvVz48<9gxRf<;f!sKR>U0) z*UZ^*Fq9(AH`xd)(8OxJmOLCPNQp=~kz%*(;!WE6u|(Hfc&%c>wx4kSHe;*%Pv0*Q zF-0pI3!TMsr+v3nOX)`Ch&@UWaz0y7xAl?{K-U|(Y&4Xp!S}D_Ox`Iwe)ik1jA`Kq zMg9T*J%dWB%0oc)4`fl}Et(P;lYHi5emza|T~}Fse2rB;;=X-lezpR17Fsuovpd3j zf5Wi#9G=nEQ5zHIIykH)<{23>eJ^uzZUK}5F1I6#A36Yq-XI`G;5ECt=8g_)egQMG$a}qILOFUk}cLzCGdq5JSXP3 zlb#4Rc!SW@A7&vnL=`jaVrlM*E30<>Aad_m^G)!?#v5^L9? zOP60~&U|j=`StsCC&mLBneU#I`z{su`uXXK#}^@BC|_$_(rrN!*dES}J7D?9m%h~< z9?)M)I6T4vWZD3&IvVCpXV0G1|25ujBm(=>o_R}CQc*gr!8a2Vq5`<2I-BQq3WvN!2H@fUV)VQjE4KecX@yC~_+j4FO@p|hG*T@KZD z?N`Z4XyqSo%w3z#n^%1WHc> zSVT+)b`P|~-L&RPK>mY3*wV zEPl;szep%PC<^R?LlD->rG+_Aa|w+*H3kZQf>su;+2dym_pyNjJvTSE!05+B+tl2w zSq+@fK@$c!^}^~pNmdp#8I<%PwDfd~=OFS*%gZm`xM3DLP9q{pA39w9yu~D+;n3AY zmmo=V{Y6pFujRM-O&Y|kU*B)j`t_5(UmUZG2x<*NZ^eXrAtz@S?9DVZQ7*N<(Ta;m z9wN*>{db0sy!%{MuV1L=z#D76t3?=Z&$nFD`}Ms~c?;g$HqM=(;r;pUo=me%fw0&T z#EPNIcz6~*+;z+;!sM&R9%LrWsfTw}zFDqSRZFKNK;eBb<7hue)`pBr;RAG<3;zOU zu>d}plBHTUqG{IV= zzz8;sM~>`t{Djl&*~V!1pb$6c|J20Wf%s$bif|DGH8Rb=Gdk$yG_DyQgH7E404|Y| z5k4xBB4iYp4!El*G&o73PH@OWWs1>g(G$b7^vsSzbcFUZBGGh>kI!B9j^k1z+rl06 znb?urbnlL6-1qzx_cp_}tJJL3utf{hBMk;J2nhkjdSlDkP!65Z*`RNmZf`%#(y|dm zK7?#?&YJ~Ig=K^bgU_EbZ{9|nnf!}HQvWcat=1auZ#x9fvP5Det+bl0;g&3T*qNoC zw(lOhd;IQpV2{BPtD-{#&|oR>AC4I}PP8bD6O8kkYHDo!lmDcIT`GW&?Ph9G&=hCoV zdbh@TaWz(Lv731E&pRjPL_OQevqNMovu^`qJg5jen(vx|#2h`~-Gs>l8ENz?L2V=pLpk7!vX69}f98`z@P&K1uq)cni%^A8=o-akiDe&NC%BOw-(x<4f}3IM3AT}}1qv+E zhb0Y!QC>qhoe;+KPKzHwV5#KqaSFQ=DB}C=d?(*%Jw%r$h#bP^5z&Q_K&MU_6jlh%fRnwkcaxvU z@u8^|4nS2K1IE;{vAq~o$ypKDTaU3iGR;WV9A6COHJadhl4{EwEsj45wh=tKpx)bw z&{&@Tooes(d{J@`vy9Q?7Af!qabCJ|CF-NkwrSm)3*ZQ((V(E`Sl`CBdVAiC=1Z3F z=;&x)BvZno3SGF>vWbvNT>CWFOmQ*gj0VLvk2$?VncQe!?8{@m!$&Q-e~EJxTLJT! z5GbvaR*i~=J4HOg9mWs=;UjedSI~bAvHdNFZV%9InpypR~Xao3ZI=Y3rA zfEwC8$futwY6gNxHMN| zBQ1k7=_k8x+qD(m?A_}}+d-R%CuAz`jO6D|L};_J9H;{9?>($nzrIc7>%zh{Y<=+W zeA-XVmk*b6pbo=xdxUdqwO>`9YM{kR5lJ_ZW0@5&(d1fz>F3~Y4-F~tIH5Y3&FNc}4 z8IDSH1jxlLqU=Q8!7&MbGdE+NgM*Q?bE0ubH3%2xWq)>`feMLED8wywnT?%}oZ`T| zKBaUJLgB@RG)0`2nAqlI!~9By#{@pwV%11ntN#RcFWaw>Bj0f0a5;XIFQ4*YjSxVw zg6;8fnx-8cP7eqdh^NgDj*GvWZZi>VdxpKerG>>_(|XNG)k;kV`4*f3@p^GX)Kt@0 zFki_gi+%fPaOO5oy*+W)fCCUr#f6xmkqXaIEm|LFYMYI4z;>vCsxqakW0jCSnYrM6 zE4Gn(W+*)tor&DPzdP+XJn@8xv*jb#cZGNCsjUpART|di{j5C!cTREAq>u9wwFQ~M z(>h+SC$!#%zeGX#Hji9u0w-P4Mei$loZ_y<)Z{;@`gu@ z7}0&*4Ptp&r!oc3-ceGxz%0zlN-odpm0u0J8haWVo}1`*>qpm{XM6g%-7lpUF|&qd zJv)5KX~-|7-HGVvNb@ulTOeZQ`>xB??I_QsBsQ%*#U4u31gL(K5F6}Z4QRy~r`+-J_j<>tV-EVepVGR*va0dJ-zHx4A%^q#lS9|u~^L-YLHg-?L z;F2*01C%Gb9-DpFNZV_0X|E;1QEB&Ob-$IsL1`?!%FQCa&10+9YBK89_=k9~%#MvL z|M0qyv5hb*|^Pv!*0{dh)J41?m4@gBr8Jy$Ii2}S!}8izLoDxW{y~VZT0cn z+I0_^GdK)vG3y5BJlD-7$e8_20+CblRcck7cA7rjx}?`yoUELQqKrvyQH>k>dfJ>; z*J-QXzWv~CL0{Z6V>U%aZW?(yZ)eVN_pfj*8)-I6aqs4rl-%SD$<%I;10>a#fzN!f zpW8sya_e>qZz>*~7X$-KwD9eTtO&`@MyDZxZm1<`M?rO`lgLt|iQ6pl8xlR1f6gqzy_|VCZWILo0b7lfWhJo`LKo>GQ%d|#e z$7~C|mNn;8lSwSh|M)Ja(IKYfF-U4${FcM{PbqWrX}TpIP!{H_UWpvCP+x)X$B&F$ zPMq5`M3|r($}eO|_YsSaAhD=zBuoUrLnLg}Kyc9}pT-7>_M4*%>jHW2hP+1+0Wux5 zXWBJJ>{8oSoSNrkyD^lA0jn!*IWK>v{z1%wi$Q?|r`8^WX*TBP5WEperTWin6mU&rXmfr*qKc7Qx$K zJvSgQW1pr`6yafUdG+AVjQ(elQb`n^y~iFpqcU)ykQ`%gEH)IkoQ^>mwJyEvv1aYs zok#0fj*oR7Ft9!!S5kkdq{6GO*b~=Nel#0=JM<#;xlk=4BSW~4DRvA?M}!8n3;bOE zn$a5j8Fq~IMjThjr6NSXL24_B7iQqNAdJ z(>!27<{@85ON+T~vnFg>#pf^d76H|^LEkH@$#WakS$p*_ZPg(lnz?SR<8L%Qu}#X( z`1rZOYaXs~A7i_CK)upKAO~j?!d4oE$2hAb=}_#sdkkpxa{A8TV1ipB=T#0FOG8G_ zC%zjiHT%>ggAFEjfDi4Rg7E{xO&9Zr%@2>@R}I*W}+YbpOqdkZ7U% zFK%yB0Gv1`lD%_ICMR1Wq_b-AG*3I|Qmg;@_rOSBPSu$Yn=x@Kh$fA#{N408G>R z(r}Xx2viy81mU3~_@Kd;3~G2See7Oy^yvFmx3uzp;PeXgSe?fm z^~I`h6r@qTJWfp3`4-yHdvl|G+m&9wv~}FXs1vw`+O=!*+d#@ON&@)?wIVDBwxO@r z$3qze6X`_^`J)YVL8!URIYmmj1Vmj+Po$|hG$;;rP@MA>(!T9$Tzky1IW6dVo+Ebz z8>b*J&Bt;r!AHPHymC`OIv zU|ifKjUXuz|1QTAPDv?hA*$GN^sWm?cb@`CfKoqzIId3e6eU>(6^P8Lkg=-_Oo4A` zhb2GFc*KY&@y8!uz(0noMdoASICWM#!(WjM0{$3F9~Y4kbTFvD?FSWs%23*v4ycDc z%+y(F9rV(@=-YOKWz3L4YiaVjs3g|IREjp#dgqugjS&INsu}CuA;8)i$hj{Q;2>7h zt76`GTxck+rl(u=5BEZ1C^_5WQu+~4X}L;LD3eUr56w5;vU~SUJfc3JRDi~|4@XgV zv34Z1qIti?b7E$G?E$TLlLAjpYif9jBPOuNwI$UASh9?wRSkA83>uC8b4yB#&}X?x0y--8MF(6tcSz( z=0eJW^)AnEWQvvIC&PsMJqfBM-Q+52Uq3gcdOb8bO1>bQV?KC!NGkh8Y!F!?T@=8; z0_@PWBX$tG=86?7cqcwEdn<4_iC#5$gL=}x!)-1epZgs_%kx9d1qOF4lfJcHp;22A*k_7NgoSs+tzD zk^S_;VYWJYIky>c5_vSa?%&?u=kaVa{vx?!RCSK~dwv@92eTlASs^DxEjEB}Q%W*2 z1cHvK_xHfNht2UshF!KtgKC@3_5I};P)yO$(T;_`SUxh})prGRX7rxR*e{CR;F$A{ zCLl75Qt8;Gi2lt51!nXQB`&sc&D5A2COV zvFp&SH|fB%uUU5^{hePQWeRmqwb^NAKNa8Vr=>pEC84BHpR>>$z9hC+?+NQ-TOlxS z!afHsqHBul-MDy}XxwoEDI_uz?0IJ6Jj~7%2%?W79;prslL<$R1@Dy>cO7z$CEOX0 z;}aaPe-bppJ2_ZL6gfZCZOX?oE76Iz=5kZGZ*j zj6d_e($n>7DphUY1y7cjX%!iCD@tAL>RQODPvD0tusVUlBT(HHP0X=nl0?~eH$>9* zDQBSQsU+iewI4cnBvJ?-C%o7qX8DPn-DUA;o6O|NbOKcQ`skNqhbX8U8#im_cHe0; z#u^2Xl+CczKMVLhkW1?TK2&f-gScPL%4&Lg(kQTOqj3Bdp7+a9wS|M*-39L0`T@`Q z3U-+|by$PLjf~bBpVG-Xy)h5|2Um4>mlqbU(GN4PxX{z?3JoPlyf$LeFz@e`1bZai ztCt|m2uk=4jNXBZgAO&#XJ!@-0f2C0NDq!N8SWzry$)~Y(T42c^kpZ{;52+iB`Y=| zU`z1OtfC)Ryz|v}A_^}FLEc8iOiEwQ{%>N;U*GSI`Y?8vBw2G@#tm5y=&9wFTvKdO z9LNN%@dZm|%N_oJA@%H?!o>~kIsg`vDkDLtlmnag$NL)LH04wDeNjnyZii1_OBM5V4ee?`YDHh}5gF`AniEvlOrltj9m=X%p7m;RpIt=z+q@V&r0RRz4(x_ zH#83qkInUC*|5mDK)0nIcmRhYBS!(2z)@>nx;sPcL$z6#>@;yL&QuZDl!ogG+!vq&p(Iw*Y`GK$ zfhx%eVrGba{Pc-D_Ndg@ojik1dJTHF{FO#+P+XSPm@&V6tz33uGOaXt$~34EM2n<& z8wZ;|L1HO(4|Em+))Rog4@OQ?FCxfvti$ZtG3$M=Tmr62Mgho;Z&SCU#`78cO4?Hm z;AJodLRrU_d};|LFV}_cya~ZcALtZ=yghL)I5}P8Or-qVkhtu(a}u7hVeP_2i>mzI z2U6~rf^gnG>+K!U-D(^sjwBNtW1>Ky>sOPw7ds%4AnXfiq3zB*I$insB`i-coViG{ z3ho_6OCe%O6#D&LeK}*#d@k;UrQC?NsHOkf9~w~ecw+IlBYMPA^k{$X_3N*8N1d!T zH02vxfA}MPsTk9x%Hgrv`8ehPHGJeZ%KSR+v-EZ^D%vC4Q0$R z&m9*hEVjEZU@=4e41wcT+S6L+)mYhgfSF>ro@gE_3Rb`81$YDVFUAR!o4h~i%; z*CXX~PJJ@%XrRJKXkiD`lz978$CZrOmUv*@5YCw4$!Zx*wS$WfAP$Q4b#HZGT+({9 zYUK&u->wxHWX|d(2VD6xGhitk%GS&C!}fpnGQ-&iu1&W336nfMlmCRd6;HS_iV3-> z2(aKp8hh5kJhgR;O`-p`lt(>Cn^Wv)5@zzaH54PM1}(c!QE=4kr?j=dH!Xx*9_|@0 zZou?R8G?4;-mF@EPbF?rZoavoKsUV3Kv@>v&)SbiC{b)v}DW~FFkym4xh>jTjARv zz^0l|K9FW(j$vXNrx0b-T6QJ&eW?O6+IC27jap?5tj$)^<2VK}MGp(VBiW?qSJjp{ zyDL|Q7k#99q)@s4Icd1T5+ZvT@n;{bdM;gDXA~ZdXc{(@8v zRUnEjN_G#VCz2(kUpFp*?FS$S(&&u;*S^3oZRhZ;F6jeCRHJ+fiLe=AkPowz$}KKm z1tXwh^eL+6243jcWYktSer)T?A*>-rs{Kwnt7J*oJbd$v-=^Rxha9C=%$jlXC{K@X z!W?v4(&>yn*HLF=fb_W@2}_)={4`!kPz#rJ%}cjdANjf7U^US;v34TIOy*W;NP5j14Hs40`HiVWhI6`Ij?LjrlV1$!6Jo@5SQ+_+w9|A zN=Vl|LgXlNEi+(ODTINxfC#&T#kzVVNn|7?UUW$76C#9%nSmAA`%yJjj5*m|lSAI( z;dTIB#+3bpxw;(ieceiS1-QL^G6-p2(v0!}NS9$qEo>6!C#(=>~psC2ID*Ztm<$)0T;+}$e9 z--vK1x!f#?!m1xJCBw!J)To9d@sC=RjQE+1E55obhgxSm3U0rXb#`C;XSQ{%$b_8t{zsxp(ilAF`Cu7$?^7l;fXgh*_Z%x?~uM7;cL zA})ZyfXTtJldi}ZTk1Q}yPG|Xi&b99gd)eXIfj4&`X=^{3>aqEqRqVX&j)e5QbRd2 zdqM1dT<)@_)4Q}%5f`Z(@yF(lM|6WLa4>!f)`n#1yd~kQ94Rm3*hjL`N$+jXH=H!7 zS9OSf{z8jC^LC?rSVAe|6n_Y7-6nc@+F*%O#)I(m_3Mf8dqlP;NCN2qpoI}!OI(Dj zK!L?9E^|CNY{0Om&{Rs?8Wk*WXf2H|T=X*x1vVcl*jsP;FDtvs>JN*@KK%+3+~vKs zw;R-zI4@bhCgNiUz2y|)n9Lm=4YT=gQ(WaM8buNxY7tpOf-VE@S&SZn!<7qcYq zhx;?=Sit*VDJaHb!{K(~ybbX(?mTv~;nyBUt0!6MsvKH!AS$Kka1#ty#5e1_HlZ{j zpMO6x97LG;D3q`VS~U@}f%`dVqt2<&po`g)RqtHB;?iaH&VWW0oj!fq?Vi#sZ_t+x z%HRPbUXxsPJf%n?w5RLXGym$P1ky7@aKajE2MmCTY+Tnx5s{|BgJE1Hj^y6*vGn|D zM~8|KM=rk)c-|Br@#hs0AR>c8Xn~)|O68;qqa4B2z%d#0+(rZBMz|(&hNbJ|%*LvM zKxj-!UPtf!&}Ed-lA!>g+?(ar^+?yP?(eXyG$E;!ycGM4NoB`-8~#`DE$uZ5$p{`t$7 z*FrZ^lQ-`*YqN*$U*+|V!otE9``jzvmX+K-Ga8U$CTGf=yfYKkQsz@}(W+OLZ9faA za8qaUF=bDNWuV|_j$ao9R&J_M13sW5e zR8THSm!!qv<5#6pgjp5!4g!sqHxBDWnIIFM@XlPMWRN;TfE{#Pa*2r(iQR_pwYh=& zg5-p;)$S(x&GU4x2lTC^X+t0@Q+6~Lr3@);cZLh--o$=Z!?J8_eu|wv%EYpWRvk3$ zcJiW`d)+I)$hj^9WdOqO9Gz_~3H!ilk`9y2IYr0Qp?&+BxEbn3^<0+B<+#>MXZy0nnU_`pD{7r9F}DO2#M zaW2!21_j4j*u0wLy@vq1-Vdw29c?T7_8wqWM`mbnvLKL%R?Th3nwH7k3VMl8_$eh6 z1oIS7=IG@1J+N}J6Q$v>-+wDt7#@yZSWPmWo{|#slp0#RA=<4di+nkF0wj3+>HQ3* zatqjwgrzEMy40&k4or%9$!3Oukt-=;OyvESotEAx?$?8dz7f?Fn^796sc4uarIH@6 zll8Jd({h}fzR0WA|(Y|F77o9>@G;PIG~%1Nra>wEz6`vCjaYBsnfdk zQqS$spe{U_|p4U&}tU9U?se9AZ%JWuQsP;gM|& z5TI4ruCw~&rv70bJBIg%qfp-MHMsQCL>rsc6b{g)NLwT;2ZhqvuVwXkw&zfdvW2By zN2r_bJu2k>M~#FHy9`dJ{KJu>Ua$AVi#suFNDyZCse|L21hQIS=QSZafsGe1{DHbE zc4_Tg{>I0?P%`Y%6C-83V6D)&$^yG+0;$x z!KF2ARpX|n1MOQ{Ko@ZRkdF%p9N|K)k*2s<+S=dZ%=-8%BXAQma?-h@x zg&(CXqx$5+4$`ZPKXBmo%WK_Uxs-hC)vVGjP;;V3?2z91e<>cT)0%$p9Glj(?4;D_ z(4k?gRui0lj>s^%Hxj5NlG{9XR+bbIhz*WVaNwT3B)a~{tJY1?CW{k@pm(`_>(^SP z(=x^Y0ZQ#QbTFWoF=3b3*YI&xy4%0(WGYp-xiuJ10I34kUzUKvQ?W{V949p71H*A| z0FpN!;MG?o3$F(m%qg+U26$OL14KEGw5V1l1 zI^7#Mk;$als*B&3zA7Gaec!4vQ!JRfxZ?bXxP!T+vvNkL{TLiljR9O43JDn8pj%sX|4#p=lIKnfNnuqcyyKZ?m93e)V5 zs9p_AXBqJ8#Icl|yd?SM#-Igrri}c)@6!E-)xF@4hi)q^A^LF=7@ZJu)#Du}DXn^g zc1f^3!Zn;$f~b<&nLTlMb6cLY4=30W6vPs&Bhz9awZ(@WRpU~^H(>7q{yT%Z2^W?C z+Y+F^OI)N}Zo7D@cSy=a95wc-)0sc`k5u=?elA?!DkiMxjZ%O2`m#5XniU$$w&Nm1x08~b4k3Y6%0@Q?jrnNZ{>M6Zc6_z0 zni|~a+|B#AriO-b_3*CL>4QBUm)u1XbOC>f=<|?OKP8YA$%w%6uCeY{ZEV^sv9Yai zFWJ^@SlAV7`!!Kl26=dV?(gd2yK~XmVOFIx0=P1Lc6HnI`=_P-CvhHSnpM>{`E}Ye z1+3u76GN^ZI&T@Aj39}FMhtCH|Mc*hgAOxiD2q#Wjl!Ov7>3v*P$OA~nf@jxTz$&=Y4jw*o z#5!NWwiBfx;1r;43#urpxR}N8VHsRWqFI=Kssg^3JO{<0@=bhbyGG)%(xgxry0tWq5eh~l_*-CmJLmC^7 zz!S#f?Ug4t-U{v+W%J<;gK;h~&^v5i*U`3{>flC^?*)Ac)HZ_fQtIQ7g3Q&lI+EOl zxvVPL5WTiFLrP-3eicy+%1niLyO?!YN|tAI;*W<_F|ulATIo=<{iuEOpFDv86t!Hu z9Wv$90Z?f&Ae9g#yNBGCQ7*G;LZOD;Ejo1kI7$R%1GEGhGXZ6wMt{Ky3^P0ojGS;Q zn|uX(VLHU2#A#tlnlx#*@hQMHD#?ZPbUYRxMAE2_o}&`YN^g`u2wiX!F2CLw6|lOw ze%y^Qk@<`MxGx~wsNNfq9YX0DxC``S4P~Q&fx#^BVE#TQWjRv78kf{=uuU%H=Bh2H z*zAe2R#1yqLk!eKd{0FsSPorh0Ut(YN&stUbR><7x$E`F6GN6eih>wHe!A;N{t7bp zpZH_Y)S`Rwf50))!j8_aeU4L*BDBY+&crx%Pm3|NJ^1JUojYezypxDMNV(AH)yw9u zODeNXwQt`DHAy)zt0-D%WmPb#&Ope|lgOY881V7Qs)1h0ozNXZ@o^Up!`UJxTIL6Y zu4SMo1UEf$+z`!4OA4EU8SI}|YYL^Mkoydjt2t%*^ov03BKm=ZQpkuWj^-ot^9F2f zWUc{~jboIKuM2dxBpbqXp)_m{2lBs|d-J%S_jT_-EG*Q@GAx-{rUqk%NM>r4qB)`n z8A=fnkzpap5GnK6Jg5w1s)URg(j-$NLM0JNqVDIV*4}HMd;j)1_x=0h_dAcremwTs zYgOOx=kp$}>or}Gi`ZbI=%PU+2%w+j6STk32jm6U$f$?E;B4n(!tfikwjh$nvD+N# zV2N>oC_RZL>BzF5G9W1GkX|LJ>Yz`|?n%iz=zaaNNX2*{{>AiteaR~q9tw=V$wj{9 ze`kT|9;jDbTs)Zrz;vv78czt0DPq2r6>q8VyB_1$fP={|oRPjt%VJ0f4JG)+C7k&+ zq;GZyM@L62I=bNDoIIkp!xu-Ez;s{QoIi|=Bn6z+Yj(!jX6G_j?7^fWbBkZ6%l>P) zqWMVOA5#Dqh$9T#9P`nwpzjofTtUa_Hz3c2(9r*8HwZpT)YB+XwavTL8cC>w)cJipMM(e1Gm>Vn@QN4cq2p2Bn?zA@`+!$q$Q}evW!^q(j zXtf7pBFKfL@D(0kw%)(DY8|k0B77x2IQ=&^nU9Z;>GmZHNu1k1C?ziA^5uZrOM<#- z{Teo+(=2}2ZMyhcA4a0~tUT^q zXylR0{f<$Ic7SdB{;=h~oG}GoH zS+$(Betq8lZd^!0!Rc2L3MLSXOmbuM5RsbP)pl>8?ezsY=dXgyV}c6PHg_tVd46Su zCY=+*qSm36PlKKjDP+-x>^X-$c9EL}ORC4FL)zcn1&JKAFMSfj@y=ANixdVT>PO%^i_@dKnUxGG1h0O7xcb{h7@r+` z_AJX*OJLD9Y*8{r=MeS-$tEU@0~cc*$O9i{vQkm7WC8pJtg6UwMIAfkx$8&jc`U^r z8DP8Tz+%CTKc(qW$$DZsV7|)UfsU3N4sXg2{}%$%HOx9?Xb5Zujp8ORuV)-VGgx&9 za_QAb)iEwU`btK^@E1-oh)z>0TtVVhId4ruC$ty;3*re{&8#-|u?*Y>ec0P?W&>o0 z>@*26bAFnj4~3#_Q&Ufw{4&{$PIGKjdQq7mqjWCA7L5yrK=@Y+fTMa=xLLzB%zmIL zTnnZk!c0O(Hd#=C)#pF44q4uejg;5}f=`-7I&5niCmMQCOBvW3K4u^a3Yk$zHwFTn z2g;$g*oM&rum4rxkJiQ6*UVZ!?Lm6FY0F=IHviK&5Z+>fL3A>I>%R#8v)>>{lN1CJ zA5xCRwNgoQo6c!cbXTZ1Ix*1@=qI0yQvM#(j7h?!bbJnz$mzSQDR|4n%JHZp+A!F zC7ufag~{#=jp2+4Gt*%5RyTyY;P!*&0er;2E^w|PQUc;lgQum zTqF<_oGG<>X35>;fQa&j+mhyt{O#eaUyUDHTpT-2-{jQcbH4_3Uot-C(TsDu&sx4R zwdqx6dn;kzUc2zH)`c^7SzG$1yWXkqQfJiovGpIe9Jj0W^i`|hFPzc9*tl<8YSHqQ z9k6~J%pW}G?(LN$URPE`PdYKW|a1HgDNB>>zU>NW?J3GAf9( z2>rc4j3kLcq>k?J&5W3IJ$$sy-4~Rsd8h|&9~ffR$97b(X~CT!({OWt>svX_hpBVx zd}?OWvcw0_q=Auo8HN!s1evK2d|>_tfONb0^JUzRpKB0NSyMt=+i4&Cg^~*}zbub} z>x|J~1ZGuNeHnYKB-Fn!GoV*4usvJ0ZjC&)u9Z+n2d-$Oa zE2jf^DiQ55b~~5d0F^$0nUeF=ljI1y{!k2{fukPw*3gg~)IQHa@NUtXy}`7M9L_ZF z%wnFF!u%4G9T>ms9an)6kGC&6P}`Fc=*U?C$9b*(n9~!ax5WmEJmmYdnRW&t}`>`1Q zUU18Rju@ZwdGzVmfTQxpIjz;IfmP}Wb4g>?@6GpYwO+kMg@}yCk9%>u$acU2ET_yc z)JYKOn<%%Lj|nUc?7-hk?YR2e(NC=*z*(z|N&Fd6CA|PTlpccztEf)9H5Vjg&%S+{ zxU-Rk`BjDw)(Z^^!eVVnKdnmU2PG~$Plb#y8jT>G`v)^W>l}iBrZlEZOWT}n>GT<`{=s$Ua_UPGAN2z#uDatW zzHuuqccIu8f-WA>vHK0vVAs2~E!UYINrxoGb-#D%CSA-b z$pdukxwj=4Cy2sal?#F7RUwQ^!2{txa5`$BBUZZ*k{Q8Oj(Zrb+Ws@by$rNke9+}I z#1$|sMij3IopJgXDyhm6515K(MCKk|zFZf5Fmv6^?QOb$cs~@KFZ~mASkcvC!-i3n z4pV?9$^!=HN*<$Tq=f|@iRs$Xz1l7H!%_|}c>j9H`JkZnwFbc8J4AlaJw-l>+v{NZ z_~RGoS|n%&d6Cf$rzSeY?ZcROm@IBdHEH8-FpiJCm!~!D{O1R(uA5YHC~)aKiQ*WG z`a~(dPG5Q$3AaLPquQ$%rEX(h2$GEog7PIWgT_W?_DIkV^goBI)3U#aAcruh&n3pT zBc?jsY|{D4_ua%qLE71!y$_!ed8~SR*!h9KcNhnb2p`qfvw9I`ED%Wodn{jTy0`S+ zyjkDK=qkW4l!eNmdT~V=_uiE)`)&2aMNhoWhn2kOhU|*^z&dvBTDGd)$M)o{a1;uU z1x{gb^KATwP6w`Qpwq?O(@#_L^23Mc3|e1!6p@-e9Pvl>OxbVyNmH>==MKN}2Rx5z_a8X$ z>aC*BuQ#!`M*n;?_1d*phkP45#92>%{n~ceAFo~f4K~0c*nR0^KVydJ0>@asYu2sT zwZi<>T5fLVV*iUs|I3seGMD`?kmtvLJKIHH`j@}|uU>J=$2`l%>$~!P~6(H?G=g%8JM7eDRJ|tq8zl6>Zv*( z$+Mr|cmDYv@?R+q1}N65RsQ92IF3stQ@=4TwQgfvTZL<4l zBMpdK4^Z#eOgN44>7Peyh!K_KALUR8sHZ=hU&2nyJ~1OL1(}@ zEa?oT)w{4RQEm!<4}J*rn;tbqOQ4Fqdne~_Y?gO{vZ)7=?9>fx3eq1&Mpout0gFfk9*Db}6lTS8Fn<0h^N|-N&of5e+ff6R7D${jk6r0GG7-7W)(}hmZe&cusT2Ma$Z5@5BgAKnrR8r5NEPzY z+pzTo5((+?sC7P-+)rZX5^zUfkRT)CfB#;W)*y%tF zC~}4%rok#HvrSO5^HoJS!ENWaYgeFJIQr_bXuZi?D}ilUm2{|Q@F0EA^~BD9=nHZtvJa>k74Bp# z>(98&>2y?{Dj6R-CfXQ8?gFt%<_NYHbM=Pn zwTwgs&wQm;Y{(-CejP`0SJZhx01(BTLQUaA^UFo+3zoE-v$WxT2#a*-05oPgH<`OBB6dh`ypT1BXV{7g5)b|5Krz8G2#^JV zBf3Sg%>Xad0Fx*8!EI+EHhUrNc>MsgSDR1NspA(D9K>)aW`?L+47*>ad0vNkan^}f zLJWd0KX|YQ%_f)%ntM)!rfhs3wv;#2mz2Z{g@RuGYOjOOJPZBg)QgVuEj>op3~j5u zJUT2bJ7jJELZ+j0Kr(eeFIo@EJ;kwd954~PgprF&Kki&wp)BpAKfOnmz7v_Rw;apV z2mAP$aeLFu4qorD!m#y`rHdBTP1$KJ&^~tldobn-hK7dkOG|$rGUVL1YYpIN6ogOv zl&9|Ree$GcrbC==m8q~a-JM= zFH{3m488p+%=x{IxkZLyfTv}~i{UB#_weVWtUc|j-JW7frFHA)`T67c3bJ{bPAL2z zFA<;BR_5VCdv!rM`L#UOB=K-*gsQ6gATI8|E;4*;U5?u7O`=BM+t;ox16$^8U+>FP z$95o!TB7_pHDGmEDp!veIT;bVQ(c)nBEGI2I%R|4JVw^kYq9p^zQ42p&%`l=L5-=$ zn>IBvKD549@95ztUgW-Lv}%O=p5NNXw;7bRIpO1+g-+R*`qt3QZ6>i9ld7xYPm&B3 za7<03=DCE8DBERjps&xU`h-i(4E!yQ?UuMI_;f{UN68?QKA#d?XlHno$gayB0y#@X zv-9%hED``|jm&0uvACX*(Oh*}{}6tnK~z4RES2LxMXSmKjN!vUYIa}Wfn^L1m|_?~ z3#gV~$|*mV#`QtGTOYnF=hi*+bu4!|Z{RGow2e8N6^XcnBW+I^q#Ar1E z{(xcc38r<99y_)LwtKSLG$&4fc8w^67xim$5t27zWpxRcBWzrP?b`|OmUKAWf6j#9 zr>h;Pj3jiy?yPlOPLDMNMoH!miJvvR@mRG$o5P^!cVW=c;kHMdXpu+1*pG@w;CC6s zlin-BjZ8;63uOt`6NV~fYi+ezI5DxCKa=h-QY=~5!%smhmTw-OdhIl)JaZN>EHIxE ztsl6mw{_GtLamNZi4u4dSQVIS9ObF_EBRvse{m>(`*5ekhsb~E734V8*S~}}oAq07 zb@vEb%f5pKb;p%PzGD2N*UWRV!{acTgm4(=mvCVq(&=En3M5`g)+1Gdzrj_S)S7(7 zj%%`QS8Qe23}@DLnyZO~T`&^vD7`B1uWITPugaUalQ{BD5D?8WU(X(;Lvi;&cNwBM z9|gs9AQ$Y9>v!x(bILY2wP41$!*%jsH~mmf|LRF<8z+z;;TZMUVH}tyUxCgQB*Du4 z)0;XMvHO7!uTK}*0&jvei7kBfW-&Ud<*12IGGUEe7ZT;0OKKJa3o*A$EI3723@Q&q zUF~7cs0;M_gmV!|1&4%POrRV^nt-^1G$0_4s{A?ao?Nde{&66_W?-{GeSAe@Q&TAb zsEzN6_m5BjaqLimb?x506nI0T_ap&JVO3?Z7W=5+Y2r|7bG`!V+Xnbt4PXel;$8_( z!8k3>J5jcv=}3lKD=EzT{lhbvS_~#2dC9oAj)UfM09@w~^=q9nO7V;SA3qUE?40fOn-2QTJ)tw(Vw$!VA;to%!C|^x&fd*CRE` z69McK5*(&AJ9oM=R^TN*Al^vMATWe=;`lfp`V}ALHSkhWPF_&eCEvK=MWrd%daSim zRP)&oZj`7URQv4hU30F^RpDH92MbUdqZBgZeRQe+Q&&6m$J|!W(}cZL|35@g85v6Pb@Nldiztr&*s)U~04ah+;N>?Qglh)c>#^g; zr7?C^1c5IWH;@tZ+(pn`O%Q_1kgohHQF(|m0s>0_EsA)GY*a04OUnX=LsHAIYg`C2 z8S(Dj3Hk<&K3GW%9QPtHwEfZ<_KeED_xK${JXx1npIZiKGBZG;kjO;>MGKsGcsS-P zm8B9B!1k&1L9nym=u05d9;;hY|;YqnRbKbn0?5VQZgDt!^ zZIZD#eD~H=Z&D6`AAMn9^q1_UDvP4wqX)#o8p|_*X|2~ye?`&#UT^?O@ioyY!3M^|=FN9Ox!hQBL+F50Fndu4dRkQK|8 zWj<(-zwV&h`SYo~dUOh{J*!W9Mkh^IaqpD%Nk=Pj()X+g*W&6(loDr(zJ zuHdF|)<)#n`dp$XMOi49X5@+|rz2XYGj2#n?_lnEW{Zti{>Ma(un6VI( z_`7E-W4iVN;!lgy5Jj4Xj$I(&lL){j4fIJ)u1bZxF zj=9t40@e~65SVCUOeWq*$duU>axelz7mOs#zCUet>aE6qv4bUaIz%mN029w{YgOZZ6&(pd|O z8t$a$6gdXMZ+l2Y&pY1igf~h71SAkkJ^>wu@v6?FKsGpeB>A1T5LnH>%FTDzt`J4d zLxWxFO8ET2gL2NoO_3v-9RZkshuwj5GjY;YcQ>vdCEw$~KcPskQxxZqk$a+BH;dNa zVvYqYc|eVj)+yCQM+F<_*@e&lJb7(5F{!=Vutf>Z?GLXmlNh;^e6jmbN3OP1@ABbyy^=*A#O)I z^1H=7igj7N$e_00i0}C-{D>LQ}=_f~yoS8`YsQuQB_2iDegOe=(=0+qYacz07{vgvn^aJDFAy(Knr&m7w>gCWuM_+y|_?LQli9L zXPh1+JQ3V1#aIBSoaY@KraPwOVl<(bRV4qA*23YS`6IduRPi%7g$>lo*pWggQMlR` zRn|a-c_oIv2IV)fA5hfX?%NaaA*8io){el$kG+4_FcX6?Csk2Wu zp|N{bP!OISsu^Y3#BX;>bDt2PhsAKPRCIn<^sg>I3$97kM9$e7Kt6D|@XzfIVwDir zDn2IvxX+wreo4sAP7vwDy?0>P3d_k!jiys(5Z0zZ_`1rV`FqkWvpp=R0BbJfUq1jFiHg%yXO{^VL6yR>L`smLev_72l2msz3 zsIR_hUlh_qq^9CkmcjIpfQs=t$AP?HFe#;@48jA4hO4gd!=laW$F$rQ&V}M6Yf?m{ zHa(08C=lWtOGVV%8PoyiUxaJN&hIv&MvI-G?WjT`)0ln42#f!~S4!nB#(tL;>gSX`r zq0Nz6?$e_PvmHyg(!6a=85{eDzC-J~pTlo0|HcDEySIa7UU*d_%v?QjuX)y;UFUO# zKYaA4Zhp}%%dlmuX&DC1H4TT~78wF%5wYt5*$l$e;TofP+<|CTx5fq7=(Lq?RDAt<60u2QecahEK+H@UGzGE%gwstd`>Y^llQTAxA;7^1gj}Hc?9af*+!+!Q`VAn=| zxeclkrUx8_pakfjsS-jH%=-Pvji}lv7&ZYgE5f6MapY$oX?mjUA*w|}PPnj@_SZh9 zIO8+FY62()>;esdMq!Cgea0=t6r*Xa=T`lb)4erEgH4IEBIdSb-&syhMnrkjI`p4^ zz85_OcjFfV;ro;M|HJN07&<;?Vno6H_VKZ2-~>DjdM}u#*jLOOc$?43WVm9N(&s$y`%-Mx=NsNVHfI zaNd&IgrEdA%ir;n96}DEe*qER~I~* zNe9ziba2|*Z6L&mWa4_(dfVV4$BwAfP%$5gjrHUEaqx?#3~*sK7rnqyTz_UhIj)~8HF@gm5nZJ#-wDlmX@xr;3 zc_c9DZwI6h57WWpHt3?Ij9CQ&!>p#(?Zvxm>lSv1Vdw#x(W^IZ{7izqy8Rc2$l=ra zkVQ&)OSxS>)w>UEKBWxdM-hJNEe6Iv&hAgf%(WWzeTQE)MI^Ro;|2d>{Kpj@bhJ*6*Xw= zmE1cyHobfO6Py0=->NLT%9OBwVS?ZN;rkECf9*fY+xCC|uibdimyt|)X?{C*&Qx*l z3We3y^NNRzC~7Md`}P<4&;K!^$mbW~ps(bvry#IOG8easbrWCd3wh7D1_n+bR?ukCoBRrb|=j=xg2#qr_(?JEG8w2N;FkOHhz`7nu zJ1*f&XweKRDWZm;#^jd=gF}l>9eHxFm~FZeZuBr(z`UfYvOe~e(3lbhfiewx>qlU4 zd3p862BV*ddY%ek5vG1>3u0|0)4?<6T?!4kFx?6)TcNtC$*~NFeL^|?KZAb*s9;k( zy!4Whk5q6V;qwM8SCH}W${n#k`q(CM$qBl~4nhOljY5o3-mTYg%1XRfE!9P}6F@P< zLG=?2bpCLTmT?9K-Y1n1yfno0xIFQ}K`NwEz!x;Cb05X30j>r-{V)uNi9up@CSo#M z;t-M-#yP}KRG=xs`g;(VoEk}t920duthYV(q2Gc=^{H7%R}y^($};*E#S!rQ?b|J68uOP#J;MKkCnUWGen5u2 zY@$3@KS2+tR_~DlDiLr;^!4jbojO&Tdh@1!!N*#R6g=V@PTo!1w#lJpFjPjGh(CPw zw+{{F7q@I#5cl}u!-AY75Lucc9)N}iwL>Fi$BUs|mg#`3LDGIk6?~-mW~`|<*bRP{&U^(D zZp6}fWaW_x08-3XbtPzk9_$(`(Z8~(k0;j=Q*rdLSXW#hQFV#yMw|n{r3Qy-{jszE zN%k3lVs~`%;MDm#D+N0H`lbuCGHL2Bxa{TtZ%UASiiZNZt-gm2MY|n39T%5Xw73Ur z6{KAH2Jw~}0C22)w z)A(0Jl>z>0^*NvGP1Mw&)v)bK&L+b+3R6#E7^byf-^K_mBCyg};tN#0VQg!gsXYW6pMyN#?+41pc0 z3p#KcHM~fxn6HyhGF+p7gGl!B8TMI4L1G6$6a_q{TVky>;(fy0&fq`+4wV##H+MS3 z!LcIJG-ww7C%h=qNAuG~>MSk6tbu<7LY9&DBn5I@n%;fkS-zSO3A(ef)m7ii^3Is; z_fS_=oer`gUXfPQR-Q$`tV-lZ^^Q21I$ zg{M&*V-loFBpW2MSy6g$6NGPKEwaom>mUam^(CS@(;2MI@I@wiz}B4U>un9aJeNSK zgIIjpR)KJiJI*Y4z$A|k<>h*TX>aa4iM)N~%6brlEqFSTyC2cHG+@?^rl8YjS5};~ zJGIQqVuI?Zf5Hk*Q<1W4mp&vGk#? zTM^=T==?X`A~=IWbaofYaR~~1KVrbt4UgVtuqc@Kxqib2f=>zuG%vIj(Kk?tLVj*r zi9F1{03SkH&=tf+spv$wP@V&wj0w#sD2v}Ih$63S2l5%hH)GzvJ(Y@IVa@}ini|by zo%{Z9(zT?ikkMRHX=|Rf$mPhD3j!_{_~^>HB#M9$feP+uRML32#;5}%jl8JxZ-ridyN|2&?(O`3u}_#S8YRgJ(moiS zGTj1d0wg+Z^DsrqIwm3w6`+gw!@lz^Nh}!~v*ZwcEJ#{Pr=^^50>U8x0Ku9$XO5nO zLqvK~G~;7su4>tR`;*6ybEzIN?ITiG(p{;Q(Q$ryw0`c-qKw$TUmAQSv~5F-sQKU^ zBEyXvH&!VXj^Y8Kkue?KMA6^RkD(+%TE+`_0!`KsTrfs$bB_+gcv4t6*Ai*kK!NAS zCXl>xXci&Z!F#ypZlk4Bbp9TiyiqxW`vxmwa4U~E0DU=@G?C+} zZ;E=%^cu5m8SMOLk2Q?Br9I7uEaL1l-B~&0H*KZY61xF) zjwIzsdx7>l<-BQa#THT6EBvQ?`)>4jT!G?du~_wUWHg%PC??!$`&k^mMn6=*czDV;!^d+N)agsUgMSN83#HqNcYe@}~U zVegCEd2Kc;tGC}r`yaS(`jqNAe|Zy_2U&QvV*{E)88a}0tR7DzZ_YDyt8>DUDspWR zMTmCg-(bGeTJic`@M;VXYFqSq$|n;}lmnTIP%J3i*UGAWO1kNHa~VNZV@FC2`f0ch z8RwbOW`?JJYCK8SsRHw&_eB^52lauYlpChG7#=b;CfOQWM)81jd!Ek#na=FGyibqld0xG8Ld(C0_!Ob#8 zznf~GG7>%7^gKbVj^s`Z8Pb}u#WLJDCT79G4zB^pjxq9v6@{|HU!&wd3M5sn0)3E6 zuKxC-W6F0YrhieK1Y|i#C_Z2{r~G>`1}pc>5yv=@uyKx+Us3gPGr8faby-Y*g6nM{6A|(}Jhc z5BG)T!OnlwGyJClt+Q;2P@936msFI(vhZVhLwypgI@loWlX;`SR;rtJde1!hzk}$@ zj3!K&O^-?O7?EPV!aw_hWZ$9WqN@=c$NqcwHJsuBX>%0_xv^tE8BDoa8Hz3^;r-<% zXz|p#&D6MX#)>J76EJB6YB|P9^a9eTn3Kb(H}Z#C*bgk;dE!JrNH*Ez6EJ;(Ljl$zG6$~mHH zba+F8vD$GViDeOvQ)N(Yb1bX~P_V3tNRFS*tZ1AFy-7UWNH!-Z00hBrOErXg$b6(2}14`Wkq&IN{v36$DtkmD(wj59`iR4Uep_Sl)8P zGL2PxI6YiwvcapCk?9*AX6fGf+@jC$49y`Wp-=|c0aHqleh1?)B_pulvvveKMNG8Gw8zLgpuh@jy! zju#}Kq{{|pm;Y}pL~2gq?D7B6TUMm*c!IW6nSBV26zF%KLU{hc`{wBdOZY=TGZC$n zm6Q^lN^6G~dL&pwQQrzP$D?0^gUX%StuStW$SoU<=RJ z%P8hBKaTnUa1)G8xG{*hbleH{gVGs2A*4CF{S+U+l>egaHNMc{B6^S8lrre?1O<=} z*Q{AxziIwcG8Ugcb!sNt5pl&H@xWti5|G0_F$fgbh2Y=c`q_piwda@6AX}CUHKw}5&u?)d11O*#r#4!S$W}3sH6s}TZ#T&$ z)Fa~T!k(x_!JfMaI^Uzh``53}0-AudiwGiZcLUS-bju zLX(W@gdQbx*{`);n!L}2gGO66L1iuq!~}9}4DOVE%>*YvrUGFZg2V;gO7j*i%!}4H z^V{8sQ7P@@3a0}gG2;vyvj8a5J+aHuXmcN+G~#=?DjDJ?2Hi(3AAK%1wgprYQ8VO# zyynzG*0samUj}^vYNJEK*(;Km;1!Wq!bX+8ac}JHtu$u!6yEwQ2v&)=!^xv46E0Ny zt5&Paj8_OJ-sh2Ti#3K1x7`~x{RVL_L#(oebEaaGfomX}CP*2`7h!W}kN-?6#@~&I zU(`>{aieVlJq7f4cTr86B!jb_V08rY_<+R|KY5syH7Lsc5TmwycuC1*X<`D}EWdG5 zKv9gTwY30hgWW%=azA&LgcsVFW2dj|S+?J5K`P}7!iX`ES>$Y-bZD-pz~vx)7D1~UfJXD(Ea`1< zP34WKu2AOj|CG{vHf6Ixo|s0#!d+IBeJvV-;u7y+Uznf<`l{jP>MK1wAQA&1p~YH& zVVkQ?G5+a&8tpGh)s-V)wWLmxxR}|`&BdmdlIz(Bg2}3zrCGsX)sA24A(?#nh3W=9grBidtfJdaObYdblB=2loy`xOX2 z6eO?oQ(;z`W(*kHZgetzONN3#$R zTR{>GBJ!NiT5CI#V<_`)tG<`4X4ob695o)Xg|A)>v6ng6v24PBbaq;smH`8b!2k}M z{=_;r|O-&tyTD707Op$ZJg+9e&c=v_2&0)zs9~BXLVbk;nXWiNwLzaX@GJ zNdw=|K{(2<(UT+dy@nA2b(eZsl15}$mIuIdoAH)_OD5LV4l2=~hcv92siBw-Hy}fT z?Yn1DFZnH6POB5Z5)+pM^c+#>a|s_~OHxAZ$10}g<2tlu6YI9!GuDUoVL=PNjOq-Z zoy^aqQ*ggN6*dske87UI2V@H9o|wU>BWF4~ZL%8K$)(}vnTBQk>y_*}ZKzkY=I&W7 zw*m9NPU+X~NW^q9-_OkbGOd6yXtOxKJne>g7PEV!nibKY`0qIi`S}qHohfUh0I0bV zEqZqXN-J&OFlU&Kj&tQCFzb~>Xw?KYEp&B_Djhufi8Ac&eEK~=*qK;EV}g6gMPUut}%gK`_?KwH2FemKJ@H(O?lB`ndTB_cKOP4wy zFR3EXH{x@7;Pb`BNMdq5%G-lzaVh4WZgCiZ4E^{yI~4`&%A6}GQ~v3htyM$}j64%$ z%3g$Qi2mGglt<)Q%@~L>w}Ep9QN;laNzO1v$8k}XMZLyOX~j;Gw?|);1_CL*NuJ); zb&n|fULuNp#(z3t3C01}!z3S%8W&m65731+v7Zc=2#7(=zRVQxMin92LMi z1&DWzFRa=`+9c`?#4<8jfX))P+{g;$f`97utE=DUET3wTRrRI1)w(r*cKSGKR6Cam zM$HGF&tLDYWU6K8qTWBQQMGp$?CZSQ=Wl{27MkJxq>LIQ^T^xUPVQj2j-kB^62XA@(t?JqJZKp=nuWz<;L`R>G%VKkj5?j5!JG}D7s*xrjT*Z%tNV{M4NIEoogwEn=k(@_SHbYL=J)~ukD!}lQ6XB{EMQ|{mY)Rbud zR}X^v)$`1Gn2|X8NqA|vSrL%;WPeA`pIu^d?j%L7|1uQNHOIo_Qf6lC{l;MkBhMT# zsI=AW*Dw6TmZq+VGV``|`01E;WMt8>idDb;z~cfggvSM>Gwm(xm#n?uKXspAbrZG( zR2Wf-5L{e6qo|0Shg^O$8&+mHgJmBkEboud{uN4i;^o?svlnKz_GIq&+BYaT0aqff zT=JZb`F?~(DMh?`3J)Ul7bR0*!PlW<9$vm6-A|uB%HX~dixr%NTkQl_EVc`r7D1fE z3115%dBb(>i^g#nR?p;ofvs9Z?G38y7hrylbXN(YV{Fn$U|cciP-F~D`88mW>$@j= zVOPzpt*!G%rx0Y-|4|2QlHAr7ul^;q@9c{12nHIgL65-LfC%SS1B0@QS`S}27^#ZX zJTkFtneqJzj|PMkhE8()TA6#Sqe}^);&8k{zgSISzKN;og}vk?KYo?jke(Q&oa>|~ zW878@-@I`rGtRm*X2yP5l(hWb>eV%kdM#0={F|D3PB+9gNI(NA_e zSRe4+QIlX;%e#MA=o^r3gP?f^Bkl{2H!ZWY7^kW>;P3vpvEO@)>-OPZo7XBazib-X zeVl}S)c$nm^Zy&E|-sxFJ|M%eg96h#TtktNk6l%Uc{ziipG?O zPtkaDDI*4cK?DNPfPaGhr>}x1Bs}yc5D76BuM^9kCNpAuUNsr5IH*le-(srgNA$32 zk0r4M4|I=V!`id@Ytro=PaFEPi;vTT<7@eBrPtanU_Nh%bMy(AMQEj8*3g=>B!vos zsL~iB-X7SjIw`|93qsOf+mCNhr)h@{j7Pi*X~o7Al#a+1;UK;?EgJ(tf>5p#F+NTLT1pVi|{t0 zXU#gflH*%Y!a~q7C$|z0FC9E34{ArYA$!uV9S9SF1GE!i&BhxVnmf;}2PRJUKx*X} zWKw;2{@v!#!Aa=eaF4H&7|H>J{^>&cFURpr(fHyS{Km{SPA7Pkka=E7ago@GJ>XJ19*X$9mL=w zkaLj!PSRh@7Qy80g&U#!lk=04iqytqQ#UT)Ujgg&=3e1W{DeymRi_l08XgJ<2D|(T zOBYxai`K{FZZXHVBpLR$O}Ig4fpS$SqgRwA2HU>Ij|@x`vkZPBgqd1`fv|&r8`_E&DKQy9I+MCjL8SV~k^7_H z;~Cc3qqU#|v0vyibLXx%8v;iaSWE#ZPD^1VAE49)HdJB`MQ;UxZcsP8W=LxPHg~#S zNfbI>CYA!WQ=n}>a>XNxSad88RkGL1U?4;-%Za!p8ndRMbP|gKY}G0=|bboRl5vApSM4gn=Zw5 zYR+nkGPD9Ske};*m=b=sACc~-R#q%RGkXKNL;bCd8~a66zKAg4J@E=mU=z?kZ#Owa z#5@o(4~z>@G9b4;a?Aq(7pV=y3z5{EuZ8VgnroW=NKm`MpeGzv3FN&QyhT$GFfD0S zN)b1G%g<+%=*G9u!Y@Qo;%XMh?(=2F9DmGz5;6S9v+@x?7#s^J8upE#5FSE0rD3;S zXkvEnw%XA1O=fs=tZ4(h8@cqsV|R!y;m3RzvnWuNwjipyUCPykqJ_|6!A0(0bF!`( zVYf62K|w)b`>)nJHe*zyln_P6(%PBfzxCp-3Xm~j?C_4#h$VhLnr$K20cm>;p&kRK8^R!Io~cwuROgvE;$5s9>d z*mNjGlT0eH3yPv)8BojK0rQ%1a|+_J?$UHWx1kuZhf?g@ArcdhkWTftkMwGh8MQZ> zR_7m=uUoGnL-vx@keF_CdPMcNoy<@62H594mabT|^W14vj$(9VSw}l-E<#;JG*VDP zN_LiN(x&29udZ=Oa}r&FS|>>WIga{LlP*NA1g);F(k;@Q%xrO@^*c+_8-uzoMD9N@ zIx`cE(L+cu!g@W=hfko|N+%1tUHkS~Mhegfq-sxJ5@;I*$f@v+7AWF3lfwdNe0-gn z!6#8rY)}t``ZC!P)Vv6D$=oGYegAKr>j?D9>BzR*YO)fsvj8ois_(@Yg|oH2-kgz~wVytCG2i^wF=W_u5i*gaKKvQGDgWqFHFEkwg-$lmAO!EO#71 z{sV_F?qx6M5NlTk(@mN@*<$&+#w_X#BjyyH*aq6RHaFEZbv0W1i27YBz za!YICBM4l47y5_9U4gZL<|g6T5a5zR5{|(9>2t;RP;+#KV+LyiHh(&>CvI9vLVZ=tbN7QFMoeJ&)`!A4AN^)!Q!g3sNw_3z^tSJmS%>FUc*d-fC{r&s* z@@aKHU`xaqaT^z|q-wz9Cl!1hQywU>J4gg&uCy9|#Uj6-f2&2@Z>>qOf!n4b=9#-+ zA9sjaj9>SLiAN^iFhon@>6Q+|_Tkvt&HyCNG~`&xEGShguk$BarF>VJyB_WwF_0qt zz;KT?3>U+ZF0^#;{)@t(@xMW{b@2FPB2IQLz^#ka)jQtlaoGQ>BN{I8f5=F}4LeJV z79xWcTQbxYSUdAuO!5b6W2*sY(X_j~-oUZgVru1G*lpfse{d&Ukdeo7e|pc6q!DN* zqriqN3QC_%E(*U$;7AB$f@plVZ$AFvDKkWLf` zOk9QbvG>S%zKd=`b{o6Xz}cxSofS!>&jg&;+JO>_e2SYa7|Jltb6R=Rf}tNQA^UwG zS*frGc<1G; zhi`KZT{+B$%1Wk)K+$lhK4aBr9gHZll%R$tO(GYiEkUNsro7A3IZK`^VM@=?a3Hiu z*}BL@CiQKkNe~F|$o!z+FOux43&lld7hp(>xXeHg{s`mlE`yXxGQoQ`1PH(=>g279uvFiH%q3Umyh*|Vc!#t=Au!b!Bd~@b5@| zSObKO-C|K4eJL0}Rostd+E--~F@?~61|Kf0Y&@9ri&&!8NPzuTrNpF>r6LajJ03)v z%pl+xqZ^YWE`LtW-6NycNtPT~4kKZZkqUw#CK3}{q3HC` zoGp{%m-gaQeliNZUCLlgj{3s)PDZevv~AL^9;+i4Yv4TbI9}m?@hdJ3Paa z!;9=?2{|Ce!K74OY@s-CaB$bPH*0lgZ~xcZbjLO_$t_r-4TT|7OE`;XKEJ%d|Gs@Q zMik^zh zc)TChy7M0(D=p3q%D6*)^qzHAdYFV~9*EFwoU0lwedO9wS3h46mi3r^0on|0-r>G0 zKF^nY5xlqvj9@WdFF0sgMpSP;!m#eJ(70S!xm$JLSbl=P=tsE#njscA#p6af#Cy` zrnzRls#zt+1_=Pw&)%RKsWx8PXDe6f3(mziaj5>=#C78IWv3C95<_R5+7@S@Nm5Sym|VO zmgU!zwV80lGmK1LtMw-7-%Oy(W*nS?GX02vZX@o8FSQ|c^&JcwQv zH8*Yq!KMX5K&$-TXZ5!+lkde5B+Dm~0d7Ez5eGUBqa;P0y^zyg^l)HQ6oLM))X$tc z^#a(0uC22=VVlpWCb`xncbBo6^nAgD=%Q$?@sOR-44%SSMup_Ms`y_L8#h`+we**n zjt1BTfmwvNc3rgi3_lGT#o07ol-$q(G{TTm^0{2y{i)pcYP+iQNo4#78yb(;9lCVM z#Pic3%=Bw{Nh)h!%+nNHFX&Ty+MI6z%2Dk)ZRLmhz-s-x@u(@>W1^nDL;bxW6TKd1 z6fBVxIGNM=?Ab+r8@KXNXlIxUr$kwW7=O+qG*Ey|6L~wzD<$ zetvgXgD}%Z-D6kZZtIr)HOYC$KcUs8dC$!wnJp^e@?xgd=-IMmO9?t-i0+%A1O_B}~Klpu4i-m2W{%GEzK4^OGX9x})hfDfY| z^IMWuwO_+wvKM?w&871@x7FpDOF?Hqkin%IjpY5vNO-;(Q&lAMjf#VXUSDuS&b6nf z=T^>f9{%C_wtJTz>*bhhM0Y>HAjFnYIu3Je>erOsHS6u{;mpE)2KiMLsjCHG6$_$k zhRrD`4=yR0DRkk-Jk4bsGmf!?-ywBSyhvpk-NJ8;dT5-+9B1d~Ei=5myo~dpOgKQB zHEnvtFxetHA#91HQo_)qL1W444jJv0!WE4c*Z6dMYAU2xK|w#Uz34_Meb#Wc2o_A9 zOEP_wTF;*5pUpPwEK%{%tBgpFyLQyZ$~Q1DQ#>X${s5WvW6`RCyegHTk@H5fM@kMeC05$de68%jcFeZqV1e;>O z+LX?1^Iv_28S|S&1IpCphfaFtKY!?J=F?_CzkZh({>!)<#!@}1jTFWKX%3mb&cPjNV_cWv9~Ms+MsM@3)Ya3IOrr~5@|w`S`tN9-&peh?v|y52&m}0k z1UwbUT*5!MF51v^^$C!dprEl22dOBs@MoYcra%(-3)=?wx6JvmKI6OY)ed~4E*_QBplEi=UZtZ_uCc%#VvXFWOA1K3ZghVqksYD5et^3W2PxV$Q;`Br(axCM*%d9!6=jC z94xMyqrw{lG6NSqaNp&~gg53pO)N(1Y#~Vb5^o8%LgHEQM83eQ`e||^{SrgrD7P1V z|LO{91g7T4Y%*V~9f?s&QSQr{d%W!X>P^-ix8O+&jyU;Te?Q;))VzVUr0|bjlsC%6 zaa=G&eknOl_m_`qG@Z;F1)YkQJLw1`tQVBfKF^?v0%MR7(Y!>T38612Ft~wKi`o-$ z{tD);ep=4ZL-X)7Q?1&<5- zzP{--Ja6>tO(dv_n*fg#jtECT^g1`GV18NiuPp1fkxS;M@2QiV65aV9XMvmw5i$3@ z4Ui)p)i$4#vUxa0s2!tlOszR@qwoHi2yFz)=tVQeb-QysW1Nf zlO6pe(ON@&*j$PgnbVbJx52%IsVnDx_S_ZViDdC!R_%TzH$3mW{{CyR5%(6YMnVd>8P%z_MA97tJB2m(Q$-tuRRdMlmJrl>R7mB{`!R0 zPCMqwoxIVRZqWSpe80lJaQEi-Z|_IKFYFjI2=Az1Mi?X5`F|nQsT+gLwH48 zTT$~%XuSbaFamz~{P~r?m2JO$7s>#9kdF9L)Dj$|P&`sGRvG0@BUs+B#@!=Ew;2uh)WNSm#re&b|ezi-*SyA=XP_=P_T#$+m^ zff1Prd7<*@KYf}-#w&vKyQ+O~*GbMIk`Qnx3Ds+}wShvSZ7My(6-LWQTZb46v&w!z z6%Gl%;gYM&&>>8=42-m0`C(k(gJKTH6QJ}M%!Cslq)7L5Ia5>AXH^G-*KBF4HKBd9 zsVgJM$ZK!Y#-PUIfu2gWX!89K3DLk_%QoLKd-)e^Uos(0rmn#cw)`CS=s&V(5l{0* zj`lJD3b3-xa_v$1b7zO$L?Q7l;F&S&FcboJ(7}TTeWBN+op#6Wa1t4DOQbCVoZ^C_5gJlxB2C!R@Ehj|h>4VyhlDs!^lXn#AKNH>t+@z#s!; zLVgG6l*vVLA+(Ar3ba>rQRoII9qrM%(2~2CCiEpoAVI*pph-?b(TNbowXi*SR42mf zaYPVo#3z%0$W`CnyS)ab6Hj(Q0Vz>Nu#YSn(GVPYtNRf~jg~=SI+qizvM(BURS&PP zc2tGn@gE<|^!dP)#f1cSQ4fzLJHl5+3!{HMPJIjR%gBn&aCrIJEBRL>OOFZwSU8l; z!8!JxrgKU`Jt=;v6jW?N9nX6@P{?wf=YwvEH-Vk`bXBDjXK?7tu%sq@aAc!Fv9YnE zC!Vp)nfVAPUR01c)nujP4=0{t>mrBotbV%w?h>uH3*QMD8Jl2(kjusCWpOaz2<*&1 z%c)Hh2pb1aqZ5nWCF+-~8-uSWRiP64k~GNq`Gn8s_Ii6ITPI%{i$p8lqd8a6=+fMEzSbH@B0fX0rtg7C=%LwfV&+Wd_P7#1M;!_Zup(3 zsV2;K8m{g^{6;kB3hm5D#D!b)u!-1n(u)dW?tp7%w{uFU`rj~a{_&XwR$8s);^HNn z+U6HIP|?*x74m;Z?1h{?OR~yXoA5%N+qZ7j>%`PERof|ok21M&+cpd3TfNlO0F{oW z->LStj#F>zR7vL^WdOii9+5V@aWXiVP%K^VZq%mMiVZk|^*B{=98RYu zQ+{GJg>|qBl5@&$vt=IwTKid5XdC7`E&})!UW^t*B2Xy?EuMBdwhc%Xa!(^?>|1>C zm;AjH89(nsMv#5+uB{BaJNP&55 z?t|mcjbhTssP074G4o%pzd7)+tW1DMkuY#+0X2y6G0iQn7-$Bo&p6a7U@V;0x~+4j zWR*~hb)Zs_20hDYplMdWeA0Gy?i@pX#H@;L^m&knl8*SvJuzbAql~{%cf*3}%FIT_ z8|b4j1y&4z1d)6)BrC3kMl7QpFg)y)iQET$wX|d`rNGyeFs|ooO45MFn%@s13elFh zI@_4n(taY*k&Z&dgv@YsE%b<_3IV@o)Nz)PqzzgODYmR=@dt1qWpG_iNygT&KNDXR z?4SlDq5TNmk?sc>W5@@RXhk}pQ3#_%+tjnCBHE_FshtZ`s5Au?l~+RDMS-s&a&Fj8 z>!Hg0J2ISuS`z;K#N4#sA)sdZVV=4JkBM;cC6u;=#*%uLt{NIp8sOseeOq3YsPo+7#}L;9gIn!U}fB0SZSMsetuVIfyk#H9US*rJ=)_nC=fuZj54F7u(-eA zN9v@1T3-qRf%fN77R$5}?qE&63=KU+kny8T?6Oz!(Qna>+O-*7Hs?&rQam=A`3~c> zhIZ$G1ewPyzf05l4V?HK7Q6(y;T-OE<}_@9IQdY-cMSVqw7myh&wbzb|I6OlWzT3B zk&MU)MTEADWQDSF$jBD5MirWr|_+B0)Swn#=_>=|4-Sxluf|mD5nc~JX7LV??dUZ z7>WE8X5-PfrrDo$rrAZ4z;@!y26e^Mkqz z9$I8~EZRWlyaa(8)&;F##}kl~h^Ay6A`sF6WC%Q_9v*Kvhvar7d;$+p!Z>DG`F#u; zLr8$B={5R14F|sy&n<3Y);V^p8=4y5*sqdOA#(NHbEiz-vnb9lepUspxu54A{5!o` zj<(Ep8Gcr;3x%~J*udgjAyL246H(BnlQWMZv&l*23buvTK7Epw-#VySd%VYxxh12OFKrNetv&Rv$XJj-P0gZk-4ZC8$X z&;Z_xbG2FTjpzCS>O`&1*~2I{M0`k)tY<$S0uLxM02*BDep_nh!n25!gdG?4vGv=3 z#^(iQ=&i?WWca9A?C7N6^vU1US3nTJ|{l&E*UScu;Q}93uUh#Pn1T0S)AGj{NzyuR~T?`n;->V;x3v zqS1>Jpc_RS8#wW%WAtj#&&7TUVB*uNQMDuh`k&92tV8j7t zxt(JxTxNji5E-pZ^C2HQEv;qLyMCx@#vSONL}bqTBs;vWL&KZ3SPcEO`*gj ziEa7W6jwzI<>S<1MmPh#jqpu?FoRx)q_4kyi6YvQWh4MPuoILL8SIm0KdTie_78Lk zSQbbM^@|Op9Px^``g4DitL zEPo8m=oMOT5*!}Cwcz#9L-DVDZBRktEwOGBA4Rw%uQ5%+a&_&f{}=V?ei!gdCS{#2 zhhwYy0V+&_7!_on4CR_+a@3Yx)}~l~Gqdi2?7s^8JHs##OjJUD+No4>?GqhF3>FSj)PH86CxNj2l=Wuqs7-XVJEv1$h#VZR^d}HU zrdaTnz5lYhxpF*8Rp6I-#E?;Y6}{BFwz88$(3#tNFn9a-`AK9|#F|@H$oS8L2;tO& zY|u1Mdo1k`dML2eK!AXvm#fn4w0Z5DSy1?cGy1H~w)8KyHZ^U8T^h;flTwS-(2QMp zyIs2;H8yYN>3<=!Oh;dT>id3`t1aud`f+2}%zr2J-pBqpby6!O>Obrl7R-iQXftV& z1XnwMT{L~hjP(~TT+sV@R%DB8*P;(?Fo#|0n)gSSk=1YA?U^@zFX_tPB>zvoTgQJ_ zH86SYjYf`?brCOH>` zEbEz`Q%U|vK#lr|5K|UW1|D&JJHEL1vGKn?In#>lNv3odPb@OZtx&p+-s)JYeXSEnEzyUvpz;we?j~)) zWa}xTk`adI@#<-DAZ>C{yKf59;eZ#96A*wK$8mim2t!#@{3HJ>sK45f0Rz4TOj-5k zd9n{AD2T{hc!*(t?w^$5x2Lo@*9vu22#FOG>q5z(+RM^d9`%3XKEHRzTyY99GU*!5 zh;0w*ui6dUCYpL8IJ_QGzztaOp?&eiPYpst*JT%TV?)MTF5ESwmW-z+FJ~oLH`yiz zS)?pnfs)(C*Tl=)n#>Ne+pzB#Gh>D~E|f5Jp^QA{5Twfxc)#el=J~aqysut%*Y2s2 zY8SNd(qC$O@BHeuD0eFQ(fq+O*^H3!zy@O6M~>7WkzNC`WEKrwdg-eF8EBl8o^CuZ zfyxSjZD3_Ta2Hq$boLV8lTZJ?QLm$k! zi`JE9HiKvjnHR&fRJw#aG^xBTes2i0igCN3wTz&d4zj`LqTu&t1{{4)5Ep^rN-9D@ zL^;zasbrin2cZIG%-Zj-yF#fCr6+}|mbtLtya>b&e?BEKj6Obo3tVX^MN8f?bzxV4 zNE8W3`dy(O#Yd=@fEdcM!;hXK^aF}3TI?6GYODhI3GAKQ6o9oeumwkbE>eAqvVo6>JNc#S|9Bfc_CSAJ3s3c0=+eY)1RWQbCYPW>rhP#v zhxcA|lQ}H>H@O9Ac)}K1kzdNkHrPPuPO{(?XZb$ebMihsatg)#P0b|pX{hWcA{Ji<#-bUMcV za6P@YvMYG=<~mjEUi1J+Ktwmg3%7h#n@V1$v17=1hMH{HiF;a|j)507@GZXxPA?Mk`Gsqpww*XrwE+&H)&S;*)W25$wl1eEmGxJA-qiHQOzjo;Sx0H4R4QeiG_i*s9&bDhDi?dG^54k#^-R*C_HD`W)cKJqn zdL2-9;4BCTcwoceB<7M_5Q=kk5oBIw0`R9)ye(TfH>tn=M*Q9?AxUb?< zQ)0^?bzm9sF9B`bzqm5m^a-_{2)hKehe<-S#X9j?vhkcXp$8L*QYPT`yj5NlU<}~F zhtHo!1mE4Uckd`>3QNl45|~g!Qg!jUqU);$zKm!Q)AIPr7`$sw*8xFBH-( zye23w`2WShQe1_$D)_)7k%UpXi+mOXy?|zjyKd3~_#W^q-;>aw?VwRGl~6ZY9DQuX8ObA;g)W?v;OYmfBnqNrIsy1hX5j%m%dNtz z7s&@J6MmyPsb6|aUj@E>gj9m0A4&VB+^hPO&yvQFT;eXsNQ-)5ON5;A;I9glEmClD z#(jm4Brw?y2F3UZ+AA5sB*+#>!_T~mauI_B^D551BS%MuWpbPdvd^?Dre{*_bPZ|0 z47&!0pv-CF2T;=O1ys0;CQX z5g_I#t+Vd0s*``}|9bDd>mTSe01Q%SFsO)9X~-U&4Z1qqeO~cn>o&)A8@!9#wRprB zE$^e*Cd!+*OJyDqvs`R0uIPpQ>DcENFhcTOJEe@ecO?=buj_uG_}PYpa0#?WU$CC#EYT`d;U zmlqgx;rO{Y=pS$qAD{j2xd^Xc-G!wTvQWmaaiJ*PXG)PM^Y-?tihQi?$`_58RU-VH zB$)sg{`_!R*)Z6MA(ay^t~g~jLh~MgJH4UryZspsu{dO89t^aNOhTc3Ad}WjQriN} z{*Vz{xZGN%E(+1R;tMZJbuO=!`z8G3^2Zmlmpcrgnd6G0MzH*~fSL_}7lRk+8{;_{ zLk55P_z?(+G>D?(hGy`?tm5?;0)ROz|44|**TRbnAI8*%8m4H$g!mi|NPGlhegdt*k|QE{-hn!ul;7IWhW*TmT%pJIT|lFD zOHTB2)Ie&;A<5QPHIr5poEt83jk0EkKt$~`Yc1YN)nKOf9 ztVJHn|J2eX*n#)^xrGF-K)nP~0T`FWM%;F7SeDEUErw638_Ry#abj0PQAnp2;-98q zbc9$rfR-cvHfj-})j>^dWQ(NEZC5v|Ydm4uWxC1iJFN!GnK%em#8d+_{^&&BUO~G{sAXd8V*wB>qDn zko|bYP8-EAZ~BLnUYfvq(3AX-WoL%G6lGW%Vp8yC4sjkes6l zz?A%qCw3?b2BFd7lz934IaY>1KqS$sl8*?Wt5t4l&G6HTcB_`RRk17`vi7HLy+~{d z+iPj|I5$0fZrFqIrkA6tkG?Hj@^f zf4aMF9gl9uuim;*?7i|vxwguVk&D+1X{X#)`Tc-G+jBPxZsmR&T)5_=Dl%PewU?;O z$S!zvEb~2kQ?*`==qwj@ZS|)=zva(aLPbZs>rg5Qs&7em|9;wnM5`0PgG6`$f zB%W()PW26Sp)+P$78O!R@EzX<`RwSSC0DcyT>9PIpMC<+o+nJ$s!}4=EczrF7!t9& zV&?ZBbZkW78cEY(W!0RuSUnK&B4riQhjbJo*0bEVH+0~P6Wr=ijSX(R9h3?*c}Zk) zf`6d&8N(gL@kqBS6*`U!bamI3$E=QN*4U_@Pr$yA9xffx1U1Bv%4zD?8+|Z)!U!}F zS%6GGY4$OGf@y?Rlrg-vO~Tqsap^a}uv4Wl?3sC~Z-)*_+BNQReR8tbL-7aU-LPG| zLlq5|XA?9funHD1+tZw(u$TrKv&}9M1$w)(W@5AUupTgNWE( ziWsOLsb`OC>Xr_edT~V~eh57L2(%^Q$K=l!aur1AU!P`L9IlXzCi+_mb7dPg!f=P; z=O%FyzI|~x32`bWN6|=0QZ{Os(-d4GCiv*YE%|`NU^viJd`o!OCWiN{q-OqlIaVxw zEEWl0JsBH28$ox2ILM_pH{ z_+hh&K}cqL_doUQ9QEsx=fJebAEPESsg@oP#34<52Q9nLHTrfH{A)!j(P zTB;-lUMZR-RfWa)0x6S3%x$U>yYcF6c((bSohX+7ql({k#-8d-V!RF>jOx~7!OWS= zlz--S(EeROL0&?cY4A!%XUp^FR(|PkYofJw*00NwB+Tt5+=X*91!OU)^ljlRowJ8` z@85qfu;C{{1i~VlB0=bT!J0o8nH6C<#>VGzTH0nwro@^pGK8q81&7;g90~R;ZsFB1 zp5iTsVE_K*-58QTeETvs;TZ%F{ikG;%3OP-NlCc=leo7&wK4JVoT;tq8?!vL#jS$w zOgv*x3%$pAa34PjnKN+@x_NR!oI-{HOhoMe5MSN4TW5UFHM4abvc=sSdJo1e8QI86 zL#(KVcoGqXuxgR1Ye->v>(=qBt3FeTNXih6sr|hvyk5GoG+q~%$!W+nu{K*zTVwh3 zlZz>rSh!h89kz5QPHogBTEhY`5>$C(xbVU0>W+?YdWR_8K5_D|xW5V;FqzVhKggit zTAawdd%)Yb5z$6?1}9}*m){wtIQk#tI)KJP^9gQL@Xt}VE7}Jc^%buGZIy| zDLo%`KN$u%1CT#Z0){%ERZo43ZfmdSJ+Kx+q=}|(#IdPRn#9dbFQ7hA*oAqY{GI~ ziN%cp3cCY$sax@A9-MRP1bAu@VX+0|9tr#GoL;hAD65Dt$i2AIeBaKU%nn@IFk-+! ztI+L-h8TVMwO!4{xm5q!-Bw}6_dF-Ht)AJl_VZfraV4p^RIJ)t&`x!NFIPgd{mZWR z8AV)-Hz5sJ{~2QJO%`A(tl&466}Pm&G9nG*_SSOLX0$pt0_AGb!-p*qhLP5H z69Tq#Sm*ct+-7w8^?AY}$2I#=!U1xjZXSaOhVZ2x1hVvU^x3~Z9jQOB<}k?L*nmMT z=x?I?e%n{0z&A$6W{}I+H$S`EoF4IQtYe&VAvY73BGoX8K@P%ZF5dCrQ(S=^`}B!P zoV1EfpI!!NNP(llz?D||-LDlR(Y84$AtKn|s)l#@s#iE4rzP$AUWYG4GS9hNcdSZS8 zffkhcSN1Kis%bhk2-ThC8IuzSNi6xeJkuf8enYVkmXdHnQ49KHTw@D+rEy+O(SC3t z*d*#{X^q*ZwEXOR`V|IC6`>;aMJF}xFCgIcORdEgYs-l()lI7s5)Qp{{`Y;kPx zv+CwLzxpTceOPEJSA_U15T0-?iw{y&b#9Jy>QZmJI(2am2~nd+An~tx+}!9bj?HT7 zm42O;Xkl>?iq9QrV9DsaeSUmouhAQR;sfxtQJ6%3`%27D=lVP zqC(7P-1kTUujO4F3nl@>vpw!UW`IGLInA?ENA?cU`}E<%glvy1Nz{0RC-+0w5%S>D zz2xL7ydvPRacJaPFmuwbo^eF+T~?5|o%zJQf$^f_lJ~CfLCMpS@V*>uhow=X0H=oXVva=j|S`;Y*e5;V&AVJbcULJ z!YrDaKb5ib+~s$U^{6=CJT<0*V}GyCoCYKV$eG58dkQy9$3u5LAf z1{pB^=+Werim0g<`ii!ST*wq|I4-cfJ%P`CLQl3gb4ovbyZj}UEj`<{>(|ZgyS_Zy zV1j&T#0LhCJZn0_#vP@J2M|8aprwMyjG7c%Wm_kI zx}h=I9rpP9Pkt4)azoP4apM|L%mT`a$Rhf|5phv~x35fS928Vaat!(1vj<8_X!!K~ z&&st4Lk=?b)2yx+ks7>6f^RAFgc;=bL`2TZ3fuYMmw z+-z+>R*|dIoiS@EEc-pWb%L@^l7y&13If*AeexbAv{#Qo-Q;lZ_<}R<9f1SZQYwXS zZI*h_XWlZ_+^&ypXH4pp-p4L~?O)55h4N{j-%4`-x*Z-l<}Jj15)(ZI!qd>XS<5`q zB7E1bbgL*(YV>J&nZ;s0uhk(XI3jnwvG*=sW-lZw&b_ECtW-pw%BL0Yd|VyvP%9Bl z#oh0==qz$f-jQScBvG>U?wFCnhQ%?o-)|pv)>ca3$H#8uj>AX%)DV?wxe!j1IqX#NsH3^K^E=}rZM7lo`W9m2*V5; zH5x|2Zrr9`lb~b#+xchKP(K1$j%RIzPfLimdAz}wqEFoRD?fE%n6->D2W$5$DmNVT zQ#cnX7?BVUXK_IoDYk9MD9VYdt6DQmvZ;rVZvrV7O^FCc>wBzLXw$_kK}m?US5nW^ zm+7$xWbRKVT4fDd_Clx^K?PH#jd$hd_h$^mYro=X*v%Sk1bgH{T51fzlcH2Pd8a#aZbFyIAd zU1*w46~;w`$|T$}vbk_KL>oV@=ZZZ1B&ZNN?9s?PfOX96y)H3+g^Et-IF5XHE@_k{ z;F_%3?45sVzl&EhqZLn4!ilnpH*ttbBSy;%-PCh~wRJ`hYMYg`1XvfeZ=uzfz%~Px zq;#8ohmSn*)Qswg7Y%l5L?f2>>k}FxAt~J7l>Oe!E;MSlX4dYALU6KK9O3C_G@S3( zY`2=6WrYMtpcJ7IYDcq6IWCUZ(*cc#^5XZBQzO!b-Wiu@5JooeXqZ2GH~b{oHxL@a z7|`Z6-Fv=!Th6n0@bdDVqnG?vBP(%{3j8E4h0!Mcu)DF$6wk*Vr1Dp)o|iYa>=mUA z%8qmfEBeNPqx7QfH<+`pc`6T;v*9E3Q#2Er@f&eWXzs9Gz%QXR@{d|GsioS0uIMQQ z?`6J~0h<8@s)XKA+ciEhz@m`|b*a1%%aImEdh}Mb*J2gw*WHXie4o3GDfWRJ;atQN zPiC*4o`;7LB!N%E^5GuT|U*ykF&%VPa`MqjEYkd3by|_BAy%h?Atd_G4t1l zWW%{zyAG$Skljg)8CPSRg>q8RjPR-kMWs8lN|o1tU*0%`ajXX1J=v*hyD>4?p?FAU z1Y+xu&`=W2vr?6Fah?&a8OU#*9Wa3DQlp`~U|2^UZ?&7$PpDzb2n&tVCL=H4p0(~IE?;hw(*H5qz*99QhG;Py$i_LZcpe}yLR5>WSzeCW&`)6hqt#; zWH!IC&XH$Y;UCvt5}0q)s6<*phwKQydAp}0f`kxRv2vx~T$9is;7@1-oPn>F#`T^$ z#C!kg_yD-Fj69|X66&{Cy}aw1cTXT53Xw;9w|#yhC&5$BV0(V*5FoPnLCL(i{yD<|hmK!qWFV|R1A5hPUx z-6@Uxvq27wo-lgQDH_#dJzUi5Y1;R`_VVV@8)vpUu3MM;Xv3x71?g{Cz{CAeHNTW5 zV-5z}{+rmK;Yh7V$qoKh6~O1p-_mi|e*^~p`FEz>YX3J?!i;PCCB|?gi2{}?`n$Pm zvPR|)_PICIchi)9L497htcX~@NZLh1^&r8|BpYczB?pt z=-+>HMPs!tU6#<}DBwuKr(QU-vg+@j8L+tWhn0*Nu<~PPj=O_#d%-i1xK&GJ1JmtH zM~{mVqiZQp^%j^6JmEDG|BM>B$y;OUCGNkRKYQeZbq{dD&_?e zMe%bH0s+&yH8?ofOu1o`CYL#OZo^YcbIyhXo^6AnKZeAJ=^Rr+6>%RwfBpK}q7)>A=`N1GuL`n2y_3mD)t3f#}` z=QMIq^n~kTn<&J%1y;_YgRG#mX{f3?D#X~&cc#Y`8J{Rp56*Lbzd6eg4BH6I{l-HA z)3*VK?tRRn-{%7gns>Ud&KerEsijHIlQ|YQ zANuau6@T=JvIyk3S*IkdJ;-i5jZ@6I$)7hmw{jJwG)c|L5#|^X0DlnI5iwc}voL#z zohh0OJ&~1%yydDfcJC|jEq@3VGrW!O3C;nH1=4cCONfG=ivo>wo7JfNjP(;aC1qd* zJwGn;{nCMaXI*Gx?56A#%osJDc+W|Yx_0a_W8)^qIy93|Qz~-+UW$tw4{Mq3M1Fo5 zI$jK&B6p?I7g09_Ot}Bq(3iIO#Ez>B269Eaq{EGQ>WHT1hbVkfG1x~u0mK&H^d;b zYup8*3Y&7iwp6b$*E#}$~>xU_x8>cuK@yPyjmu0>%+M>^Aes`M=zc9O*2_ukEEco2m1ppro?#;$n%eX-+0JcrP+t)u6jisOEz*(&gRS#>ScQb`3D&%rwc!{GFtL+BmAwPHUTLE-bgsMbMQhABarr&pQiL=@Fx+SCe`e^m+Ne_lUqYl>$ z^Z{8;B+swT?5Qfa1bv596`T|y#D*l-aYxPH z=WP1?^woo#S?Ae;zt~B@VN(sXeyAj-&Sj*G0QRzYM~ znT2+!)?2O`TAZ4Jyh7Z7Vs!}dLN>_(mVT@!Tm&Z(ncAKiFL7bhKeoAK>rJFG9}k#t z7YtgA#x2k%NyUAIOP1#e1x&X$>D5Dz-?!|bg`F$?Wp$)1qJTu~I!GWlRw|8Q-y(bE z?s%3pt&fjgx-=%v_!Oj=LFU4JX6vxH=;#d`jCzvs%?Pxki8@hL%lw})J4^L4o01xcdo?eAYuq!eRrh#te-!gnP zYN2hH|4K|ObX#SNmzHBcmFA5`Rhxd5G`O1&U(Bh~a?ibD^|ph7MhZCqKsiR#KCt)w zWp+3Fl3Qsz@CVCo)05zy3~|L*SgU^h?k96>akYHB^jqpH0#6BHebdjam)bFn#fW3C zMV^R{$U?x*6)}dga3y9WK=~K&48{i^^0b5#hR`a~L~0{6zVADtrPT@?){Z>r11ip? zD5IAdBcTwpyUd59ln`7n-e#1@yc>Mai+-n4C(eaPjSoV?ZRk9y|giEsLMurw?-r&0u zIW5vT1qx`%(-XHiFtVSo3sHjh2dDExv0^Xb_^I+{PAyYY?!)2eBUO4#fsz*}kwz=b zDr$e+ynU#6dSexKK2`a~kr_vB-8!r2#pnOeAbIUyKYxM)f)gZ>LvORSm^GdP5k?wt z^cfb=pAdqiW4Q=9_uf3BIp6Ejg@Zoy4z4!s(?3`2WNzT$VIe_#s|=w~mrKvyS`i1Nwz zv$XJS8?Z&GHYJwezBaBQHTgSJxPBM zdpC??*loK*$*alm_2Ljh{G#=_<@|q$T=!Zt?;j!8CQyMl(oL{Lv53r7v^)oP&HOaw ze~w+7?F@g5wsp9R%Xj_q9)FIr2;+Oht+rthYyR!<#fzjNZQ=Z^nsy+^JCb$>wTE@+ z$Z6bOf61&3>h-AOjSW2N9L;u+aB7xoFr*6Vlv5VbH8s;Yt(lKqO~kwHky%h+H{G{O z29j}VFCl%)IeRM9Djc^Bh%va3yziABLF*b6Y>-s)cMc9I*X$TLwp5=eg109(QinRH`~aww z6GZYX2_m^`M&!D6aKqRRpBJd;Q>Z`#v*LY9Y&wu5;*=xb4B+$Dlm{STwaB(i8z}5;wWh zOxs1sd}N#xq-ODT^#n*1M2i!Hd>iJMWOn^|G49n)aFDC;aiZy@=jMXM=ZYioCAg0G z-Juc4-Qq)YYc*S2+-Uh6<94$?5=A5bx8F~HE;{gDV_FDvj3Y7$9sh(`ceGHekl_=t zb*t`w!?2f4`vod|vxX6K@N)Ho+ z$VVxCVIUZ`Kx@}Rd1+b+uK{Rn4(1I|D>R#wR5L$3O)3fW$3Q3&I@8ruY0lF2HA&U_as_|PnNOrGGlaxy+ZSXIRH&erqZ&6u{ zhv@a3Z+`cEsY`S3c+3_we01uG+@DjYs-IstVxDhV=@L3sa9~ah!!0Ks{N&t{pNr9# zYwfZ5!@D3DFfnkNE1y;^WLx9yLTW%Fx?7*sYL-t3NE%*sALd^0f3EgQ+{I}I`$br zOdwyLD$m#^W(`G?FoyI2a88NbC4#L&i_HW*lw@G8<4=q=IE847K8jU+nGcO_LI31- zqYj=j;UvQP#PMzo-{CGJvV{n(K8UmeL80J1eRl7zp=!PdskBO~32}bAZ-tkyn)f1a z+*HdR#}EE;fBRN1t3-3KUAKU4MP-{#BSi?Ig(#Y#gHAO4hi^mW^vkOEo8>R02di^z zodwiubG4S;tQyn$pcjbW;GAw8eD~?=*Wo?ZJ_WWZ{hJhIB|NwXmfO<%c8&Hv@e z+)3URMjebk9Ovon18C!Y5M;ArSwCj)=DnRJ*`j9`-*8Qyopms7_ubtW^Sc2Px z9Q;Z548CH=gb{EBVafzBq?f}qo*?HE263|oJv(+>F9D_WzNdlTAmNg^8^I>4ZF5`< z8rj^)=!${Lwwr`Efg4&xP4dGU!6xay^5YAA{h@VDO=lO zmJt0vkJvA^TT=f(aD|IEbTTS;SzEPcjVx=$$J4$ zT@`MaMnNKJA_$p1Y)^=`2#c6v2M`V~VkJV*y(Eb!1nCEL5MumS`45#<+k!aPY2DcF z&p~`Fj!)Ug2PP1*MmC#<)GKr6(pAd`~lRuaFKNzPZFJ{AwU zCP1x%gs_)_p=Nsz96czDZs$f$2T(A|>RphyETMDA(de4w?TAp8TN4I$81S@2==Qwy z+3c{!q(0{d6a_7@zINt=>+av=T5>ME2@1qHTuUQEm9d1*0VI_gYx&fBZzz?Y)9wq5 zPkV6yFu~yQ2q$80gsTPTlnfPJ$DCP|;=t*jBvYDfZJ}tWSh(p9Q`E=D^mIqIdA<;`SuxY-{OdU*sXI|* z^OLUfb(Eejb!n2>bd~n@fGRUT^hmf+erW+gl1SVLG(XI7PrcxdlEPW1L)$w4Zzbq| zc)g}UTqu+%I*d*{eY(!t?c+v`k_WN$bwECdl9 zeHEXsPN3WALmJt8zW?~?`D3d5aE^R0qDQcOUM$U-OjR@d@mP>Q>Da1$ zJ}Ez`7G{350qR)fT>JeB$&MStFo^!^ehor3@HC;KyeHj#k$vUK;~ll6)tPogPeYIn z-&`+zhpXAz&{8urB0)ErYL3T#FpL3N=%&=NA0vBH@|@bad?Cjikt^*HULbO0)<|&c zo=i2EZ|}QhUYaDF`kto0sG8PiMMyTgl0)LMh&)g~;~f~kFXu>OWvfGrKehPF+n-Zc zCMi;vgj<9+rbA1uNJC(Ax;^M^@ zuj*%&IgaeEyxiIE&y%aglau0_APi;=tMdDYLk=P`7T>X29d#v;$X4htBrg^%RCcyK zh?(8kCWj7bM0$kBtAjvGWl?~YR)YP1qG!3WUw6#o%0!_2Qx*${g@8|fK#y**VrXp% zmlnTpyuruj1R*p*G|M$lfpD4aN}b2uoW67|6-GV_S>_zmBbp*QmZ`Xj=K|*lTLTA$ zMXAq%hraAW8MXi(e!R5=$jW7eE*_&f;jUA|L+?|`cyWU9^IL(2eB-l8XfewRJHepE z(1xLuNwl3Z?f!=Gjp9F&P6dVGbVlRQd6F5qe5%fkSkI~lT~v!ZjF%az&Ua^qU;XT! zAHVazNC7-?0fbcB4dtB5c`cGtn$|;c^LDQN^=%Fgl&$q^xjD7hNTgNwo#T1&;vlB` zZ3nl|b;!D!cX0wCAQEsRSCq(sxGTXRk1gy{sk^xUFS^ECw;E`V8+bw;P$3zH0D?kj zCj>An%N{Sk{<#B%UpA+Sl;J`XZ0g3M!Ras$QzS)>CH75FT*V zYZSIOwwt!bT}+hZ#Ay5aEPmiFG|MTg_ODbMF|v0-x7)v^hxc%~M8BglBOlUo?&Rq& zii#q7xV)wOGb4A{`P4aYYJeBI4MV!z^HQ&W-nMP`k1qPQn!Sh4#VWzes`2_{3!nltc7s>^@d`)O&e*2!D42$wOg?r~*P7ag5UMcVfMC}o{5HO%ku`D94K4}^wC4ypUEdN-drOx^n0 z(Hu;g?|)?&m@1hEQ@gznUUexT)o1kaR;DeNTpBd#MXAe0-_p{tqeg|DydA_YEu>a? z$ywIDp~ZJW6Dh23q{9=YAq=D(n}f%LCcYXC3}OXljYu*=`lNJPzNOHY2nDoWzoR{9 z!H5l-0KpNpnK{VLI{dTV?+?DOn%~A19)sp51?}1um~lzt&E@l3s`>pgT5qiU1lT_R zTIYX#n6w90vnIT@C9rCx1%gxC9&%ljA#sI4) z@wTX_jLCQ`|9k#uwP9){DG%|1$GviE^?7lFCt6DT!v6$_{yrwW2iDfy($$K*#O#rO ziZG)ISd&<)Cr-b6{aRz*wcqVznBpJlOC~B#&dcl~kvbfu3izm}aL5zB^b-LJF8lN^ zTvQl7I_vAV0a*C;=}-j>N@P~yix(%6K8Tco`a%e8j`P!I>u^Q=Vs?qxHq>CM}jm;RNK?+oR*i&)q1_A1oT%3Sb9ZZmFu`t{bIk-5(<|f9#rT& z@K%^l6GAVg3F(Cd&UpU(W2ftjQ#2EUWAy2KG2+q=agcejIYp{QGOBSo%<8AuUxxrZ zbVQKqblBKsoC4~aDMn%dB`2QXM$wl{W!`}IZO>TdNJy@dfR#+A!F^K{*37+XlR@EE+{iKNp z2oRwlZKYbrj^r89lk$Z`yj_0aXPc)C41LB8BUyn=1>QtuAo;(InluTHX_UWK{k==P z3a7yws(qQ#f(%_!GvHmO=j=;>vtq2r{4WXU+$eh#+YWvaeapas=F#>h+`xy{d}$%U zvv%6*R~mW8@5)udW`wS{Gjh9&C26gA34exPC}`d6p_+N$gjkOSQk43azBav=f(v}a zj2S@>bPK6>azgnd0|*;jPodF>Fi{R&nHwPVlfJZA^G(&+LV;noYMgPU^ z?WWvWnY^(!3KcVyH$aXAV%6ok3F5mdrd)FIgQ2Bc*$5l6y_926hK|oK?1zPRc247= zbf-eS@wO!S`rD*BrcTCx>F-IU(~%+4D>26Vou&`MlHzlsnN08`tIFRmy!3TuO{6l3 z{l_>-)W(%7TC?--TJQRi{}0q2m+#&+9k89{$g{9sKdKAut=5;g3;sMwR>lpG1WePx zxCm&^J`fPoi}Xs@Dp!UOtUx4nClp>fS_%HU4wxe)1xmH&=&q-#-9GP0GYPxmiT;Hy zL=5&A2k11BV(8nyW3xlCz_!*@R`%|gr!pp=mQ5g)f&w+2X21Dl_3D*pX?_5t-A9_p zzeMct5h}GIjS3JpqiM$;ex2XeiVNc@X9yJH$f=ec`MChTcL_8Jc?(OFgvx~vue2EH zHFT+sKeY)ep-Juib|u-V-&whESHknAiOhSPGiQ#p+g3eBjMThYI;A;byHF>QTgA?( z;%AKPP2u}MBfn$C4jp*<6X(eEa z860;a{1IM9%z8yOo4GxD%7KSaOad}wFfGk#nE#*K%CmjtLeJHq{N(JQYqT;e&5d8< zkK*M+#+aU_Cv5d)0xmSp3S4WJtA-r-PrI%@iUf0OEy2j6vsTiE9^n!oV@)xEstDJv zOa_840=&7_fK84)Oe%xT`VF71f(?Q>dZ&TDY>r_DhRE zR#B}Q_s!h8iu5#;De8|T8~gpN>SwhwJYQ8N6N#a9Un%|6Wv;dUfEawoG+nx^-;|2t5wXMvmTN@hrZ8=_^8v-F_|PO$zjBV4 zG_o8cG%%#XUO)DjbBjEX7@G%tQ_?BS&j`&%gTy658L|m$QCUFdr!DT*)5}u1GdM5) z2rW>GN{}!;ukWguhyP-4eVqYt-(t`TZM^FT@NAHWqJv{lJiLvkSyPT%gqv;pt+gLtuobyDdw2NJ z%$@%Jj%O0io;~|u+cr`7L1q$-b<|*k@xQ1Xay%NAS&lwlxJov!uZFp*j(t7IzS%qr ziHJt?CUL|eQ_*XB9=ucnJAo2oi|q*sz7R_rNs35tt2&#PsH(q>pBpC;xwY{HQh9Pd zbF|dCWcz=onAjiXc$T19P&g%`kzUAD*rKr&BJVB4^3_ROdqVB)lO{D^JqtlwlY@{l zOAjWaR65C+(Afi#ijk08;5gkPYk&wXcJ54~3-f(oK=tsqr&ESd%$xj#+dBn`Zr$>B z;~0l72tHp&09?Y;DaL8TE&FxPz*I(;YX=rSH*~fi9A{tIQ{;3ka-E*e#Dont-)IG!f`&J}e`q5x(QF=wqUjYWiYleEd z_E8$yD9JK7tdFYoWCV*|JSL(r#c&&9Md=w*2wFwU;DI$Z$~u= zUT=1!OsR(b+I2U)FWjhJt?9Oca+kIN?mq?;K6#d0&^!0`fJ2#e3GgMZ5-wIL@Zcs3 zE2|oQ#+$GXHBt~Yr5>YesOgt{@16=&N5g*8>FN8!zYYc^=~C9!p=a3={k*!+SClO1 za+@O6@$mA>9<3R>*+Mgw>7S?2`f&AYhksUeD2i7{k2HO{8?lf`G3v}7_vzE8R#Q&U zsO@E#35eBZxuK3m^>QA)hdT64XTMp!_wC4PeESOx$}p0@>(#GcLfKPAfs?oPnl1 zpEF}Jy0I5a1|XK|=$mt(&pflp9E*&(eRvA84wmMlV0SouL^QsQ8oi!jMxFoAgjqip zn#}~-WEt5}c;@#|zC?LP>3AxsYT`@2RB}p6H7G7%Vx_<~9i}4q9JGTJ@J)un!x%lH zouNl};^N}6+++q<(3m-Gx+;*@C5vql^)!FKD5jBqtuhz=JY~E>7_GNljta7hJZu); za?OWv-e+FE--;2>Aiv2S+qzKqdbQn2*Oe$Dx{|$p7wm7C;Ln4rdgs>h$YSCTavmJN z&8q{{-DDin*xp#Jb7wLYk0!;QXHY1yFpW3{^h)$7BlHT|rtTkjH15G@s%sJos|P-= z`8CgV%a<8;c6a73v5vCpG4cyd$7=%NS*v#+PPdiCm1at@(HN9xBC zxl=-;_8fg>e&~f=*Jeo&9GCkh$^i>Y%jw*hDD1@_rkLAquFHxQPZ26@Gz%ZWW)$7x z!Ci)cEy*0=reCP|wpfmz6|8fp5Wpsg)>Vx;XFpF21#>dw`3 z1^vrn$XAkN0z*SY{0drmt z_dc^bSLF~UYlKoVjGAgaNiML{r+YKfv!3g+?!m}RlM@pa1cVKxu~~e8xwwjlj`Lva z;Q9F`DPUxhfIIZ?gg~SY$&R{nprOOU!;=tR9JY#-7|zy1*0!eTxcA!H%4#$Jr4!9v z*C%G(2ONd4rv;nIW167p7ZwqbOwnq$Xi?tWgoiw1 zXX6@ZmFm-~UPc$+YU*XBJID7pQMEgrvw=1_Hp#*J1X5%;yrH7?^X>boW>EzH; zUX}Zl9#@dEPq4JCzGXy}EhEI|T_fZIq8SnNy-uNlbIzH-<8Gi>ka7R!&HB_=BOyjM zEpz!C`y#$S#z4j~&6e4c~xbUQvJACF$b67DZ z6m2F5jWI@BC?64tw@yn-3kwT#J$tqv5|}m{C#&AGr;2@< zyu4;j{Sq^BW3v4gwXMGE(Z1A{iXC&)H%@vmV#MdCh!aGx)_UP7Dx(^2hIr_nF-&=` z&fw5Gn+#h2y8f6}ivxtzU9b3k6C$&PDdY2RIz715Z})B)FuLS?YkGRGw$Ggoay%=Kw8;q$9`uS+w`2s$QBh0dzY``7!;_<_WNXliPb zbGdk$vR`CG1i+dS)hry9r++(jm|qIatFwBmH}$MB`|G5L?(1x`v$JKhoIn3<&7S-V z{QdOwbkM3tffgNf-`TDUpk`BkyK=aVO$#oIEhK2wYuP8vvi6fzenfV{^-9#W*X~)J zJ9Z4}dOPY^>;CsA4WD*m_9qugu}!EXp0U;PySQ0s%6jRA5Qz{8ybsJI-3S0q)6~Q) z+#;+>V^!5!)GkhCU1HyEWA(iX&@FSf)$}Xs=Fx+R1vz$ymj$_7{&nwD`JK#6`NApF zgMQ4IKHX{B=<4AX5A&-z{8g`BJ>r%-G^kMP+_*Mg+tgctcTE{s&>xNa2#)GX$i6;`4>F9JG95E#-*@7@A?$-*`>Vy!0LJ&>$%xD z#9+#l*8Gp|6h~*juh~wq$M2GFif$C!SYxL9My-9Ba)iHL`Hy}EWt9`c03g)*bv9MO z>6qW+o$>hb%Azs^{&C~+9p=0@xHc0JXV3*gNzy>+*4^9KIB-ouFCYnWZQAu`ZUfY1 zr}s;&S@~dpDe_n48j%y637UKgOgxY5^k*nU(@LlBJY%e8BYlIk_vd;v(0%=*MEQ!k zHNS!1@#Qm=Lq}cRX4DWssg3h_F^<~n?{Vd__I6yKT+tu%s50q7EK$7@f@gVULpA+^ z_?V1KXe_WlE`fxl-Fx%nT>21TD+7pANfk;l@k(bg9XfQVf37A9h2-y#6?Z_|5zGhM zdWXjTn%cCHe&d#7hW5G(Z^1v_J`i|sdX&m3`Z!JIu0zK1-6KlcU*U;I~w9cjpeGNPAY_G0f3x+cl^6D=7w1X$MvXH`h z0sJ_W+z{>Smf_ul?#}(dNs~xY1pPCx_Z80GMi>Y~%(i^|xTK^9m-Z%@zH!?|s|9r( zHFHZB*K1uWpPNfeShfT9f(GnhKCQ)u7Q>cLUiXI8Ao3L2o>UVrM$ru;As$a}t#Av? zg$sQ-QutO*kZM$RlGC5NNfx)8X3w7Ph|4L7t0`(Ru@UWrrk0iy;0hy6JiaKPThK3u zH<>9FQ{_KxHF!LwoCS*~CoKk4YqpO5bo>4WBlx9oL@_&8au# z0W13gq3oCt@%+u3x(XoS=y5+6KI|606mt#GCE)^-bF<#_z&B`29Feu;K+@+~S8v}| zac?_@jGFw0`gT8C+`07Bd3aRPn}WN^hg4!~f-!S#x7X6D3%J~{U!Enw&D4Cmt`~4c zHg@+9F$>?Ze}5fio=q!;SAlt&QB2@;?$&(=>;y~M(%9~ zvQ`0qo4LPMO22;n`EA!pUia$9);O`psO~yj?>+7s!{!pykKo}sxU{;Kmg9%ka@ab= zPU>1??)8_cSFQweq2-5)X8kaw3h0%I?QM=7ZEEo|(3FyDkJBhQDe187c-cb9&UaWvaIJ zJ4Y!L{P#sML0fk2Y=l;7IzMuu!!FKRbQmIK0PBoRy6oraSqIR$?wkJ27-fv3ENX2V z`4Tmgva*^|2j?%|8f#-#TVkN8khK9>Q74?4+V;Jbwe@qJJ%ycU+N2ub{HH**qvyvFn**lbxNNFR1N~h>QdS15sGmzI}TIz?b`p z6UF)ow}w=F8;<~>D%E7OwGAn;Dtiv(eKK?#KuaY0r-%Yz#WO-%&|HDhHv=NVt=o~` zDIFSzwNR=uQG#^6#IA={ujdybc2L1$xgk0_`oqH-HENJ-tV1kAZN;m+gdv2tYGf@N z$4mi=&Bcg~UcGrEI1cg95g(i*vK@$Rk}Od}YIoFMB`4OE*X1=V@F|Reosm>5_3qtM zQIMR3xDwHYd=75AlYCYo{d(`K2akG%qlFyutt>`CANrGyE7ioSS00G=YD<+IP%kz- zG^f9dnLGqMl88R5D#$zR)VFVQzT`*(NN=J{S5TFAMD@|C&6bJNM%z^1HNKtu zw7HMU|FW4jEM3jQdR5}(RMT8JrACZ+H=^TCsnI#|Wmw3EvkB!Uxgk?WcWykYb7Piq zGvRYkv2e+!JeC8oC5blUMIM{X3iUte0bRSE$1NhR{Ltn)y1EM{=$+Fjz5XL--lrpt z6&F7w*S*Tvb5uAR=r26|i?@QVOw%3Qo8nKO%l$$8B|9^KqlUXjLZfHZa3sh=Yi zA3+7RW5*7~nl)>lP4ReW#(U#f-LwEfE{B$!fvkv@UWV!eOl@qoAbXfj;{+G!zG1^~ zpNhnT`Y!e255Fr@4vigeeWbPb2KTx?QI+pec|U~}zgM2w^ph_)wD&XK$#no<_4(bS zGPn4?9B2C95q~ZQoRf|l=Xt(;8!B*_30v$qy8ZCsmkoVJcF*onycFem!&a?UO?z-U zjm~8?EoUh;b4fATsq}mYZba>u^TGSF0SC!5 z%yh%(t>raAZFJxQ6yXOyKruHj40>M$yh1ovI_&CHvd5++*cNt#zgqb50FRc#Xfu%H z1sNK-E7gSZ@`_(BlHVF z%Nux?wI6}bmRUC5*mf$^nRc&U^S-!^os6<^13&%f(K*2t?!*h<^)c$bS5m2T!N=?T5Br`}EFLC%+B9N@`gg zgz0WLHe<}~@OYGTtRE2oLu}{FyMF6d8ew7^*jqEn3>0e>4#bT{3+qR^XZzR|9q;x1 z`*%=+MrU+e)~6Hf;B$?}!Yv{~6C|kv_W@AGW_Bz93zg$WU^o_A?Swsgvlgtq?id(! z+PHO)yJYOg6BFm83Nw}n7N$^eJh{8MDN!-j47aGGxGxUW+;j2(tK7-CRe{=TWBD6Z zRaHBb7|CBCB4p~Eg@px!@R~|Sh4cGIlBM=Q?zS3~O*h zyCJkH%PBTa*>sh8xW#?4pt*;Y*z0UjyBAk?<}WOJ%Mm4pP1+NI5&`4v*o~C+3I$He zmKZvMF1cbaI83ImUP1+32jx6nQXcmd+l72-{PvEKP_V%06*}};f&Pn^ly|l6Hy)!a-PXJTXt~m!@ zzJJcsI&tsEIv5tQhdP}z?XC~Xhrk?ipG_W?Y0~(Sc@UCZkKZ<*lUd7Ypu21rlC$_B}tN~Z(ntb|?<@t=)Hd-~= zDa?i?@aoB>3;loIxjR_Hu@l$N-a#vuTu}4n_9op}zCdE)P z#et&8KApSv(o~uFzu*B>zD|pjoIh*y2IK4P)z*eCE4*cb!L+-#f0& z((c`R{fLgkDE%9e=E3pDog5q&H)%yffJfJeh_ogHhplnx^gLO^>DQKwH!W9w_I#%cOtLd!dYM-3#;f<@CI<+$x7Pt?b?9sy|b^f%D*${#ZA zNAU@L>MEh@k_V@C;^KPpIt7`UTQkP-$%4H2HsXRHji+U|8)4LyP}Y=1&*2nAe~u|` zQ&v`%RcQy8hFEIcSn8~X8URI!T=7{g}GIx@k^udT8WHG#`yR>9EzH539!(w*wv zJ3zTU?$FDa7lV7mA8%Ht`dY3qtD9+aUk|{a-vm%=BbG!MD0g<_Gj4GfYUSu_3Taet zwF+@tc4v~83XY59miuo?=paS**CBPJ<~JSa7(M+51&53PkpRhMqt&ym_uK)Hckp>_ z3xc-T$tj78htZZB@NwJZ76b?g$3?A(32v_xGuO9GV0WFG3gRpcSs0scE4|BdVL9@Y zIt&=lg3q2Dw%p6G>Xs2p?)??f%6Zz5UY2_nr(eB#XI~r3Lv$44(qeS|lokE;*8W`K zbhfMU%;;_L?M{?GxO?dh(}d-`OI;HsWIT!p3e*FYR1;EP3o}tFPD?S9oq@hFU7MI3r0pp-KLyt zNW_xpeu1x@@Yyn!TF%Ap#_9j7u``d#IdA{?H%nwoWl1Pm%Kq3TBe^AtQYlN3b&@5^ zP$7g$8c&!f*%B?HMu`bUAuX~FnX*JE!=%U{X(IhzS2M=^^PJyvpE+mF>A1V^zTeOH zTHf#X^}dpgad=3pseB-5guh=_vqZLXUkAKGc((*F$g(lTI^ou@?)Lz5NPYDZ&sX9jj@fOqslGwy~l#hV~aC8+-=?Nt$bNa-nAJ-QR z21p|xuIz}MKn$x@+Htmac6Ld33k&7^nSBNld4mwA%QxRlH(oy!{F+-MT6gh#*T3hp zZuIEULRA3bj6nz>g%TwRq<3k>q@($luUr|mdi5{_th0D*etD!PrO1yzZlYV8-?I+P zI;9Hh777Bs84Uhhp^mlEkC`{c92t~iOJON*=@D7>gYVdx*_;@Vgyr@aH#AvGv-Lp z2VlniuN~K(vBO-}=pqi?&Os#F16QfUhWRkX*# z;|h12e|nEmk&226|7k(**)uh{`$cd>wKLPVVY{X>3Muqlc|16#ow`}{xj?%IXV}EX zy_8vXTCCZW3-|B}=2MyyfF)C+wy|8fa^=x$YBf$`3A>oM$HnWT-_mX-(h>$%`@|tR_5-}ie^{V?oRaE84Ka#Ce(YNI-987uafA8_<%AubaE~CWJ zQ9u6hDBr@eQS-c+ey?5gZggmSQ~S_Zml}U<hz^^4|8z0%H;`}Tob(T$}lcP8wyQM#AeIr zjm`<{J6Y|f05GJp!}(b-49Uachi+53No<7HL0qp;zYA$imcKE%TSDTD)Xj*1r8S{} zpf(YR9_}b>Mjeh7tL3rF(K%&Vq)FbAQp-a@ceT$N&~;^UFmloLrJC(n63ncF06v0^ z^G4=jrZ3-Z)J{)t4w|UC_Il}KGsFIa$R?3DF#_Pc`b(2U(%7VmOs5|AuRQ$ol}ne@ z#Ue?TQAzik(fcr$9y{(9Jn@$hRRfg-@D?bV=Xt0##pDI5BvM*x_`hWn)_hYFI`9NG zw9s=~3knJ>=bx5c2c{38EG+;T;HT^xn@Fc6JAYo`=^21zl43~BUFQ!9uI{~i`-2zKEPy{6RxGu3 zb36R|jyH_`u#YQ16)D@;NYO+P=e)q!bLy(;vQrx^(V8#Nko3LiasWcmsK zPL2;{VUrOf>Yf;pgmNfk`Z)Z&O^;r^L_Pz8_HX8z%z-{Ouimdbp)P5CwSRv9L4&d=N<6ivcnXEI^C!bK zcF^L#zTNfs@E*JBvbg+(LhOQ0^VQ7J+3(0ZUB|^AaNi#IfFLQgT`~Ek?NAL_nHN4S zi9k63vvdDxnt(wvQ6b0|Cq47lt(Mj?4keHG6JjBDIzuSa@nlQlY2@pvspoQ=(~%$g z)Cr)15qU7?uJMMG?d=Uq3)gV6L>DjKCUVIl?ViwnV&ak(@ylxt8Vy8l5caOjRbR}g zL^epNZ|CgX1PTeS(*&o19ZPcI(eV@+Ab_G%Yj84-*=%Y|s5@+MG#D1yz=F(>4<*#^ zIIigdtmf}MGZ1%ExpKrM{0IRc)^4O?pTo1?=ln5eAA?%{^vJ}-?Z6l>vRsaySOGvj zmh(=UI*z!X7$;~M-=2Hp6Xx`NOZ;ZV0*3j{&l7d;O`ciPQv)VT`fu>3Ww?B`F%Fdu z8}u1*(^%bzDuKkPPO|u1=d~T`8e-#V*ACt>J50wfrjt~lRGQH=JjH#t@6UO&e@jWO zd^l71sRWv+X#UAnf^z*g^c>|&K_DczPjb9df9js0OApvi zhtlcQYrHWq53k@wRR&jeo-^z!NC$!_V(osf_Nza18nNxSJbk@huhbvBr?VFoP zD}6o_CmXqavxBus)oenpck5Un>#SUScLyG@=q&OSI>vJKm~HzeO{t8Hh)`%_RP5Sj zmfa3+2`J3|_2K**zYn1OzBAtx$4M}FuF#!gGmBR@NHDZsaLuZ{*O1UhCM1wQm}zW9 zvZU_C03qJiA#U&?haRjP2!`4>MB!`|lYP6*Gsp>B=(yrC6U7Sv0 zmmkKhbaNOy#HDn}Z;nGVQ`UFBN(H`Q$cbMLSjpz2NCE^Xq{`WOpX~z*YQx>v1Q?7w z`J4>O-@CH95If6_>>%^AZuOUB=T!LF+v#%QE8KmGL#zQ|Jo25#_Q{=kC9P51h@XSD zlq`{zEqsTk;ogr%(K?}tV*ojbzFwS}DaVl;=?-$=vFdK1EA`rtB@gdCQJb}bStfZp zxMX3>&aXcV6qX@tr}=7COt_(AY^>R&E|mRIU9F1F?KEuIv^~QFvm7zv z++^c#U8w7tj2Sbgc-c{SIe^p8$G+K&;O#gj6C?$7NcLhkthP0RCYt;70qZYI+x{;Q z0h-K~+S<2^-&>IDo0|_$J$9ZsWS9A==kGks0lM8v2bS^p@l0b^W9rf)52L59;F1pS z0sRiStDO9()VA-J>k1C7XHyRF4%qSZaqZ`1IJWqB3v{G_17psq&7J$y@|rH98ieiY z6o2#X|9ZiE#&`b_=vv?7JC{YT!d`s(G{9ab_o>Gwo1aV?DEBU0c(ZD*(aAYaJSXLN z+~}{b9vqI&-QUDw;vU#uEf^-#vUHC}Y3&lvRqDx*Dj~T!@~2D&Im%wuA^cHC2ZLb+6|EVeZ8+7lM`R07&$Yiwj?mt;fSyU$gp==`h2pP(_3%PJmN}`}?hK8ez-4-keB33t+NlL<@H0Wr% z?a?ei+1-8Mr|F^bhaev>GXsEy2+;Of>Wo!n)dv&JkvuoI?%oZg3M3RT!sAab+JyO@ z9MY16TXa>QK3u5H1|%&Qv7j#0RhXAqX(Z84#nv1LqqAHF4o3^NY%|r?tX=SMl>B;zy7%`}O zp(iu1bv0BQef?ueo2?69??q)p1#_Go0T6&r?nlNx2J0l;NLUUh*A53%QB$y`RG86_ z(m8U_jCu29!GYpFzf|V?m6IRdRhO3Ma`>h*enwk--vGlo$O3vY>W3W3ajmY@6P*|O zA7W0SzI$2V&>^ZYq>fWuT_3GW7>vtBAqLtfq=jo+T_-14xRi2b?IUxEuX~>8SfZY> zsL>u;ad$P&Z&`4bkd_(eT5Lv6(JD}aMu}GbS*M&YYJj?*1bx++)Rnq}w^}ip^!2r{ zO$b{*zP|E$8->anzr13nArbk<%RXt33Pc$HnYV`SQ6QW9#4~s}6G6qQ>s{ zc|y1L?Zc|WUcunkZcO{~8*1LeUu4U5>%7Kd`NA*yoB#1^g%1vORz<4~XxeMpQ`>g8 zS6nM{TUyWCXQ0Wn_Ccxt{9UG?{N zT|511U)rX>oiXLs#Y?(s$99>nD@T;k4Xs@R+8W`4Og+Ri6R6Cdt_;-r6HCE20Jz;c z<`5^Sxv-F=QpSA^z|HJlH`YvMd{^YA(pr-0#EevojG*aEYapeAkiv>%s_C24+CX2B z`4|xgapM1em1yKHcCd<8Gkb8b-d@K|t#y3T3yXZM!m6vQ?q^=LFqkytz@^Q8Q%+O{ zA1Lmd;PtW6Lmkbb^?JF^49GofM-H!jLO_m0@N_ z8-={+@O1X!KO>8903FdeUI(5)3#QM#G zfN?i_}3VdQxO5 z!lQ`T*v9w(s(K@iVFPXn7_ah#E|Ad^*ta%dat)cSrZkIy*+cP5^-EQ$ef0$&AXbA? zVuHcFefKWXt~;e*k2Fg}pTZA0IMhS0vo?7k$WN9{KJMY}-k55Ui6M~;$oPybWe35d zCQLQzgcLx0uVB(5Qc`qj=#i1jm^7313eYh>mw8=b*kxU|2!N4Y`qqAYtR|LaCTs>J zhc^`0$8^N>qHHnb>cMD@MuH`LIQ85UfQ_Z^Uq(T-7%s1`NKM3fq`9iS8>hkdlvyf% z0HC@fG&Fz;Q|>Su%@j+5+=X*|jQUge?3hhwyr9P z-i}#LBbs?EbM>HpWz(O3;>N!pTFF>RRxwvg^^^^J?UQDxDcdF&SU9X-5E>ivzI;gL zWylq7yA)lDdx#McMD!mKeZr@>xNHT`jzYW*Q;4zB#SLopOARcUeAv>~b(I>%JoOaH zbOA?;ii&iZ(NyHXRNeIb>_Fb}{!yY(vnDH4n1roJGnO&pElOpiF8CK7NX9Y(z-x zzdj)bDImg5HHC^@cD{?bhb);?X5j>3!dgrL-OWGNc(KqKNj4~*6VmP+j?E7kk^;U^ zf7|#h`+Al;uX%FPv!ERBcLQa|l-oabwVyHI%595@dACo?!-=dM$07>%Hm935X(A?(JUfQZi;C1B{b8@zv!(eb zY={C}9d(oJ{$buuL;QPs?{qI?z})NgqhMg|sQCB^Ca&YD)dVeu>=Hvw`t+Uzk^R-xP5{#&0N?yC0pB!=`K^L&gvV)X=8t;r;vV zkV8_+h^YF&0e!kwKY-yiJ_rcDymI|+zjSOnbAD4LJ?Piz%{0z_G&NV24YCj0Qu1<6 zkA(|d1af1!8Qub5NwURc0;cnol?4OV@m$hn1jfaAb&RF0L>6EOF9T|H)VI5`0l~%b zHrf$0=4+VyoeG#>V`GngoqLYBQ4OSR3?U9#rl@70LYQk6Y!SJeBD}WnglJ&ubUE}z z#rNkQ^w{xa!35zm5(U3NYGKjXSKuhj8PRC{&8#>PgJ&Y(lHDHn;|7s&`M;4qeZ|KqeQG`{h(<6Ex* zfq{NK)=y0HEAuWlyJlo~uCei??}~n#vvFHxa~)le8$hc9OyGIJMA=sIGPc5M3U&1k z+=73(aQ3WTb#=ksDZ(DADQWju!&SCv)F=-Y$FE-tVg-(OX0@dNo1+dHqw)ejiRB$iBa*xsHyq ztZPw=&KJxy<19AyC^}#K+zTo)Ku$eElUCYh1PD0}WDzx4U!VdlwbeMC%8oIACM?)9 z5zrMIg5L86v}2u9GZD28B;xaYbh&O_%JVDBC3*UH?gZ=BaeKyQkBocwbfF`>C(%+0 zm;DiOE-g}h`~=yS+w%Pq*X{Zv*z(~Q71dcOc-kw}`mZ1gm#?P4Qg;H#1m|z=)=y2$ zG0-LX-(CfX#TM25u~Qxpc~yYviig8d6fFtP6TkmQNG+ea^}zMORrlvqHy#;ZxclGU z$p=R7+1}AI@NByI#LYil)m!WP(x~{CCWgDMTK=KxRB!r&8JDUl?!t=#| zOZv#qZ!{xWT~)-4Pda9Wkw=a+s$ajpcrc>=P4wQG8peWifz~m9H%DMj*N$Rg0M(nK z2o**VA|nx9hlv3+R<`UgnbCczH}Ikeh-ilewIX^ZT}c3qL%yUBBf1F}WNT~dC*|ea zAo^polM+hXvp$0O+n*4otEVTa23QvOl2q12cDll4MN^@nuGSs7KCP;yqL4|EBRs|C z%^%GjU+8y{?jfxzKIUai{9-6Y=}=B)uBa;_z&kRNmrY!8CBET6(qlS)0NU9pj7;q+A8B9l5I_J1q&9af%N2CyFZ`87E1e8;v zyvJ%ZLNXy3^KCp%YTJjwa+-=uian45`+7RZ&-LY9yxP`^_sNpHuju_L80)Mit#VP6h(=qey$AOOeu?<58fi4{6;1K ze1iRBBK#2MKmV_P(DUd!=0=Sq?FaT(Vo|-py^h%v@2b?p&FD>*Q>G>ebSm&O#);dn z)-PPcJu>h!=7Q!dWnNH3lH7!0Z?H+sIW;wV?Cu|BH8%&1l{4Pn-a-^0(u7eF&mAVM zKJY9?AfJZjq-SJEig*h?d*=3cYwKr93{Hj!3X4`U>*JX}rVq}FfPkaR)#TLDCl?ot zm6erU>9+yfdQli$GG#*d*IutNGc#Xjw6th##;1I8c8;HrL}7UYuKfYY-QC^X#yqbv zFJN``x^U{HWK9fSXt^CbtO1JrLN@k>d|qrmdHmp~x~;t;MO++ScriT<8{5>uTYo#S zup1R`utO#%7o{CO(OFv`3iHpCWSJr5T~IkC@-B{6Gsr|dZfspsIq;nJhxGEyC0Pho z%t;y>^W;c;R?tu+JErhw28(@4Yk9nz`&JMYEr<#k?GxSDGDV71`?M1sz4q`YN9IR| z*|M7v#*ikBnqt(i=U)jvD|Qwt;^E@{CH4xqPK^Plp>g^ije08Dw zA)B;}jG^_@P#Pjl4$*U%#ds@I_93@; zY3|sJ%li%W%6U@E_TA-8xcf!VsfwEXYayZWcc`a46#DPQlbf2F7v>r=5RsD+Jmz~E z#YW;~1}}QSbTde65UB1-|9n^<{^T{Z-DW@q~;qhwF zw^%hbGGeyeb}TNTAt3eV4h46}KGC9nW}@No8=*O^Xm6pWk6wA@$Ga^wCAA=-C$&tA zWTEf9$!(=A>Q@MzB%2pTQ`gM68oQ?xzYQuE^LSs<^OH5=HgLOxBeBRtOZhWsTJ8mt z>lyj~BxJ7Z?-Oq^xvvaBx8F9K{#-9Qp&?J2Ux!u3qkAWreULn!%I?tsojogy9CUJ6 zzihe?A2FsK8vc~zaA*JZeFV1!{Gcyey}U|cyN0plR$16Ps4+dd@s{EQ7z7?3Lrrue zBkoG?h?G@Vj?dSxV5hJMkBo82*MItt&vO*SDHSQ#nb)OarQXPJlTctsV50{p4m~uf zc&=aC$(8OXbWQIX$e0?Nd>x{tQPyEBmhaG^Cj6XTc+@Q6-@ zzw}sHMK?KXfQATlitL}lfMH92`t**0fr5*MxP8s`*JGTcv-8B{qQobM7hq5S`}dCs zZRm7gyJFlEEksb7c8t%3O z<~DM5c$vK)0#3a%(6qHze*OAY?V?NNad}X)|54wfjcgA3*o8lqDJoI8@eb_T9!#Pu z^2~f^K0V_ng(_6al^b1n)W|QCE!{#mnDZ^zx3-L9BY#Y2Iyk(zxZqousGM3PNgYt! z6rq&Csbw2e??`0HiFgnV*8|r0GP|TC1udlxGeW}GmAS`}z?7%LG7Nvi+ zxfzkNx4$ok+AhL%PG(?6y%nL$W`?-o@pr^77t^o%4uG*JgTY^(98H~5*JDIH7bM*1))->fM^|8_RC~c1th`-HOUXxNB9vn02EIMB
qvHkfPeWA*j7}FLU2mb+wWnFq&*1UUgP<{J?MM)|VUCh+9 zzzKR7p(`y*67TDa(0@F|JMm~+*w{FO#aKjIDxhH_hfb5h-mfi4e;KWB@UO5}GRuVg zN@~))5G&tnu{GU~X}nlZ_Yqv#1dFJ^UM>&rt5WOcUDY6eH^t0TX@xV)TP zU5(5)2QU6~icQ6Fd3OtgX;d49a0vK3czU0P>CU?cue%;p^}F8g6_8F%<=8+T8{C@mj;Wl3U5s9Y*{`YeV}s7u%**(Mt&`@u%TrU{X? zXgDS^+LRgl5c%V^q>lUETj!%?^LqsIC36~llK`vm?cG8$@n5%QZ(4m>;y8sWrTeFvUT--Taj%6DLe z4?69fvlf)mZjn`?tIDU3@99BVzF+yQu5`zlMj9HpaW*#c$bdyJ<5(&sJZygi`2`_g z-B23=h2T^m$p-(~02Qs@v~}nAXV|$uZ)P~XobUi0RESIK_*Yhf3mC#6+ZWt{A3u1hli!w&GGm;t_a$52%9dC zN6p98W)qY~NGYoos;=5Hko{H8}A`f#Ob&(6OR`iM*BeX~|6 zj;$h-{lrgRl8{rr!BsQ*;9hFclAc&cTxuhSF`M2(cAeqk;&AVVGx+?LK%nWT9iKzxt-K^a&iLKo{C1yS?O}D0}S#xlAp@w&n&j9 z{EUr%vCqzaGU+-Ww_a77j*~&Wue-^WR8)GlM^kPNZGAq;%A$daW9{+b>hI2u=DF2! zL$sQXTfk@v*VN)-XgM@CHkR42@8v6oFFk`a83)(wwnGC0udzc;M%czrwo`1s{^>wq zWo3o$LVR6M7Mir!)f@krnHeJ!lP7ljMFmP)S|d48f)=&5i@#`%6P=x%t37YNuDb1z zULLQ>zr)SW&Gp}m5=swaYD;7>RBG?!VrM_;dcjm_Jp3v-B_*WS0Gxq>hQ{DWnzWvc z-mtRK(zLX+J81hu3CD2=P5OXwg0_h);=w{qkjHWBT(aP1I2-qI%ej>R(%jdewxu@L$@)n2Be+y znji}YwZsTMJ|5%Z)0wZpU?dWo{6(?z4U7ocWmb?I4_2D-wdZ2?{oGD_@o#1-yg&3@ zP|wWH_Vq;&yIn4r-qicRxJ*Wv(WRIL?*C0K`#j!95)s%YYSvll563gKfOT1RS@Qyx zJ2tTc7A-$Nzt5cnJ*W{{-dxIMEIU;y94wJ@x3AW|5rD5#xy|L|?5w1w)?fU&#P#83 z=hVIRi1FzYgtm(^+bXcUlC4EWA>eokmKCk>bma|Q6Y-ITQ3A6ppb$JvMB4Q0EURAy z31V1|Oo6i<5-pXY1Z42KHiN#raJCV1d)523Dh0)SzB6e1`^xo%`xum z;es0rzmFHtxpVmLy55XpGakZ~ByYBRW6Sc=lXV2pA`{7-(N18ZVESy^I_FNeOS#|5S4F{drRa+`RpF{V;etuD#U zLb=|?(@`n2Oui(_4+sc|jfc5F2AF*^H0;xY5Jf+ zM}d-@Cp%8CO=V=_!DK3>O`fKVwYIwJtJEhvRR26Q1MG;|WjJIv_e(0a%bSm?E$GzB zjYg9>w7_?3+4th%;uB{u9y)4+g*d9pcW`iU+sz6h5c1}SSk9GiAq!n2G?h=Su8vh3 z4>w#cT9!S0`0zo?VU)wQRp%9xj*Mco{lr0eIb(VIgF6us5oEr_jSU%{gn)fs=yrfR zX!Q8XVIzcw)ntU=d*^FCD{t@ZB-7G1U*T`ZUdJA(&Wq;2(<*3c4u|5=k?h1Z?KR1L z{){Jdw~mp-ZjKFH>9X5S8apTFm%|d(GU>%T9xVX@fl`f{KuI#Uo??(l5SpgyLybMT zE0OmO>(|DBOF}TSvib{xOhIEKq4t~`NPbG0SE`M}HpM!H9yW!}YAd|Zm>Ek?KzKP@ z^*Cm+)wxwW=E40GPp=Qc<$vay=CWF~A0_m_{p?v^@KBpmkM}n%Z*ReIfvZ#}=?`LJ zh{Fj?Lb>N^UV^%w)5w=tKkaSveOW<=BaY`QN3*9pmGb6lv>bOvMRmSx-8)KPom-7N z=`|Lh&<0sje1eX9$S_lTDsT)>Ky6rSJ73vJH2Or#eJ@Y-$CHsXz6212G*TdHWnZ>X zl)vSDO5n}!oJV$=)i6CxS-a~i=HTQ+C(4Hy_D60dwBNmriyNzGbU&<}Bk}p8rtO5M zdpnr`F%%aBH)@O*N?+o|T)*mG;^cj3-%r~ASxvhatciJTN~b$_+jTEfcC579^wDJA zCvca3a*(11kaRlSo%U;rpu%GVhyi_w82k_dm}YZR6DXJ+?%EMIAN%p!PM!@74WWQ? zMyF-Is#IQ+nc$a=^V_#?XOZdnV7_|V+S;Y+Ro~CY_%LLr;CpaR+a;~+>d&2E1|RWH zw48gXG)>;bzgTN}RG(o|r+Q3!W(gTOy`gBMLClm+<^2yW>}X$_tn`yJZX2HS^s9uk ziv`kl$a1apu=JC3gHzJ8=0w~?yK8@dwqO78!)O4TzVu!_h0C_?_FL7**;bwz@8s^) z))29+LlEtXii)xt8Z>^|2ebsOuOT@)YHB;`3H_TNZ_|#K>c`znV-42Yyg&nx z#d4PZ&bz&~4I~S83&sidz&O6{8lK-K}i^|$IJ0p zMV@cx{A$ecwx#{8|Nib2;Hs#-5i|q+1wNm4f_r15_Y%o|V6Av|QoFkXUbunybhC2o zz0=UpkuRIl06S_f%c0ZM)GXtCy(hb3t*6&vuQwHlM(hfl1^V9IY?doOnaP-p*GE=Z z(36U}6jnP7>KVnVqhUJg_Qu?u?=KktOnzc=N{I2^fzFm0t~5DCCZ{y&R%d4Z=LnWT z5jeZO3MvH<{QBUJ=QODuE^X(e)N&*b-gWJPKG#7$df;QzGcy{s0v?wqCA#;aaJSt4 z2x~Xpo6JKNuq&^u#GFQVS=iHigf1JxA19ZOUsBh=;K=Nx)7x3F%N*veX~jaIH1;k`&n{H)3()^ zRK%T|W-i6&4mww{(?@J8vxvdzacT96UY)trPwI(pN9NA=%O&()@&ibYAI~(_`1&na z!hYa5xetF$l`eu`N^{~4CvVdHuqHA1PlPA2y7iu(bIfV69bj->P8AEv0^iSncharp zwiWkreP(K^TMR>>C(7q;)6ctdaD4cK8mcyJELnSzh)t8|UK5A)XaTPD-aGAym3#9R zZ$l%~miWIramDc}Lc28IJFQm?b>3Q3IuVK_YsvFtD1c5vroi=Cl9~qIcX;?>c_wcxx%6NE6fV>2MgUZ)a>u^N`rRexh&v^ONWPqhoABLQGQ9Al&epoS?hM$270P z>_JF9133iWrBf5eQ_UtvTHVLnIZ_TT*fB(Jwp4>37$iL1h5Pt^qy_ueDr(xtQ6=X^EI_4aK#9x6VG3R64!!1f}EeRl$F8 zKhQZs1=E;0UJ7EfLnZuf9>)bl`L!y_guYeL8}bZ7SsJdQL9lF??0J={(q0f6`t`fW zg6VsScoE5b1_lO4C$xvw??nJp|V zO1WgOT9DBj+7yUgAMdYL^7QR})a~2#3x1}hjl#EHy4yA(+~e{t*4eD=C(7lO{(581 zzSX8LAQ#?&T`S(2mv^Det2U_>WPNWErgVDQxu3|xZRMj=pAn?H(y0LDdX;X*l@T^m zjGO0%(6`w2tEOi7OXN*+Dzkp-3~2DMm?f5jB9+PKW_Z~fc37&@x@dp27D>tn&rz*g ztK^1+!0sin?P`C#KUQvw?loXhttdzv-Lht*=>p}hr*L2{?i_u zS=y)YSWfQsFS<7A4kUEzTM4=*`_o0&o`PS#e7XJ`BR}8nBLojjHKyZ8;SM&SP;dr` zSwE=@2@bW)Yl4@cK-odjhHZgQkk^=uR*!9cmbTxF-~zpvh;pdaTH6YT0iod4tH>pr z<_LJ*q42I}ER7FdFVVh#ZvfgLcV`LhM#~NMBdI(wlaorI0Ct0x)svi)AAJ1|Sy<3e ziA|`sU3(B0ey^|{8!8mqUU&Uxc-H2QS@$+FFij?r`6$??nq4w!kVCSUh}0r^p&TKU zgTq?pdK+5T@Z{@WQHbsLqO!7Xf@tbn*>vvo@8AE@ zSv)`0;4(^V%4_mpxjx-&1myuqZH4zm38?$#h+6lX#*#TK)oV;5ax#|I?pM~TY*u)o zQMOBU)>cb(qZaKOp>(bw7L!PBl0|}eKMNS7JM+NN|=V{!X$Ps?>ZfFE{H z^9}1ehR_`|*c((3Hq)`cK|*&F?Z9YD5r2*hGm(XY79eO}q?~P>b?Pzid5)HpH-#R9 zj?gS#e)dG+=AS|wId0#!HbKFgzc?kFB*3v!M+x2*)|QCOUF1%cAAq*mAXwxTwR3dX~BlDJha?`w#v+kU-6TTkF!K zyHY+LKi&)VMUfxdJPAiMYCDavJ()L*%DcO*h1Z^U8~E*i{Bh)@8bito3xmTLn+B@x zl;wB=K(OT4dz}x=+@|fuq`dWVG1p5!2nwA4PE|jd;Y9X_*=N&-`7%joNifb-U@o)v zgq_C2@jMbyAR%LfC*EQBOmc3&>`hFlU*I!3l2Gv5Z-|54pK{?{5oI5TOROk8xJVgNv*r1Gcv|O$06-(P1nh(_Tup%)nP2F`2EF| zj;e}^-HOwk{gQQkV+zt|RaI#X4cd1BlvPaQZfsAeoSLyLwypak(;V}zG2I(RFp@9( zx0}NIO$1K)Bl^c~4k{2w9zs0Ms~SmQp3lcF8kTUNinv?Xjd%a5R5h&+oheVD6e;yd zYz4zEiJ@4Zl*ig5V?l5=x3bEusK97nlQ%avpRCmnnw*=HR940Tc`s-LgocIDGB7x~ z)FetGUtL@%Dkunl{v3C)cR7U_B0gVhiQn4V3f}hq{rl2Sa}g@QApsu&3f~h~eq3B! z1w}=c-6CP|tQYK3gR1l3z^X5tFvc+;R|VeM0gWmR4GqxXyZo_D7}?h+0sO(h;9%CT zU+i1abD-k|Trd`DzzOUg6rX6&wZawOe3MllA8ktU5sE_XtvQ4L#R346ePkx5Ssbxs4}QnAXaG( zFZ8a3e~icDT5Yi!HlDEGc)S%zA@&>PvrA%L`O;2}yr%NUd$hretR2{(G28VvPe_<| z3+#yK;VdDl43F;5zo{Kio`_|L()5^WoL#C>JnbJzlvbR;TI9_NR~FXsx{!4lW=?{! z<4CH~?Du&q!hUh!`4pNT-KT`ygg1EzUb&AnIV25YpWh#OIFO2fq=u79${K_RsUM+O z@<7|e1@00YGjI<2p{U1OU=wM+fH3#S;&}JKs5i8JrGyB{;f*={crg*31g%4*sm#*S z=#Htai_p0E3XiVnnfvm1x7HY8jkL!7v1zrPiGhpUr%%Kct(WGKB|Rvs#=*_Z$^zjFr}sW>0)jv%uD+FMe&a|dHB0kVwrEO zHn#YU7TE9q!+zK-UbwsDqhZVMaVy&|NdK~(h;-exV5;!N-4#|Ba7|A*Tf`#jxe7X3 zfvatTAmIoU?e$Yka{0zWSyOze#{rF;NVBh;8y?mL9bKFx?vaxFL@FT%$3pWyuNIEg z{!+d9&6n=FwM2h|AX2F1Z=s5YK9DpEv#e`J%8`nj{vq zi>ZO&D3Z7n;$1z{!1#+VJFu7YJeh<1_w4Lg_@46MkhEYNEgsc$_(bOYm*&gLnkaga znt)=5w)J#Li`6K)(d}>z3A=O_%iR}~?Kj(eR*Q+A<>zYc?pSzuem?kBKmZ~crR$+s zY_5;Kn)QVEh07p&96aDS%&~z!sfvK_{{Hj7+teAChPUvY1vW6V8vnf1M6003V^8pB z;#?b-lZ%mbg^sSIyi~q|pGk)2rFD^!a;xr^Z=0PDt6u4ic@6gBD{x3ifb`wl%DxOx@<5knoa}(IeuX z=f7fesXmX*c&Hqk70_;JUAS?_PMz|rP1$nj`{iJzm~rSt+ZSGDu->IiOKb0~orx*= z0;I(~%*IAWm1gVap4aP=(*?IC1TM2Z3#`^s(rVMQHU;_4#LsSS!pn(1%a8U9!9QX5`3H@Aa)HD%cf!%mq&A^Gr^>O_O2Fm5dyZ)~SN)al$YboP+Z2YM; zC*qL;AkAyWlqA0?d?!v6na1JQ8-~x~t+hdURHr3lJi?GLlq~%c+cJ79Qm_)v4Zc%PS@XrlO5H-bQ51lU$ z%zM%kw+9%uP{1N_B;A)e=V;7DOk_FqnC~1Md!qN1mDGf}tZIyQ2nXA7_kf=Y?*PMK zqNfMZR+G6xx=u6*XPV=Sy+{n-F`0dY9cp{Jt*Xl~6Dkxo?4;RG_ z>v+*g%&K=ZEV|8Hq8`xej#+2ias^ritX5m56kP%Z!pEN5yBp)%9^#&?NJCWKE6RXHBOFn|1XZ@u;UoVt6mQ9(LRl0QZDqbIL6cHaV=ax6 zJI=mFBBaU2qtpr}gF__*bNsqOz_YkSGF%yNt{ElGA4GT~pkj=s7s-#~^)rEQ9u0Si zxY_OB3~&FjcyJC}FZOv$NJuD?q&15FifQAME^mTiRLVzhkqvB5F}A=$KhoM1cmG6! z4_`QTjJjS^{beh-{-_fb<8^dD%e#a$S2{ySbI;Md2*@8ujtE%gBC7Dk`yx zU%tqE46&zsH()yFQ@T|qEBg^zm2U-QA)`(Yq9vMg`#W>U&%gIqTroH&7=H4Gy}cj6 zt<#tSQWE$Q5b6Je!-@hTBN;~~^m*5a49V5w)nXNOY?h@zg@L^NS1q-c+w9ZT#c3mk zxwMHO_g}{ug7d=*B`yx9cPyvgq9g+FRSyT6h3Y_3tde7^`tXn!S~*rW(wj>|>L{s* ziBiHkz=dde9AZB~XfGT8J;q-b?y#d$>8VYnhoP)iOdTPWb|~H1U17CZx;aEUfX=<> zPq1f{QG`kLE#Dk;lSd|sc=jDH32&?Nedl&aRevOx^SS)Im~VSnKk8ojRT9&`R#S;;$V{iYl>5&HeflZN+5-XS#SobL0nF}D@)W(zI}aCwp~Be9 ztGU*SA`%JUDB;492w9)`{G$zu2{9(F+W7IfV=uTHC94JQ70G92yP8`J$FRLFgDB99(|n>B*50KFKD)kUB}L?vjrNOGzn zQ0jaY{JVI`ojh`5`Q^iD>PK$L+>o7k_j_tn7_63|x>1dU1Af&M2UK#K4|*_0<#61x zqHdS--YFntV(^}^r++#-XM=s~v(>3E+#EyKB&U#oQ;`xV4zZ?dLP-`rMrXm(&YwK2 zP<5jET$mCKBA8dG#{HX!)tQ}`2P;^-#H;JxOfmciI9 zzV>IPyV1oC;ueCs-wIZ3{^Vg?Ca(k#ME^yV5)FTSo{yWQU`DVh5-jwaIVdC^&bRQW z3y9h@x+0C2ucq-YI`LQGmdKp)llyq_nUZSCnFO}H4T=7!+~?wwn`!VTBugbceijk1OjOvjdjL4AsK}7w zmXMJ6k)3V8&HySGp0{uFfWYf__UF`9_&obWuj~o)DkEMp$gEP~*G`pqdWjbyapKBO z8O`jSft=^Kzh7Tvt%=6KAp7s~5_O$a$^ za4)V-6uImS?$AX3&A9Z+UxHMwI08pX9$kd?Js z*iB?A_(Mc=@wjC;yCRX<@5RND+o;E`%fs52{5UHZS(Tao>bUH8uB~K0 ze2eU&$JM}>^ylzrcI-@?x*7g+tgkY4L99}b4Z$f%QWwC=SbLF7`C}c?AhY+kp?*^{ zUt!V0$OEEBgkLN_kt=(sv^0;`1f?9$h06CN4YTARc}}0M+bBWtJ;dExh)#u^k8TER z4+W5W{se9)K)@BQ=%(b|TG~>#wSbG+gic@bpdusFa#Q3q!gO)#y=@RIkE*B*pD{^NRj= zPx9620fv{=To5xhCI_I%!Eq+xIYaRrth)z@cRL0egZG=d-z;smSr}8L|2;0OVOoSy}AUC$`LfTTyOMpHD7s2Zqe*#}e1NWx^k!#2O(2H!xG_#%t zOtClE6ht9^&ToFRN0g5-Le5^Cow&ESwi4AuWys3Oab8?pSS?g1nbD&Xz~tDT5WdR; zT*>gSqN!jBDo|MfGC8oH&NhWI>8=D*G@SpG?Y4!C$yXR6@T$AvSEhY!wz^E#?_hBQ zAgoSIO#x1vb76r;+z{)DFXXeK1W>~zI*tuBtfDKGVjYu~;uwnHgcC z@BOO%g%dVpq7y9x7<-ltaY~k0C0BkOup1`S!`1IzMeOy7NG1nKy%BvwLh&P7#Kwk< zsPDoPj|G6T+}nwJPyG;*Q!Z;<#>u*}5DX?zk|ozqEnNADZrq;zHQL#{GW|U#gxUTr z3sdet)03Qw_%qE}86Wn0))*y$NvQgtx6~di1<{|7j3+o@5)+%gp-RBWz=k1<3ewBBKYfOW(P{Sv z7)S5UMHbx$4L8CmQyD6Pmz554028~y3i|*d{gr4R#VS#xvEbTz#_^jn3FK@B;!5xM zbue@)5~SFr-;q#~L}qSKO_|Y4fDTwvr%YEgbCc5U(Di$csQzoz+Hhec!HfiZ!+uud zA)~H!Oz6Xz{+;KH`rY?S7SSw0cG>8Rgdk8HIO_$o&e#>3&M<8#L+jRO-z^nD5RzM(?J95ZY4{F<7$L{vlygDPh2l@;K3 zN)Ke%qYl{c2LDpUV;Vd?+nDgY_97y~0LkXm>a4F4>a*)RU`o{|H=day%-!?TF9;+z z-*4n7qeUS}@2P;M+jdge?(VLhUS`yY40#j2yGJ)@jK^fC2`efhG?DdDbz`oB5*oNM zcCZ#0+ELgirp(1(aa#d^b9s>k_IOTv1qK}a#(a&50>Yg_55|{J@`hYcDP zjiMu9LV8~Ui?yFXu9zdJ3KZ=t#6x-dM4Sq%sky1BY(-8|5}(aP#`NymzQ^D_Sx=-X zl|Ous_)qdbWn&Eyr@#&Uk(AWCJMsBl-qgf|2sf_i3#5p1c`B?}R*C%WZJj(^9c`{i z6m+A^egp9w#oxkWIgO2ReSL_avlB_kmXGriNwEpvZ3(w%pdFQ>XCQ}Ah&>7{tGtT~ zepC57dV299f-Jj4DQ+1vy^eXN{quE($ePD*C!m5if*D%6DFbJ%hE2SG5QnemkNhvm7qlL0((mQwidLu zQ_$}74Pc9A*4A&aA1?_i#{I^3YB=xRTXjG$ttqsRiF8+FE~~vFV{FWZJxbyt*W&$q ziSiFYzk^=bYKDN5weat$D;qlnTU zLV86()?!eFBJDc|?S!88MQzVSgl$6qoIl&3QowkJRxyr|jGV`RiW!k1y?NSml|Wsg z>Dl&Qh<#1U>^FwODH{eTbmM^S3B~uoYq4-nS@fZ>5k)-tb8)L6-OX*>7iMqlffgHB zPRCwhvQ?L_uZ1ZZwQ)`eGYWuD{rop#wX*yFZt&{=n4q6EzJS0k4;>OfMS#MB0yfcq zUt$}9_1^>-0Mh@z820)|~4sT~y4a27a|0 zFL_x>2?+j}3c&~=La>E#68**LX`@;JppJK=!moV8j0*NY>KQa%RsoX#i3fcyQJt8X z=>>lKdPuFUYq`;3MVq0i{2UMr1X2CnfE*n1dA#yD2f$M_P?p~&XmtV1W2HtNj==$L zt6{&m1dwz);B07!BC74yMH$=gzVef8)`)s|@B!Ru2T-Hg08lI~r3V3`59o?==H^AU zEkN2L^SQGZygL#5`t@rAU?LG*0Up4;6|3Cv=lhG&HaLpN)PBbbyE-law8w|ASEpM{ zJ_}z=eSCx-&xIbl;e^2cel~b*p~mz)kI5?p2uE0{FbPMbO0=G!@ zL?GM2u>yd~`H%19fDbh_@v4?<4UTfH9iUM1<>3On?WrDMwc((MHJsD{3vB?vF4a++ z``ZgRVF2`MC0$+H86lvy!MQ=8J0r}udT?O~UcZL$@bLV*xTvzsOqKA@Cn1Y88E( zr@&JWULG#poOEMoRO%ssS^`dyL*QyR$Wu^Qx=1I1&I0ZY9FnQDS$nvwU(tpy;q`7# z6hNi!F6-O306+Q%w)Q9p!4UX|S*1S0Az2L;-W#^GcGkRh9|@SkSS3|6G~>B)?Pag4 z6@DOzrF!4)LEyiDoDsneP;h5}?1+VPqW~!G{j%NW1ygVL7J%?MA5?z-2M}K)xOTfM zDP-{Ya6b=du`{3+Kd}SS?b+S=_&H$6kbv?At!S46jIuPX;PoFwh)v6>1Q1U?1ErbA zru9O#xTFLm6&q*6Or~S0JoFmXJ#DUF%ToQO2r!qI#{eqRY*|gs)JnkBst3k5#T*Gm zUEOh@7JgtRc$(SVoTA_(`+av3-%5qty zrQviHE!fPF66HljRk!r&mEVBqRb|kNT4%K&`Wh4Rr^6Q!0`4^y1Z;k%Ic+el_!bWM z0nK)n6#}%_Fi^tslihg>*|uK10?{i!H}~l`Kw0OQ6Mg>t`P-?;#slmaaHV5BJ0zAo zbGkkP;FOtwj$dN|tXv{rY;nY6n4unyRDYQQGQb9)W-Bkg&CaSq_Myb{}kbaqEyUI+Q{Ksh+r}c@*^R^ z)cW#SVPT;jpp0jK-S9eT?-U5#7k%bRsyL6=v{{ejJIbu8iiWH2@SzE~3hfEDLfvHv zuo7-w5~alLzkj*AN^^3$XDyf!%>Z2k`f|19ssvm%sm-xHFNK&Tx~U!f`4T&~het+? zK%uw{Xzh1-4gV%T-N4!(Jwii6xq+@-X7_B9<2zQMG%dR<;%i(~4X@Xyyg+9KlyZFz zT6i=M7=K}N18eZ#e!V~T886pvRt_UPCNK5;3mONTK)M0$+)}efg@c~nH#_bF*R&joi0qaYl04jq zh=}WZ?|6EREHHSYW@`E;pbst!nT27vfj*h~) z*i_dIz-VBByGbbE&fX3zf2HQl0FD?nL z&)%nOn=A~*(9~GWya#}vq3!|j$YoS6K4&o*aDE>&>$eClzS}cTf#)@vof+zvzrJwT z8GB3ca&mrNN?V(hPPJ5c&WW-0pAyi?y8y8bEC5Kf2oeNAq7-ms9P58*!f-;;kQBZr z_doe}8@&0AdXYa&Uw*IhjaK@Wu$jE^9cM`*C`9_6+dHXJA0#C#YrX z+wZNn$I`;acc_?{F!TnzI^pLZC{i(+5~=V`+|rT`)Ik9LZ_%k}4tx75OatGf;jnIr z8(Lb!ZTANPAh}uZk9l6j3`6=rg8s=wyVxl|^)G9BB!bgKf zQn;eP`ha;B;QmcO9D>kF7V1>Y@$PfS9UL5pT;Z7-8-M%(vTnr<<>yn;QnbB3cl|z) zKI%2$*Bu=l5Is-JF@*#UTv3$Mn@cVXWrs&ff*n`%elU&!Ksp!CoYD0&SN>(YZZvo- z18FW`Q+s=R;oo~cE~Gn#2Ik~h3gwMKV;vmAjk25J|KoJ&r5JP5|6&2aq5tm;*#AGt zxjL3oi1&`78ir{3jp`xSqcLyjwoJf^}aE6+{hwLg+Vw^&SV*V)ZWrlP=^13sD#j7UKE zPdX6cvmxa=R8zo<_Rpy4j)GJ`LPq#-xiJRVOSkr`jo{P97Y0T*i+eGNI-mbAk~_hZ zrgZOHbH=u7gE9Vd8G|YU5Q*V&>!{rCKZ81`9tLAPq0M{BE`V}x_(U}e`0o*5h&>>n z?bz^I+%Y_s1xN2W5avf5dRdv7QPFkxw-gz>vX5F=n(b55bzj$dR<;d^v((v911C5BAU*o7>^00DYp4 zh>q$vhUTR`(%`R?f0Zl=n>F2U8nWWL4j>K%v5L(VG4{rdM*SHH+KO^W+f%lO=o72N z1}gfmO6tj8V^1aV<%MUbzN|YwHh`w1OP_yFBGHWd>iR+iYRscB5Hj?h-YGiCD- zwKsUyF}6)scVN>God8hoxcCy(`uO?jL!Ajb+O`}ml@Og?%J~2sk#qwbsw;4E@R6X; z8A3j7WeHiWt!Ynm&ueH_2UVg*jR_iXZ2+L3SXc;|gXUFNPp-s)OgC2PTh(({5cNr1mhIty zDTvQ@BP{*Q`dv@qJRJb~K!yf4Jpj-`KrU%!X=(UxcLG3^M0vO%TgfUc9QYzBDTz$( zeN6!-48d12J8aAFlNoL*zrofAV;CSigHzxjELx5x4AEqGb^-MA-TU_&xiNBGP>zTD z`no!hTndYbAb>4xy!gv}_Lu+;Lc@Du8yh|CSpWh8`DH(F@Cch%b^6`#{|q8gz@u*S zsumD!)UwHc)wjWX&p<4#GC=Wj%E}@xFP*7n5<9>g5=ww59L3+aR8v;&21h9>F0S^* za0V^N>AAVh3-=^Ivxz*G{m+aTTwq~w@z*;|+%69gw%3jr$wpUKmj_(D&&g2dSLb^_ zkssvdS$=y<6Q1{mX&|R!?qvT~;BL=P+ncHuEzhB+mN&zX)hWpFw)%VDE!wVhElP+ zlR%VBWrq$w!?wC%KrUb{p2%f+-6|exJC2wAF{ghu7MnokCAPA( zo#tftbFujs^Jm&>Kh%mkl141d{!!mKW)Zl3{>slm4}sW$udzqA?OIh0UixWr(5Mhz zwC-zHiL>Dzf@^Ej{`A}7a2d@RCQAph4kP;RM{I0tOl<7$&tAMzH`TDazjbN>3F&J} z(59oJpg=I}3-@hq<^x%E;N6`k1VCnZqN1YojMoq_yb%HiT!|u(z{n^(P5S=*J0{7p zv$tkZd3hg56BN|ckOM@0kJ}%~0K)c~@+C3nOYrWHkdQ4OpJfBG9U_F2SoHH+zo)+2S-IoDk)(b zu@Ztx@&ve1{hnZ~lk;;iu=nE`wNWX*tGw^6Xn#P})z$sCH-!wQrqlrm4)U!`rJ_nF zsH&^0tE1~&FY`-yHA=#52NCxNIo0~_EU`o|Ok`zkUFCLe0v186U@9vs3jsV%PEP&| z)n7WOsNm8p{W8Y^C&~gyL!cM^0sA{pi&4_cO8~6qpWWTyPCsNs2sn>W3bDY~%*;RN z9>GL|KCt$atE+yHUHnK)433S(&CSc}G-Eda0BouaUD@zHh)(#7TEd_W{|5UxduXnnmqN^{&Cl+_(vxWAdy!X&x*rYyQ-aQ$m6w7HPi0!7n9n7(yP?+W3@?dLdYr3Qn;#06%2t@losp!yi1!Z;j`vCu4O0Hp zc&ADb_`lKi)=^cy@1F1mDJ8ck-6&Y3beEI}h)6dmDcy~&!VbYu3#87i-C8KXJ!(ed=C9{Z^jFwn0pB?;O?3Btc{REz!2$3DrQ7Gt}o0?Qj zO_|YXOCG8ZV4Q`@nH1d%OCK!5FMxum;7;+`r>r?YUX_t4_BnAqMw~+;5ND$+hu{l+ z@OnRfd6fA|IrDD6iJ-#_mMC=H1ATo`GBPZ2;Tkzw^(9GR7SLVqLV@OF>D1TPX94T@ zr@?Qg2I;-3N=gLqjdAT}X-7MY{m_;RoFyjGeBd<392^)RLHEK?zsbuR-@(fCB0M}5 zuAKxuM%>%m`}*BGi&WFD^|3O`)5C4&)gd`% zXRiHeg-Eo}`mh+CiItg^d_wU%vPr(xB=<$4&P4QC^^`>``QY?#tk*%hy9R{AQQKZBk5OUkJW)YPu}W%<$g6ihdCMlrKmf{z_i zd?skPxSOa2uR5aYf*8*a|CovSDzS(3$ppc|evOqi9Sl*hI^#$WCu2@|99nJ$d4*Y4k_N1<+?X-Ti*il; zTM)02VtLyH7yV)5&(hDew%WtiuG?DYYpRJ|Sq)*n$#`3495SdWcH6t34${*11%<;H zs!j2#o)>9r`}1ZgyRqP)dUQygTK#ZQQTuPsjS6enKJeJ+l12Fu7}re1yisU`|EyU1EH@$s)9zK5DoPkSB_wv)HYd7K*f4<|ofT9+~F9;b* z6Mc%aX+R_5P6FVJtc(oS>DgJTMz)}MCa+?~<-EK+GHxevLru;U1|Uwl{NHy_giQD4 zp7(3OgQ5tLyni2G_9aCC;7N>JT$t_I(8Hl2J2c@HOidf`wf2K48i3GbjtHnYqVL@C_*9!mU z1^@NMDDRKC(3h78lP_3?7?Y5bheF*5Pym^MfkDseo}1_}idx~kSB~BoYJ0qk7pITE z6>*D1lSRMg+H)}V@wl9Ub56GwEHjxFxVI^p)}!_5cE+u|9Nxe{5t6Cppa>5afduVH z?AguDjV2m;{(Te6$y$~YI+lg{bEDPVs4}UqGaI%TMrL9BvLWv2SsLMGWrng^c5Xp9 z1>~8*v-Hw2W%JF2nUwstG*L8y&!N$;t52QXnOa@NM`@MY8)r&NyTN|QC?-Y+{CNuu zLKF&lk~l#y-%wv4aCapjAV90a@w$QE znG1CNm;i(|2ya$jpr@yY0>E_P=lg|0m#~x+dT=`3F@qQaTAard$g?zsiFkvZy#>7G zNS%&pw2I>oR!L>#A`JZeqEn9!4~rxI@O^Lm?t3QW z`}fT46mS>d<52$4?6ZGou08#89~nW&+eR_4vf@H$M`7QL$Lord-3`X3;ZF1gud3Oq zonWId2`ng~Y;r?>ev>u(tv!?*`^Di-&2#*=`!~5b&LsqV(=SJM>YyallnE8DcfR9% zSL05mepA4dZs~eRQ6O6oALe0&u!&g#`Aqb@RK^qYWu2Of%`OjYGDO<|0%E)zUI1bgu(FFuN3z_o0mkBO8 z%lT)LDo^G}WvDmb!^%$88Q;BB4NQ?xBF1Cpvb4dDOo}KbbDn8-w3Z~CDQ%x zk$s-ZzQG+yM_V@U37S;(RrK9z{uUy$P0V3-ZyIXfuDac5m4;uESS6ET%_<>jejFY1 z-5WD=b3st9UEbc_Mk-Mh82=^nhner(d8wPH2dEyO&4@odjk;gID6LAUz|*qe{T_;7 zCg6R-l7!u6fV3!f-|vU1e5t2QEU~_O3T7brk;_B6_(8}>8CMBUSU;a}^ zAHOu5PyeH%15HhhAJ-lv8Hh6t)D9*Js?7^fR&VX@2Fa#N+S_wN)q&w38S>1^ssSwV z(@?&?c|#_0emFZ)Y#HaVhw?XW3^6|XGw*&d;bv@YjbEY@3G9n0p!P#wlehr^JO$>c z4h&Lv<`5bK@C;7qrAL1KsvjGphJ|wcMI+c*3!ZjTiGT^(hytguun<XcTZ0f z$eV!Z9A>DTjZ94u&s^Y6N;I7)6|-Da6EGb7<&~98H*VlTxXRSa+daNHKowv?d)o}x zV9Y~R2>O@rKgUws&mR;wGl}Z7Jr-g&8BUB0y?b-R2nUT;NZ|Q&x8PxZQfe=y<&V(T z8%3`po2tqCK9?>T;uUk7X{<^<08$#h{E=QL4Pe4KM?Ozaa3DL+wV`iECQkz<&I9pFOiZxqr7bKx zy-mpXLz^i!MsaXkt9RL19U?&Pt+{IVeI>;n(|C$Ntuag~9Z4+YoB-%z+-_mHaig+~~#Lh1iO_ zgG-U`PNyf{uA`>ZXjUJk2`dl0r&dldcWcWie}BkTfmc)0L^0V-`Y_wKMB}JY??pm* zpr+#VibW_&C6g|fnp4~WnIvoFUi5aF@A$Y$=zp4?MTthL-k3X0cay#YkxHD_0Ar4d z8d^oAr<+zuq(sHEo7uz885c(ib&jf*78q2Rf`Ws!v-c@-XZxBn)-xyv&E~+ozs5|wyjNke;^E=>gQiD8;UY}8f$0bmy6cGb4ul{L zlaq7+AHHzmBkq=t@Yl(#5o`+g@ZG>qns(+X2uP#Uflk>jT`i=&)dzU zfM_$e9&`GBkuF(WxSDHz8u_=(Ld>W1Iu!Z0i1z3IEb`C4iJ^q{s%pdJBQsWN3vr7dD+#fhH(T3@O{NC|H`~`QMj6}=9WrVdXWg(fY{}bd z2s)>@vSiEVo0awDi=?IHP2h-3lJ+tK!nUBSm_6D2UeE?puzK7-!b8D6FnI{4Wj+HasxkCVa((`z-XhHo_ zAso^`=(`&NYhpA8P})UAfq~;}26&rhb`g2C%WsYG1mhjm`Ah3M+lfqZ4kfOc*}d*q zNtiaX!)Nu7$ z6cYi_A4muu^fZfa|JX-GLbrzPN9@XMiE6tQ$5>oO{po?ucr{yd7KzoIkf3bE1qa+>PzEeQ4LWFfQVFCF?F58bBH0z_4D!F%=s`PN)D~3X+7qYj9g=$k5 zqNy?n_pN1@XUmcE4<$W56mXgsN>dws4n>uF*g6U2N(2nFdEt*LswWF?kBfOBALWY@36N>UC5c8(cF7=S=fRY?P_=y|Xa36!*C z_8_uK2qh80WF*sl!$lA{KCTBdw{dXrDgvF!U&BOC!?$GR`lVab##f7pDuAt#p#rnaZ zXL5$xP20)paJc9C;bHO`&plX^o<~L!0$xzQzOG{_ii2wF?v{hOAtEY@C}8n|*IGz% z0x>`%fk#Z-8cEF$$vqLiXU7g_Ux!yWM;8H+yK&=&zifK_N6A2vD_5F)9as^R%iJ8f zO{5!!_815HJ>)Y&w0o;l^?__rWsl`Z=jl~oW~hb7GRrkUp>;WYE_Fg%;SgFbA2YT! zyn7LJ9DcDcza2jXSVJ|l$7nTNPe8bsGLP2WmN8o|WINDHGM%51D+3EZjXrQhG6>*W zP8kaEa&nZ>SwMpPkGz1cx~aKNMP$62%N_(oO8CP^Q?q2l^Ofh*4N?Ol(rIz9D`)2q z&9aJRl_+MS12una{mTFK?%bUu?<)V)E-bHYgPdGg@k3#;^#qo_%0VE(vns&#kUsvc3ZAXFYkVlQB2fh$j;< zONhN#6%KCxYhw)=L%e5LMqvd4Vw8^~*^qWcUybqFCAJo#-FqgA7xTz?C9?UYMsot= zYS`#jn~6rFlJWD?)MJk^ z>aY_Oh<_N#5{a>VUCrAokK_TB=>F%|bw(ygYY$Mg5=DbS%$v>1=hceXU1l26>HO1~ z_|0wEuV%jpXA^{~b&$Aiv8+7{E@!iBNycw}M@5H+E6kYpR(^Y7|31opW|YN7G&VF0 zLkxCJcj69lMO#~TMMXtUphQ;hAT%|Uw^E>i<)I?nU;7mZum+?aB2s2p^`%TqnAFtN zVgPzc?+pVhz;w#rQ&!vY@&JHgEqJKbMoYkj;DR`(VVeBe*(rQB#s{XWCPzEmHV9Vf%qZ>1ZPsW;vvQl3#oJP@uiK7 z82*vN9D@DcnEO4bOF|)~%=mC?di>fF^1y6tY_^aP9oSf9Ei7)Vt*;lFwO{`EffpY* z$=|*wY~V|OsHXOOXR&*BYr63;`tKnz3Hm>U*lB2KQ`K)F9|uD^g112p1gs{qAixe9 zH8(d$bW;88+hx1zZ5()`uyP^6cUaiii~<4_|38i3TP5lduXx?S_vi_D(HVt>sV|3P zL3abae$syS_wV1Ew>RMVu&N|C0VZ$ENfGnm!wZ0Vrk68QLTYM6{{yk1s;cVGrdw)+ zWKfRycESUPr60PCZJ<*b1O+Lfa{&UMlPc1Er<31dd*&Vq`Z6ggM0x}O)@tmrpKN;3=-!sb_r=qT31r8YgDdsv(6PNu_9=rx z7ar*OyuS2xM1PZ?uIrORcC^}4ZRSjAnb(hpo1I*c|U+}}hvi2)pYr&);*T2rG@8X^v9*xMBUH{UM5ARZkn zllmFCjTJUPKiN*WgNZWVNSkOb{(o8k$D>?Mg5I6KLJwN|ZVUW+lm2TrI_Yg^v1bTq zvwHD4swE)TZ`=^rCSWT@3Iag%=3_#!e+Z=PGPD30Fb$DQ0oYwg=mWfgisP^_GIl+A z5cJLU!OQ*xQSX)R+f1xpkR)UQ0#UtD3m(UmK`Y(|A9%tqUAhz&wgkzIS4c@4=iOw? z=Q|Y?71NODG$odOnv&w;9tb|Y2O)pZRdv3<8w!LgwIM_~rp|Y~1-O5@F%-Fq>lte8 z^JU+h7L_AR`Q9rbecWi79X)FYL?v7#Wl;q>0gI5S$jt!icUlg{C+`EULxCmE z;Ty<_Ky<|v9z;8vn>A?l0f_7~NKTcJah_?q=($m`n3WM+WAILiMF(W1u-2d->WU(| zvz0@jIV>UKMQ^mSTbGL--_Y-jH`A%C^!?%)%=pARH*bcUn3$CBOg#LqGh6|>#ut&1 z8PJs~FJ`R{Yz9(r9u7e@I~VJ+_=!l*rikp zLFQper9NU~1Xb;(-8%RQyKP{h0Pi70 zWN&Zg5VVGtHgaGFNpkO6-^AijdB>KP*vOoIs zM6cW)1F9d@8>Vp55h6#o!blXD+D4+ZLqc*BAT-$ei_aCmed+O`yk^pRxcQ8<%7Xphamdw{qE=Y4<;{M3dXAGxu(hxWV3+X zPxmDo>K!mt2ZGnGVL?<@kJVTnA#G}}1*l!afpe9-6+fw2*9!o8MK|OMq0p(2D;wvM zVc6K%$o8f&Ffg!pWW?gL17g^!czl(Zm>9TQdzbNQ4^o&s_Rh{&D8QPgAy9VehuF(v zw}y!eJ5zMj0jMZfDIQCLr&I^Bd41CpoB0hxvi{RPqSGv;xYAfo`N37?UbXxcF9_M( zT#I)VDulv64pCMVSC!W=VgsR7l!wL}#pb<;WrM|4cT6ij?nMhM1+)X0N!wqu_ab(Ftih7?dj0v_hY%2$4#U>KdKef$tAdQT>2m~ulWBsOV+7vy z^YhCZTv6W3wdCDESx?c@(n2t+t8{<-Y{`ZuHFZK&RBKi5L)zR{*!j^UMwBrtu()uw zdyJIZncjM6QO-aYKZJrJT+D5Qtm?;kN7*#PWv1!98>qElpWzB!4V{U`ZkRBGZ3B3J zp860Ipsk)*MKF9yHX3Ue`AIQ>oBx0g4+XQ*v^#i)54$MB!2Gbh@Y$OiW5?wRxuN09 z$HeQ=s`&-pEdMhq1cL*=RXl`Yv+KfFx@*3^zFDAVfQqE69cr?%vzV%mfD5=&Q&axA zx@DL~f#D#}Y@Sb`E{!VJ^ss*V^IZUh6QzFrdI=JA4gpceK-Jc+y=Vsky)c2!_Mbme z&z|L$luPTJy#UojBJnF@3g9ALv;Wem*9;vV9i^6*lF2mf`K>mO3dw)D3;G5G{{^*q z9aBt4cQ-KNijZ~&o<^ntjDu`B~`naqHZlLPm9e_mIF2lnO!~?@P@ru~NQW*3p zRr!5qhCty&R0?&-?f=yDppzX{8Q!d~jj&wn~hvOkPqubJN*->5phXmjQn^b=t;J*7cor0*zZ zYNgFNjej?nUMEM{J6%pycihadr`N;RR;srw zTY~D>qDww1)>G~PV30^_!&r>2>z+U}2iB1I-66ll=JodLV1nu??wix9#=G4jfoCTN zPTf6E%*|&ZnLI2qvZQZ~4p>%#M*E@z_&;3{t<9B{OSu|j8<>4RYJTYU!^#9LI4)3D z2sucuu)Me!y0vBR4N1!G@*v(rSXQfI+41G*8^h{Z7c3J&anc5bbsl%RR7 z10B_92^$|D8Cab_P;~(%pP_~%{OaOtTpIFGmNB9Txqm-HjYiyeyt+;F7gP@fI2Xe3 zpbnM*p*5F1gK+HT&GGSZRSk`&Y#ZF5Z*GD)SuTY1@#m)=_cKCYp48r@y|NTwK9ur2 zH%9+hugreehfNx@ZfEwn17ki}5no~mh(+hnHC#hK$-Ve>m=#)g59;?W-vlucC;zRv zJhv9>g{Y>{Gk#8&^@}6FM(f4~G5&gTVG_B%>G&`)AOB9(yZ8X7>#0Vgg~?Wm3bCw} z@tBg+1}WpApZF)nnnQwQ8Zv*krvzNLpS7<5Epwb{9d>qz1uT{l{Z%aCv6JMTaq_s3 z!`Z=H@;Z`_gVfvSJJaJ6r;`!ap}h>wPhfs+C2A5@fYjf>nwb?N-B#;Y- zflw!UdU^$>twin~C88$I`G07+AS%@xI!T^yY=ICzESgwt0b3#d#p;_A%UF)Sg_1w&r6|1v<)DiLsL+M0eN`oKP5cu?UxSu z2Oq*Th;*KwJ5(G*b$Wu}Yy&BtpZ*d(l3>hzkJUV`mjX)3^CsNBDOFUV&=% zAX#_A9*;~A6u%pSwNVx|TF%bq1MzDw!4k~2R0~9l!mz5oe z>SN^s1P`f%q@l$03*KeKj@7Gso;>{gx=NQe$p@h`nn)4m{Tv5D?g1(pQlKC=gz@ZUo!XPYdUa(=)h%G0}*T z7xLF;PP2!coiR3YCMKpO2dy8-wGKSO3vRGIxt2S&xU|%EuX2(@X4j5#6QcY5Mq;dZ zsFwCT%PT7CTU&8&#a{v~i91wqIgjb7D$SH|vC2~mfAxLu_hekC@XI;*b`>|4jW4CM zK3@0o?jQT-lSa=0g7W+O>{<}tbKJ>A;!0mSx@5UP@M+x9ue?%QTMNt%0**s1`A3zy zpPgfeN{N75ks3V-XGCO(B`2pVr%KkSUBHbc@$pWaW?0eo3ljt-&!Lxqi*d%(BjhR6oS2b#lpo(u8*pvc4jB-o-}ww~;rY`h$Nety^X9{x6Un{{>NU@X_E) z;fOL@ZWhMn?9Sr9Nm^y0i{0V%MiKxaWqQ3ikB1XGS^*hAuv7r|uLE=e3;d7?T{2xD z|7Y3)XWdI`e?}f87yU3hT+?(-e}WqE=Aov{h}1j&9qHorbL_YvEmk5K-0~FuSeU7N(cE zDvPaurnlge9-FFutSUKFX*UE~De$o0%-NHVW4wd^e^JGs0B z)=Prz(h=U~{$F(ZrFDZLU4NWqNvEM(5g!#_MJwP7JtGK)85>OuaV4!nsbR;LR z`d%oCcz=X|1t&JOcFVa`&Ox8_($^~>r;unu8RjWzyeCM-u)SetA^Y$dDP~O*9&zb- zV?niKFnk59HoFII(qV>Ubn%YyM3(mmN$~uEJ}4K|wpE)T1<~bn)n+a9HJA`e-O`@o zK6CLd8`;0d-5WYP2~nzmV*w4%1k{XU1QIMlqw@ zb)AZahKAF1P0P0X{(B{y_evp?HC{+%!@%^CiuZ>}iV{d@cXyqaoQ2@ajF);+$Da-X zt`71I3n1)ax9G`Kq0iHkgS_GN;^HfSb|Y@5ASu_yG*~JD6sw<@pw-MbxTmE>G2Dtm z6u!Hw!`&wIKLJD>7#Lsxv>i2O2jwahLjcv6E#<>FOZWSGPUiACGn1Kz=L&FFK-|W3 z%;OOewSao{WB)SZ08$=K1dJlJyqp3$Lt5JvfNq|R*ZNRHzyWxwDi^gLW)Fe{Ekub0 zfW?o^T65EA-(7&(wejhn!e}a(FQd8kWLWBRA9Iyn2;k$)A|v>|8*9PV{~cEzf5S6- z{Osm}7#h=mB1ag0;p|Mmp2XO}oBJ!3Zch%^RMjUb`71gvY1?dnRR4QeJVf}U!D{=j zue`LlAvr+gjjXtL?N2?i7v#ioQ2#Snd(?DtXvkFfe~Dz*{pUzFoSo?}{pCrRusi8~ zsT5p4^dcrogv3FCNhHJfKe;=dTt`VbJR>blZj)|8(YsIllCRAKFjzuf9uLyNjgp?! zBSNPkUAurVRXx3zK|xqhq2O$6Y>bpXqXu9a0|ll-kWW~aZ99NdangO35b$egB22&m zhHOc%;5vTu`kp$5jLvQ_W zXzX~U3qF8vNY?`fPz*rJ;SvB#N)-2_Ly8|bPyyV14$FPln_63$f#l_WPXHv(A$Ybp zO`7nK9_Hgm)cv>Y*l6hNXTS~_49YMtQ#P)%X+v^DykanPP7RHX>5WzFA;w$Nq4YCA z+AuIB3cC>@U+_sG4qDv^#9#?S3wSADitq>tgF#}XSzD5lo|Y!?3qT7*JrGXH$^`T? zVjG@w6a<|`Y)lLaEEEKEA{3|s=jDH98VpXoBRCS_BBG-NMH6s(L2&<|Lt+3P2{h)j zEs?X%x|aGHq_S2Z)&juiU3l!TJD6sPK!+kaapA7^c$gibAf(z4Hh~_p>1MWxj zZ$Ye12=}yEdqMuD3PU;bX8)zWn*6@NS^Dq~1Y%b8%}5Lr zvQt?tELq_u=&e@i?#tGVYj@5}qRdcxVX$|b@+C{&sh^KmaPG^nYnON*==i)=vr`BI zjq%%?&H^Q`JM4mu!;=3FTME4~sBbT&>HO@sR&Dcn@Ggvx6rfQWGxj`1L0oL_Cz~D% zx)L~Mpr_FE+1Ymh<8|OzsJBrsUZerl!ajkPW%e=%3#&apw$`a|%+R)_22d&kMqbMO zw{PF}18Y*@3c^-6!RU&@H5+l@USelvX72p?8Ex4ZLI_Z-G{~-HWIpv;SOAdzIyqSx zB;$ZGB8X#W=llhL_k^=x(aGxv(5{pg!`Kb*D)8s-V`F+E3`v8DG6hU&J6fqAF z*DkaM51}+fqu>7v2px81N`v0Kw_E)0&x}rm`}fl=`#;BObVPYX%1U!_aUtIb8f-`o zRsq0xcGt<#(E`kr>JT?1Bh#O$k_nYMdrH_17M2jWc1alci)fg***tRwCS^ga}dMcng*omr18KHhz2zw-2|@B|z?p9h97$Gg?mehRR#sMEOF&S@L?M?;GC>epQ1oFV64YhD#z7V}?ickR z*d*FcI|~n#l7!;#A3!%AE!vXD?i>&5hz%!D_Hh~2p=^H*)z@P{AqksJVpMkaZ8uz8 z6hK+`e0{}~SV%#YYd`XY2LPFvX z!`9)O7b95&atxO>mmDmQuzZ<1EQ$h!c9&2BPQC(12$*>Ve2#f2LIR|Ek4COD!T!q( zohU4wJr+FB<_%eiMBi9XvX2HFGKbOn-kK492xGAYp?wW;iXoIQ^cyu%1(UX*p$M*T zqI&2QxArgLv_dD9(O5Tdv*Eln_i(nxf zdxMB}we0w>eSSSPwo_KXaLiTBCrHpqwa=uco*h*8v)<97MwJ*}6L&wuLzlPO$T8`oRsz>{5!3R}vHXch{91q84xh^({ zbaE2F(h&nCG}vw%Iy&$@YtHi)sf?K0#gCVm31|dJKw6<^=&BL2*gF%;^BJl@9MTK1 zF=vt*^19HRO}=Hs_J78@!)fYFU(M&ifMUp$iV`J%ky~6D6;16``1%I#)`1a+^8>3h z`byJU`jy<|gxr{~$ghMz%2vQR8@<6~UB@{@QC!)~-ik8xJ;H`k0TlyB7tFggy*2a=2c_y1xUR5KfL$O7 z8qn%SbGxNXiZ(4p5)kQC5~6x2l@1xdkf=;vEU%zfBB*y?v{nBHAG~}!avwTKV zoUQg-V+uI3CzaX6)HL?htA=^_tN*}$7)zI+YyhD^15_}a-iP*GB;Y4!2CV+K_YUE3 zH^`|&!PO2hCCXJQ=G7}qCQP(3BpT?|=sy9BM)k%O0q_i=T$j&*UDvB^H~V(@U+bhN z-|z3ZNNU$yQpp#_Ae9CQTU43JnD;~d{}I!xT^tLynzLG~(RwZ!uz|Pb+|ZuzIP3LS zPIDS+u1e1h`JD4*Did)rjMPX}zZ`ab*M5DM2MghLYqlvgL&H+0XlO7ZFp|p6nf8?ki_r+U$O=ED1Iv!F zvGKU$JZz+e;88_rCGhaTilJ5Q&b8Qq0Jli!3gje^0^s_&xhRE*h-f^50dQJG91rI} z(ujJ#?&mV!o@s_?j5+|&rq|Y9#>B+no@dE`B|sGf86aYZs+NF?=O05jY6|FJD8v0T zGg(1x@H{XONeDsN@Yq1)KAc@f097R{byE;W(F(8bXErVhu`@#0O)K=0_;A`05V1d# zMXABaTd1-A8pO#Uiax}JI1N)q!x~RsaDatEy;0xQMTBVMBO+!sXyCxQ5NP+O-kT?5 zG;#uzeNP^bx?=J%NT>?o@H!jFBmpS{vW+2U9UgUqq%abcOEY$UC)7X?p|4yC0^6p2 z%T)_;4OnoVmsk(az`cSz0dh5d87{1=i2P+KSN$XxbeHlm&!#euO`MJjD4ye6&Wt%f zfX^=OT-n)1Gls9^-htI#3(**Z=5p3OYX;CoKg^C&y%+dHCqqsP@$Xe?E69>cgNpF| zyV9jO4G=~btihptKvO;L@SD~b+PikLE-bv?b zJOY0t7wxVzJV=H8WE>QVu0laZQoT4vuS-^iL%;Ghm`+SGdhaF*I)xxrn2Zb@nKv*# zZj(_jD|r9fWwkFtbhqK}LAg;bKhXuZscvYf!qQJKoC!%eJaFD%p9Rm5woDV9^rJ^{ zCGWz*pk4)dN-cYENc#Z0krVlKPoIp7)=Pj2EN^dHWK`sp+vi-m zw#?ze4hcUE_U6u}`r8@yF2&Md5lGWGv&!vbV{a}L<6-)j?73fq%I~Em^M&ntk)h3z zelS;ciF@*cc4ra42;|Fo6FV6TfUTC|?=Is(XHQN}E+8ma-`;)^N(68VN@;1mE3t}} zbbAg=>!`s8<0$!SE5&vom=^dxUjxAN*0!ZrY}*-FC2D&EpVM)n)v7ZOsGdcy+QN?Voqq~LEiv)TV*CjcKS?^5#5x%BK zcz$BX4CIQ)*1p)%F+B_9Xrk%qqk;B?xDbdpGXgA`wia*t;S9u|KvW|;sC%{n2iG#+ z*%B$n%W|na31fJ)tU57bvOW4;oZ96Q;YvJ}Kv>Yy>?}d3aQ7!MJjYveTL<>v+>@A8 zhE;FHLl23AX5{4DN_G>PkYtHVt*kr_IC)ZaAF41JoCDC!nWHeAHm89 zh+^_WeMtBpFxzfziC}KE{7c=Onecz|lSpw(ae-{O?%*Y;=4#ZOx@isiUQjUs@vhN^&9V{vLpwZk13L1z?AO*Zv(~)ISb>(>*`CdYB!Z4S)%NN7@k{p6^0i z-rdsKeOGvX&Fq$I9sR$A%=fR~{e~cZ!#381*a^{3nbV7Vb$;&n`L{#xVq<6_0_(%( za|r27Q6Q$!(VKz-sStb-03a2;dIO3sBRKGE$RwH02oSt-_wBS23RKU?NEmX?Ex4c> z5z7N-f!Eae)ukWh$9EA75xSXiouB=Ur%xi6k1y~))avIe*QdRwC3Kx&L)rDIj)x)-@Heqfh<%rsw&HIu5+hxy>RXNq^pYle#GA zldAn$AsHH@<&GzU5{c2Z;2w;^cN8EPMWKvt7Xu0$NL@xf%~;w9ZAe69X)qtA#jflp zvLR^{2B@B=*f+*0e&2Z}6R#dzE5=SSnZN$z$Rpmd*dh{XX>gbW``OBRtPuz zZoG)Vl{n?8)v1*CN*>_tUS<|4KPxpodVJ}%;)m&Fn`o{J-VD|KcC;mK4J3Z2-WgY3 z33otZHWR`6ECz_=bsR33b?QLfVj@$(O0(|iss;LQ0$7Vi%Is2_-)I4>+6u&Pq1|sW z{AF_28bo(5x!g2#dc?DFLzu>INIF46#LM@&KjzMGpHBF(*a*}(%gLFh0nY-|8Y z6i1*#V9J3eqyhN0aWGqRdUG>c%;#7lRTZ&w0!Sh$DM=yZe8a{@C^_GCH|bI^W|{3o z100>rc;#CHHP}Ak%sLtb0Re3@0CK=CI)Ijh1Pwh9wu(x}1M2@M`+b%OhI2+h|G?$N zZ#UW07RwCTvJuc`*%qxrHii8<9M}vQOxKV1*CSwbJME#?XvaY3`*F|;arRfyWkUl9 z%Lph}@(gNT0Ib;v^%p=z6oQV|0Aqou`WIki0TClwG2_qQGPg~Khw-a)b$)jn>)PzE z$}sX|{CUM+ypH`aVAt%L@cdHyZjtaZ``)7seJam}nydGOS4yj7KD>JBUOlCuqJ87t zfnqgd>c^0_C*}AAoSb)ma;^&c-O=W5L=6oby*@cQ=UqLnwa#_RHP1cp8NLHT#*SvP#BerBOiJEI2fGSCOsb|HTvN{*!9X$0PDgdlcyKsOz5PwwbspT z{S1a=Fw@}?5Xb;vHz?w^F0tw~ks!eYVYJynod44zN*Gp%*SNa6 zngI_JLJvTGdI_iy1SDRe0TN11Ru%_9FbD^UfOYD|l^3q9&7~q`R=MYHPEL)`+WN+J zubz?Jgag@XMqTIZ-rr-mM%UiF_ew|t=e0WjbgaQfOvl{2xAs*1Eg}RZis74f>P+9$ zFyy%J8}aDIBtL$^!Ewd-&sOMEn);M$2GOElPQ&~0O9M+E97?jtQa4+gJ>gI}>HV3*s05?!TLJ8Q8Qn!G!4QKb}h7dUsU+`Y_;sc^koHeahT6XtBMp zNZvEtO&g8vK664HKjOnjZ|->8o^g{%2TQ8WKUrQZKD6vFKQ+4|wz2_OMqWxOQKIoO z;;Q?1^T-BGnm6u;(fp#GNKCS4DZ{jW#Jx?QD!H_<7Sue}&8P`U3F5CCjJ{3zb&X5e zhLfof5u#9dGGSw0lsA7*;9wlGR1x5IUu7_nM^y?6|LV+dzcaNIf7yaMp?6^XIZn;R zGx|SG)j|C?zF0~XY1h3UcYHmt#C2R4^_}s^3Cw5MAe(Onx!@DtN!Z%~PDIQwVB`iO zA5kGgJ|S3zz#EAPxfkHMd(Hj=P()-3b3xPq>Yr8)w0n)9Mu(Hb8&ai1IiZk&4FSXl zNE9J>T!IYpJ5+C3NaH0eNL;~9=luE=*QZ6pMh^ZBUUsY1Xo)wK- zegKLOv^qebArtNn89q|R!g}+PM({Emyhn@p(LqO<28t8dZ5p8%MH-T2;S6X(T49+o zF4TfGDFQUa6oAjgedYk)9S|XKKsS-I5bb~!Zxo&A3uu7wp8La02nq?2Vu_mum!b?@ zE9h4CHzp#09xw(74TS>887ftY^xltvoWOa;!3O!Q5E41M(ZL5SB;w>5%x8f_)6VqpL%(EwIdNf`m(Qvo76kuVT}fX90l#65_)7y|_w zZUE4q!(&C>TtkDDUXABf_)55qVA#UjVrSgEI1FoF0{RsYW)C3>*H~B(VfNPcwj_9< zC!Rf{wnuG`!23q*;P8?VlPiQmAkrv_@kKbD455MmFhc~AA|5DByqzydJa!_u&3vd@;Q3 zKvq=HWTwJkL$vJB`y*=))2k>axp{5Ski*HBAQk|F6gE7anB?Rr&;}}wol2zs{^C$* z*y9qZL6v9A*;hWok@Za(%5Q4oGl^L1DAl-LB^epA2ni0>Y4t@rgmKN0SZ zD=mEgxz^=%*TS2K+bmqa?bZZX2{nh7Z+bTy|0vgncoA4nERT^M+33m1 zm7_bLSQtFJWk_S}v$r+?K%6~N7=kq(yyp%M3&WE92m`qX@GG_l zh|k;-I&&E_Ki&2Ba9bd~l5Yg4>k1kzNlAIoRWbBULT0y}HKhk^!(sB{QP4N{E~fag zKd^II8{zr@AJM);rc+{dwFcPpK8Ney3^EP!GhsGYI?RIQx4E@dmv#}HrP;IN+8&59 z8&=v|ckaA?;}`QQ|E-4v!R8ok9=l0=x*ogqh>@QjTTcAvsxPlKe)IY`TA&0`w;=qI@@3!3YVHC48_A`6x?%9@h=8K-4iB7||8%ayqR;~X` z_=w!JP-|+<=KJwPb2Bzs1om?Vd0?@qSC_{x-#%sYob0WJg3yeKot+4F135jt zM0MO?ytssPpwN``?SfB(nSlXC z&SCJng^*s11~vlJ)Z!v8kZec|)emY^B{qWr=8g@FB#?~ouk zmLTAewkr&-aiEj{CqUY5$n%75EB4Ks5QGSgEzZ{|nHY)!EtJOb`r;z%3IaGN zlHMMo)PX&{pOgk7dsWbF0|8|@SqiowkYs=mFT`baNL%#k?JJky?BE$Nf3|`T0kPdw z3T+EH0Yd@94k&q%KW)r?_U6dK%LKw_KL}j~_tAb899!gc`YlrTJC{|w3-61B9~bwI zy^6Mx9X`%ObidPm)&Lka5B1owSW=gFSl$Pe% z43u;{oF7U39%mvPTNtKODY+}=#YXV=v=(K(|D@s3`pdzhWQp&|-)$BzLzoRj@Q*~{ zFc|oI?JgO+!~%-aX9qY&iO#b!*3ZhBfz2k8uCAp#>;!E%lYJMo5eCVNN629SJa z@C|6}M>&o0RNm?aEg=kYDxfAqfnA1>0-3L+zC9v6^~GN&k7;{f2wgbcC=JE*FD;~G zBg0U36FyTPpoChw82=Lt?_NTKye=)iiAvIz?!m@K*cD148T}#k20vGB)#N;<`eYt& za{isLDI`#PFXpS>Kxp*r2&3DO(*j}=L}p)*Waf5WS0`~tx0C=<86QlbNCuP4wcM(` z@Zx9YXx;rk(=g9fR8-(E|8#{Q5~yz0ZS8der@IG7^K=ai*e7J5+Whm!5eqA9{VZzb zR}m|8&N(gdZ{E08`c?MnltPN?M4ohy%HzjR&NiyRO9qI2FQ}>>B=Ajx`Q`1XWn5fb z#*wb@9^6bx6~=`oRJrvqJ5c$;J3c@t0g)nnDb#Hz;$kN0qB z+6NfC+iK!k2AGWg9$@!vPMF&<+7z6{-EuTzP}aXK*V5?~eCC>=?D;|1p@aapD}1$& z@~8ZvP^NyJ)oo`Z6`nG@5#LjmpsK+iyh6-BN@lo|GKMX9Odlw+oC~>dE{Of2k3RA$ z^)lz*y#oOX6`J_}CPC4yZAhIGu=6bP6o0J0wf(Mr5>nXg~R zW@DRi_yv65>FMd3t1OZhguqxJv|YBX{`?sStS2acg*X-@uq7*xEW2QJWd)hv64e4% zuY|QylX%@N6`KGLN8Rt=-}R?(E0yoUABFwj{cLZz5Rz>Wehe_uzCSE+3ZB<9A%ZEz z?_3ZnG>ouSTT9D&*dQ>%YWU(_y@G7bAXk-~XCCm!EO>PEdBBfpnJDHn`t^7RCSo5S z*w0@jPzZheEbCo%2IU?2nI%AF6@~}f z@kvHyB^8LY`W%58Lf{^78nV>ff&=z$J<$B34hx7ButktZh$xg%CZsPI@YJ-G6ch?Q z-GuMl`MDxsZf2(SOw)Y+mr3CiY?6J|xk;#`M7p2m<-gZ8&di%kN8Fciy^lK|R8t)Z zgd9BkyV5$&dNO;~sQFOa+`r4Bh5m03?xU1)a!#fYECy)gRq_Qfog(~Oy}V}gAK{j1 zH;OVp_ug(PPSvUsCtV=JAPbmUUwE!!@E)Z}&Pr3GhWWsS`DxIu^m~oyn%@hcFC@pT z9P=C9v3F@1cIwK293rllX z|G?^=yrLpP>>gT~Q05}pI? zcI@ldSVg~H0>5JdSvzXS`-t2R(wZQ!ogB2yQHT*2h<2@SW*3qE?_K9p_&XpBo&~fX zK>{Eo8z0(iFfo$BmBTHUTCJW|K(^@sz= zFd{&LD6u5LzuW}T>^DU%&yTwOT0q4(4cTGfw+GeG6fl;3->ipnB)z?>i#K6=F92NB zQi$PAEW&{Sve67;MiMZ?fz}4$u0aLzPQ>He zx9fkz-|p?{L2+ubMD$*5hjR+3$;2uH*#HwSD;X>D7kIG47ys!@wRv5^#!J_SxA4 z1K?oW3DM|;#JzufovbM@7KWq-}zm8CMr{dh3tZARJk^4CY1{8avF9{uw5rCITx zU(0$pT<)y@(8ATRSLp55`dh%Gl*;A99H*?Vh@E?fj}_;9dZ$KgzAZWe~ulHM|?Y9ha|niHnwp7P>sJB~aRsi{2A>7=?}_^TdQll4$>bhGcH13m5B3-yyYXL`ZyAuD(QGlp z=$J$@-=l<663IQ59nG3RRnHViklgh9>I~oj-t9o3aT2c?{$I2Oo3QR#Do{Y?$iXQ< q;bH;yV4y8$9HFi#G#Hg+|0}? literal 0 HcmV?d00001 diff --git a/docs/course/04_IntroToTidyverse/images/03_ColumnClass.png b/docs/course/04_IntroToTidyverse/images/03_ColumnClass.png new file mode 100644 index 0000000000000000000000000000000000000000..f2fff2a4f7df2f6a696a89f7255f3b7f60a61d97 GIT binary patch literal 219665 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π~rF0m?8f% z%Pie{?Cjaym#Y>){n~IYUB>j|G1*IYTVCBYaL3g6y?Zqn?Oy?TXfK3-d+_8*Y1~

`~3ywzbY= z#+PgKk)f@)a|6#=vpUj6>!M%zezB2wW}O+KL*Bq1==vKqoVU&S^<208U5b}e##@mXs(hK6=VJ_#Q7lhIXj8U&kLq3YXg zSG2P6GCLf$L^^rAJ+@J!YVO%tlaCMwY<1G%&}Q-wegdH{Y8-bc5nV_7pD|m6zB_}^ zjk05rvS){J{HVZHt7L|keJrwaQ`$InOnQsClpQ;-3i;)&((e#__f*OqwY3_Ue0_xP6J6~k#?G{r16gC z0;}`lGT${iF*$6)RKI$RZ;gMxK@lQv;v%oC_|v!>rvc4BpfM)jNm5TmKFMkMW;e4o zOAM4*K6`;-{jg_Y7wu!9Kc8xGI+=WhSz6VF_S5mg)bzeaMsj8W%VF}dJ({@TozR8o=EmJ$gy{>Tv?WOntfk$jdsmix zBiEC@UAJz-)iI8>`+4WjW9|l4iPo}=@9MzviVK%7uRZ8luXNu8XXiaRM=e>k*>Lr$ zsr$=<{fCed%78QJZSzvQ(uX747!s>7g&8kd5n{SH2kL@tyY4N^|OS|4GwM6$6WB68-9KNyqz z>e+~8w%ayO?h!A~X8I@jUIepm>uob|&Yk{X*NGzs58bsd@ZB5BAPwwJ?!L`zP2x-H zx6x{ud}fV}&U4V>qb4c)_uqc-+GJE@^2qM3`u%!n7VTkPo2udIm ze+UC*y{O5~hq$kD%lpl}Crgz@ZUQ~t$K(ZrqznBNsf!Z+D9nm`;VIhw3$SCve5|84 zuLR>XI>-uU-nncPx$BrzgpY-?;VC~>);s{UvBXyXZ?8&u6g|LtccD07<$VJv;uq_E5>lKEK_y$j{=~H(hM~N zwo}>kqZN2{g<-?hlBy`4U=hn=)SU(xSk!b8-2*a=UhL+@7%g@a+CiY;7`3rzo9WgB z(&Rdlf@(grtr0O8lI79K8rFao31Z2VGg1y-ezjG6UVU>_GJNRXm1wxo>}Z%zn=>a2 zeT~h_@mKQlR`Yj>*_Owj!>}A8NTwc(KN+KGV}B=7uhZ$iOaKCBG3zNmIsGO{Bv+Eo zOi`B$DJ{o_qiJcEMAHN#1$#d}fQ*+`N-&HS_Vv)#lL|fZ}6v4-P(5U{6DV zSc0!0JNSU2ZuBQR>-!pHa%x2^#wT6+^=*mR1S$iKIqLtS)zs`CTUMJoUPJ0DUzNiH z7lHUFIEB;SKsO8hgar^`mV|U0oK|r-ulpb)c?!Oynbxm^Es6I^s9t zko2c6dDd593JoWqUtC-l#5)C_;lP7>BtfSAc|!=39fNWl&X4dy;!V<=SkGd%gY zZHZHn_-Zk5fjrYL4}h=roRN3^dN!1&_=^Zwt{<>q!bYrDVO=vfm~#n_D=++5`rKRrJ1@``T6 zwUAUNUs{%+h_MlAggiwod>WQZf1^dG?{n>uKnfm$OsICs23JDq(;U+?8&G)F8*_)uZ! ztmel4M|ceob4hHTu*OU_5^Yqe!kebXbeKgaewf{Xv@aPYB|F}Y4bl)a3B%#YkeYK2 zr&V5OZri4W*E#h}$`veU=(_#v|5haglA3p02u(v3`(6;uk(4R3tJN{Qx5Wak;5=VyzKc=X2dsUaO?W+e)mP>h0yFD zh=Msp`Y7tO2kbzoXZN~sQgRq;QZAt2LDV4WR6N#!)K@pkmBS-H&tJ=pS$!*siv;JG z@@9()0VTJ4qmFx8qej4!S+T=;xl+{5lN>ae1mh<(-jm{UF=@_)31818Ca%k2kxW5t z&66jx&?fKf(jtRNoUb0UXYbucS1zdBbZh0rp{U+ES zuylx9h{}LeDVehv2ME6L+MzX-vzoVp^K8wA4QjFqlx;lxjn=Y(OM$sWL6%BTa&mIk zU4x?}v>-%+72c%2eqgsVlHew`Lab-vH^w;GdqcObUC#rXR{ZftC=S-irxvPlkO^&- z`CIL2pM|>>-xD%eHiK?M%YO3gX|X>KA3nVQz=87S)AtLihuj>bT%o6OSDsGL4LL6U z^26>QpKOjQMp4c$;mvgKUXcILvPSR)m{lx!t4V-*xWI3X?>yv!l&A`X4emi+-R{3D zQo-6VnLq>KRam7h&Opj|@YUBbL?m-*aA4#6t;;3~hytU7N1t@pIaD1YWlxe6puEJ` z%^M;)btgi;);6Jw#E>Z;oR&0mc>85Ra<-TwV2+W&Dv0+i@`?WRr*lRW*l1CHEU_{UA#_G-t1 z+?S57F>vS;aYV@&j&! z-_Cwn8@cN1u|Be~d%yrQOdGtQvdMsmB+bI7AZ-CRCMAjO1eR@59#c9!CV_X4@v;wRc`~ z1C5y?C#@ST1&L=u8-ATAjRm2M=s8ON$nJtER@x#eq*gUM5@y{%pF>bZTRgE*?d_8i zo0DBednopLInS9KC7ovZ=U)qM`Hk~^LN1Bt`__I--tN5se9y}lJ@7qNNYZ@j@fTT6 zE;bQ__CZY7UtgfaM`@cW!~v((10Dp0LQeBHDsMQv-`Y)K^ahHTMGydAV09KIiU5KO zXp+ufy&4*Pxa<9}A{AI29)QMe`yaZsAmZ^QhI1?@>{M&RxFjA-lqKRV60>C7;x*OX zbv$Z9CP|ts*w3?w-=66uDV<76X5x{(1^lVrgr;zSMg6tV3ok7W@2yRik16XbOh7h< zG83a2pMXBoJQJ7japfGwM}!#94d+lq#{(>Ij<5YWNHABF60@3lySccmgsIM2nVIzK z6bI+br0O#G8?5kVer}EA;Np3;q#eVxrqya#%cOc+l2SVQQUscqe!K_GFzaHU!#|SV zMV*J>;Q^07K-kR|pG$z71^pA_GElelT%iAr%vIsK185-&`%G|7#nNieSIQ3?*+Ij| zspu0y&0rBmN6QoA4)jG6D1rpW_$XUFSv$tn%nI0SfFU=u(zr##dW3V|`D0K=(_6Rb zefT{AFV9Cs+=G~o540{$4aWn^rih4Sw{dzcM6V>9OZ^5RKS!4&eO_>yljV{dx7!&F z%-CMGv7wFEM)PP>Fhro#oLOeayF9yM?`5LcI((R{Z|CfsKHJrG^pZDw$8bvV@F$=1 z-nL7B4u?tT>W`pOj2NTB0 zH7)33nPnv#fy)wyHiV-U5!u<=Z%Z(itiu;hZ!5^v4>80n&n3^&N_wIB{^Rzs zjq2Npn?e176yJK!e6|ivy2Za>SgW4UXw3qZJ(NAk_oMcMzeItBsPA;J-v-zuTm^H? zuJL?UT6~{bCLBhbzy|F+5@TZnIR;Uofwtra-zhCsCDxO{)fLkVA8q!U`rZKxD!f>; zA?=-pxoBD#ncZ@>c8!QBP4j9^?{jnZCd1jKy@*L^B0eAp2ZSTYoTs_FTMhgGX4vOj zaFh07f&uXUzgc4fXDe3%!wb?N39jT7%F5C*u1-ei#`>7S6PR&SxvQyHA&;pWYN+>N zwmP8-;y0Z4N;zY-W3bpq3{Y`jZOH z&}vI4AtTo5Pfz!!{(;3qGjcpI*QV{;tri*X&plKuv1t4YOm7l03GR;va_hSg+E*D2 z8HGeuxY~RrI0J>~#y%avRNgZ~DHJjz5H#03BcxCXfPwxTnXUw)LO_elR)qG4r=-Uz zx2&kBfT!|EAHCE2%4e=4CWm8Fz|_~lXG1KYCY2h3;K{PAW$chwC;cb;k}cSZS_2E zBShhFpL4Ud=N6<979JjY?C_BY0`M@Nt|q8Ei?pxBg>9re0-^9xn+oZ`x4?FP8$YB@ zu~}rRW4ac>R({}gj5rlaQpLKjh z+A|z$`s`aWa8tQ6h=;<2YH3*G>O^!P<{MP_VNJi4d8HIowU~V)a_7#g{k0!6bzBg4 z8MbLRI!pQ7)H|)n{wOup;Xn?W)O6~KufAwL+lf`0`b1MF%1XemzMmIN_{GF%pk4Z* zD_e~5d$T$-fOgc-SX*h-T*IWEUj!lJCmW6Nby$5e)R=>DK5ewWH-{U%zy0-gbmOHs zM4-ql`vtxHxKuzwtXyw~c*D@}KO}R81S}O?sN9mncw|nV{mp=<8I`pFB(+=*E4oiNd zZ=j8ibE-#EXtkH@5sIeh@)}5m=YE*)*&h>YlCPU|!y}OHpCjvpMURv+3#bl>v7$3I z`fTnN2&W-cmAQctE{bRBSr3htd^}W7`NhSn_wAcuXn1tJ)X=(hG~2W}_9XW$P)&c5 zPk2a7?(|lyI4$!-sIR8JWPWI<5(9qS-7BSknH3I9{cY(VE%Y{zpy3_P@9}=w*2r{#4Gc{~_TaGrJ*|J=?O+mA z10?PJmLbN-wEH$VK`Z?nh#CZvZj+zR=3 zH81?<+C|0`SWapr;&X~m)-EFY`7BlBKRD!Awbka;*C)^D;OYG(BQA_Jfx^LZ5E_K3 z1%%Z^*@Q$k%rpOEHfJIi;JfgcIaEhGHL;L!?(w_kS02CC+8!=NcJ@mZ=Y6SoU0lFf zbpEXCnEI|=ONPPOZ?i*Vy#+qVi*m=r=3CnE%gm_cA&1O{4?j`!$@0bN>Z+HE4=kKa zoan4Pdmaju6gLls9r1n@v1CKVETOo&Jdk-~6Yh zQAf#QjP=^f1`|9RyKQH3Kf@L8O{@5pfyLOiX`%tMM1L_n+@`CyQ9ODuBfz8@yG@!lI3C-t09d5IcbUQ?6%G}O=+9fo9v$O$NKKWsxUoJzr= zu<)EM5?2iuEy`|}<457EzGocn-mMPlAmlSBFkzftU|kQfWx4*>4d zq(fqzSDAfkO#_Aah2SQ|uE1e`X;r;O5}&1gpRM6c`$&>h1iT`M3S@%x`}H>d&U@84 znAnh5fAfgCgjzA1oxc0n#WS~%ULR3m?ED?C+NK25zV_CpA%y3&T8iEUck9>`K=A{u zKC94~Og!n+^~|-aS1%^o$4h+Vj;a0)_nPu(R6uM#w3weE?KPJd zmP&Blzu502OH75gVzx|D4{N>7R&Vc^y{pZ2Rdth1p4AT^2HFJ#kVwyZQG;H*x!wU( zL}q;YS;@Mfyb12bW~qpnA27;Y110RNX#pL<`#Qej9 zke&&R6_P!K{bU$jCfEG7W0z+u`w(;UFD-!0?$q;L#&UUO39m%sxL#@~0t)0?@J@UC z%zono=ChO*h6k#%47+GYKFw)KaE|0O!5ghcZ%{#{ktmuCGq+4Fzf@fgIw*`8c!Nax z0b2L{b##K7v0oo!WA~!bc!HsvHA%q95hHg+CK~8G3(vlL1pKBb8GgCpK7Bft@FrkY zjaqdN2niW|^!{!7W}#j9WSKleFSFXrwLP~l;MIE*UUjCG&_!RhrfQp5sLcM-$l=Pl5-$o_kVQ1ywZ&oU z0WZZ$49(tn(bCzUEiNTA>Is^HRj_e$*WZQ4A#zGv*73H$)@qfs69>fSOzj^BCinYXPHS#Rrt-KitG zfsRme8s;OoMd7_%>hRs8``o*C?;+hydw0 z-fOkF89=_-+0TCtG*{IHzQ1_>{7MWHJ96;7?V)sUVh^Rc>Zv!)UOn*XMQn64P0bN0 zU?RejkC-#(V1&c%LwQ?F_;_-SvDXOa^Uld%s>QjX`F`G) zB_j7@udpx)U~Jkr6T_JFWzC|H8FZW(l`j*Dhj-AB45%LN z-d><}{Cd$uF|k`sUNX|!S{4Pq-9W5BUB(BPF^>`HV^9&HvD5t1kM#)+xgO{4vGV*S z`zbHn`LeP4920Kud$9xF3TlcJ>SSC?4`=^<;}YF96#3t*?#_zh-?!VC{i5lIm^%&9 zejb}lH9@rjJstfrVBA1n0Hb)uSIq>gx&LX9?ngk!62-z(`Zkw5!V(;=2oP&vXOe{$Np0fg=}HNeL|88U?D zThb^4w%=x%OX#7}0bE)#2vbc0eqgkFm|>XQ-IvrcKr{&!DI_bqZ9KruCryg9)y zWZW-R4&ry_zzVIZuV4Bmr^p`ZJI8w}aQ-28wNDI#8px52Dymz_(SPCh{< zkSfk$HH?Tf8N#jK?1rM7`z|1YNS8=xCry9=P*Sv9NF`mp*|Vx_^idl~y<32}vLk_Ho7qAa1PtD=&5`}V23HJ-b7ynC2vQ2H?O zr@@4WW9_-oeulBXKM4{qUsPDgfd)=Op{c8oP>m0n6H-2%GOAIId~;UMp=vfW9#a4e zENEC02t^-_oZzsBUD>Kd$YI`tqeqWcAT&d1#F*DR?r2{s=y}-7Uc|U+6X}EGSu#U$ z{J}7|f#-Z+%1^K+HVh@9P#4Efoyxp)sUFPl5Vme6gbL*XNHUE-3KxDObom^U(JBVT z^Ycz-w=yKYUh~m)L6p$w}Lc;KpHjqeI z>YIe8X!MQmL7u2Y^`S_33E_7E%A5l%=4H=@>3*((>4P?KHAK4uU#Fy(+*W^d3TD2H zF=KJ|ULun~(BA{llCmcWnkccae82pXlI(5WCPc|36gpE;R`@x_w%CquC4dfT%BH*n zkdrs7O>BQAKnS@|s8Z{wwu(9Al>u4^Uj-g70>WNHh7_TH65+ByblP#+rzM3zQq8H) zD(DoKvOL#kmlHn`#vAwcYC1f1iO8T872$ibb(bz(K440H$>aC{E0Lt_lAt$_$dykA zuSI>YO|HsLI&_Tx$)ZlW`*qLOtwEH!?=<36yhg^#9MXalr^7GV?2@1u z_*eW(0dVR3uOKACHiui;**s&kVuo^&fdqVNdY@lTZSR?I?;H{u$uE|1=dQv2vcdcQ zPRhNB9cg%9A!|wg;vg3;m|a*?UEP3j1UKC@rtl9>VmHb%5I0qmowl_8`wdo87G6P;e21_N)DPeT6t&P5KtM8~ltGSppFx00GhNcS{A5 zv*jPFS}SsX*~(%)i9(WOb(#To^{$6N4nMnwIjKd`g6+9gzoQVOGnNfsCnn#MM+(6e zAZ;I@okm?XbA<0zb5 zZ`5NdsT)-kPpUshhl`tAAbgoP!!PIMT|&B{P^6rBr!B;K_)Mu%CsqaDi>40YSx1Ji;x8=bBkFWAbDc5f- z=}dgoc`QUZO%S+L17>sUcvGe*MOBz>OQdzsuSK)EXsALlX$1}`UKX)EjYGhPZ&UnM zGe`po^#g7U5pov5dEZg;cV%7?F$Nd@PC_bvRq5^|Uy(MxR-E-T4}uKN_Lfn}J9zXED-+TPgMYR6~#J!wRQ|8dwzBmyQhaF3S^b@CjO zN5!yw=F_tk`Z{@Ay3BsHHzj2wwWxyGSWFGLBSCpFr_?RW_AG3!Tld_TSB+TrLZm@G z(~oWg@MfXw2%of3ka;?R0=M3hS`BbuqL$m`OwWdnE2jQMNpfj_P?CkdQ89?d`pvnM zA>sU)lVqhW#HY)Ff^l-N(qFj3N{7xX_Mfz^Z+lzyFiyP0OKCra6L?d{c9NTu$p*;~ zgp3UJ-Mq_eX0;;!UTfbVVX$&9u{sazU-sXjC%35tl03`^Dh72b*}<|Yqr4>H1Om0O z=?UYe3Nc&pPM>FJ&q=@8b7B2SDs!HK+qvQS(uwG^ta{&$-M7a*e)K4qFdSY^DM|<_ zjSeEuR&4cjFgQ^4LAI~|zY&V|xj~;yYq{_F1qIPMTTDB6ywiR0Z$i;={P^@z(;0oV z$nBSXuyj~xsWJ--xAdMiJ%k(J=5zvu7iUqm|4+V9W{?T;+e{`p4tE@)cu~1==!J_H zgT5W7J=GMF#zB9db3Q|`RA#pgHSF7A3F~@E7Fts5Io97X!Nke&W73coVZrR>0?re8q=JKti;|aB&~0u@J#VzpWi>Xkp%otJ#2pQ zotmmn3KuJdHxjrC$E;*~?Ksls^!|(ers^ni3^QbRAuB0V=dOcaP_4Vl{i|}+k?HvKS*!U<%CvV-C8uvN^1z*2Qn#%H@p!0yuuXw z*5NfRkTn}R6W3pI6(r#HhMbqrV^BcIrvU(wU!GAro_2(4%g3F$7h=7=F5 zYs@hoCe-fxZz;tGEI2k5S{I^&8QJ48Al83l1>gJrofSOxA@B$QzQnT}Tr=)5dW_YG zXoxzXy0bB86-zk_#`qHWK{@i#v4N_R)p@j8yM{;x_y5TWx_9ud&iebrm=n|axlV1@NNl+!v&LEVRe+f%0oNZ((=~}2&zQqD(fe0()b$LyF}~0N%S6U; zCw@gBNyCS5$8ts@C)n0hT`$>-e6RkfBsqTJ^~rOPc?t($ z;*)?D5JC0R6y+E1^Od5`^sKX0rBVF8eXQnPUr>^erCR30&z|?9+>FT}1{4^{vk*)4 z^}8B6+E~yPxMYQD;ogmZZddG#E+0MOrf(-;KW!%+xWDwZjpC0_mM#C8CM^H+&x2i) zwt+)svgwJuk>Q+$vJ{O);NQ3BG;Psh*bG8|hJRr>lVa zZxZ>Jd37!c2B0(|a+kb5ei%)I=0{0PW=9B$L^b8D?d^c(6{+!rs!3!$*C77=#|r zYnMpCfiWt??n}ra?Yu;4^6L>w9-UINw)9a~6a%~|Ok0sOO0f=7t@RpA?@R!rLrlf7A-z!%Wy9oco~SY4tEHzymXY; zz{)*gWDo7RKG!|5eDVBwCLd}ld|s3k^5fe5n|GS`CCz8HdBhKACx2yi=KuC=&QtF9 z-Q+3GP}TpidDg6Sa&+A0uHhvaYakEl)vgcsWYuo;d+>pM>2(NkOer3$n;L`?n6*$V zp1xo3og4FMbztGPoT>$AeiJhvA4lf9^wpK07XzwGub<}uIjjqLfNBj##$pOP2L2%R z_K)6o%-{ZV*a~BqYs>#dRbjt}szQ*kCr(cxR!wlIe|t9b#*BF`LF$qfMbM~gMt~AR z$$i%{Zi)5;1sR}dEL0GP`R^ni?cB9XYXS9Gmj8e;x*+T0L^OP$R297gDER{2yTpzW z`w$c_+vWI90;AL zH9?|8l|wSn^!|VT**&#to!ac22~NAwJ82Lgj}uJv-L#YvKdQCd*Kye)69L|Mbrpy9 z8_G6R%!(yX@utO~)a~#8Mi1AMQLH>%0C0*?D-M9#hkn2vc7ZK>O>b&p+>yy$1o$${ zvxJLvf1~XW*pzPVnQ`!Ly5r2!C$cwF&{TdDN$AqDqd=22IynkcY^(yZB8bHK-w0KR zfGCv{8+um{#xmA!$Wo@PhP=Sa5H?gcvr{$w+mxm%d*d+Rq?7eJ46D+Kp`Ayx9#m%k z`_3WDv?(xRUV`}XIG%3YK(EPtXyxuGU?gl()Vt9AdtZ9*n^1EZlhFU-suHeey#ok- zajCVl&_sN%!cZ&v9(qI^77{5-iB^O8`{v|i!1b-%vjGN6Z4$d1G;SQ|G(MikN*GbR z4@yzRTTboS0T?ex3IzFLbeCv;M0`ziI%|FUDDWDjc8sCQToDqrT1#>|TGs2E7@huu zYl-?}r$n_8&`9EW#)S)Y2u;Y~*-E@hKQHNBbiFROj?56mlzhPJBc4OH1GTOd6((V} zVoL#9@mva`GXB8CmE>NX{`}`D&7sQ&iSrR*XX@zsinAXcG!o!eJe8aZP)FD1{c-mf zkKE>MxSvsj$IA9ASbY$~^@z;dVD4H&MyKz-dU~JBiFagRDI5x-t$jW28Zd9KKT%x{ z=RV;`ih`uNbuxm;k`vIK@K z+sx<%zuMm!eZ*UZ>KM;^Cz936NDoOgrkoe=&gk5?Z%dT<7W|7!t$=sN;fU49v=!gz zUn_NGVb;~F*7}9+{v+D}_lr642%@GwAf%ETi%EmGu%N}V9-tR2o?B|3LblmjfVz*& z!bN*aIbYV=>U9p%fW8#g$Efpn|0Jo+@c($xN&|&RWynlO#>^4!=Vk4^&-wlCbN;yR^*HCT zx3yE>KA-n+U9agHK3oUrYyMBKufpdrJz;N zp?q+9er?eB*xOkNOYT(Il(kDC;Zm1dq5`JX>!;;h2A zvVS*Y5l*%F*_VqmoT=8Esm+Ry%sgKc%()nOvsJGnohS8r<1&8N%XO+e$8qR_WX^2k ze)JBoS>6`Y$@}2kUh96`=CD2}fDS)7J}u43wCc1+iR$ev>(Tr)oUV~b7GUVIlC-MK zdiD&*A-@@^T~n^k{5~s3?m!*dWgL#64u6v<5^9ki^`Mv03_3>f!~jTMN5?D!y6`XV zE!zFNE1u{^fbGco!-8R`Q)80vVe>Rk9Kaw^u(TD-K=vR-MY=mlp6xsL`6G&0g%w25 z6C(OV22N0LG4HB}n1ri)?k&P$9g6s5TK&1Tga3=a#TT*P;?Uqp?2}7YiUXE#rYh(qPn%qJP2A0R@ zbv;3hot|UuWgyGG9)R@7!MwgjkbZA~ZWwG~++~@nhmQFlfU{LVulsk76g1aLi|U@$ zZFH4tNuB*(iw3^j;S_oE=Imn!O{zh)%A^~#HLtvHv?#zi#CxQy!`S`pF z9of%AQOlC3wBv4j8Lun8%9DM<3KK>`36Uol+_V=hJVo{j_mjMRM}x;-D@XoY3!omd z!?^_`2{YsTVmZ3A5#RQ7@q^KGZYcnn(|Y zQO=}(1BF@4Ef)|RVKPebfm|{j+_ifJ=)-Fn7%|OO ztz>2hr(!mz&+K;(ECD}M;964*YL>s=wRoZ3t@5npF%ufB8a{M$lW?_@hBtJa%06#a zH=6A~V)l^nRSsi}QuYt>{ru`#+OxE%`m_7ah%-p3n!Db%y>HzHx)trW#S~aZUcU1B z-KM_B`z_YrroDb{`P}DUEdpb&xV?+LGd*+q!Jmf~oSS}7smUpZvGS-S(DpG+aa8W2 zo^|JxXXkhv>U3I^04%nTs7zyg>U=1l;{4MYaDsW=<=K%hf8LyS%91=<3jZVX-?%v$ zw&W&x-hPt`d})@w=4lyz03}dtzJN)iB_)o{2GkLz(kUo|)Hl*jiXIe6J;OgOwD@ zPxz0Z*cf^^W>g|^54(9AH%|DES1`#cT@s&q>(!XlGWE8-Q9M9<;bv6fT!n9JuC09) zq>!2>V&cUvhKAQ)edcUDw)pFe2MeDz?l$SX9b2QSY$XRvoRcA01Lp%>!o<1DY-Xrz z)Gspa-OR64+1O$^-y8uTX)N)#TQRIPoE2KVEX>3dwZRg&D)Ez3EK#ovi2<$MNjYb- zHEr+SRe*6ehqiTaB-I?rJG&EvPGso(_$y59wi?_%(QZ!Co0>uQFUPy2)>K4}R&Lm^ z*(-}I0#IejyOdIV61+{plu~DHXVxio_u-Z&Dq%?2gA+89B5vq6|A5|oZbB?&)sP3r zXWTajnH+a&*5t6@iX4w6=NFxe&HVNGFio_rnaM+>rb)|NjHdp4PT&%20KY3Eaat&v_y83~ag&WZz0|tvu z3LHQ*Da|&2gIU1q-5?7^8fhmjKOU%^E!v*`{oCSrp}_0fYn~(IGo@StZA-)_dWNH8 zNXCx4^{S)xBmzD?qTP*$?steQdD+!sMuM4t`4$v?*8v|;reskmPrDJ{fLqE~BR$JC zGu_Qdkk+)cEwFCnPsglPog{OX*E?eM&KKji^&mCz74}sz9GHai8e?G1~7fagAhYvjSp6;<)o%@^Vlk~FB z)@Zmt!d=tYPg8UE;X!edvdT^ix!bR7=xFPd#pmag`%ipj=Wk9Zf}%>DPt;C>_Z7d# z=b{i?mMPV@G$izd=nz0G2cfFw5kv%JT7x3y0HV^Ec=4B*X}t-I-)4|{Rmjfy_8KWA zk!?1%wX|g<8VHlwwPxWZ`iUU*oUY>Hqax7ZtbwGP%e~uZM`Fs4gXyIN3)axm^b4)^lHNepqXxQ(aU9bsK)C9cWeE#cc-P}5&i|4k*6iDbp3$3Fs8{R&H$!91Y z44z4|VRr+v%gS2vZRvCbA(S(cYI1uo|Aw0G8I*DrNd3@XJ$>$575)M6yMJGr~pdrhdsW?-4W>dfNLiGmKj*R&GXY>73IFqf!q|K9v^h0)oxxo( zOcJD~3#;=qt{(3??ar}|fS&4JEwvhQsMAgp0Mp{6<>_TV&qR;a@LTj}l~jdJ&{iM^ zHxG(GM3d;#Osi$m#_;_I;4iS5l0?ICxv@IbUYa^Dnn&gRMb}dOO@O$~L6w zbtcTP`@-^)91gmSy>rwz-Ayh7ZYoijA#R$=2yTlXua9&4-SRCZ0I|#Y30cMqPX~TX z__nua-ZVXzo>|Nf@u87G@0eDYHLEX1|0qbK5fsI$><$2;m6WmiIZZzv;J^n4(^;>NBR|K+_DEf>--yjs`OH+29 zND4c%rGZMop_Km4MIWOa_0PFqqXk1c$?7sOA`psFV*Ofe6~{S{Y{!(()(O0J z^2GcuCyOqXt?c|f;P&lzF&&gwx!&?S`!EHZGwG&{!z9bHo2sFFP9CtccW7c8%d&im z-fL)IWfC5+`94Hk3h>z@cg~3_(a-jnF2RvaJ6K;oG_fC1RYrGq97_0cu(%nqi;X${ z26Oh8`K=EN>u7Gi9VBaR@gm0w6YKzX_#Y+C+91jn;d7_w3trz2$2t>Yb)VC|iS}BV zI1VGtv4oTZwS9eW9%#jK63WJEb$$GYa6d;YeMgKOSx?34HOw9osCD@~ z?m_#C*Zt4{7^M4gc=mh~D@=?f4#@_cYktPBq4cEuqEyq!X>50HNx)<}BSNL-5dK-$ z$^$5Zb6{-EU-uY#hkoZ+YUIQ?p zjGlBrE5K?-OejEL2tO*i(`C+u!Zbn=&`Og^rV6Om{PVN}CH$vk(tEys%pMlu2^r@a zmgaL_sc5RVG4s6Cqu`=mx;C zy7wD}+iKDzG97at{{FSVtaW4bv0zKv5WkPhD4qErqkx9%HU<$rZNKH`?H8Yoa`dUF z6jc=_;K<#(M?>Bs8GcUHv^nGWkI%1$&6{V23aY+JwX;lFzjbS@Syxsn_#D-(74RiH zPHq7DvZoalPWv^E^j{QFq8duR>^c@7Qqh^Q9Y>6&+d(9Y))2=b1iqK zrUH8U=iL1*y#1y}wrtr_hz_DoSad>waW?2svp(b~|5LiHBrp#mEv3&ZWQMwYT*~i+C*A(l|%;JFT zYCdBH$)t>aCZIAQ`#cEV=lHy#|MNA?Kg#`6Z_-8@LmD!AaR$ znUo<5t5Z+Eu6v`-yl#bq4 z3kn_sAG8R&&6@kj-!C~e+iT2JiWamH#(^KEaJT!GrL<%#Z?p4~1%S*t>yhp*hGEb{ zc%E+)!!!DTyWu^5`8cC%sk~p}YvC7d<{hf}RP(Ck>^b3%3FVtVE_t@)B^ECl;`bN; z*ZX?BZ!2o2gD#i(77XVIiM|DO1_GZOt$#Ye`tYr}qzaN5IJs#PZ@r#nM@C-aI=^~c zAxB*|U(?9=KpLf)S5&8PCnqQ3yL~24E64^zK)AIDGlQI{b*=VLhl>#R`QDxmcR$t( zd~@Q2d52+2z=E~Vcp7(iP@r+TN3`5bvCd$H5X9n;%%fq&Co(`=HXP=cPU3J84xMidTVUW`Pc|DmA(y+^ zt~KxWP(O1q7$$m#;^vj*$^lmO>BCYdIscpteea%lGdLi)u?-&@xIT@krnaN^azb_K z(x_9XM8kdo9T){Z&8#)DE2sAIFd+iZCxK5=eC`y9)+-zTpUOG z^hiBa>Z0Gb^ve<}_ZYuHoKL%Ujl|PI(XwpX>hw5nDSr5)Cr=#wCmp`^N&>mrQ3zjS zd@l3iB0+msuO1xs`MB=pk{PeY`_O7pnGa1ZyTR$_x2p*sVv4snp+*k=yOQ55EA#7# z0ZdYrfCx&U*YZu7J+80-I81?;8>vs!iVW${nCB1Rom*R3Qro%A2UUB(9 zieG)^6PU1>KOQi593N9*fA`~>^2<(I4c9yg*D?x-qfsnt{kJtX@j5wwo%s&Q-?m^} zy0dQL{hKF?=#pI)CmidH0W;#x+LWX>%ZPpGoUb@`*x;8oqxya8FlPLYG(;2Yilaih zZqm|But*uN`^hJ}^y$NC?-*7$pVc4V0!dY}W|NObe)GMIhIQ02{{#a{sr1cE>sy}~T z-t0i|j(`4^XI|m%x_5%dySv8*M*RKj-S1y=#*STFn!h{zcW#eyHM=NZ%vy(iyYope zCxvGUt}|^~ z@v2U-3s-TC{f-;E?52x;m*q1+o2@B*S`nPhWr|jm%hLJHui-T{H8KZVdDTD~7EZ~7 za}vJ>>*(sPqyvg2jtluOg1)Wk%VYY|y>{%;L(&)Ff*Lez7||xIdAoL_QO>cA)5tBB zmY9Pha;EWXv)Jfp3CI-TB5JsZT7ESmWlzt4)0*G`8MQ*IIAV(3X;?IB0x!BwbPM)& z*Ej}YdtRXO<%lmKBSf4btQ>`$$=7hsKbDA>GCyP&V%WN7@iFw9c4M2tm3vO~ASYlp z=JP{@Jh4H3e;n{za(i+=HVvDQxoj6LnrLa{5r9E@<%c%?`p|;OSp%?I@QLV8Z{R*~ z$JabN^9Vi-iD`^pw*OMnn0=Z|AoJ++ei6+S6wV)*oEn`+=ydQ|{@V=;i09gw&)ldYztU|3c80>s3f`cNN~gV-0%< zPw|l22|GgF55J(f=AP>g!g+(zhWw4uGzk?4D$1+usEuR_uEESH)OqP|Pku2j9jiqB z`WOKHd4U2t`;eap9g-^uAC<8}d@lLDLY_XYNGp&}eBlCP?k^HiLk)hXj00#O%mLho!M2pY2$u13S$fC;6p^%59EMp`ftv2|qPr?zsxA zOLD{_787*>slp!U=9Qa z-wQf+nL)l{vSRVDY$UL*FdT3)e1E0=4h1+8X}L``4u(@)9+x!o^ywENivpjl@07bb zFMHOyk9-L}J8x)rqM?p1to8(O8hO4RmU>A)I8Ck%z;J}ciuiavmqQbg9;8H3 zNL>jxNVwKhej8F(*5P}zQT=^>@z-tuOXkGg@p|z7U*r7Md$y7Hz}Q77&8AqIppodF zInNb>!v@{If4}2$IO3g_i(TfdxqBew z&!iWi?~r+Kuzq4kqA}@UVXoICTbsp`<2n3Cha_cSC$Yii`h)H!6EazCl-}z#ntB^S%W0D0jhu&?h7B+(`98s zt3=zoyU*z6)*bQD8gkG^)b0!q*Ci{-;oIGZzoxeDxQV@Jwcnw^Djj9QNC(ZIe?u88^Ib(xzP8=Uc4>$pLOpZzL6=61{%Xpwr78O3EcxmSvL zWPM;UVhaA!3zY79zMM(TA1wVk(Z+4em~b8CRpKLQKus56VWk$txp_1bv?&;=sh@sz zKQaX`0Pd`z<(mv+<+*6dk_D%ymQmxudG+*#`r+hGE zhuepjh3=g1F^Y!L7|Gvbyjz~-;7n`qH|Gs0j3}QH`g3Dvni26k1cA3HuhKbOL{8&S zh!8cJqoFawhH}Om@@6{*)N(Rj05{Eh!Lt%Uw9O>F#F4+GjD%Xs>pw!3`E1SPJ8^xP zTwVB+4lRhlOh12>4$fsU-yQZ{r0Ml15%w6m1!=6fZ2HoBb{KHCBqwJzjg@R26Mri7 zX17eUIDYQn(NTcA@qnA*WL)zicJand{lBln{u!&`zR=2Ib8os(+U9CDrZKUi)I)iV zx@Tn3v`+n=?(%Cetdg7^)UqQydmWyXS;U&_i%^c1i*29?R1@1h(aCW3{P~QvjDUR- z87g1X$$h3R2FEog4>Hb==r3|F2Th(Fr+4^}IGf+S>mJ;c>s~|xY>KOTshvOr2sf8$ zSUSp;^UUWq#qNs%GCV%u-Gg299kw_8`jypQs>B;(ye6l7`dfw-cs=3f%}}WF^3ZRmw(&g z{8C$`Wd4BK_p7IzVOgiLOgNId7s^DHDBC=a@?5jI+;-G7&kH`Ix?hW`x!{}y90Hw)2&DKGnPw_e?fEQ7rSOuVru$4zs)^DbA`vW zBSKE`5g8h>a7`{l_DL*M4sWiqByrQi;j>A-;Y3tv)gy@Y_u-1^ zHGuSiv>~~p1|~a2FlZKWK_J?$R&>lLtAKuY{A%H0Ol5OV&ll1Yq+PHG1Ppx`9*%YK zn0t!^bjhm0M8w~B*Vyu}=jCTujxS0N^7NGqB$cG1W~ zJv7gQ>&;K>w2d_)9tcoM*ZtX#U%k5QINCCg$QE0`f!|-3{~ku9Ea7nndd1R3d_=Nt z`=p}vs^A;hge5b121s{!p&8Z=x3p;z5e~-pf}@S{C>)3Ywvb{>{s4e`{2xF+HSG6U zYCV4ZhYvVO6dMdYwTWV%o{`n4^22r^;5HW7BzKcJ&c$(R%vu8n0Hd*frzpwx9{@Gy= zdNFvAD370=ei4gSLR)$2J7JvX$i7`0QSK!u`cJm$5!ogTsRFg6>Ia%)JIp zQ|20{)mpg7_s2GmU`8h}wZ_4@{0mw^qvu=U2L=J8qXP8c*Ot8T=xBrRqf|-zif7?S z1kpc*jgGh`yPbW)L7@fs-xx22#+NVZO~w;JW5lhaer_raFN!K=1=w)J)yY*%zIv|j zqH}H2-TWWVb~I?gvw(!i7b^>7G=e~(_{gKa6Oh4BHu@h_;1s{l5sg2RdCY#LNu#Rw zaB*R;l3axTzia1iQ(oEd-&z3av_CDfl+Ihpc+-GieKLQ2??PniipfF#pL%T14>GHZ z1`77|kadUY><@r@34MRC?1w)@X_p3}y~PAYafdeR>hY?fgI_9Cxd>Q`LWEOGSm2f= z6DLfd1%b6PmBA2*f~8hMIBj>Rmr8$Dhr}z3CPI)S#qz7NC`hn~%Jtw5hae52m_EGx zXBS~ACJlLB{}&3Y8i1JwjT$}0NH`VXQ5ITg=Q;D{Rd63l{43DNBe1Vd+TivHdYw8& zl4-=P)$!%|^XDNZH&DuL2UsAFv4|A_ryCGq(y>>st>iRIL0x^M%*BT$De&Xf-Zc+@ z|D5z^0Q|g{7Z`kTqWlw~Gtjukt3#~3GJWBJ{nF(P z@rfm8^Vj!Vna5C@OEzrDZW$XSWT!Z^;4ZM4cPlvDsO--T_n4cwPyZjUO`%{4sa8a~ zqpPc{p1p9>Ur&?Vi_AirKAm=-Bm7f~a(v$ll|#F`8*46ZxaNXq>9@?^KQcXsX*6xB zTX6it#ZItQ-@YxBj*A^cJ%~4UXnUf@F#n$D1DrEvjBfq>e^HY?z*SaE-hQD)lr87? z@%N`<{xmP2Ugl6ofR7kKH+1OPvuwfv+tAPBQ_FfFGvR}e0&3$|bzYQ`l2cTq8fKj% z(G5_40ELovMhyWUSy!`uZ%pn&PzpgTFyNE4;S>5r1Va$B-*udwl z~Hm0`l)!B2n-;*3qopHXw+q*l9N%r zgg%VmAffKkA1hf(e0PzkG4)~xfoYN4JnL07RWd;DS(XMiCyyT=oLWXNBz8ZP?0ZkO zj0ikEc+en`p2}qcR4E*A#H2}~nTaJY#Tib~k0Ws(RPNjT`ruiPNY#8Fp0`Bdxh1|y zYqNDev4QpBI;d%Gqi^HrN1>WAs)w~CN8$9!p=}YsI=Wk8(LCUOdYz}QUX4K3F%HQn zoNnXu!xQ7?c@%QIBD8+eeR)lY-hJ1v@T@{f(p@)u73=FdaHRi@+f!xE2xfD+W3Xc( zz8$Tyzef+Oo>Z~9=Hag)3!2?iU~)(v6D#O?y!fGDogx9Ad$hio zW(=ess+_6b*fHCt1eEe3Y%km{a3*6cUz!4NSqjs4~ouC&$V^}A+Wt{bf z4I5YzdvDn#JHZ@xG5H>PD`xRcI@H;7=A`thKS-@ESDVbf<~WsE$GU@quhYTLEjC2Y z!_^`KMtEHu3W*c|5iO6*G0uM*qw0aHL1DE|W0kh=2(aEj+i8kl7w{w)2$;%dntje2 zS}CfIYQa%CtVC+0nbFJoX-=OqQ_4;17#SKP2X$iN_}miBu&tEM;}-6c`_XD*VVeKl zUSbL*q06&ct}N^fZ|{nA_iL+l!+j^yMJ7Iyui>^(E*PSoPPNID`%yjV*< zzIICd-nSf7=n?ffcMerl1beJrZQ2bO0`Lolj{y{zKk{s!!AC72obrm2X8ROaIQ(0-@0bgZ>o^8Pu6@P zk`C}A=A5~j?F@B{Le7Vr5M;UisMRS>hQOt#mQSYgr9gIWP0HK9xJbQDM#!V$9Fk=| zG_NiZS7{UPw3WJ=mR!>u*1F1n(a`a2PZbu?@im6qyZq$Y9X^1-N^BR(Kv4eX>gxGk zn=JKbyrntMMs?Hpt=iU-21U5c}WtxYgfw zBz*OZKXPO1!R^h0>_c}CWo1>3R zB!tgF>;}{;sX!FET@%_p-V~>ZO1h0Sbn3D0E8t1@l=PaW2Xj_T??+@ED zXL0_R3=t5U(zd$y%=>4CQi+4|vLr;|D2n&U$jIEqyQ89pdV21y91dx?b;xLIzZ6sJ zwk}FN7XetkVq8=|nIk|eL;jS+4uS4^cXOL5kSM*SC@92SO`+|X)hCPY1AwlA(=DH& z(lER?s5BmC?opL)5ul*0@xl)*tFg}vvI>{0bK-KJ4zF@XMJ+gLU(PjdpFPlCXt`P# zFVrdZ>q)UGRzgS?NRNdOlewK+I?7~i+x_j41w$QjqKpLX^Su$jerVR494V*Bam%K3 z&r7a_b+~?h>EgM?e%y!$CZ3gR%EYhKfYXve$WPCGebC&}=wA$3qfXMvEq-^-$7H+v z+4)8sqv`{+l*ZH3D+0m7n%ma*;57@E%X2AIJzZIrs)0V`IlZAsRCkRUMuF{mcK*RW zZli_|CtfCq7}4VPQ}Y&fw+?-vKX>%*f7UMe;u;-gnF16sedO-@K=hXi3q3JWKdry%=#j7wv%*y#<~- zgb;=v8TWdK{iHu5jA$D5N5_WZ`abBEF1ck9-!jWLm#AhLyN(z>T;OT_vA>I`Z)gje z4?y)2OhW}9ojejV#xS!>S2arI5dyvzrkJ9w7i@CxA+4T%xuEQB`+I-ev`5icN!rfE&)s(a$&rII*iwEf~;CLfNNZw{z%Mgs``xumkg;noeU z)KC}xVcEKzFbD97ffN?YCfijX-{a`f*9^OaME!0H2tdzqV2*kAa1I|9Hs|btBJGlW zd!R4&J4nyiZc)r>9c9VCBQN6Y*|T|1)L8Za7is=?j0=Ws?^k1gUggoTO3gJ z`*f;R;FjL*8d5wMwW=BcnVa&)=|Js*V%Y4DdX4avriN*J{}+qdSxHN4hu<~#dO7ok zJI{9h-HkHPFJsba;b+i0m<(2mehmp*T$mYIcksiqJ7_~@mi?Yd5{3AHLgpb zmaWqBVIwS6nD5s&&95xQ#mjDEXdAy&Q$A)(pT>SqSdij7Rsfu@k z?=Jsql@1Qi;C=g^b_jUs_HTyLqT#PpmEQl*ig_EN2AH~>jQnpDW$NRp{~M8VzFWg~T-?M8P>pQHI_#wAC9Qv;o!nvj8vpD;DQlN*a) zHCDQ!1)_OqPV(u0zP&@cDXnI3;sBnRzk52L8%?!c|G#6qK6&;mkCy97WV;QNdHugV zQp}n)d?xBbz^<*A#91QuExQ}JmQLFn)AKg;mE;_1Hy=`bs5{8KyUMOgnHW6D)%6lz z48{*+Vaj<}P=9A*8#L15&1X$Az`SXjHeIJTs^5Y8g=p&_cF`V})Y)_AdLcxy_;|&% z*=g>gg8STlq2 zz5?b*mkDarqBl?pGasSr#);-oCy?lpW=M69|2{qO6b9u;tjF)swL71F=(;rduxeSw7C#zgP?yw^KBk*wFoLmHBL5_RE3_e6m+_E z+eq0WT0m08IOKbsE;qguvT@^cY9pD%%+J?tAHJT=>l5o0TgUHkkf240wOc8IqWq@;NXC!KWs+`tTI zSh?)y_oi*z7M*=}e)^n_=+btBR+b%%()-=hjU(MRnE?Lx-yUq7Tw;UjMEJyRg9yyM!>D&-QV zw3i-1qKoURwz-7&okX`42FO)(m%SsU=L(iOS&A^fu?8jfJNwLD1&SidUT*e2Om$-~ z_0~v@Dxartgpf~Cc8j=J#pqB`hjHPuoS_57TLBwsrXiEj(9P7N_=iIo%6g_`JriFf z8x?$!_`bJ71!7*cJ8$KFcBGx%6h=AYh3P@u8Jp5IW1$J>zW&2fPdR^S3%WG=^b5kjf8FbndKv`7Bwc08A0bp z`v~XAb$bDoSUs@V*pAKkI-=8xEXL{e>g6Id7q9xt@gZq$2T3E<1<-0pYxn$)%dcGF z+!9M{Za_uyca7-I8p7^fpk1nqKLx4`8D2x4ON+YM_5()P+S+xGV!%RI#Pv2e=9%xx zduQ2|1EvMlPuFF;p){Ek*B&k3CA(vba2N!^1lW|zFNEZ1!)|u=A1bi@NoI0Q2C;qe zf{VQ&=P(`hLY;)GIJCuTop;R|Tum2$fc-)yJOl~fYS+8}Oh;;W9RdK?Jsj`g&|XMI zIeI$IafS=gy2p9Xk$&=ofi0#zSE zNXizyncxZ+*de*sXsj0E^k0MjV}e@UK=VHIFz?Z?G(yL+SJcxTvFVM1XX1gAX!aj! zbPH{YP@{WV-@TF}1f{N-nN#f&W>Dzr=nTYQ)-yb%)oF9%^PObm8sQd~x{g&tES0z5 z2{seGuig~`MN4s6Js1A%4~CnqQ&?NFp?e3)q=`j z*)2^je#)!v1+~eyYfPu+2^+!tODgZP`#W(CxmZcAf*;`)=*HuVa(xFQCD$c5zhnSP zWl7)RGke9n!4haC*;sO52xe%xC@rsMt;??^lxXC6=5WL@TA_K#|42~g&x5={mMvWl z^sC^~3`1UjYX=iSr$6@Z(z&xP#sh9s*ET~YjAc_JancxsS#x*;6<-r z$B$_ymFa*1lWPB-Ig=4An{!u`-??K`z6?bM28qpfUm5L^^~9a^DU#9Do!v+QI^HKc z_f)Zr8uaK>o52Z+FoTyI=D!R+1_Anrgy`1WgRg_YO{w^YM+`Bw&VFRY7FDf05x}y5ir!DsmA3r`f?3&G}vm-~3 zzQ{jAF6>GC!?;#m&U8~skUTno%eLExlmh6jNQ>YCg2r zoLEjB43fT)W1%##b#7rhMW8MYHgSi*RI?sLR9k)EY+9Nb16dY6kMRL-P(-yT*$1!* zN1HpNEL2zTL6##-&1Hz|8pslI^+WPzcSjYeu5=yC5JHyG5OWeaiPR$wTm>FIZj_I8 z!~afHN&$yEiO`fHKEu^K?|rvk$ojIGRb)lssxT<)c z5)%%$wQ0YU5Jl9~qnR{xE_T>R$d`((1zRZW-b2i~=BnZAQVFvjjG<42ReDVxLHSBg zDsx2u-e+GQr;$x+Bj@zHDW9CkXSdx? z68o|2o!x$`YRixmcIaGAE2Q;~33lNXm*bdYz#eEapmsC3-py|Z07r3+Fr9fl?TEOj z=7tZm{rueWJ-X=TO`B#@x{XP8qVtLgF;gby-~}K-#;@w8#M_EoN+2k z-m((tRbN2aAR~&SHVz1A8FmwdzWCty-lm@UzOD z|BJAzN}|-^3>Ph)WO~cILHENxv_VgXk5#KHR5?1tFa#0>AH0`c|)gy=aXrTAIuDAq4c8Qx`iS6VC4Ad-i&PN+yoaxw%%5#`xDM_5f;2w)lb zfEh$`nkc|ygRb^H>(wzUY1GYH4xP=@(TMD*76%#VveVmQbdsfPaQpeHb zF7053vO4E6bAS^2SbpWuN1SY=l3g|LI>$9h%hymCL-_;hY~xyrpxB?ip^7IcCPa){ z)eM3YPMVrj=uXt&hf6*tH+cFLC6J(BnVADPZz|`VG5={jF~GhZ@(*@~GB0T_*dQ$p z4GI8v4~?jy0dM9bcA7v0B~O8XPbJ=%VCiV9B6>y{Y+Jro70p}TZdd1jYXKB;p6ug% z;~7YnaBl7P%_SQ9{~>1OJjPXpqkxJT_1F&f*A6^z0#3(-SoZiAhbS>X1w};yjCppT zIzDu|vcuqSFOnzF|Hac@Lsr@KEbwOST6`{bl+Omf%QuyH8pJAQ8tEUD@-AO)L~J?l zY#rms(E)t>_DxXG*$qplebP!CnXNWGxy%oHwnK96&6_UG?s{bu-8;UOnHl1-d|Vd} z4F>?_iHNBMDimMR>)XW>(rnpvk`Mxr^zvorjcFstX5CyPA7Joc0W5PP>jy`z;|I3% za{U+0*KX;jrm*e+I!|z{@dFDA*3)7sz^eq|f(7&u%>edniSOsgP!JbBw>Cu5G4!p~ zr>A;*AC-aVo7!F-(f!<%Q|p&|hW0dDWS%{1fX90Sh@UwS0W>&Va!M-WJ1H!wt-eSB zwS_6i)#cx>+naB8)bBtaK?2SOoYQ0MRzEyhE#n9|r|YShi~{fHXZ4^U#V*a!P@6?n zNG(%W#rifS9s;!^xwBGjloWs?^zq|9qCk{xy0Y>T*g@W`l~fUmBEjR)P&u*F#1`FL zODiNZGxOywOEWs{x+_{>LeNM~zOJXg zaE2ilmH8Al=9-==li*4j20v=*)P$kYSN837$+_C%9~b4#M~(^k8q}$K^Bzq1u%Cen z)0f^Zs^&Qy>?!L72Z5bEqKlH>b|g7)JxsEU)#ZyslrIq0M<3m>?|iRc)KU?G(J^(Cc#vXr{WJf_2Ba{@Lm2<%YwGfcFT2MYQuT>Mr7T48RTQpj8ZR z1=EhSd%7aKc~xcQ@XTdDb6=#mq)KWG`fh35+BXT_)>hMej@M%6-*b<9?Td|F{wolI zy|IP@g&?v-v0IPJJJ!*VXkukhoZ{#2M+z5UWBJ81u zZ;iL>+sfqT@}!AM)}j6l9|0ERmX$f1DUZy&*5+x8xbW|lS!Bw>0wdYq$S8D==ycMj zQ$GxS2#~5Adi0QorVa(lVX0E4I`niLf3{xEqrLwoW5=F8`DFJvrGQ;uqDnMAzkB%b zLfcbIYUV`6&Ty<+)IC8E-q6|O;WagtVUhkZN}een*}dJ?-!;2`GmdnV)Hx>xfK z=DTR*gmjTVw~f2u(mEFC;_-_Y7rAkeWvJ1uQxb&)J3>=>yzleB(wFmt{zG3Hbne`A zk_$VRTThgf!CDrf#r1=SDiT&E=4vZ7IzA=3X7%m?D_|ImnPwca5uMf=t}zUJG4tWcj|vEf7-7QSYwWF+3)1P*t1g-R4>yksC_*&!?@y|KYYFIwW(NerBS;K z^Vb*=F2+d4*ri{_@uIpt2q~U^^M9d9tzokiH2W_(Rk468sD2i^G!U)2$^QR0g*k-@ zXC2Tuj$gRYpKPkwnQUw_lsp7^`S#+;Hfd|n+pSL>(7ahQf?nFA>_HXUqvgIgrWPUXsQP_vOzgvBs*0#Q5J8iJ>9$ezWDNdcLFJHuTm?lj& z8Q%3?8bHY5AXN9%8Wd7)X)S5N5~5%duuXC>eCwvTIvi$q-T&<}?N|tlB^tfAR$Cz* z_|n^7FZrJQ-@J}3mtVZJd#Do4m>%UVWhPjUKx2?=t8-P8M=DWb9 z(b6vSp_m~#pwV8Pm~r2h9=D^`(pxS*q5p6futQ;VEs_oot3x$98LMDK;Z1vyE`h*J z{WZ596J%P^D5(uQ+Wp+8X5dcDS-81DzqZ3#p1Z@Wo*f=WDi|aQ+``xac zJEaPO`|S+*B=##>P5UbYaIQ<|#jUmfzyTGU9vjKVw1^ubASE5 z)9>9WgNUwo%8tnO}Y`s=l!+aQ@8syJPO$ z@rjLj@oOn8N<$YHm(r~bgVdM-N?4bSdou3P=~Rjn1%2Jn|u zV&(?sROMIjuU_<+1ZuiqsJhk@x@qu#sGiKb9PyJ;ozT>z!6X#*>P_(bS|%^h1gwOi zkd!s11g&&3l)y!U-@OK=d*`yxB-~Y|BoLQCD8PY|bLtuzj=NI7XjDsP==10GRoAZO zN)+=VK?*@+8XY)zP%>GyryDdc?Z2UX(k(k*6>Z~liJUB4V?r{v_PG^?;!{>FcgJcb ztP)Qp$T#j-4Fyweg)AUi7Ac8A`(ue}^lx|uy^-trC4EJNw9_K68J~vcJe!X&??9)< zW!Zq(=!BFgOlO^*0Q^v&Yw2+0D-}m=kk>Wpqh^D)Dg2t&g-m5zMW-&^B$t{d%~9(D z84waJUwUx@==4z(ciS_aY5)Dr-*OxY3f#Y@qB+jDRb$RN8?=xSn(2>{SwOb|z1_Rq z{;_v8i(jDJMf2OJD$%DVjN1`YxyOXW!V6TfzKsfbh-<~ot*+E6#ni7VRk6d~`8ug< za3hj_S=P70c_|(sVmsIJY98E9A`MC=V)0Pu0TQ3;JaEle{8g2NOrCOS%?r z3{*Q4w=lm?)o)1h!&H8JY-)dtd;x+1DfzN zb8g-|k-wPKe}k@FgP2MTh62mi#4J{oy)T)OK0b+G7ev1w`*L9W@I6P4sG-)ValCLO z8LA#ljG}JP^ODr7KjIZhR3@y4G%w&I$u!;id+c5(Lz&ZsV86tArVB2m@xq0~`LmyheZyy*eeU&~yzYk%Su3#~t6MPcdqlJf(|lkEDg z5z%53x{ZC28vE?<>ay&IO;T59?*3l2qB<)Kj_l7r&))4{*8GNi^`C#1_kI1J|LvLO zO6^lekNopbMyDfxemtK*ee2h{`HH>6hsW>AjV7{0qI}bXha@-Qnj(Fmbkq!Ea3qXC zLwNA>)h}n(O?GOyzGBl6-|gXQpNKgk!Z&%q)w$yUZCqVjH?mH(ZP~CMIOwZ$n|4r4 zqouu0Q;KsrXzRA9s5PKD9tacDwBOY60C~{F_e7^Kc*Iz=kReppp47PZhR$`iEywHx zIk=B7Z(Jl)ANGisXGDibA0z5syOR=;yrn zD0yd3>36vpt>M znGOgr516M-mB9B2rb0!ZGIYFO_s9Yfz`#ij?5e(xJJj{mEZvqB<@SME%?E$YZK1y? z8~ol`BYaq1b~B69vTci zB+yIZ6XTT0y&!ZNccBcLc zB3V7)Jp^b*xVD}MBu5j6I%Pj7idqvCoc2(HX+e7+qoK4eko`x?IgpU`mM zdR`s+1$ZPycyu_Eej^i1j6W@jxe%WbkZek?y)HB~7i=p1xXOvu5Q>l3)n?k9ild%3 zOwl~UFO~xz$@Hy*ri1g+M!uD)hwNGkL)3Etv3Eh68H1nk|CXk4 z@k-t3G#dq1f-!mh4BZZylD8G$v~I z!9|L1NR`d3mr(@j8(D(ja0WFWq|AonbL$4F4I+Y@{->lxM+q9m>k$towsq9Hst1r2 z>5=1p)dQeGSU%0SM@%TSPD)$t{!5~XdL)_@-29*1)IkIkh`H~1vKfENhAn9{GS0rT z)_tikzI4<34|QtMumG;@66a64-t+`4ssb5EyJw4kP(ge$V+^DCJam6U1xK6S56(fK zWRE=?H?hn^&AnDX)Ym*X?O%V>4cAqDJ= zjvkH|0_tHya0_kLPS>i%qsxtp9hX*JK~8mvw1uQ&DD#Rx*(vK{drW(QiPVOla*0FR zEWVON)8;S|?bSolj~g(FU=T81A{I{1SJw?1w~GfyA+!A#eABwr)Gqju_ugo|`n$!X zrJ9B_Csx^UpvIW_HWQU1CtdtA6JI52)%HaG6^}{)TeJeY0MqZt^G=&n7Bqi{UXcBw zjT<(!mlwdZ*?Kt4Az2TAT8Ap>R*|1^@VuL)oO z7;vTq+nUS#j1~0cj{(^!6pPjU)qsv7D>0&i)nI`&FNh+!@kF;0YAYouhDN&SU$d zeQTEVXXK~MO$Fw`8(WtY?9!U;kQSA$cVUs6GPH!Qf=X%Q*0Ey|tV)VtUfsV*7h$9! zYk5z{ai%slHhdVlAETZ>c_LGBfM*p_9*PLu{|uRLF<<)OXyl+w`xe9ywzOZ_uuwkV zZJX=A*=iH`dGg=%xPoTqpnN%H%@<*2zvX&>*ez zJBrh)Q=t;mNSjhR8@&#@0drp6LCP%}t_e2N9yC0x|2}>Zk%LgY9~v8MvkOzDjCXib zvkds#e>`)gt!_N&*Q)*s5wgUCED^eXy~w=ZqQdFK)+|`!`D( zwj!WIhgqlZxxE^@)MM|TTVloIABPThPx+iYLa*7b{Bmv+^R+(4GMtH6a_{d>hEX!x zhd*|dSQK#zVO~15^hYl)?#83;=I7(*Ua=02G3#e->>c-s@+c=(DMSLiIzgTbFBcXL;%q&N09bw#>LgrzcXuDlDo_hJomg%hpZL8rh5^8|VU#t# zK4S!GMi+pVChi6_mxsT97?))>a1iGv5W0zkv==#xk9Cs|CgI|6@C-W_w%$Lye)bS0JL6J)t<`Sl z-VUJ25n_-JX_J6r{}d+*>rI*peDG0GI&YG!s@>O1ky%5<{N#3Pf6ZzhR{_R zPFi^DIq)f$dJa#?;P-kE;HpN4*xF0_@7~^fM)BTyFax7^UHh=C1JmWG{m@*k&Uu{m z;6Yoi>0tWMk=^?CZH1Vt^g=Y&26-l1%Ip}fPC+Uo=bQ(Ws%D71GqVYP_c;4?bUF^c zD+({7YC9zDFUkfWZ=dTal$DjS?PZod1mVBDzrDAf4ur{WGPD!~c+axb zLzUD2EFt73EFmih8cNnR$nVDl($6jY^12nTm9WKC$Z}9cH2@${y!!I{;XU2HI%x%e z%6&YmYJv~)>xMjE?cMq#F{RKX_%^!9sU}%Ea4M1)fDIs@6)a)#wBajq9`B)U6-)yt zPnCuWxZDd8XBrQhU1UFTVq=Da1Dr8-z8#165D+0@EQn4nTGY!WX5$Y+ zE=J^m!_%d=*5>~mIq=OhZwE2gR-?f4w+4jrx%>T>N9|J2xZcU;h(~0Y@W>Fqv;pPqb@Vw_qNo0)()&ec<4j9cAla`itamC zUxMEe&D{!&TB8f&$w@8Y+UVTtQ0tb4979FNibE=~uYz!5gVgoChzAqm*97`doXED5 z@Pl1l`GMO;QZE&__*;kz;)Cmhnd~^(@~CPjQ=u)=8Uc7juWCH&(LlFF6k+LVRty_S zcDiA{o^D*h@OY*^am*xAUwo2agRj|`$yqY-09R}l^}_Xxz_}dzpydD&L}EWMZj{8B~Tpo&1~{96cn~y zuD9)SUW#+7jHlpz2)+nY{OhvPjDMX>XKuFYzk3stfCQD66G+0}mg_ZZAGP*QaVH`%8*w{=Aw9%%1P7ND&7;ZKwcQXDv45 z2N}txvr?0blHO5{k-4TpV3Bd}-fIWNU0?i=qU_p9{pc;*YD`6}qyPa*jq%{jfW=0iuQFX4ry)CY@Z0oQ8A=){Dc->aWcq;<(G2lE(GKKC!{JZmkNX0PZmh{?%hpb3b`s|gw*rixC}#>r%PEh>f+3* zYw`WR#y1(f2=Psd<1X?*&A}Uj0i9j@HCo|kJBK5m>EXLJdON>qo^oQiV#Yn*(t2B zd>WkA0gv+kb4M+`m&P!u$~(ss-FL4Ez5#bEhN>p*`b(_h)y#t+A0ljivw(|x+Qy?R zs#bO<^joG*p+WEsT#*u(drY028>E^%>0%O*DTTkK)VRqCnr0Ny?hqPvpi=CuNCRbVSvP5l$=B~W<;?<|X zfT3qc-rTnRPzNB(X6yZ~9B!;{eqFCahr#b$*V*j&+aP_T3kL6Xc#o;5zy>Xr)oPN^ zSvqw?Sc7es*Kh=JGfwvO9CY_m69K_ivt{GBZ9sy>KjmzZzWxCds<{Jm*iYfiDrJ5~ z{lgVrftkJ};v#1Vl7y2$1aA6~Mm28W-EZdPC`xn2VF?Z?v$%PHl2BT@c1PR?zYk34nZSTLF5B{P^(W66?dP7cunvs| z;8rk=MoIG$^GGgd?kWoEty@)-YF8`%^_Pf7MOD1Wns&Xky?B%ao&zFMV^z{z@Y0G; z_>bqX)mE5=LR(TOzAc{WEt!wKY* zp@iLRyI;O5=Go6D?o;yVT3Afz7t_>kcXtI;6B6^f@Iyrdqg^(Ejmuhr*U13GFSj@* zWMVbN_Lg?tBj-!?$D0Mr?tq7gD>#_(o{)BBL#;6nF*_=G3#L`rAvEWegI2CS~8Flk6M$c^Y!2^ue8@n)s19l&-YJfvW6&a=Uq=`6_yu-mh0{D zbL6=&#f;gC=5LbGx7{55lQK?(I}3k&F`{|^eLBjmfD0C2r6C>lDFTAII}*Is(4*vl z|4FKUbaZqU{b@oi(t?z^&O1`e;5CN6Xf)>j`*FW4XZ2|#FQF<+VGp46DRQ|$fh6ua zyRdLW51;0Pn2vxsX$8NqgG;#__=jUM5s9*d1%_i_C=!EWB#CAeS2tTO3dm+uB8p|1 z&g5;Rs-kkBWUnsIRO(l#BpFtrtSgd$^WUqw*e1XdxMnW1lar}ncLiJT@?w!*l-6g zeMXW~Ti$mb^~fxwAr#*j_?vJE?JF{IavuqEL|=Zu^t$I?k&8Y5YA)v=&}=0s`tGj= zaW_y$%iP9$8G(^o7ySGlK+j0|EHo6Coi-5HWJadYf%40(KlX?nH5rMl&X8xvB<5iW zhM2U<7Ic5)h+jmhl=W-eNc zO&T5TKfQ1B=>C%igWPzPwbFm{2#9IR=vI5&d{5)XaWji%gaENk4i~w6a}bWcCvC|C zjh-x?^6jr^!%M5V*z45BUH%u(^j+=wtUmGz&ewhzQPrlW-|wf}yRHrX7aqK#>X-Yu zMMJeye`p6RPC3}!v&DxL=A?l^eO3)Di>5^Re<*tsxSaF0@Bd6xs4$jNk}M%bQkIa4 zipVaNP(lkv5ks~}Sz}DrC?zFiFG~|jWXaNQFlez<#$G7o|2~-Oy6)?~@9TN~kJmN# z>we9U^Zfn3%W-_RV->}V${b^34M1jSq(V!LcK>3LEJ_D$0HWcp!5Md9in6M8wcU=0 z2<36(@^v0WzzwoHaNGGM|KvPjLM$8)oXFO_`FmH!zC%eZaQcr4X+g^tC?>3s$@IgA zX9w+=2q;3S$L-yjgLr?`E$ttuz28R5OyCeiYCPABvbTW=YuH+}s2;Ott52HrKSZe#3^H`=+e(5t``?+eXkJL=1Pe^ENdMuU@LL?aYbFjj;>42l0ukG;Z8j zZ^e`Z(>W1g936-cR#LEshhrw+K|jRoxJaERceMsvden>P?K)Lk<4?dDhIf75to@z% z`SMWeZrWVPc(?E#&9;9G;Z5=QDo4yXkv5fPA6rO0VkYwXcX;=>e%wmkm|CMTuSecO zLH2GgAkeC&?=~O5aMD~ICi$Gr@wCU>X?lGQf3w$a@+V91$FI66e~eNWUWs2&OACv$ z_~Y{HU39wUKY!b!=6|fz<@?C5>?QTeRs!zljhuFq2KPASu+HEo1v?}a^SBB4ogSN3qBs|W43>as$%>^Ys z$@puToRsqp{6cOi0YXm44OGZ9HR*Ok2j^a<&Zhyr%vl&a{!qQY>OMS}3tj0T-O{2r z9w^hw!+-Z)i-@WWL0l$h&8K57Q*PRJ{xR|ebcFZd0EWxPoAqbRDY|<~awUWMY&;yi zaWBmt?WFTAMtlp+I0W$piC|6IZa!e*+|AC;P9g=UbtD;EoM7JhH!!BPV@5eQgwNfh zdIG{@Daw_x98v>dk>yEy)VzC|yi_58mLMiA8hKI|qb(d`@Dgewgfh-AD)tgc4Odr# z^rSS!|DcC*b#)HJei9M>FiY1u>jJ8&$`p7K%cklMidF4K7P@H|o zpA4V~DI-=w>(j-Gv&nDc_e<2TGsyP`A=qB0-8FwUwcKS+Xne#aNkK;Czwl?G183KJDP@ZG((s=s{=Hv!9TG^qg znzh!<)ZLHT1v5sm6<@F4?#RehSIctiHim~o*f^yuGkn_Mf8&teHqnh(@tY>0-kUjfWbweP zNr@ur*2Y_pd|kSDKwId6#GPvuBIZFREDg9+56m0l7#sd{7IM*5bkQwwsaRzB&S;C-!Mw;p9;)^ zugs<1Z@5?f>~943A+>i>Gmw-Tq*s2?jver&;2h4+1Mk26x^RcM0AO}1gRlpw>-OGA z;p#g4XZ%YEf`XA%X}45t5+sZldv zadpD_9J6VgW2e@P^r->vwb)-S>Gl%sXw*339WUl5Ho!a{q~o(YrF-`)ue5&SU^u3* z3`XiVD!AM{3li@-lkFK>J7$^W9pOOy4PnrCq-+-_h}c`!!AGGQJn*#FHs3B}IZUT) zDG0#gB&j-Bk#)wVTTfd$=sdh_Eg^Fl5h)7id4pWX?9;$^cs2w@t1` zO58cnt?vofCDoM;toDvtR>GY4ePC+iFSvZT`6C1^m_gs9M#*<##`PgH;Ip^1HBT&CSoof^yA3ZTanq_h&ly>rk(=90q=cL`TnU>1`)}>77o&65 zb<(8#Jg7_IBMTqn_7-3v@O~Id8}ca-$5NcKXzCl(XA(C>%>7aes60*PDGwjloEzMVyJ-;RVGX=*6VABt?6r zbvvJ`k)t*KMTaRCam&%1_(a{o{B4Q@Rn%j=ox&RpKwd+&n&HQRtYl|{{CxQogBQiq~ zgIor-r&$}9EUm7b0G*q+boI`yXXyDT-$kc_%W?DHAQr=BPqbX!@Y{4fK8UE8AvYvp zKKYbV;-2eHPEHc%`qCJ~yeAwJrssB2b9`q4RySRWX-rJ6;TNJuOxIDae%}-N4rWmz zi@00&Ax>JcK@)2KIJ5S|z97O(;3io}?=L-nU-Jj~WKiYd;8l{a={8=G*lMj9IkRl~ zC`4u|SQwD>TQc#*QbTIps?*wvc8JdiRSHtApg1lNSP=UV&b?67F7h!2nHIA9g?6Pk z$b-R-Y>MZ4T&$SH+VbYp!Q1?w-`1;BLJLGjl ziOJp8b>Q8n_X_NfWOwRJ$T6%?84RdwPibd3V7>5Ygj=opB_O~C6#*Fyau2|2jp=cN zj1t(6bR0InojHCyCdp99eHFn=xFcoS*~{5q?tJ?q^Iw$|aChl6ZYdpI9{uv~+*q>a zSf~F+j#Za7TQ>ya)co*~)K@-};^09jV>VrJiXeMltS^$5BxeN&rPwXYAO3#kbfRYE zF%-C(|Kb}w}S78VTl3K}ZNU?tN(?<77L%7a-)=#VH_X>bxyxe~}f}Se7h2^1-yM^x_GmxorSR z5{O+&OCyQ1O|jDz%?K13ZxyC}wcABYzc?B>euseFZ}GnQdMl5vQA=#;y1Q`G)2~p( z|AANw?A}yOk?6eo5Cg5&xOYF0G?R|ez59-5A+c7Y9-MRrpoW<*C|9;o6HtSu|JSIf zaQuoMe;ogg?wwAYLgj$!vE5JWkRD5YrWA85c*YHwQ8|ufA8;y?fh?{$;L4DNlSEa1nd=x{c2P=g9j`g?GU!vvlVT_m+Q|;U=Jn3y~q<+jJLX~IF8($sScdqYqpH=iuv%Od81I#CGw2b3_y)79xZV)PtYt7K9AmE z>*npf(U?p7%VkJxiYCk;mAWn~Uq(?oec(VNHERgI7l=qD1)R0ej}X2zqiZ-?OF3*% ztnRyg7$yKwZM17wO16=oA5w!v9W+AKA?IvPjEzfbU{{k-5lp7&M4H;>@GrTA#_HP6T9{4;h)H6frJ>c{WBE20gQ^=*UL|L=i8-{Q z*3txag)TFVf6E05O0yHeLwKvQ`$DLg1WYvA#(f?-W$y`$?KFk_O?IzU*Voo4(nk&Y zx|)MLKj}Wto|__m6G-@rWUVb@4<-dfj$P90XInL4X}JWVo*zj#{qE3_*|?Yr(p?8m zh<}-W46+3{l0nWpckj-BxAV=Y{0!cNKXTHggpMT7PdOJ^5KT3ZxrOyW7?> ziIxm8TfOH`pN?@>OWCc|ytRc!?#ierJ&MVChp^*NU&la#k9`NzrXt zehumEmpxFS-gbb?^N`nIKIR*CE!>?uD>)nNNmg0+)(q^`>(BQ2% z6Zev5b|4|G5CSf$&Zc>F@q=HxTT~D@K*EjYt`YXz`de7EguJ=ys!sx4xs{E^|Hjy@ zxDmD;auqQEqJ%K+z1!>eliN`Y4co=YXcc4wU7OF1v7;hHfr3VJQQa4zUV!WF7jIi? z{JIYs>B~f9nl7siMB!0iEMtj@F)AbJFBRj9?&EI*(;IC#XQj1b-4I)o)d(bQF+)Du z^Z+{Yf2Zj7+UUm2D_91s(AH|Hnyp0hhGKs{uU91+jOWh}+|?J)F@y-P-dV=E3G^b! zUX&j?5n)rfXi>1qTp?K~n%J3b(4q%uBooxicqsO(ejkw3V<};uitXqGHJ1KdkwU&DS9MXi^W<(TXU^+`23W z{biS3?41S&@(KR~qn15rk}BKMo-YL_g<(?Wr2v93YUHQj%BM>ao*>u~aGz6JrgVZ3 zC;Ar2eBS7&+FHQjVESoAI$aQ73L+GCatI!jP2Vnl+j`of914STCvR8FoF~h2Gw3X~ zz$GHqR~o%+5A&RxL5&J~U$z`wz;`b2>F~YaSICiXT-wXIPbJ@O&>(%D8PajdP=qY- zsS8Bi0sk4lyc;s{-nV5EJIec~-n;kg*+{1K=%9lA7c3JCON&l5%}1D~z>`sK@;(kqRnI7bP}S)6cWkrC6=ExT1$g+{V4&1>iR zZ2#B<)01RJT&M%d6xVzyAeAT`;YPa5?`=@uHnu5WNfr{41Mp4Jzl_WGkCciCi4g=9 zr30?QzNrgeuIF%mvCOkbm7)pE)|1~n?Diajj* z7w%KTW8cl|+eX5v7%3@9;CxyUE>e+IxV$OYt~sZ%>NvmwWSzc&B~*Tv50`t(Unq zD<^~B*0fEV5qb|ukpaEk+Mwa+In4q@ptIih=btx8()h^N@$i1r!0#nv*&oE0)Isrg z(UZlxhO-K>JFepE`|LTAjTeh8E6yWP523Gs*vdUTvB!;z8j85(%t&ueX)kIZh&tFF z+QLzGzG!;-GPFdJRH6t88pNHKW4xT2_6lX%L9diq!9jb3!A@Fq@pdXa4wsPPlAD z8eDYFtG3q<`x;YL>Cia8)Q2YGmYe zhd-XemB-D^&(64XX`g+!iJ)$vwmi1xjPIqz zp2HWFvuWV>P>iXgSvbJdHn*V6H*t7mNbbTC^(&a>fCT1>u z`K{H3N@f3~#u{fo9{$yE{||2!H$>gMf1}O%`+KqN)z8!x#E*)2RzeQkrZ_vdLf*fM_Ne0WDIhyt;G|$~!<@Wop<)0+>Hb zSgu;OF9Ty@Od2T=K1-+xPCt-5ur;6l2l@aDb|uQIKCrr!QqU41SIc}i6s|`B!FRuQp2}oub4n;a-{9EMa9unccl3Kt))3jNwJVY66Xzqf+MpZ zxM-(#PT(JY5Z5NKusU`+B83Xp9S#!d2CP$_1lKT^wWZ?J^Xwt^5%()^a`FYxbK@To zlNQ`evgH(dIh2He3$d`@)FML4`R?8cELnLW)YbqY8tX$wM>vNa@K0u94v!+aO*Jf-I9DZ|qJza4sLSir~EJ$-iF zkoJF`Un2XA7H;3P-bD?#Z8$lJmupSSk~{#$W5Ci+O+_LUkL<1kkwtHBUtxMNlGEft zfYL-u^tzxD)5vMw|1d52bG*(O6GBHJaE1igi3~sL*1IP5?V65ODx=F+GYC??cKAec z@?|J{@eL^~UPV6|{r}|W!qC6YP{!oY@h}@+gAP7bPIp6=Ujz}#>4YU0BSPgK zYDb(kH{^lq()s@vN7i!CVuK&{F!O;v_PzqV=jNmHLAcPhwV~zcaWI|qi{d<6|M+0o zFugv3qu}7gJ|_qnk0}!~20f5NP>`k5(Vlob2IB+_E~%R^$$^d++??VBAf0zq>pql@<1Mnn$DEJ$^5Oc@0V21paei&up>2kbeE2#*LT3%SM*!b zE}(SD0H0TurD61v%5nOaPj8b?kNr0i%<(RX)@x*{M4P_;!J?%?^rR;CI#(LW8t}pE zG@glp=iEmM(Ka%Az_9r9i{FO{#YLgm)OP2NiMn|7PLfJk`H60CIskxp)f{(ogh`^( zf~16mf7pEfLhUXeKG?1r}up33BkXcf2 zn=jbC@n1Hs8y!~v%F5dC$zLE$i2BTZQYMP62tshQZA?B!N;`4SD1q}X} zy!>lW>GS6f!zZ2fkA1Z8!RVdk=}kx6?`UxI^F#{(>gfmqJCev(;1|%Jst8-!2}Xi1 zeUqUo-nZ^kFN|n>_P#du;qNX){eArXa725}#!!-LiS`m<+X?>?Tkeq(T)_KQeefeE zI{?`g|EAD)VyT#->Yts9RD*Bp>+2_`gs846+gBL=-`TU1eW_RIqB{VK0j}8+^CTSj zdke0%+!LoKI6Joot>;@T;<1|?JK7P)CGkY-8~$-?1_V)I;FA`kq7rY$x@Q$g;F~dsh2azkI zpsI3#E8i?yG2$bH(~AMW-@oy|rQmsVRmPL(5l&7Rq#gC{+Rs_OC$fCWh5H4Dw^`*sfxm?2%Y)!-v?d2oz$2$fRY24W%%JHe-msA z9xLAW9;W7*l+C#$&N!vlyUMMd$SZ(BpsY}LvrJFhq?>vG6axi&`1T^oUv9G8Je@}4 z^t4wYX;goFrZ<&~UibAnJm?rRPmjqTGPE8SoX3nAb{gYfTtW_2^6J$l;KdGRW@G#B&icWIsofZQX$Z8? zuir=jo(9$!6y7g1ZdGr$YuD7Y?H;q(6M;E9=X^)^aW1Z*o~&nj{7@AWE^VNi z2?`b;Brj&p7W?t)2b*9WYoZXbm9lk8JDcX;{a=Y*0cHMu#j*u- zUtCtE%)8*i1C*Bflf%TkCK53T^I}#Lr9rxNh`7t48EnyEy(ln1m@Y#%SgJCjj3eJ+ z!TtMs)8|MM0(l9S;l*Zs**Wg>1l~99J~8hM4EmzK#JjE5l`VDOn)C|p(%z`;wG?el zyWEalY*w#LY&Ox!J#N*+Y34nr&!a~l>%ZT9qe|U$py|4qXC5EZI;J(bI&jp4fs+gQKNAXdxrjxnG#VGb zbncn=3aTWqw%`1$nEZrgBeCrx2wKZKiJ>r2n7?kEZgT!vdcgpT20I1>c(SnBYRU^= z-VY^DQ*srkx);aw(s9~$th>{7?Iqsz>nSZ=woF>?+A$ZHV-2V8yIdr(H1RN|xu27* zt|dIV*JkIbk@a-qd^zA{<5s?Sfj!?VZ@%zvL=Fg9CmF~&95!$`DikZV`xL>n{hV!M zLKMXb%GU4a1O^27&KsTS{`wQsCDv2Y?L$r!JahVp{$nR2@vTh_MPV{HcyAB1XaS54>-o(SD1XApI=e>bMcYqpuAQze4JRlZg*BiVQ&QbOv;#_8SIDR82>l zXTNVRLPUTu8mTw1Cwc4RhJ&VHN*Bw6^I3)|-7cV_@z7R5CY-dW_)OP#Wo>#c(E6GQk=-q+AKU2!(%@ zNa>9*J&}7J(a#kW73n0|-?h3*Ya%KZbnlY>pmVj;`Dd3{GodF21k9kgs#?LWgk3B_ z+~olEf_Ofz!@a8_52`Og-@!ydOkz%-ZWTPU$QvEqA17xtjtV%D zk`hWO^SrC)d{5r#wh4y|MIT2A3UNaGs#DNNfV^CAxuAz&rd$!l1a^=ap0lN(slI*_ zDx;9si9Pkm6DWgRk>cZp)#RJin-C+mW_|5s_#gPD#9P>esFd&?XBM9Mv3{}{Bw$KG z>-S6RWsXR>a~Zf!CF;rPDD&$`F6oIod0DPAv+dS$zQ-IrstM(<;`{|=k%zDEI(ppv zk|LC=XLH+@aNz)M2U7qK##A zO^_LsmLzB>6CD={I!ftxa1%g~;@0}nCMhW?yyL)v5f~7=w7{+!eZ%K#Kd4! z$`KbDbF-m9=B&hEZB4m@)98|)&+ftPnu=+b1t)UZxb)O+9_K_El$vS@&z|})6IHNJ z8!hdy3{DJ**c9GAI7`dUFv1g+V!`ux%ppYG2??R_Io<6zeI7^5al#qtWP~6Rdsg)? zkyHz#*K z1+K`jRJ^x3GYkCluK;T^7O7@(!idj=IdPzt@Qnp^r_u9ilW8jdFWR8QT=@`?y1=}< zZzx4>E|awgelv4hEkv~lL`Vx9)Ce$N*jXNXVrD}3)J+A!3G>R=yiIdiZHujCKygXQ z%E(9^5?mEjw(VA@gXoL=`uw1WAD^%wfZt-axpe%gbs9~?KwJJ%w<`T<-TvH0N5>w- z^}UIIz0y-#upG9tambc#gq9?~RW@Hx228E;d7je6Wi18{7~rC}o<|qbbQKMGe)K|O zC4jG8I&8SbYF>#8_xL64FdI-oh9sz|s;Uyaw0-%tWLAmbxZ?2Qm_DefGg#N#F^ED< zCKGV{hqcu7iH3P>%W}LQavR|kc1^UlN+fN?RTRcwxX_lH9dyX>mp?{aj~HPHncNKi zYkH2W>GlKL_dP7K`KCAb=+YGPPMJ@ma`#m?ZeSjDko%&PnkDwFA_p&=pEhX6zSF0R zJdPP39Y1lRvgyqpS|bidus%3>fqRH(i7!FuBT+4E2+@!$L@}kKqZ6qY^@MrTo^dr) zldC|#7_w3or!YSj!b#FPa5N~GYuqmhX=PcQz)~ikzd%D1mrC#zS}hTo1F6U9KQvCL zjOnU->CXl4Xs*S@)!1Lr!Rlv$|ER~==Uh7MhHx$?5aEgqr*$|H@be=0OUIUzGG?E3 zyI?c}1Q2S5dD4-*efY~`3(Ki{VCRuX6zy5&b#qU@{1{Iq^MQX!6b`8uBnjZnk6n>q z8Sy@?4RRJGcBBY&uvv|nJUN_0z_0Jq=g*aM`u3)9mx@Z$cf*xwFgd9!JkdFUfBfka zC+`=a8ihvDu*Mo18gO3PggP$hMp1vb#m_Ijc+CoPtm)N%T3k2gjeR6a|IMaj8XisLxXAiI0g6H4YVq zikS!|7{tPVUxloPVTg@c5u)a*tgK8oRVQIu9mw^-@pB1UIp*{DICBG&zaBaBXq999 zCD>Me3yJ`LL`an#?{qq!3RYRleYR&=iv>M9jUo#CDln4RrJehF3>X!h^=nS$$nHDh z4jpPlNW~&(K*cSq>Eau-8o?=Wg{h~?K+r|Am2;NX`1v}9W%pP1Q4ieMvo;NHt|awLl7^nTdlY^C+^alPyBuxx1l_=4ZT!-q3bYN#)@vzU6oP%3U}lr^9R zHb&c|N<)6+HKE;nGg@YG;~}wDnV%v41Ip$#P;-)>K(T4u*nK#XS*EStOANgkiU_aZ z?%gsv#l8#)>h=nhO=aK?0gTz8Nv6>|nnU0sz;P~nMBykApqzH)WU&wtFk;QAh6XSd zq+MkoxMaa1fedCIs`;V$D5zPvq|^*P;_L-ZgT8SHt(k_=l;I6EH0-EYoR7MT!IdY? z2_7U{Bl5Je*jHFi6=ICa6>j~Bm1bvgqeG9ajG?UXyfj@D(>G4X_JP6K}WgBdlr z#+}~di5rl5XwR&m)?uQ)dKC2Hi2bs$)CytrV4}OP#gnBvlhvyJ*qC9IX! z*=N_a-QRWG=6LXx;#SoHUI|ZT9q=##sARG>7jV#wlvy3;B$o^$2d}4%{Udsc$X~*J z`&&^=%G~hm*KgqJJ|Wal_}nnVjsfep?``nRk}a>Q^4JN-v5}>He)YR3CNw$^Ikmvv zEAFYgsY6u#U|5F|&_W8Y;L%;gN+WDx(d^qYOA1^r{{_;ddN~CX=2+qb(6lx0K7=mf z3bmAm{kM1DzB!w)alJ!lmF!dY@?Ul}{OK^BH%}%x1dyjQljBb3&P^-&=CZ>4*KY2C z9_rl}{8U_YAsQhZGnZqUr&nC-MgSVreJlONGrFT^q`MIE+j85L%zQV*dRrZ5oXT3e zQ0)TxY{Lnqk2lDfL`qEm{%5ZFE6nxpfz+a59jCQgtARm%jv0s!8qV2OadVGW-M}Ku zZiD9d`R%pNnWoh7c9Nf->^OXp>$}UQ>J;e0|8e@aTJh;-DEACx2#`mlvDO?tR3AQL zqEi@h(}A*vs>7`B_Usln$8=VTAqbR1jl08eREBco7W)$}>bS%E_Uo5Y-dfQ|&p)Hh z>$7f0vM4WX)I4jtzQB6l8d6dUmD(|exo&!jBgZ0cWnA|cQ&oyzVdFl3F5=e|6+Vy* zUuGb|z3EeRqIYb7!>7b+Jz~b&FX!kUM4iSNrW@6)X6~wp5*44IPPdM}XLiPQZ zhCKMBh<<^iY<<+jJkeW~PxU$w^y6nGw;FlavCz)~s%TQ$X5CEF@4gwb!D%^9mXg!+ zmN60~aht8Cz4U3KfF)VIckk4=s|(8Cqp|-2D^r`HFjvjESo3UmZALhXiV&K-QVte& zzjXIv^(IZFVuOxd`zg8nR{yQ&QTuO*S)^ZJr{VB<*+lsmxZxFEY&owpJ z%2hkHx|`u{l4r;20QO03@R)<-nEE39NMNRh9#GCNyGDrahl2mWJf}|>b za&zoRRXU0(%c>^?_2oi4UrX(5fc68$sn6T2!?(!i5t0Msj%LgQ->l)>rL&Ajxi9cY zTH3??Y%pX&{w(YHEgs`wEw|9pE6;POndfxu+#=UNvf;K+afl-esUKygX0S%6+lbgE$9`3_xTLuv!&;$deCT^*KF$?;cAtI4pXYiJDZCyCvMmar+S~y>dXn|p zc4dcF8*J2kKMdW&EjtY&N4w{=`U>-)y1o4*w+dgEs8MPA)o5q9$%YIb9CE=Yf_ux0 zhmUJCpxVL7UeRADBZG@#Fm>7&{ z%*v$Yfk~?m7=RCMWLa5hDbCM@khos>1yK=XGCJXs<7?_9$&s!-BI1-q-75+^k>J9s z&BEO>DRBGYo`QqHS>ZUIMrw?h#ZXl4?@?sz{_e7!s{4(PKLm`^20EO1Ur+n)%I;3v zdhDo*+^}O9z3c#MI9vq(0gR^(vO3az!GZ9zs*ia>(QM&k|_s$9G~7Npd+ef#$1@5wdbmjN25yAiV^5xZ}JB>N5Hy3Plh z$~8QOqt{c%PMqi0sLp8#QW=8jcV`4n>Jol>8Jku#Ap4M*%>Z@*!^C z>&sR;>T^0Z`1 zUD&Ot{yRFwZSGouB4IkX&2%_k`SIXzCrWSGu!0z6op6^g`~BZOfBs^q#pbSy^YV6T zp56MIEpm+pu6%))cK*s%<8GWe@#D?UJGbY4ClDj=_~F@*B16c!7*2Ir9j9gxIak6g zyZt2}mcNI0a{SVQT`Y=wAm8VojqN;X_^A#*i&lo{)f1%dq`kY*O^^~Kg^$Yntvcd~ zN=}C5)-vRHXFU8&4Nfwep+Ao8;%`=Ms?c8$C5AdusL)Muh;th0xOtyq>^V5nJqK zF5agom$f)RP}f-gc2VF|3Fi(At8^H1_L|Qq9frs#g26A96=2ngBiPSMKAYOtvwooa za9krI_AtEr^h@qI%H-*cybOvmfwQS{xz$2Gj5dtOt>|w;2Lj%c$^Kc;(Zc-cRbR)T zk1rpn62O~QTX{Iif4=x*p-O>9*M^;co2AP!8~*HIS32xg%k*}-U0|XmdqeebLcLkv?u&+QXX|2ytXlj4D|sov0hBiR8G7QqP>j>ky*pp)xK-jhGb);1CoVf zA8G)A7Gstw=`@_q6JkuLYs70s1YFVP(wgS9b!-kHjl|O-rhUMmfmJvgnhNv=;V04V zSSQu*-Mc5P!dFuc6B^F%_5$)I*mIkB#`Xs;LavBC#(5_*E$Y>)HyWW5HE#!;Z?J9& zS&b*E8SwLMxP9aXBx282O-@&L_oN<=IwHZM*H1cLTN|X1ypL|~+1$(+R*uj7Ix+IM zEspVLLCZNFL_kgRx}kRCX)=s%_~ee-K&UO#3RbgXlkNt*4yIsmo zki>9`T&bnCd(YO!?tdJTwKj>PIGvF+#b@Y&)gL`(&5HX-RQZtC1Z?}Xxm#t0CWgKh zrmC^e&U3lj=ko>RyK!2HERJ$GK~Jf>|E-AbwTy#Yx|fy@qm@L&3z#g^fZkfaw^WSi z@sAbY&g@ZZ5v6$FZX@JO)Gv=RklaODB#B*^1_NLGxIvAA4NVxcBXbdbcAl{G)r_?G z^U<=8lcC!cbO~$Fe35v4VXdnWLLj^HKo!z<@>N{2{=p%kIt9a|T z3$;}W^UPt42^P|((lJYR00m)W@_L-cQ|)HV=v3W@GgYFm6}N1amhm8w=dFQqEq53b z8G%zq3`kOe0NqGzLU$vv-Ldw#iS3@I)a_4QT#H?P4D~G%cY)T|pz@~*a42)SHE#Ig zdx4{;PTdUOW81E&2On(hrcL%3&X<2GQB_3#atGt7$Ux)N5lIY2zuN6Qjr?UGM`{1W zLV~hUBu*6$;lqO(8i?Tw`E=FHuQro5eE2A-BwV=Dq%l8sj1-Jp`bU+IK7GMShRCuW z84VqXcvhhAg6KV=-pk96_X6=`#4{s#@{hTRYj$J z-@YymtDf79g(4t~5<<2FtJm}+Rs~}L%22WpR`qMkqht?fvMd{hdAbbj&NsF0m3(vq zNepgBdTR&dUxB0tSdpk3A{y6AkxWa3$g)t&!n*&A#IXmP>gY70i08D1X5aPXLhFstm*}QWZGa4u!H~_i1>rvufjAixkX``AX<%p=cGSh4wh5p?V!dNA<=`%XZLyv+$7I=UhT>Ix!!d*`G?PJUn-C9x z)vOs8GzyhGTWZ9fzFVwbe6*f)n@dE(D%8}1`CJ8l)s1tNcDyV6+8gtJCMHD5wuZf9 z+OJCbSeahvhvtP8dbZif?uD@M)co2Ud)|@4^h=NmG+2P`{RPLqi=5c5{o&D0uQ; zsGImZKuiH~nR_tGiV)Ql6WrG>w=o(h6NT^zcNOpGfWAiX%lUCp&Si`H(GG%-T;>jv zBywJm#B>vtJbofra_~&M#O?R*yKxs=`WYhjXXv?=_WjRQ4n@3M4==C$Cq^@E)o2Xg zfbdhs#qe;&hRGpVZKn$f|3BE8lT@@49>g&i%9tbBob)^)%__sfRK!Ne*x|O_+-W+4 z4ZqS8T;=8wwLG>Yv?$>^GDkSIa1E4+3@f?sDy9Jiv0_%i;K@W?$go$5Cxu8SibJ7z zwb)Oi$8Jr@-Q+JQasZJBCeuhfcu*#skR2P2%3cJAl=I{~knWId<2_!BuyBQr{(cnx z3e)IEd_bOnWXJ{2oYhGoz!WYpIZNkDyqF^L<#wEXFlu-!2wa-FR?}_l1ui3d3eeqE zW%bk-csSPd-Z5qVo0Apk+Nk5PBAWiONwVCz$&-$wqA;GE`u(n>;kvUvzta!4si4Wo z#inFF(Ptme>|*v-UocOhIprwek4w;0xRD^7SFAzx-vx??>l;i z>AWj!5}ruhUG>ajsF?6qu2h`$ca6Y2wAsFYtNZVig5~z1iwuUy9*$;L0Cp;XX`wGJ z+1YEoTpQn=Iyp{*=uaa`@V9j0$~jx7jw|oqdj9q1nWmz6KvE0I>KfqA=`F7pF{`Qi z;JrPV&@p4il}c-$uf|GF&n2Ja6D}j4G%L3dTNsz_=P6mbv#1mQ;#{rp*;3aw>PYTN zJ_kQ7fF6}@Q#t3;W(#xk(OwQa9#2vYu6X(&CkOlC^wAem%U`5#eP^+KO7X=}s#!n= zW`F!9BA3&U0#Vqw$Y;C^P*$UJU#90F`ECsd6Q`fRny@g zq48BSP0??N^gt(S_^9E-2M-&zF1Ozsn9bg9<&=3@z#Y)0^#Gaa#&ZUZi@LseiY6jy z1m3)HSSVYIMLFLD=`Oz@Gnz|DrkY;aOoUIlu2V@gpEAB$w znTS>_vv#dE^z_MTSNU_!PjMRGV+r|cWsrmIR(nw9b3n~X?)d;H87J?sk6rVgB0PX? zp|})G9F}7v455zsAySMO3lW@Az7JuBsd|XCcBG08Ubbu?t>f}9ZyjL5PbKKHWQFr) zBTt_(LtDoO2t~@Af!w9i`@id`DfM4Zihe<851gz? z_f)(p^ng>~aBRO(cxzhs+E>eEm-Ae4B!49*DqxLFt|b+WR9x;lJuEo;yJ~+|B3ACF@6?g==HXEVd1Lj=`=Mg+4bAc@H%x&=)zYAKn3yn*~BQE+3n7txG6ZQb$Yw$4M+5`HFLjMr)JH3!DWrlsxC398-D zj3Z;z1LH7HNttH4`{6MU{SQXCxgAm-=`f{hi$+82>{32m>oy+YGrMhc z5i|mEFS{+E9QyGWbAEWt%dA==A=}^x-rmn!^=M&aViG#uh?vrG8}?>|!oyOjQdeTB zJ(2q^|Jl`yjM(eBL#d;==?L1AtQM8?6N4v3v!f-p9FoRx#@RP!6~re>x>z~5MBMK$ z$vQ%ib}1_>A-C)Rn-#eNpMad$M^DyVcCWD5p(!*+#B~O76_tNZZ!rJKb(flYI%kAR z!A;PopC7Q^v(k%Bs_u|{gIVna`R11IvzYIhG_sz_U8T;MPLOvD!0Pd*KdO}yUlTAY z(RfU5lkxs)=8NJh@=yL)J%6)56}L?H)m1k9P8#SMZEHl(^Iy8_-uth)o3TOuIS_AI zJo}#{!<#f0x84S~{>e4I$GtA70PRE^cxSKWtp2Pq> zJ>Y%qm;v8901XyhZFxaK8MPUI{|DNxsV_$M3~(mvJyqJ@b59T`|FT%raLr~&7J3-OSVg$v#C2NcuDi`5Wln;IVeO5%$+9^ zjiirhv9U^cBjh_kMuG{MqI58PU*Hn7!1vJP*(UZ5e@a#;pMfn0aJ4S_o=+ppn)uaZ zz7k(9L0>~5dO_eA4){%&Jc`N0x{78BJg;r)(i$_Qk>aizfIWxf_9_vGhd;K^Kj^wK99Cttbj%Cw$p2H|bn9gF9tlr>4ks-y^iwee?7EEzJj zhy7dzkH%Q4ORVMGoSc{*_l*S$V(H3b(H$|H!5sUzd((np^$mLLVW#c6~Rf#rXDTuw5 zqz!t4lbYS`+`LK3hcal2=$nyFs3K#w1DM`cvM+=s4|4O?I5VMrT;uqhG&W3od-(bdXRPx!8o=kW5TakrFoTctZ^Iz%Y_xBMB3G zm|`QgueYh@+onv8^wXN8;VW|&e`?jrp67aPb;IV@s6emrcdm2qephQwOKy8{SUllQ zPI^NTN5Y%Yw)Mz^wg8TXW)aG?h1|M%&|x|Wo$&vlow!=ub~2#g&?!@*mz&=Crclpp zn&Nh=5#%zQ6QN$iNOrkSWwCB($M#rE(2rn}BEgPAH3InZ;UrhUfA~Rd=bd00pU!Uw zsA=_6vt~AXJ8ywO9jb;&F7kiuU9%qtx%8fKbKhaj4cR=Re~eny>21M{U! z|64nVnxww?XdcLXp9r`l=K%(*Q3y3ladYCp8wy3iepc`HXls>Gi$-R6_)jkR`14OK zT2%dB@OIExRrUfD$c36`y3C?Gs&zPH=S|FCPIWbRR^+`v^(I~ymk<5# zpFTsLUdyS(B9LL)%~(hx@Q9W(HDP01UXMjDaU9mau?a0ZnBheMO3ud-mNwK6`Y(8LMoPQ1IZ{{q`o36GuC+|LobFVWd~Aop3=t z^H=uoZkfLEA4!`WQ`@ugXU;7=kwR&CnxyZIOq-!_{;rP_S2oy6c-y4=I^+mS+EkMz zg?Ye?MJe5}0}|FLE8V4pf1$brH1bT&Pu)Sj0omKE0Rd_Gdbacd-ENPkFXcS8 zzEl4%@N=|}q`@R~zGn{l#=$IvotipXTi?mi9l15)5mduaxuUwZa<2 zLH$oh>X%L6O3p5`s2UyQ&eG5slKE&+nFhRxbM(dxJ5?N0D?!pxr*o}ZZ(PzU_tc`4 zJ7xPqSRzEIO)I^;PGO#Zs@C6Rs#lPiDm%H=xXL;6=WN-|b4X*la#F=`az~5$U5CL& zv0s2N;EnAP>PqMXCmK!5$;qaRldhh=I_U+m!7~3lWGNAgRrsoIs z2`Ua6hn9h^8MQHy9c8eCB!h-J>vaY)$7q=ZYgA$v2{3V}wo5g9ApC*pj z$Phnhw_0QTy@+2pqRK$zC2;nFw|gLvjlxz9dex8+EaEn(qD0mX^*#OJfu|phrgq;s zTvhQgXjYO*o?y6q!{SqSth_=meyjT|(})7F2!llC-#%0H{4`HOVV+trcIwn73gf#< z-7CJHe{f~y?=Avzh^`qtQX2W=$45`SY|Pt9zSb@|C1u7fldI@6uUv`0u2sXmE)<5O zfBY!ugXUCbXVKp=jS>o6wiO-46s=cb|Ih-g;dL91+_P5F>3F>b9yfl_6yKvbU?oI7 zs%HVCOxmn1AQo0pbwxo}*NX?TP1QU8v@T=qZa_R4d&#^KbQN50k{l_QHcKnAYIBZ5 z?C4-mZFw~i@|PcftNR7%<34m-hDW9yId)7MWm?u?(LsQH)aQU14TDo04F4;`~?hqLpeYQM?7MVu@?V3)3LF#Qd zGu6I8g(P{iEu@O2_OK&KP#Qw|%6hm(j+~J0QYJg|C0B!VT7CQS-tg;<702E^U4_cu z@%)^lCV8ERf+V^Tu+=jZF7$gW^)HW?t)X%)!!Nb7m$&A?kcSjnuz8YQdEVj0pu}6v zcU09idpQkOn$J2I6d(XY*?`6G>T}g)k~+iPpK3VKHF-5(XXpOeCP*4aX8y~Dup_!) zE->hCGx~YYm|*}&sSr;H!L*TCsJOcRyHmt|{0{msF&{uaC;4OX?1ng{lXjS=g-kG3 zsN2U;_Msgl1>{DfyZ<}eaO>!=Mf>#ZoDYsCJy3c~lIDTXN9cH-PEKCUKK`xKa9}e2a1=O4^*gQ^h22?q|P*hOK@FEKF@w%T({&uu?T^U#v8X% z&Ph@$96M=J<86+14!1z`5c(6PdT`?htFK#9xTvuPnD+}Bp=QHnC}K1`1QK?I(zcw5 zHy3>3*o4&o62QZAOg?br_j=nKyFDKG@|uCdjbU}!x^w(N9i{x0*%I=y|Cbk19LbtQ~`>=s%<2gs`$F#np8q6soW+ck-sz*g{+Aqi%i~qM7U8C?`xMa|p zLrc~@wE84u{J(rK6%J=2sX&!;W_$ibSx(i?edX%vyHGFi)t{~58jJ@y0dAR_o5vtl zNzrQ*vv`nXa#D}CC#|_i$;;Bm*hG47Zn0Sny1n_lqlebb_>k=dlfIrFx&!>0{fF=I zx0WN-GB~^5maNggL_e$$vJL4rMERa{NC1Tbr2K!{N5+rJ%Ii;p^q~Ed&Hc_+l$MvT zh1J-(>_%01pGWDeC>dtR+4RDpk0a+0{cXhse+CDcee%F%AZzH=$9*rB&ibxF_V{gc zvpaiLQ5Vy`12^!EaG(tk!L^!!2n*q9%ENL}!{4DcpjNigH3T0ocK-$y0P+$tpj249*g`%rUhlvzqF4=cmhh<= z!g++G_SBcHXWz*SPF}t}IAQ)g=3^{L3T;k> zJ)rNF@=8LKShqrO!T#OrQ>BY}K~_KA2(si>D5trjB%{dn{YUDnv%kDfD$ee4 z@iNti@CE`zQ{smwcyou=EC?KO%8N5zvmi7T#wtP8x;JhbS6;EnJ#J z#E4D-5;Z^i;19Ef?cRnyU#wZet|jW3(jf#VoH#T?%2N6Sv zZjTVB(?ZMe>*5MxD;!IE*N8_TdUA}9t3yL`ANR!lSr%i`YD0yUw~Xt;Pz0kbLU3_p zVI>q<4+WCzsV=D%4crbW|H~k;=*5vU;%x(9OUKB+++%@nxTe^~Deerwdxa_GZ~L3R z;D}^_OP#~MlNd$rMn1k6xta|6@@w7po_Z2{f)qwDbMcK*NsGIX@;Gj{(tJ9J*CE?? z*r>W!9yxJ(=x|seilynMjZ}T|4nNfGjsJ#37qNOF{C^ASH1-_A0y*ONICcz1k*2o3 zs_M87zYPyMm%IUB8LiYA&KjYD z6#VV;#czY@*ht6PNIrS`lWmD^)M$C7OK3m%nzRM^j%o_IfUs>y0v30pShoXfPA}ZH zgT4u#e7J+}8uixGj?Zh6vs8_z1QdtyvL{g*VXUqRHgRyKRmiugttN&n1)&dw%jtE1HW`apd;N4kgMn1?Wal4T9NY$iA zi00Y!6cfu8bpu*7vWwH}q7Zutk{nZr7%9-H@aCScZk3&Wfn7xv)>)zRJBrR9299S5 zfaQTtw&B&GecG@&%`EhX`=Pek(~_F=D9q@_RmSa21?ooDjnymTFO6}-bBdbd>r(FQ zezd9W8&V+2JfcU?`Lq~rf}dj@KQ@*Ywnti=m+^UbZWqrwovPObQ_)G;-9d{q#Nvh+mfk!mSp1$=<TvV6FmEG!^7TJ=YNnF&sOCh8Vf_lY2E5| zS(d4~)#tx@AsWd$Wv44)+R|yj$>cCYQbv&?iBV*l${;Ppt=x7ZQ-!bv)u@hsqbpi2 z1mDu@0Vcd~(CtKW!Nt1TZgthiR(w6WyWP9AJ$T4s0EA`I9GU{+PMWrArGjN(*%*bj z^m@Qbwrb#R=#U(L8PKPXXdr(7r3ZR@p2|wj^TbI?G8_6%a|JDL>|$qJwaCxbu*ZS$H8CXd_1f6lxkhcT%sXE*m$=5`X1I) zds;DE^kj8W`)(h$d*{4D8`i#%#^SuCOlecIh^QlX(m7iearp=tIc5G9-~Y|N@oe4j znt99gZ`#dTkRJbNp0Bq^mi`Afk%MByDDJ_+ic&}txB!KM*CW0_sps$A%Ruo!g_E$@ z>~8;jw~d>G)+&_{R7wfV5(v7g>^8P7SmbR<|=||NYG%b;Pez(%fN~1 zIe*PwR`YHK_-q`~A{kF9eaqa7U!7lf)j5_BmuhhVbeVskq{vU`1zzAUJ24V{pkLJWFi^Uma>+Zhi zLKlSy6vaEh)C!jpN?0*vu5H!<-U=116{DmPCyd#}M{ET@B#w(Z__FpE7A?7=;=QNU zOP@G(St#|f7i5vND&SaQ_>BcB2!1v+_J5@Xa=m>XsD*hJmzNLy7I??bTx-RCO{@|d zxX27lO`Fn+B0Zh1H)IND5glk8JVDaZ7q9-D>ln1#uYb!%4J3&YiD^rm?Xx#1 zXG%auWKaTe&#SqJrhzM%N3(zy>)#CR7x-fV!SafPl^-F+CT7tL{t%8`rx}5Jk9{3J zawLMo1T$_sQq=o!V9PA6HvQ(UUhrhwxktO42S<`c7fv~~MH~&Dm+GH{e*2!|Ac%ILz}J zP3m_Y+kQF5jnPnI1n^7_NycrCdEtK+}vag(4wy&rfDoeh|-d<(YK0ihD3$H9JOTr(m@o5zdaSVZ{OY4 zPs>lM`S6h_B0K%H6^+Zfzt*om43i=wZd|cc)t>LUDVIhxoR{Q07=972n*3$-)7rnb zobKOje_Bb$Uo+Y(tBh|y+_I74_+8z*ja#5?Yun4v!Tfu)!$!yHDMmKel~c0ke(=vW z8=m*^wW&_`F;On{0~&V^2+(f0YjNcIi-*2eZ23Isd)Dm%=j!FI{5$sU=Z}Nm9eKQR z&yl+;Pv4z>ab-r=;N({a^pK_}YY?ZeI$Ru8GqZ^2H94{OWdPYv1Gv)Ix!hHpb2x8d^= zoDeo=_j1eD)1NGNLCc%$$ddlm=Q4tX`y9T|s zWVwpMpS-?UYwmHfK)SL(*r-hG6Y@RryI1(mopTII9PuhatMZOJW1Yx4ez~QlCi?j; zKDy2j1sJ`^;I$l^wUDyCQ^Np%1401Y&@dB3;5h7>0%|P06SId*`dQZQQCW|ZyARO= zfg)tJs2A%MaA3E`-2<^}|Axy~#kilpk^1656?L%)PrYZb9DxI6QlQz8}r1-tob*F&u^+d!1CCESevWss^RUy z7j62SE=u=3A6R6@s5L&1D2L^oL@X`Gq0G3+$nefcIR`OdL#N4)ps|=3oz>s?v}$oI zU%SlRA{K`XrPt%I($RY!cDtEYn36hl$fIVQ>k8-vsFbV-OAw_c56fP0U*Dn>MTZl< zZ+AqL5_am0R*H1Bo38C1%`62=3_EpeLfiq1Mb)q7Pm_H)Pb+fPG1X#2{s@PW!=y=9 zA&)CReM&1ln+26hjB+ffmBX-LEUA>u7LJasaY((yN@C*v(AX;KM8|UP<3qkaTr8N3 zjOGC~q?SP=mEY#?`AChUi-fD#UUQ97`vq$_TRWy^B?h2dG^W;L##kaDq9g$)hP3N< zLI|-_r%0$!f!7GaS!WVf@EE7nxiQ5ha#H6;p zNr#YuI0U$lkm z6ag0;6!qI@95f?U=lDs|MfdGlIrg;AT-)mb?p(aRZvvb&Qd3K2>N$l((aG<1%eD@r z(h|KTmRO2rOCS)z3*bPuzbtx;gIyX-*t>jpBN96IU{)$XF$w-Qddxw6-%{@9<>d2E z1_%q#7TGVn&b~gnGe?iTx%O87gGd6>rySc%MJ7fwCqDeUfd&mowc(}+gm;6-lX!ob zJ;VC;xOAdZJ3b{!+Kud#BX_4OZe4Y^d_^~xng`>SyZ4T^Q3=g_u&%sal6@{b2v=qz z6FtOI?pu4@(!xUGw#MJ(aF~TSV_&f+;7?Rvmvv{Z`t6MRp7eO#1Ne?Iz*A%lm}Wvm znDX}Rb(GXI=JeUG&zBT$ckPaJY2a~j?_)pQKfE4>X!_V|TLH2+Vg6PCl4;bmX;HYr z=ZW12Q%5>O+*R9wKKtwxdvk$P2cSQ{dI3-?DX1a9SHl49{W?CgtyUX3CE1Is<@D*( zJx`g?t0&Dk>t9t~970xzoEXU49V!}oXr1if4m`$P0v#d-YG9^$d4r6DNH#e{F~edI zv`4asW~{1gpdhof=oce*Wz4zC0`afP4$l-$WuS>Xoj~*`szrB9l#<5eA zfZs;i1q+^{!y@iF8t#l_w5!lTR@_EjLmCh-gllsq#mb)p>sC%k9KLt!Pm=YA==bjZ z8qb5Sp5DImms3&)kJOSem>wRvv~t{Skipya9g+cJdKy23rRjb>0r3fbz%f{mN!8I! zx*KuQaL}L_)}J9-2N~F7nIQ9@G37`(6u9)D4J+ouF`R^qlGWhvKul0NxNKE(*f&-s znP{3mKcA3k1J)ijczHi+oC2$}ouZ(h4iO>E|I-<8_(4etokN>4&51E5KONiqDQ~LL zPBje|Ib@&%1VuD!{^x?H3KYI`kkVROeIO{L-GD`j`AZ~-RH{>OP{_9JyiYvcx^JtV z%#S)TW7AR(FUiN^+`Pf2ZPct;HwJU?w*4}{Uw{O)zPO);vLJgrU_UpjoJSHGOU+lW zWJe`fhvyUB2^-j;zF*33{y0LufVQ^w8crk}Sr+^q3fg`%l(vs*;6CxMaxmFs;^H-a zPn+fD-{iP-&zU|`0L~Cfq%W=-t!{xSTr5_!r%15mKu4{(w~wbf&U%!{EIVvGna=0y zv#7dEsrNt~v7FF+Y>du~Amte>df5>8DXf>)&{dJF6s`qJhC|nNQIJp*dT~N|?OPKL zox_kA#0;-5HX9aUD<2vl^%{Mb%wpi*Zv9Aa2c~2^u>6aigGI%1^FUy-fCqfE@<;jSB5y#`*KjT_!#_Ql z{BMLpU8!f3Ri9jbdC;G;qpqix>BS{eCJsp;nOhh)4u=8DKF0YQ!HntBHb7&)waS$U zYXta+t*<&;oZkGpyJ2Y3;}-q>xO&S#>yV(-+I`J|0F@9P{-#N!TUrPg6c@1W`zEDt z-+FyKe~O-uTWH(+uk}Zo=eyM{m5^wR65ui1N>Y@F=SJNEq=ew4v)P?|-Zy(e3TP&` zUU%Ijdyl*qw$|3?F`GJVR*_&}|;2}`B|wBQ4peQU&^U>}xwM}{`naR8W615d)^mSO)e4xVnt5O8D zP%=9?k+>70!p7Y#*6q^8+|fi6+|qZB--@*NSeB&v;&o}$`J3);{xAF}tWiom_fbc`vEsucju;8xMDNxT{ zp%L&LcKOB=u~ACWCq|yiuU}L6&hRp(K4T{;yT`6M2wWB$8*8MRW}nKnz4J?-(b)El zjVCxpl}jKQPm$@PgFN=KIiOn1$M>Y;khE)*dcfn>BS$)O%Lz;cX$aiZbZ#o|7lstgpI%K$(7JV~4$T=<$dnxd z^dk`DPH-G1L5-Iq?U0^el%+?i`(;vQ}l%~wzjjOrE$); z#~o7Ej=xZlmMM1@GbRw4@k<=_)Ha5*E;S6iJc}B77)c>`9wUNct_9}RJ4ccb0-(-1 zIwL&)tl$X7Q&RTg7-N$_+Qk~4;rN;3g*3z44r7OO{po04W}NhaQe&7#=sMn!cEkFd z$vlZb#|$S)LOf?Qr0jS{xqtd0H$fZg zX?-|zXHkXoeG4Q9onMKmXVh&23tgyH+5!wc$I)$4i1&rR4Lcnbb~ZVJ1*baDAZMOt z+8iabr-1z0Xdh9g^TB^H$-@d-ZEmne_Mj&63;->1FPJ^>ctQvx{|qoQiqTuF9FO~1 zNk&=sr_Q#ta_}8jv0)1L>HQOnyU`u&MYG4($*4LZW~(eJXx5rAE$Av5%_xk>@p_$u z-(53V_6eG-Cjwa?kLsqLBr2;{LW7B<^3gOXBRnF-&uTn z$QABln%Y-qS=QkSY&N8- zIh@H(+l&4G(jTbs4Z|SA_qH9tg3;{9_gMTvokxSKUWy z{IZh!_oFy;#(72HjI=<*~$!Ri<9}oq8DM zeW0JB?cKH3s>jeoKKB3qUZr4xA=31yVd0>C_%`Pn#Ls_ye&(I?t2-Q4tNUy;K}Fa2 zq3PcaS+_h2WYR!g8lasE0?xc}lh02L-aZ|+WwOez<XeDUVL{_}O8fD_N$e*YYQ`nk>dhri#$?;oxS!SB***svMHuDbgF`nmMZ z!5K3uGWCDiBE-zXz6*_-(sB0d`2m&*XcVTNJmA+dps$h{sc@rKAE_|@$G;xkB;0ZP zouVRUA*Sh8ywGh}AB;^`s)<{zjfJbHF_Jcer7b6}Oj6W#zdcAv=B(rP<8WQ^^+T_} zXC&kwLbNF3xhxaTle~bhAa`@T!FIe+Ji7kUWR`vFVz{~^yu?Vvse+4=^g^f1=Wa`z zQ*BX?=%1(T>kaWExkdPuH7!3T92v|mW1?0(igc5cckEA0#A0v(hD#Jxn>q}MmMh@s0>+ngBaw#Q zkXu=*HHxVMw=80FK*1N1{>g6(^UEz75&M0=<9;sHXS_WcRyc$Uco(|o1TGm{%;hHr za0Cg`n4sQ?$bG~1bwdNesa-T#`NPid#cPLx1_2|6QsGVb@@Sr#7W-U(HSy_Xl$P&C zH2O!ifA;4W5ugAGw#I`Gdf$D>MfJZMV5aGY=o`Qg74j7na*4-Z$DMC+jN}dE)8|1$ z=`)V|Ty}PW@suntfSSd;r=RW$3@MQ>69VQ`Re{amx^FLJfJfekG=C}sc(vtk_O3?) zs|!o;5|k-?h?p{FarKEr9#l!jze-XUKRSC+G9Htr+(Gw`ddK)jM4hcie0SP-NVj;s zJ1dW`V0}u@2Z>&PA3BWhU55-2vn=5$R~TOj11w5rF5EXEcdT)1N&x~W<${6>wc2MS z2x#bg=lZ<6*MjuQ`%kEq!A8PHBSvD$6ImV%+Dcm?A%m3kJ6t^vquoUta2=p%_A}M{ z8Tw@nWGLqH(%7YVq-L`?Vj=F? zbDM3;%)p&xXyX({QWfK1^)9oQbrH|g+VaPQqjOv{7oQOrfEUn-E!Hf)~{uj_T(oqM!GEIt4uH) z$`G+mAk#dgmd%@=L(_1L=DsRNfvisvCNr+YX;|81aP}fGqy0d%%9gd?(dTATAke2o zCPS;9;Amju?|g2$^7$niPEr(HXk!2}*U(5yNQ(7kR;0LP*lx0-=_#*2k8Y6J0Zi=@ zhw}z5!`9HHJr7LE91fb9xG&$Gl1cIb7h-6iwQSk(o~PpDhpSuIr5`xZ`sa@ym-hJA zS_cne3BM^V?Y4W+(lKG}`p){RZOfLOb2)vcRDJ&Z$L(DMx&)OW=xzbaQ5|^mhiY>r zv-H%|Z9#y_8!3Vr9odrNDTg95WK@zpug>f*b#rrb3p@23oWL}9*54>ah_TsSgJy3JO)U>l49e1dIA@L*_G%llSS2=>8Lq}c$bJTyg z=hu%E=3b4kYp!Ic-Z5Q`*V3JL?~vKap}yr2@?yzJNyTAl9UZO}qa(V6@+tQvWoQ@f z`-vy(D9dtKT^p!A>?4P=d6#7LcyZ)?Dj$qT*`i6~#v_PhsATaT`OrLvyjYnnob{2E ztnsT}N6pdEdc!H&yqj&bj>vGIbCA0(ylJucjj0udl2o3-49yFaxAEPi|4ua{jnJYc z%PVu*%=Tzw@xDJz)wtG2=_rKVxpC{(j-b1jBOjF)RPuBrpMQIfu}byk1yy_At!_OH8se%Q6h_xqnc&JpAoPj`7Zpzkq$(sxq8I?XLK<*)NIo!k1*(S# zpVi*fVNER`aPr-!SD;l&+_!IJ>${UA0I9Na+byMcq)Jh?qX~XveaDvSu4(cwt@iD? zkGBRDzs7$+kY=EHjF$@m#dtmE>ZoLw_VK5WwM=O;I&+FcfhL_FvIkKpt6Kyb8Fjn4 zSJCC4^w6OZ(`uTOOx{?#%E0T77A?+mnfHzf2H}6oYE;QCTv*GwRzMGafB6}tQ)Cp6 z>f*^I$cQoi;Q8CPJ%UsjEPzTI>2j~!+P+CsCr_D@Fiy{P&H^VY#WVWQ7|&BvcE_^? zEI+Gdce!^YKX&-|Nt5)%y>Vydol?|IY_czpF(_idBLr!>js2jL%x9R(kh>mD<_pj} zP(0D%m?<(a+9RsGO}hirs4%ZReQ4*hqTov8Ba<(A-!A`)89HD0KQTk~O3Lp2kK9Rq z>6)mTCuYr+2;vfAhH=1`&YxfF|FhOw<1knoO$3l{AAxflx>HF3`-G8>rVmtg{U882GQNOH=xME3iU4`+r& zPfAqvN_W2?G+n%lG@yX1(ZveB+>OSmX6{~IJz|=4 z9J0cQ@=b^afxRg;rG@lcLk4=%on^n<7W?SZd4Qr2X$6OG{5XPPtCW(CN}Y`%x@9I= zn9Nde>Sj;MNov93g$wt>Tomk^jM)sBa&YaN1pAt0uypm_2mDo{+TW}>VR&fpCpK2} zesKwN25*?Y>jVWAqJmvGDtR3$eQ*1kgX!rbnkzYFyPxM9xQ~BUW`0t?emxRwjEpYH zesbya1ePKfROsf&dUBBvULm9&_kDU;VNE!KiQ<#yW6YQA-;!ActZP4R+&PB!2`-qK zl{E`8Ae}L2KqHyA<{0mIedj#BI?-?O#--}za(f$66myo2P9~5ts75Q)@*+p;Wa>ju z8MZ>o9fxd+U-+3W-?gR%&SgD_Z3Ww#2>!^5?#1EAl6jtQ)$tYjM@hqGmc(CBF1ad` zOCNlV^NIU@8fnTQET^bVFH!#htIQ7fiMu%I1k`I6R1s|BmaSS@aPF}~>J!VLnEi^e zhS3m9)BS5^OJFF)p^S(kmcvpr4?zbPPy}U-#`_yZZ0iOrNgn0&<*!;%i+0`9FIJ74 z>l@)Q_bD^|j3;TtpYYKR?kq1sAXsNUaKDlT-wjz-QrvUO^X>xGj{b99d1JlyJ$-zf7v0osQ!m4IbSNH%IP-NA!*fq#A?>OLP; z7(w0oi@%)$p8~N_Kra`8VQl0=x4IG(QIgU?55;Yj#J67CnP!Nu`XT~**JtR-3x@y2 zCR8%p>emxiYVGQ=Wo6`q(LXrPpWmm+L0d4yGJ@wh=|$c%m3Ub$#XopL ze1A}xH<)BI3cjWKL&2=zM|YABRB=xT4@<)#843#Y2qJ6YSi+&xEBA4;n;C)sBjFV^ zI{Cnl2KXQL_uNwZ<-H9MCi*=~&3VKaFoW6NarN7wqoh-^yf=OIPhX-bVEnp8G6jX@ z@Z$cQJ+p~$pa+Dxz5<3X{?YL&!`!ua95OHmR#PS-U}vx%xaQ>bVkm*-zkYs|kWL6G zys|RU5>%09Iy7Rb0LhH^Q;;xL&a}nY>H;mz0U6~1Kmd~l(}h^|zUOAVKPn99t&>IB=Y2gAaZ z|2Cz~oXyBZiDZMhLso{V3$D8l7qP~WQ;kdBH}EO6N5zEKt)JJOo?NCOU|IxEqO-O9 z6xgI$vr??OFZe$fxRe{w#x^IXADcJry;V$22&ookoV_$eQo*ohF~H6~(+~qe-hqb2 z1U@3$KVtM81r!BuL}*djhr+M3uV25O0L$gOdH2Tnk#O%U5uoTz;7*e23Z+wJ5gN}R zW;Q5L4%;21(-awvYY%75i*Rf*G7uZ^wiO3!xqtAo-vkD)PH6gX8meWUi4pgSNYOcm zT-ft`xJ3}A!da1}XuV{A!kMb_A1!X9lm-Eb$nv_H(gAR58llQmlPDFtt(=p0 z=2+dJi4!JBfE)2MHFQU+mJ2oFsY|)i$==Rka3l<}9<4_3A9cUp_vCxkSt(-$*+fDk zB6U37%_R19ff>2Nd_TW^b=P-P!c{1Kqy!kb-!jHQC0X*3W$G=6P1JzJ$^O|*9o~Jp z9rypAyh?eyysdegi7WR##xD~zJm39A-_LhR+H47L1=ItG{~TDFZcoEb9SSpU^{+bn z6Z_sDT7m2VNFy=WI(59ppV@RX%xQ2nc%SCDKh)8QH+<>xWw;fjTkO2PFmICs^T$Ku zT8|nPcA$ZoOvTCixxt6xl4+Hjk=va&n(%KLs=D`|!gca21dthaP4CFgCx4$jsj;a$ zXJ1~tMH3kn92y#Gy`+h1%EbN`!ee5381M4!XzX`ofmw5KQ~q^ju-D1E^x0@tsj*9a zX9kb9v|ML)UnyfxJTf4TzObObPn^ilnr(C6YD{w_zF*Z(W9B$0JX!Twl|x=kRLd5K zQRgDeB&d%}dO622jndm-V8Qr3Y8u@q@;NQ7w)%vaajvhWZZ%V+w9S1yxq0@=ZD=q) zQO%inTuy`Wgx>*yNXoB(qF_Z-61e#fhHk==E!qvKAtl~0@MPIpGnLyzzP3jqQBX|* zc><7^5;-DyTa1lLG6IyOwQ0yJ%B(bV)ML^^7_;&?+Lh@IVdisD5O5*UJ{Wy>3&tfQ zF@@Y1D3>;AH{>~gBI5DtOS%w7X+0-%Rt}ZH^z8+s##2_jdk5R%q5`#piVDpsm58## zOt-q}WQuI&>KF4GW>Z2MSimDyQ;2dfeNcFk1XmFJ0;7GSk{E_DwWN@&A2G3ZAZD-% zYV&`kzTCBZ3F?-Kg7JD;WCH+LY%)m~7KAE5wfhcULqxB|8*nJ5(H%_;gfhH8KX$-kWi(6N7)&w|m4yffYnu<# z`+tyIZwuDyzw*RB$G5uxp|8XI z{gNcxqBJO|D0q-7PCXe#zZmLj~scFk6c%- zL|TMBvGn$7-0$;OjQ^z4^xl8&|EA0eTCR9BY7h?t`%KT!0yRyO8_uuv+=opieFOv= zZHlP05qoi;UM3{^KXYZ3~cvONhv;$)!g0Lx>>LzsQ z(IZ5Z>7H?9fA9>w^4=b7=J4*$?<^3BZU$Mo2nYgUOf2SZaM#<;m&TVSOu8Gf#N24T z+P~sf`v@Gc}ZOF;4@jiu4F#wArl^t32m*5GIDM^(f#6fhS|(=Wko+-UuYIO$61 zl}-_#jTSZ`-(3Wqa*exQ+0;%F6etICkjBE(>|Xx5-Tg0)|KJ73AB}F4-DM1a+9110 z5_E3Y9KT<=f7l%SmlojXS4j~G+k`+>G-xz=l4K1308~|TWmsLOM}=+cG%2@17U??? z`1hHHzkFeBl?S4uQIG+E6!u-ltWK7oPc$~?bp9^RO-W1~dH3X#jA>_w7y3FEY?~-9 z%ju_2-kLDyrZtjqK)u=xCawPyALj0}p?FhN3G2{q!i3pAE3DT;*+A98{2Q;#DN^@Y z!geZ1^w{|ty(a<3Rvfsr^tKY7mq4DP0Nq7L5ZV@W^y?XSs+_bq8 zJ+wZf=h?H)&GZd=ttOrAKM1wC23q&pax%-X0^#y1Ro$(Ut}_y4$&v$~V>>3Q`Rw<8 z^zh+_x2HA9&Iu5u{+v18YCe^b7dadYD{sTHjk$4~0PU^BrExFLjY!Fi^vyF8T*xC$ zZM5fcaLr1p%VAsB#RzZpBZ|&U_E2C8Kf`8fLY+nWe%zCiI?y2XnR3bU*^hc(5Gw5R z#3Zg=>Y9WuW^Nstx@r9=?F)xC*1;Fr>puvx%Qsf<7&iYu@n@qC&zg4}72ZEMvmX`) z{U83DYU>>NpP0AREk@5f&Qz|qDp5D6#DqG3JLK`}vm4PC%VHU{_3@1-O+qb+XFK6D z?YoYWOT&OQ_Nftdo=?2~@#;oxbThhVq^8cK%C~)d#kRQ;RJAQGj?S^YJU8JoY1ytF z!cR4z+&QE^F=A%&z*5!hD~C}CBQP6V@%Z%YuN-1aDjthc63L@fEUau@Z~L|y8rRsf zm$@#zeY%V?{Pmzc8eXB{2+l>HgRD}X5)$z8koshFoWo<@++rKxD!*L+zSUo*TR#J? zeaY6raMhft=?Mu5XC|FSjKI&T!8e4k31P}zXdIRMVLo^UO~4|2#^`En_OsUy=%%A1 zN!Ap^+-|~=4gPY^#r_9KL((s=7q4FBApBKw?|-MMn%Zj$Uz$sno~VI!9&GIg@I$J{ zX2_lbNOF#y9uHbQ8ZTPPVZUm|N{spG(?fn${Q5a8!K%vWeOycKx8+kn;|l2JG-UpD5{%W~dr((Oh{A zv+t~@H!>>(4TOYuB6E;fR%+_foHjEeOw4UU_>XM_;slc|6S5^$+ zI~lO@OS-?20>K68II)q|OkYvfRVt+~6;GPEFMU3gv^bF6!Bu(Y4^J%*7c7A8HFtL< z07)jHA40F9&6bch=Jj^xNBa$M;Kq>Is+2Xh!>-+Uq5%3lA&mykPF+>aJKm2Ahzs@x zz+mDxT15e8fN=PxbU{960u+#dcFe9H=afWgJ*6T*oZbeNle9NH=&n((WuDFd!h=#Qp2*l=8Beu4pXPz_#YXmvUc7j*?sd8 zoHAas|H7uRpCtT)W@cGg(#}XDkCudpyyT&T?+*Vr%{OHK7Y`j)lL(Due_{~JKjXKu z?8MDb{Uv$LlkdHpv&YX8p%i?k;N;J-&+;?5o5y%wRYR~tjYg0RRrb{`TLxd?6l|ob zy4{r-i8s9to|gTAVF@3?Avj8|?yl_|u5HqpmSrisJ5bLyj)chlnHkk8417Zw$z z9~3i7C2zr_MiP$4ogrC`prAW*%oNL7y(ON;vOQH6Q+GX~`*NR?#CC~FH5ldKjH)w2 z%g{RLu3NwU`UPf1jDYh(w<<)-57d^4#{oWm8)vXk>O>KYwt*!bc7p@fLI@u)Ap6L6 zh5_0eP|{}|q9Cx#a17y#oki<@95p=mUU0l#Fbw!CclUjI!SRGe>j6RDIWxg>(W0!j z2#TBRPfhLn?R0V$RqR3(tp%TpJdgZ|=yf4poE2fd&~{w_dd3g-d9zjh3vVj;_TbN( z^cn{6YK#!?QCm~9k)wB;Yn9Nqmypt3zaW*v8Nwg34wW#e&kp5I8)lixhohO14>#Da zHd|*g^|k!R=&@tlK=u)y(`|FxzQcQh)VN9zTd*Ka1zy27cwU#V{s$uh4!ePdwcK{T z0~dbuaU`*2wH$fzd-m*!+_A&aCe44e^+D`ob!{xX2M7h51J+8!RgyCpn>aA`~AC($zpPO za#-7$Lvy=BO_4Hg36Ckg^;pojc z1nm#^GB3tGn%UHEkU`Q1*wLQ7d$;CkF)hJmAq@PA%<7b5k6RpLNf_eD1BJaV%Nl-> zc`~cRZ?{MfL98~D`q&_2=DVpwwGf*8(??~xa@=XD)k>3Np3nVI6uwJ z(#~#M&jXpD102U)VjJDV>0{m6F@`olj`3VSnc2H$N%?py38Q#FzP|hF6l|SYhh0}z zmj_X`thktbRsL}TG80~$O|c|s;o-hhhCy6~yzK0nLF8T_*rSg>qVx7jL{<5o(z&x| zTVVKt22_Zn!;bDyoR1X)143dp++Mp~$My~CDhsCd0dh_y_e&;e>5raxyZr8XW(_`V zYGbGVwyNEc%*<^=%qJe}zjVmFV6DgieUsFK-G2Ts&QaUMG~poah6SWw95M5MTN>-{ zRCT?n(GOIh^BsQQuzQylwCLDzEdDl{fSo~_7bE2k9DY&d`rVz6S7^=yrcth&#;NI1 zRoPUP%;EoL)%q792YiXZM547N`I2}e_o@NTD5aY#tz`$w?ZB280aFHUn*i*&=FXEB z9KkZd3GlV@(jQ|Nyt>wkAQJ6%o0w6>-45UI8D&pj+EVU#&uwccHq1fNV0PQREPxV1ApfWbYnk(a9J0XJUGqx!?bqH|o%pALi6X~lCP^{ZDhOf0us3V@G%)i2S9Z_NL+U!Do3pBH6isT~`*`@IGTcCFh)WAQKh7J-%` zMMJD3e($wU3X$Sm=X?Rke2H`;>o~!Ri?B`eT*PCKrzFT{?BZF$T1F!rygzXZ znS5{U(BxBpxTnk>#>@rq09Sjf^S{@P$q4hZjAPHfJY0M`lU*sDFZ`xx>^t8a4(A$} zG1dj?__b9^;&TGKUB(G6nLGUA#%x#h<;IT+2Z#i)8llpq%>-8+ObnWU@&e}!sr}!5 zU1HGZi7Du)6qXDbpJ&pt*z*X{a%gHveM8G77%(LaM?xn+ZIPo~Ti{0x(79oK*c)eP z-{18KPl;~(+RMgGv&ZE8n?e$Ggx@6JRtp)7#2|5C2kccc{#q>IVy~*&W!2Fyf^*XR z(<3HsZMW=ftP!e{Lj6kegeCxb@1W%?R?PD9vT=1yR8RhVCI56G8mdwL{%2lxoHBW` ze$CnP9}c6p<)8iv=CJH%_1*iKF6&e>@I5~}?qSLG%6l!}= zyJ7l_v%6uWDk=Q_NL>l8gJ{NEhhsOru7OX6gpm^e8_hlso}Y6w?q3w8BN>?6_Ti?fyKgbXh_ zc;}D0(9C`=*9IBup8jg%^8Q>~)|e@&5deGkU5*Ydr)V#~wa#7dban5Y=(9VMJ|kJN z03>YNrkGWQ+EHCG?yEU|kI{~%-Z17#6UP33P;q5v{;L%%;`xmq^J%qZ<}F4CxViED zs!IMF2N#y$K{F7bebutVfAWI47(923p)D%Fo4TU9Jcq4F71mu!&PkoTn@($X=>MYM zQkU)%ku4P%R|An&=koLIO43rk`0Rw|!PRsHtb5|biO2|t^CSojQh186>?tes6e=3L zs^NeFcpyL~!lvEPB`b{5z={8GQN1bor;DoH|Hhe(N^te5cu%*9BK|6;$ccq7 z)~Vl}`sULia?7MIU|ks7SG3&b7p&m4?#T>(15PikGiT0UlZPxKHR2MVH7=V<={TuEjfe z=1YdJ{Z6?f<*f7mn8ERBLq$Ne!OXIPq_7resL5*MZ7*}HfXDuPsw~Opj1S1G)rW`7 zTJ&lZEM5~+A{USWN!Qb_OaAPh?kf}B>b^>j8Zet^>^MDvIb_V);yWAifMc>M!_phvd=qvcDvRC}wmVZDA3V-jZ7qw^smz^&q|0^WFdYQ9A4di&@5q zuUsjOGa|mG-78q5;X8I*##ZL~Oo6&jT#yB=TT<=5jGD81TTM2yfL-JWiA7B@!WB1MLop?Cg5q}gOxKS@oPw)B!m9Lw2_NY1G&VVTDbKp#i$(3( zd~AcHw8{H{)DZR*GUVzfRO?fz^JW7vlHBXidZH9>bdBx?^^;>h?ILi4Xd*asyfWaL zhIrb;HQbKa>8TS0X8tKe-C`SJl}r-s-nAANB!@ZTPg9nkOU~{J&{FZ)arD@KnQVzaj4n zw1hco4Az)+xxM?aqT21o?$>8f%%O<`liRto4a&1HXr_)?F~ozYzBz>Kr=ihhxr z7Y^Y9ndqt&(P796v=m4}F~bdAv&5?z!ha9fOwQ-2XI8Z{Yo550amfUiX01!bg?j%T zij>d~2djkl0lpt#@K$_csrAKdN589lJHPCYr%Za;O94=D<&k<6um4Y*NMZ+XqDcT{ z`+s~;>}~{Zl`o>C?~hNOI5Cs!m6#b8pwd%L3sFJ6f1lAUqt{{ zX~*QNE)M*WxA*g5CGXOg3}f3`9LNnu^%V^LDskC&OQX-Z1O< zy2rV9@7|3o^rM3n_;Y(Rt?K)0Q+?-{7g44!#@}-U=Xqnur~jY|W!hJt6*E8{3Mh+c z>`VdjL6M`Pa*>^O35V+MLfF47c|PxFfIpiacBfCB5*;sc9;iT^T40uD7#2qdMb)g# zXYv%gX(UG%>Qin+nzzozyU=?nyx(wxxHE(i)%jn*r{y7842Oh7^B#8sKL0b= z$w$md!r0-QMI@5taRc7UZv6NW&;)!g6dm?4~55RfF_W7U>(U}`HKue zs1iCVpyh1UDhF|Y4!8oYpU$9dTogE?yG9{=hDb}ge1${T1MwLcd%f&Xz_%U3i|_WY z^#G|#EPZn@pbqxgy)ao7J}^8;v8v)pM-*D1wX|D&BnB+hcBy`M|Bt7?Tq;goj30P% zSl#T@`T_Pz^;#sv#a|xPbJDEwJJ$y(!T|J_$g7tT@pd-0rGH-;E4c2gU( zd+)`R<#= zU;&A%eq{*05d=ggGc+Rd&som7H#q#vr?i3{OJ)@|ix8Ou_xDgvkxMrUzK^CBx`;N? z_-!#zB@DB=|>?PwmI2BHq9@}Fc-4|DdOrIpZ7L%G}_@-Ud zY>d@hqI~&SVvI8j(-|2yevm58Z95qhE>l`9H@DwNYL2I}wBg)E^5a~!dykqUSlNus zuJFwI7ke6Qxe~a3y^6Q9_>tLDlCdq;2JYaZPlK$(7z8P5Er~qipZvINuxRv3;wL7} ze{x2qcu}YlM<&Dw_n0CFtWzi^awb!gM)eFCr3|yL)4G**4;EL>v6EVw?{XVpKDa-?%t?cTU#$C z^N(>=86dk3dv^AkqO2f-3V<-*9Xlsn?ZMO;szt~3r#u@Gr26!8O_5D@63>c-6@TJH zJ2KZbdh7@^Z$)4)gTjwirv@*2dxLRG7JZ&f49eOAAa~T$KuKLO4>N(Yn_IGR&s`%r zoAEsW!I(bsN(r9YTfUW%VTm=(j;g;BP{M0kXgW!V`%zw= z1Sjy{q_kM{nqf`+D7<_g#o@K9;{mVu&KXP@QxY~$b#84v&8GR?s;dw*gfwPkWL);Y-rDbW;=xmEo|WV_|EZAoYxKI|PwwTmwtY2w_HpYZds*dY zL!RNSJ6~xvyt$H;0c7ENOr8Ad+hUB78~GsPdMs|gdd%@9{RXEu?Qfd7>(<~Q{P_9G zr6Y91GtYRgd9ej`#8#b}lu7kU^VIH+S-1Yk?-!IGI$wDu{{D$If&cvVVyw!X`EsuU1xE03u8L<2f*I?k07pPI^=pGAZ`h`TyujxE) z5t=rVdM(12e|p)d?q|hnN&hEK0QvPe!w+@0P{9OTd12RS?VoQXdKluz!r9q*e?=pb z+8LI|#K<0o*R_rM_kRH(w~W`2iL8|7M+}S-WFW?mlnYPTPNQw#k`0eTeGCuNRBVR;H?<<$-5N00S0< zXRC`x;^GuA`^@>VJpi`L{>8pCpL7Wuz&c)=K8m&+!1m+woF+5@$`T+sPHzO*btS~$ zUZzV#q@Veu(bDg>k^*fku7nYA`t0IN=ozP>np$U3Sy8}S+8oZz+}l9w$+7tzv0jeX zS;K>JSUCQE`SDJ;i0X0g%a{nxf4VQ1XBUF9xB4@v5$U)DBQiT;otjoKSYrMMOGZAA ze?(X=El_y5jl!VVnTEG$p9>9tg%E5c-TLTx#&b*7*e<@1YVPb*cXD#FuQw;jUY`ybVaWWalHPM}=+-`(=*jj?*~0{;+^ZAhX>MxUw>}Ru zan`Q7aC}#5qoUe@KU});{97Le+n>A@vaEU=D~0FZ#lT=|)a>SvgEB%D2|NO?{W&ib z)sGdf1|*WyMGoCS_BDTCn4_R~p^+AoshOE>LV)dkGo6;HBkS{U6B=xF>vA#q)H-dZ zL}0OzU_+c8+hSuwsl(c@8oDQVH`D9HF9f{OSjGxteLUoLQ-fSMMnL?bur)Gr19+@6 zJ-ev+0Ro!0Y#FecA*2MISelzFN~kf;#tt-r7G&dbZxCOy5idq@=X&GPpAt?ap5I<- zi_vg`b|BhV&mu)fy|10>x~KFuGEK8{zAOq31(Cb*tXu=oO*Qg+ zb>!$#$M3soni$};{-oV6BxVvg3ZNy|R78Y2n$f1%r4(DWwwbY9b>o>i_17RxI)C$~ zt=FjuCIhE4@|DVwL(I~Zt%PmDi#J;(BjYK}P4X-Zvyb`1;-FLFUI#HcA! z2d8&rxm)1`hJ|fxI&;~MhzMsu#iFm`MnKkR0X{1;vZ%82oAx&uc+qXwOn;TQ4TSzrSzF7wjY>u)B)3I(GH2f3dj6_pyXE!_Af-p=i&bkhRmwjAQRbAaxQ$r(ivN|J4 zku7yamTR3k>BfzDE#Q${dGGoyH%3m@u?}-(&qv`OM*HLD7{VmUfvZak#}4ay_S^F& zZl8v!1!#{vG4t7PT9+~UO&A$lV`K7Q87(+#Up+7wT-o25VHT!QK3@Bw7GCaI#%qNWihNc{; z`vYa5va+&0il&nzHe*Tc*{4rR0bJizR_LzU_AOfu-#-Wh5w}7ZT~;USFcRxhOYZq# z(JZ)ocjuSWqY#njvi!F3=w9|Y`(yZZht0#_K@!3HC|j(rub%L+W|jOb#@AVHb}a31 zq~S(G=G!jk_Q{2%u;0VL-wBIaRkvgEQTWUY$)_@cZW`*(#)@TqE7~|@+x0P5(5&Q2 z!yE1aMjH+j=cem$D1V{(`MD`*UF7Az^UgBKd^bgw?O~X0QK_fTofXYQq_Kr99j>|YzTQ%zLq{PKJc=!D1)ns%g z>4=gG5|^1-x&5zgo&?i!WzBnhsu6A+BA^lVv;z@Sin|vt1sqBfHI6~~gI#~NKuD@JS$4D+akn3P_T|q!*HkzH*Peg>Q8Y?hqyQT zbrw*eo&v`GbmOBBpKQB)*%A(lks2yQ)D#6*fC7K~^vXuTlwz-F)&s&h`Cb*V#GAUg z=`t}2lL%6!W`F$g2X7n^=o;;Yh659#mEEjcQJk_Y+{Vd&}Ey?Ou#C3*hYQ567! z+qP~s^>h5<(3OV3pl{#3<#}|V?~g^a3BOxhoPTD}kRe)JR^kQ+z_m*1QIqh{DB?v@ zzewXh0<;%=csPJL+o6tadi9!*+72vrbdIx<`u-MaQq)m>@5{(YO4=WP@Ravj>e_IR zjhnB(TGah@rb%}7fx zbfYh~(`o>0x;BU$eEQK zIYvWMQ*LH*+?oJI{1qFk#ceFP1i5;Fz4!t(OiWB9ONUUCV33m|In}EeS_f3n7FP)N z>5GVinDwKoAd;$)VVCH8sIDz*6!&${dD4oimHDb%6M!oO`!{0PMtseo)40&Ity@A2 zYaFYnSv8a~DN-OTcs3lOrW3PDIO;H|2W4jV<@g|1TBdOl&Ni;kf(~0$2FE6Bwv{A%{4X7-9-NNZO+dQTQ;MzF z%%AtJ{+JGgAYiZ29thKZY129|l?B%4JP`D^ujDlEJwb`vMAr#oj%uEYNMMZ8ny$Ub_m{dhE`UlZET zk~0UaMx6w;?uFbXY6FXrsL5`xLAYTVw@pa&kw$ulPBH-r8>B~%v-xsdkD5J7( z`=4_#J*`~E6wbB^L7M7u?%lc~H&alr44BeHGd92fEvEH74w*z9`aE1dsV#d zK<3DlXC@FxlGaZ!k>sh+6Xg**mpmy3vC(A_f6}{-+BS&RNVDf^ba9N%iCLuc<>N@`l_$wA$w{BJm zpVM2K^gD}yzc2k~w&DZ|Qlg4vU{EGB2g4_~^g9}{ZVKB*rdA?VRMXYfH83%`%&t4K z?)ysWT1lg3(4Ny-6hn+$kGWNkp@Wo1Xso495VbcdA@M2bE1Oovw;Q}{L5!Lrhd*Je zW+@e|NVZ~XCo!L*Y;&3}t0oTk=i9r(w;2t*j`bt~zqqQ-a}&A0SVC^Gq=EAgegJ#i zLw_zUk=HI)uY$^nYuPG@8zoxhJn3$~XS|8Wnk^^}L4}~P?c(0pWULLnb*P<0qqDQu ziRkcf)6Hk38uEUlA%_#X8yR9DAU({5NbzJz3NO@p%9fMk4h+|ib%?^CW(raULM^r4 z_Bw6|OlA8=YOLeFm<33Nn94--dnhDMSdOxL*xZXh zse_WFLFS~U0op#jbAQDyuYBHsji`hSkuZ!=6>+yqKXcEe-4goJTGk<*St>TbKbER4a8f zld|rp=!+n_=D+~I;Nu$1f*N)be#fw&}8Co(fNr&ZYX0;lO zwE(-sI*dCV1}|F!!)>M;o@$$n@!%sOr&%a4vlZ>AKu9xCf^d%O{PT*4Z20hW;Zk2C zFf^wMe>G;WEFHcH*Z3pf19!}-J zyef;*Zz)ZF7s%G5M_)o%(bO}+J-}A;kp4jvpHPc|s{KtDUOT`gw=X^Y64j&xe~MHH zO}lgOnSNJ)t#gop@^Ho$*Ikw@GdEaWw+fI?gOzN-qa#i`;h2 zwV%XcDyaJ}R1lUD6W0!t7p+2aj^kz(H(*lVnO#1wlmR`I&@zNty1HJs@o29a+7aVa zLrkR#KS0fBN6dNJ0H+8-*8_5o8#<61@dEjBg2G2XbF{Nt3nA-Fs>mb~Ah)aODf>_+ ziJftWKRQ-KOQ7JgRG%j?R6Al036|JUqENso9#8i~vo3w~}^SJ-dffV#A zv3?XsztUt@0hcfg;*Flc+}nx@KpXDsVtQ-!*Wm`Ev@|d_wiq$uuadu)@D}7_a3wl> zdNzjO7VEfEXj{KGh3!mU;678vU_WDdN0&n7x!3lq`nhbIe$loS{2%T53##iI=_Y$u zEu8Jv?3tmb{v45pQO>cftoWK1**UA_Yobev`f=@_I}hvlHtD_ey0Hsi%!(W);nBYWmDQeOGahW5Xk`#+&Q3oXL~Q_L*?+ z>Y=@0Da}DY^2F?^cT$`;%LX4E!vLz)`};v;q{MLdTJ;DGM5_CMl3luqE)ef z7iL4?twa&4O~#G7mUvC-Svo$xRm(Qbd@kZt2XIGUS?|v;% z>7>88rjnVAKVT}-Mcz{Of$6>oVftl%fUw{)KeDpL{kXAn6qdZW0T)Y!Wu_I8H)8Q( zL#i9DshRWU-MVq7$%EhbKy#(Ni+dKNmO;bga_Uc^qYCPYv{?FNJma&2k8Y$SAkjyK zQ0yVNLlpFOedl~oHO=hain|j0>;)^5s*nSlQXF#D{%3cE;M312)F~e02%O2N&sv$u z0ZqP70}7Xj`C(z~bUP1*Q*v5H?9JIhvwxA}3h8pu##E|gs5OOgKFJUdT@c3s`fR=a z>K=&GXj@y4m7hsilH`nWOb%rf6^*Ce@?Hdc^cK*M)eWSZ{kY@jrCb)un5Sh%wD21= zyGAA^0Xo)cfpU}Fx}~OMmgm^rxSdaQfkMu8i?SXmPRFPWuv5x4_-bCBQ$px((_&|s z7VrUTb_+V8;`zLbzUUj#*0+a1Wc?wwHx)&|d|b#PII;i5(^N6-8|aV5W8ahd>Wa@O zT8xJtY&or8?X~^aSo3HZw{V%c?U>F(#YY&-{d|s4`P!R!PCU1-Kx@QINGZ-62AEV05 zH28BcGUm2nzY5~mI`++}sma{Or`oYJ$+8OIXkk(p;rXUo{#%w`quL9L{z{TY35#a`V%{Q7a%Fb(}2hr-);(`ClIrGvvC5QQ7)UkG;N#F1B`OTsMa6Oto+>1go+NhE4*`ooiM{#zCu*?1!O$_|9RY}Q@TTPc!fBD3sT2@vh7i%Td*%)f;U&2@Fuyqq z`=;LQ@M;-57M!!4<(qbTEZwKagB^_MK+U7#{v?58{3nZdfgP>WiiyWd3ijMPS}*2P zd0~%fF56n*5*R zLsJ5}V`@pI@#l?FWDg}pHaBt4)v2u;Vv(tb6U93Ec z!|~gyp`4q96s5mDST!fmcKPbDv3-?zOO*LUUle~EgX|pup?TvV;#fQjC(U37;$R#d zZM5;I`%L$U3NO?Z8GdEAFC*{-TqrsaS93VtqvtH+XhW?xGbHY6;MbSEdiHek9b#oe zG<^QD`_sMhmZndCVnP&{zIRPjV4!N6O82^VdVU`wXYQTe;Pva*E3P#6dy!XR4Js=w zre}icxb)uHInBSFp6T%TiNlq=u;H?3RV z>IQ$t=BvdtRQ)yHwcq_c{wl*ermOZ>YXF;*6nn35gtK$pvhQj=D%#a=jbiF!Hn^L@LRlQ~R}I>?_HSM&{9db-n+? z+na~=ysv%VzZ62q6lKhqkPI0zB@&qm4Jt#%ii~BEp(3FHp^~vAO)60#V^Wq(&8&XE@LIbc%)rMa|LSuNNt&mKrptI^ift z2g#c~Z=MQN5v60W#_s;zyHg3*V>wI22KoIH0>;6gU#F%aM(Vea-+jpdLqXr~{OC;u zYm@BQq~FHIzokr)uO5{NNK$u*v+W4Hkf8qNqW`cZ+7 zNuJfHe%F`+qmL8NFoN0rL>@E#34)qqFxI9VYUVld7<8r#r4o_ zRw19-d%aEsY$kGh{Kv;?`UHgGHmpyfb@~3%O93=0GTfd~qS{m|3LU+HmOt0h#K0z^ zyx`1Z}4f{QOHhx^ai@VTrB(ZqeQmsfrN-igu<)@zz#@hEL| zRdc2c3Kt8+CH}k@hAT!DUp6>$-0cDq;P&y|yH!e?e zSLfwCbOQFi$5XQ8K1Z6fna~m-3T*>}py0YETKnz2Giq(uDRsZTf833iITm-{Ztyle zO_DT(o?6Vg>03S@DC{{Q+)T-s>xvu8N;O@=qheFYPGU>4EUs?d&Y&#qb9G$zMc0(U_L^0x46mYU9Xy(o1 z8sUizMNRY(HTvwXrx`=@U(}sJdE0Tj{!iXchP#owcyq!r%KPVZ&f~JOvZgq(uYdDa zh>u&0Gh{J62XKqILu1?tx+r=ZslEO^OU`%Q>qn)Gen_SkKmz_Fd53+u?T+$BsY{lZl5jRCi@3GTpU+u7ht z>!$M$(qiwH-z7(U)W+?{KAw!3HK4ET)`?&D0&WN5LJQVt*RE#EEB}ihodtjUP1IRf zfU%4lU|<6=&$LO6) z+Pba0->V0@59tyqg9QP@f#-l6jD6StjK@9v#xh7nx2$KF&6oqwWNbQ_aV!I>gji?g zODG`ctc*@ZMSP@I3DV5A0`z#)d}{9;d>TM8rSKxygaaoY2fNVJ)C^8H4uF4U^1=Wy z8lSb_PRHC4gM-FmCjBY#7|)QMN9{u$*oPcL!1g9AMv3~Qj(7A5l)(-33zDD0SshmU z@j)(~%3tU|&Fvbnz-3aOBxlDyvOaF(#qf5s;V>w)>|;1-5iTMVOTzBSwHCO`VHBEE zx`v(m_ctJknZ5)fMFp@xIc#qi6mpCa&;;A2U+1<9tF=t|GIoI`>gt|!t+mW=K9CWK zXj(KR9}~GfB$O9koDzInTK78;l%}!nE2Xc(6OcddR*|hSg&i6RL=(yYrOuI0;5?>P zp%Ikk9D9RC~^KLbww07uvYt|}-P10g^) zv^wwEm%2YUz~6uNoH@pJno}P&O^AQ2tK2cJPPUbC%|M%!)JvA7d=`iltxaA%EP`+3 z^mCX9v6oZa`ELqQE{;6ROxvj<%TG;tAEfhoYW}B1aUn&?N?|i+j)L}YD4Z?5mevh> zs!ilHFw0Y&Bt>oY&~|{lMlPl?N5(HCbAuV%XncD@_CZ(jd^)+p4qtX+$JwX@^u%|C2j{*7n>Spa~4J3H6g*rDKu-_l3t zw}G8RppHBqvGu&!L5m}=Ln~jk*#Gxh?*D*}$<|SIeQoE4K*%z!2T#a2%d4DOxiY-A z^#C<4|4kFRj-n;xKoc~Hw^bggCRo50zZmnW&rM^iJoD0q zwgP6O=_deDqJ&`OmCaR>c5K~x8L$F>tJHVIF{?0}L&BJ%-^(y;qGOY&yhx`Ar^dTm z^Lp*PMT`7UUX*YuBsV&=XOB0n40CieprB=nIwC4hP9kyOfApJT`2ZI^sMa&m)_6Zz z{Hg-`mIKY^p7+*#QVGJ_@Y9|5h|6V`%k^39IcjA(FPQUY!3V%?sKZD)kD4cGOI-I) z5k-5SK0T07Q(u0bOmlbMU|gM3ScgVRF>cqrWT$2~Z{Cc)uwnf{OOC)WDhCi~o$lSe z2uQ61GV;k`E%rX6U7dN+{g-^_a776yl@0nO&}3uoc@BQUFzQoVf^KtjOED%2S;Njd zt|^aHml}@>Q<6_;W+RYOA$l}#ee@ob><%tjWrcixGH_%BujkXRHSd4bG)9=@g>IgN z*<~d7N$TW)!4{>wLP*q1PbKBO(>Wx7IDC+{FKK_=6iB9v5(BGUS zgGg)u^q&E_-U$QWZ~L^by($9{3m(LeRG2m7$B8gSJ@63Yk8~ zW>EOLn@f1&f3ue67d?78DbJwN<+-;SvZ|+`3G8by0}-uBwv)fVKN0nH6lD+2_M3Te z-8OJn7Dzg;ig*bBrBlNuE(BE($cr71U@HG(|L}=vckV8ke1ZSi`ngIiB}(J&oxaOwW=93x z@d0rTV`WqOqksQ@(-Fo>+=3TO6L==*B(0L7~ zFP}wWqVLphhv}mGfC;n7yOc@92M!)2ePKPvi3*Kf|Mnf$e}4C{_2KnjG|3{6v9Sn1 zJE0w@c2Ruz^l20Xw`7n>)Cq7QCe0IB)w|6i#Rw}_#qp=kWGy&sQ%{cO*`yyc`(vT2nRh`&WeE3>`nhh`H%Q|PB# z?CR5boP_S~9pP~?tDbtZ8HN#^S)vGg>Li8~g~gm-TpkkOZ?2=FXk+NA3OSj9odp(Z z6X1I6w}9^0kCph=RA-^nU9RMmu1CQs<2#rq+nV>8oY4T;f+$(UQUhStX3#RIyAD8- zwn6BHuMoVD{;Xoz^FN!Q02a|h6$$1s?=4C#%l!ibo5(Csd72m`IOmM$(It}iSoEZO z{wA^dhsUk&Z0&%Z|K5eQ14SguUWch~%+=Ow=B?Z(^v`mt-26o-bd_vPfUt!r`d zPs`J7_WTMN+j-9cHeIC$>kKuCMV*kQg@psz>ZoVT#?gf0;2WjcTk)i%M9IjZi?VNv z#tOrL2#|DHrG zSq!$k1;zR8{5^Cm(`M)pRcRhKYXJLVl*n$y3<5nVg&)ZduI&sFBd{&4)^31vp)GN~ zqR?scRcUilf*IZ@ZUx7vguMa_Q-T^J-vB?Ucz(SZ072i(G4Ag)4SGuL(M%?{o^J{W?UAZdk+y@KV)xHNR{UZbwN z(-E!m4_`xZqrLlj^iZQD_w``SqCA3$uPTpA6mOjK;#$r1G@))bBb8yKj*EB=CLbC) z(#lH1GdRU7;iFcqQWf!N?j@W@v>kLNazpO>(cQW}E)rZA0Sr9=&>g84vdG>f=U6|M zs|dQzE-y00cnYQrG3V3FmH-0yZ3^a%sSg*Z zs?B(WT0z^_v+c`CXS(&+exYb7fuEgFdap2F*YHH-q?u zt-YEa6r3b`h#OXT###Iuu%3TKAn&^Zb9*0;#Ix$w5T*RSjP^X>fDLX^@mO0&*x zjDB@GCA{a2A@9#`;+2*^7F*Wv+-nXE*B^4DDR}lcgb&8U*feffFZooJJw-$y6H` zlX1!*4n7f;!RHp%ite-#y2XsdIgpq;Ek9< zG2YAU5uhKmlk%_7+z`hwiXCI1)CMjbQ-K_|(Hn*Z2zhQ4cVCfXKXcS<^pvC>7>qDz z*|KH%v_mU)>8h*B@(>d^9Q3hcVooyIuu(L>U~Nm>8AkIbzI0f?paY**rM1UmK7u*3rGI zTmGcFfcGq|C56E;6j`@}(zu-3G80FFFr*U3jIg)+mHL*KU^4{KM+(rQ-b1oRHKF~Y zW4=A!oRK|b|DJxWOUuW@YVwdGt41}P5Zbpk4uWgg2T%YWw+P*n9i5zNxdt>$p|jyM z%&)(_A^(b;3si~~#JNg}F4Wi@U#Cd;Anb~OUc31kaq&{>#l;`$9+In+S^H*uCMK!5 z7fz)Af06zjI2UbCkGr3;$h2P`oRq=E9RB~3SFf&5@S)k^{5dqj1D!O-)i%bJ#KqrB zsZ;71Za=ZWa@NiB;__YnK|y=91nwbvX}$3ZNdB2INz`&#+VPrden$j(1YF+*@ji2j_1_|5$F6X?qY` z=id1kg0g3?L~}qN#acHD2r?TnJ<=j}bjWQY`8F9oS61+L{>;waNTpG1HmvnQ5it%O zI@ERhdY>XqmojM{Yk$6hfR>VBW7kpYDnOTxk3W^=cESrW7rU%sV^>A}OFB`Md?Ep7Pd35QcP=+r)x;SZ4fiFR_8>oPPIY({xS12dKn7nQmdx z!;|uHGaFt=W59eR^Fd!x+}T#fak6X$b}eBXa#ZT1P@w@~W&{Z>fBl*lr<3^(1EpB( zX#l5WogCZw3Ka*6|4HkwQL*UEZ@FzWNAl4Hy%uZYuRw6w1ZTTR8eyoBz1DK8Xu@J; z2`8)&F&M1*t-G>TC0IuOh356|Cx5()B+R*oMdzlF*?moHs1KCcGIAEs$c{$h2LLy6 zm+#aGJmpPIN2(`#nd}}J)xDv)n%Upd#^jT}nR8GU%tf{-O%c+^BIgK^kN;o9x7oE} z!-nDi_TvH!PfB8z=@YI?Xd~zQpJ^R8Q`<=F%=o&VsKTVnW6Scp646fsP?&m6k@;2f zKH?{llg#NYrWLFx^sVIAwWJAZ1rj$=!~DRD?K^fX4ZL%B7iGMlY&5eQd3taaB%TML zow8`=$9v=2w%8!EfJMv4okHXAlWJ5DsXcwZR8`DD5@>tW^ zw9kYK@oYbO*EarbETvxfVQ4>)L%ckkX-yblH=47H7Hx*v@gHDSVAANM16l<`MOsXJ?Jue#9^25iZKfY>} zxVZI^^8opB>#^E9X!s#7@MdmAI$N>42Up2vpl|AI)*u9_Kh3MGOZ3k7na_3HCjI0F2B;U|c+HBEUQ&XJ2 zgxwkS)R;^6>Kt`P6eCoyj`l9f&3i1Nz$PDUgxC#Zm38XA$I#IfqicqkLPdxGH$+&} zs$OHze-PfZ2?SJ}dcdN+E)EbC4{|YMOsT9RG2(M~$^gv1;L{v~S3vC0t0@t_hjc4n zZ6ni`B{LO=#TMLH7<|lzxaKv5Hxv*9=n-*N%&og#A6EM+>t+A-i}Tzm?i!llbdG}A z3m2Ns(4IPD#>8`V#te=tNH&q_xaAtF6k>;?k*3gyFRHM;Aya>tOSB$dr{AhK_eLJn zPd#~3K4a?A$CKK=>qA+>=5UI-z;@ze^+8_{uwlaAj@u*t_xRSoRRh&CY@*L-$W)SK z*Dizx$U>_ehMwLgY0l=X!dlx#*J{>mx7D{}G#T_r`@hs`k3U%g4Q|aI;#Tg>R3Zm- zgaWTn!4hxj=)$OPADULK(z+aZu>5=V9csCi25=k$U8pluq$+Q7{NQ%_1eC>cj0J@6G%EuSRA40ajIgm8#u*dR4pDF|S%Su5;6X z9`>=xCJPl$$V^S=#*e;Z);>er#)h$pzk9=*w6FNzMC5k`(OynCO$qST|p>N5@T*K7@dl==Zg4kM%QpT|Jcwl-$VZZG(4Q%OFwH>HRpP z@DZ`rw%rqNS)?}GpQM^oGhs~U2G=_N<1*fi%NUeOj$gK|n_(y0OM&(4@Om* z61!Znd1;Z@i9w;!^QWXw8^`$$8H|#l|B^o3<65j{6S%znb%vC_rv;mN>$Hmb&1^gm zv}OHo*S9l<+29#GdGkh%T;c@-Kr6VnlZz6$^N>WqnD>9NGP&XK!#il~xDTCO79mbY zJ57_8@z-BxEz|D)r=2*m(9VKeL>fW^gUzS<4XfVRbYlmmUN=~}^u5N}0nyYR^a51a zDiGKKUuP=$#_#&a(LCeZ@whml=^0jfw5YDCag$FrgSX`!dsbcS>9VH%f9f#mhdFM+ zUO^E!{nm)7~vQUCOE)FdtipRa3vL5U}a=Vsm$O}l;T5QHz>#tSSOS*zy zAMfW7VVYv~Y|OU2f#r;_Sor+JmTS+F3>_9OSu*L{4(CzU9?vRPJKqo8mvgty;v05| zoY;e@*BzDbrEI!*@z=sD>V|X2-Ye+cTC;GIdA!M*$u@TW11{^A7Jj{`sQE+LTaRnW zG3vV=c(9nf4#-a;N&cOL!8MQ6y|0`$&v$+>qHU=ELzjwQ z{gIMvPyJK3jc?6Sr}-ZeRTgEuwd}b2dWVo3c5m+<8x0_J_3HD+$^GY!|M{Xfxt|G zzrgy4yZ6qX^&^FNIuVs%uWaKnQ~DYLS7(!;EzK(DD5qd_Wz8Y(VtWV;x;97&Al3Er z-76?tevkmin=k?oZPKRA&GO;;mcYOU# zU8OgGvxC7`O<*d3w68Lfpx}ym%JWbvn+oPyhk@r$`w6{08?Ib!Ty5CGtLV{X&<3iD z1p^cv1`V>Adx^AKeYD^oO18A0^7RpwiyA<&F?LiorO3B&kc0!W6g=L%Wy{oG)|q@w zaPK)?PuIgGP-p%6lN4!i_1CCFk=ATP)evW*O(Jvq7A@^0J4z4_+kH(ZR!UVv1JSp$ z2;rkMhZaWltFDemp2>U+oLQc*X-V!m}ZG_Gq|i zMP|e6;B->gwrKw@QKofB#OH(;RjtFc#$F^=zVomxpRx z$BwowPE4^kGKzBxKay^ndBL-_uWejd%AELA=g8s}J>u8K&#|*xn|a^4$>Do(cF3mhY^FZj!12+$ZE_@Lh`ts)0 ztFtkwNckfC5H)bX+)u@$*a$4v(YP;B#WniZu>^`dt(z3~8?o0^%_R8$**D>g10Om=qw7T&JzP9+-r;Yjf z2Lks%Qco&}-fkIr!7!t?o*|EC8<-f1@(!414t+gthEau0H2vEWm!PIT-b&AK67|tX9-g|fD&eo45O8Rt+>xStr*ca z$4w<@3I%7urtTmOod*sK;YO|0F+*RAAg>F0`*Mo|->{ke*>cvp@OC$iL!+SQ_yf@U z@&_Og%PkCRR9g9HV{B;AHOP#J+J=E`u8mx^}}+cTIp zmPpMc+v8nPH^}#fk=y38X7%cwT#4IfV(o2$-cKebWH8BmGS1lviG>I!F-`5JZI3av zK+*W;(Q&)SvYi{syecLcbymyZNqytQ-v%BY(9L^i%A&iwP{y3Nl2(iG4i5tA)nr6`1ltS; z`NHW}Xk0Sb*%FR~RY+)T7VYN`&PGXUPhP+F7t8X0s<;h-l699kiym`isks&w(- zg4g6duI2}dqpWC{=hF|LfmIX=ikv5~vYcy@o>N%Zf~xa)Zk-H$>B;3J)Pi|aY zUF~xF7+sMA#fojnk(nxbZaxj{UGx6@bL*$j;P}GjUF;wA{`PCj%|#I$nI=mS*(r2_ z6NBV~d0xpp(xc=^UHd0fCgC7BFlqmjDI%-zOiWBHnyY-jhq6)9k#OIS&vg-Gf0+_9 zx?}F3%_8@S*Il{j{KxDbWsfcl0j$^vf$Z372^D?@Cv^q0BxLTqXb(gv&aoM651b%9 zEmFo3F_Z~-0vf5+zIk&MV^z`TgN;x|HI(3oiF2h%BilG#qU6vO@Oyxum?V@GfUBsV zWHz_^9o7N*69x8C#bsi>z4;Wg88v`e%uuF|$S+yfpAYfp#EzLki6XL501GaQdPujX zbwxe}%Xx+w;xK^BuKjlU%eU`6uIQ^Vt8F>7nD{y==tNC0EQh&ls=~~3EJ_qD%-K`K zAFvc*^ym$9Xf1~GE>fFaJ4N+`NZAkvdXHs zgLfF18#sdq?pfuk+Gv1BGlx5^%Hsg@5+|VPt3HGABIEL91vp})7uYKdhqx?RkRqWfp|I+b=czW%!4IIPIFGz z4O_Nl3c#VN!bPw5syce^IqhalpJbo?1Oy74rC@=1)P=q|S(u+LKdS(%$V)9r#p)vG zg#;=Xbuc2PKTUNZyr_==W_EUq4y#B6RYghqY zrp=CiFGu$n|5hVg4?_uYr_r?St-yk(2Ul~(6BjzMt&WR}i%7vqE)C5FQ$#D`e`szo zE+WYx&w5=pl$MV>MjT^&>P<-VE^~Hs4T#CD@|#rGz#fi&HA2M9V~aYq0JxAoc{RcT z83(BF^-@(3xMkd;G$gXT-;!*@VQ7kb&OG0WVHq%g;zvS9dOy~~+pt%!UYtlY?&S4c zV|vb3U=%S49cX=Ggx~SwJ<)?E8QSoO5b<;vFd%rq7*>Z^NG2wptT5y-7)}5!v} z`JJAignD(;Y3<8zt5izgTmXBfh6~_6A-|;w&0SmFZu1X`!kS24f!_-fCx2_Bw`NMU z<+tkUjSYaN5j!o8t9yHVWOZ*8J4(s zxo%QQiiEQsozi{AKFfo;wVPYTqZ`qXA)V{^ zsq)P}fBp<-R5&1hksHmdi15)xG0|j?4|7O~Ov_m$e;6uN6t~=A6+);`*Wup12I~C*orGjeb{gYv-m=grMl_Kqv%GA2in?7wXd9jD?P`F6{&#H4Ya@ju zEPz-iF=Xfb=e+R}t^p%2f?h>|Cteu6w#g*#C?WIt{l1AgWEm4~mAlYz@ZfOFRUBvt zjy4@S)J{!Jt;6o?oGLP*0gxbXx@+mV>3ASuYPR4h7Gp*hkI})7RGL z&8TF=Ld_C6b)~oc8BdPlv^Nhm=&e-3mVJ1X=GFrNTAY87Bq9JhwSBkr%;kSpC-nNO zU%+`HXBI4$n-iFHx%(xNKEqmuabiEC@9y^_OdBsQPOishi)ybI z3irZCn-M!+F>sjUjs)Fq^gsAGo(2qjxM;1LY_#r8iEbmN#pe8yM_7T$t|4o^&M44JAMaengp1@Uk+ z93=78K241O$;-i!^dvH5<`oKn=?z`%$UwzA37vB#E6YbW$*8o!yAnuun)6TJZX#tz(cK=6gx=qq|kcSW|UZZ_GiKz&JgdSO3-o7mU|Ms z#~*asF=A@Bptc^A!UqlWr7U)ZbD|pBRl&(QiX>9i^T-d@dFtZ7WQ2qRqLu^M3iF#wkXX0%@$nH$ zZA$xMg9p0Usn|%9TD=n?OCi`^Jl*%|tzgbq94XKDej+29fe0#l~VnTDs28$OsrHWFov=c95kKOGH`!64|*9p#ok_x zjZwU8$e=-<>KiFma;IOy(#f|yxnMl63RC^KM1~!tysKLX^h=H`2ORMpHp9{;LX#jv z5Fa{*ZcT+0^0ul1C+mw^ME_e7l@|`g9KTr=!|E!y~)fjyyXf_~gM?Z@%}^)y;E^ zD~|1FR-9+o1z~hVogWm3Z2rWGHcv8dZ1ZcU@EssfaB=azv<}^0`O4~JQS`TZ*~&-E z64Z3p%G($BQ1-ESGmE%C5k3|jU%7v&KB`Z|X)yR4QDY}gGy(moT6Zz6tbrJ)h~9Zd zh2Fut1EzVZ4z1zMT?lE|4lhrvgbGkK1sU+Xe*gaSzL|>Dqi^4)mwwd@Y31WJO*fN^ z{?)FyruYu&S7qd1ykRRO7wU2nkj2ApsI1E}+Jw%|c+{xCJ$vY;2y?^SaQWl%b4ZWr zW0Z92cLxQBs?cgN>6%~esfClFbmkH{DREw7JM$Nn4G!#?Z;s>|8&1Z92L~plH&CfX zv7gqQ0b@HbB`tC}z{4n8v5qGm-H?=MpQ&%oaP;f@SFSZ1o1W|b1Y#c$Xii~Z{2nz8<|n2 zml3l1LdZ#N&ptnqnp$MLlwiyhEn|AiEx?tupDI2Mk{C|LiCYr+m{k!tz0Obhz7?CFo#}KelMJeIdt*2)z^%8NnZ^OH?aA?Fp8F^DRU1_q1+Gt#FX89Ii!q;} zKMvb4Pc$7s{ES4~M%AHs@@0bu77LM6ff7n5$z|+MI>?FOl>2c~12oVXu#=5r4A>}r zJOlt3j%8evZyigonh<4Z%Xn?#-iC#3m-nJASw@kr*G;CdogS{=I`fzm;18 zJ)`jdj~j;c6#)YHxkMfv2@CTql8Cp|g%7wT1l&LYOEyXbXbC9L+!iyfg-^yi*_e-Z z6?tGTLPT~?&cO?3Wptl}nTxod^BT95B%~E>{~#PWD-|_>5?UM}Q-*VxKO1k&eJp1% zolJand!!@U>b7vXs>QmuWqb>=6pX-Z&_jv|>0pWF ze7G)l65@}I_IlRDLb=-DB1!b3xWuGE`1AAJ~Ew?0Q#@TKF_yBA3=m1lfv!L3@_Dq{Pg^&2~%nik=N z$&khpe1T`wc47LS4gLoYew#^n8*&@k*M{6LQf(7dIC=lOcI8BJH9qW7GnhxXg$y1v zc#_R#8Dh9A>I+Xmic#AOAr7s?!NInAdA{ipCf;;^?KhiZoLkoE=9H_Mnc@rOF3+6K#2#L_!|*PatkM)ZAn|! z;_93}Bvyolcaw}81Y)@KQc~RF#;;M!2m{ZeowfBCuNMLys^YC4d?~_^CW!AqDqocQ zv@ODPkM794=ZSHb3fu7`@Kue32}-$Lu;Nz!tlEVqlTV&3|1c%FsgHv?x^xP)w9XGT zi{tv)udz5duT>ow3O;n%<4YbkrbStnYd8PU_s_2)QkK-3VLj>X zD<$ih$p_Nv>&?&6I-oWXArX7>&E$a(YU=B&ZGs4vnFfR0%9|tVo*BIhQ}(m>wKMdq zIA8VYq~iO<8P;eCW7xH89paW>C09f}yJKoSX-4C284b-R9E|la`Fv?C>TXVNpvuPL zmHGT;99{U2$KZ=jH>+P&ElSr{Q`Pp^rn#(bd_<3^ge|8^zIfF3amb-BMGg^AI+Z`p zzdUNo_Fr8MGbXaBe*gN}(prBk9rUl?Yt;6arK`{We|~S&wZ|$4OO8=J|Ni}ofnJ{$ zPG$Vep&nI_jXF2=a@eakew6iy$=7~q@Q`P>@_EF$-7z>9A-mjJA`#fuv$7{RuY+ZgGf^|08f z;;bPaf9jgNic5DetmVd8_m;#2b_y4WT(UEnn(Jnv@Xhd9`rwR`v8wZ;MSY;S(>{4v ze-hH2v2Rdf*C;!g>~gnc)4@-lJ~3;-hrW_i6CvrTNv+m=d7~+wR)|y40aAU6yJ=W{ z6GcsBqK9_x-aBUY=%cS6W;%$@MU;!8q2#RL2Kdb&)VWV*dlelc)n9FTe<@ec$hoeZ z;A3&%uc+Jfw0#&X;r_72nsPHyv`0tl@Q)*xliBX&AAAlIC?vT`lp9iPA6{1U&a0X-Jok2mh*;!ODbL78cviMnj$WJY7 zknSrQNs+=ph{?F~XSk^%DmTr5~{gg)r^Aj4}(wN+H2$Nuuda0Z!ueei`DCTm}nnyoE8 znruBy)4;ho@#~`#={F=|QvzG*o`A!80(4EPTW()$lHlGN6$Bu)gubBPkclcQPYT;#M6wm-r z$$0Gks5QR>JX-1<{a)iV$DtjxE_ zdH5X%l_cq7P7vUpD<%sQt_T4=w)jn8<)SO}6r(jkLgK*#0`vxA)y>bzQQ*a<8MyrL zq0~Jl-U=O3H~M6pKILz9bV%)Dm#*pSN!x>swx# z&e#Q7pw9>9B)ocC|IE>l2KL$A$tGY(Q~Ql(QbUQTjil7?v3@(P|;9 z0{tG%1h<;C;aeB6dO)6rvr9jp9$Ad;BNQ*zZi1qA(jqp+CB#g$F{oP#P3$u7+}XiM z@_?Bkd-m)kb7?0ZZ={JC;(<<7c08fc!+a&9QT~j++9(>Kamf0uzm_p`LdA8P7j`llTbdU5jh{hq`I}ujF_8`G*)NKNb((agDfb zsYCx)_Pt;*603@jA3LgLKx#7}elloF!KUfaH`djBdwKQlU28tXKQw#JYsjl+Fm3z3 zj_?D`6J{Mya#RLr^aNOv`!`P;w#~hchFZpDokXo{bt!uBAJe`e^{IFGPB%ET{>LvE zCL}B+974)IQPBEiW@YUHOi4QQ8j4<5+3nxNdKd3ylb2fOgnoA3G=4CcQj)95L43|l zc?|H4#u;J`e_CE%?0hLKe#SJ@{f{900)ZGqyF4o?8OfbzTzo(-MTv8TP3ps>5Xt7| zoLX9VXNySEgrfug>M@iU6x<%fA#TPKi{&}vq`6Y&*f)$15IX}=qMpbMa+-LG+F&+` z6IC4g097)ZR3>2bAKsyZ0$y8sX=Zn2AM`-4-AQUXnI0l(ag?qSi&Q?xux0@x2s&{3 zaMzMB(faZu5xA zmV2TSvA|oAIN7#H)5pTk!vCV(vpauIT}UwOXz;q&EU=O6V=oA5XBZQ0qAPEDpo&+OK<>l~y4&;h3V zOMf0g0O$qCKX@WV2g`i!+2g&=lpn>l!0#IbpHs?QJ7va4mE_lEYb!_2cnsLim+}Jc z)(YOWs}>!WjcrZR=s_ak{v6x1MT^b+wfuhL&mKG7qilkEN_xrx&!YR9k#8g1>kERn zdg#o!ce9F%P2379HOy~%$JK2A8^WLM=y)%6$9^HSzeHZ}&Dcz1EXplzFmMu4BuVs- zZ~|23quHBOq5Win+dV=_F7)ozt0C;NH>e9twJ#bkRUpHHL8^uvdSWPnHA5OGN3Paa zF0YO18@WAFi?`{9v>>v*K2M8zH_j8ry{=jdz{i;?c}pNy;?-u_TKLO58ZBDLr0>0k zZn|h>dB+>+X(K>}r!`@gf`pi}cIIC8RHAgsppcUga{l(L%9qqkk;^YevVg>M!KES2 zROn@41o=@zT-DUHRoIUwAbiOU75W}HKqlv4Eh&FG;|kqIF7jnE2L8p^dN)N91>K$c z>Y5ueCl;yI!g@MCHmq2=67!iaLN$V_M?IVU8kUzjOiZT|d3AQh{HQvCZLd#VNWD~B z!JQEfrViW!9Z|+8G1|m}qvw2zNKIL+#xvos2Cw5;!<*YUm`Nrk>cPP)UqqWqpUzDx z;g8${64mV%IAA`!S;{e!4(d29uH@vX19S-O&5&R}fK2%isKB$>K@X2<|7Ah6h0N=e zR7GYYfG8#3riVo99K3#$23VmOu&L|@4{NEAs8uQasPR!(#Sjs}u$;IZsLvwDFe^X{ z6#L(Nc*B+|)QRM$w#7yTNYM7~o`ax?(9 z-rgmt=@ik9a}8mUUEe=CczYkMEP&OVf@q6Y7$X!3y6{dzhO}mqi0C&3ZdI&EtT zkoSw^)mS%Z4q2AElS}H{HFWiYsype_KS2 zV1az+8E?DS$A}=UNWjQ?VPyr}h!W~RG2&R+Y{~cqJPMhXHtc)a$&7|zO9iMg{k4EM6;k2zTH0A!)Ftogbn$m z5P*dM%VHy#wSSYo%d%Tj7g_{ww%6N25yH9Mm`(j>>BnDYgIx%eLW?J0-AwmaUBrS2 zON)8fdcBGw^UX)lzvK;>4HWztY*wZ`0tqb>^ir~D2i*{3za)mR1jLg_C&^ia)na=} z|IgU<^SsVeB8fr=aMCrVWWns&iqHu{f0Ontbv?+y<@WRMwX=6U85vm{aoA;kXjNTkQANqM?5Po@TLiFLuM;n#Jk^F&(3GzQiM?6ZttCt#i zn&uDm1*0t@G#M5mWC2QXI{Jc4LsV7WCrp^&_;ReO*M$qi z5b~P-f|-{vWUFq`@m@u#2{-3|Inql6A4I%j+l@$0ZqAcM%I2N6cl#xMVf7f^h5}$2 zHJHGW0NABV$qHBKTvQd0pVFipK-m%y1wN=mtNI)jBOgZ=- zIa@Q*(?`yj)&o$O%7dy$TV_6 z;0AScl^0mtCU8I88+%ov!!iFBMs$b#U3fwhI>mbGeMn&3BHOiTO*J!IF@+ z^o&BjKw@~oGf;ZjoMg_3G0`h=X%8)5x%h2AdfMR3p4|iZj7mD|`YCPhJzPOv=4B*x z2p?qxngxdVl77WA&qe#DJ!)z!{x=CEq1IJ+QXfhB|5kth#cQ)Bw#5^Mgd#jTdh9UY ze$aP(AmR26(l9X#Q7ZiKxKrJG_EgdK)>=kYrByR}#%9hoc+(R|P}Y%#Deh!${en!_ zA11kX?+Tu#KkrX}H% zoNmZHQBNZ!9mzU}HRO_}ufNl`)!CD(tqjs|{=C9O@Q%xJy{812XePa%{%? zsBfgQo(=P*5dzj{8+ILsMt*zZ0z zpEgFS>3}(9{$l}2U@r`U?{sNePbS|HV%TT)qRHLB5#|R>fAMdI`SXms1qC_db`g(q z^7#;B!mI(0MZJ?MT1asFWC}+{KS;ITf53n#CQF>1HyU;DB(=hAV3~hz9R;V2_+4aR zpSrP7bab(fE^UMgBV{xG;KDU)21~Ye#vWX~l-||plQ>UE_?2P^%w9|rB#GF%jo{IO zBit>^QHZe#vOH5}LgBW8>g|LH;o=>Zxrj6oO3T#=q)qRr%nld%mqJDo1D}Oq?7>?g zQZ35s3bZ~a)zTAgPNhoc%{o3TQ)RIVWGg7ap5S1aL`yjc?~zjE{tP)gucvah;xY*; zkkO4eLSm+wJwE*Lbw9l|^d82nEQ8^o267{z#GIn35GCaF>7hlM8*$%sC!3nZPU?4-_@>k^y|0NdD8(r8YxETxi%}HLVn(jbY&> zJJu`7X5C5?D$#lTWSE*OsJ&A38Vu)0(8Hs-T)0{J?dy3wH+jQF__~-KbECI#%msIx zaiNgELf~p$I#RP6ww0aIzLZyS`&OW|&A4`Li{&g{_N2oSQHWPl#EKMllDm(fjv2X= z<||Att!EHaeEXPX6BBo}?A|TmRc%imk)W83+Yg_%!};_9hT-5^^rHM7+qr)GSHcMA z)e0B?J5+KF-0;_7_|nw zG%BkberVjHl9cG)I81*YQ_F8wSK9@Ft)p(Wc;=T}yMe}R4s?a52a`f2cgyJjsS>{l z*|mHc;Abma2<`Yj+3#bADtT1(Nlkt8u$|;PF`t2oM>yY*neO#~%AHn*+O*~;i=Xa- zRio7esi^|QPg)bpkRVE`3G>CZ2yx|9WhXWR@)vCv)~3<;078~z_~`D;wGHWfBTlum zpZ5o`_RB{2Rv_xCS`G%4uU`LL^WU%Jn+(}8v#T2<&yuO_4UAO<-kYzO%_ni~c$9r0EPT?^$HO@i zu@%asD=n94%z8i?l>8;hK0ofcN%poyNE$D!*mZp#gMY?Ql3#c!F?b}_9egEo!v$cM zRztO3Juj&E@x3p2Q(2!};C+8l%d=%~IqQ*LR8?~=XKR%BAqeNIrm&2d&J)G zHJg3QkjEpG|A);riaX?5o2&L8&Ne8>a!ZKX5Mx?e2rAMKatY}R=%QYjjCOscZFW9A zZ06OgVX)(INjXjS%<}*1-aXgV+qU+w|JXTjEZUw%oT33PR%b9baJeusbSnk5^P6Xx zmSg@!|DuvOQTR0v@P|z(<;Bl4TOC^AmmoH6o8GuT>i9SiqOAfeIq6dCCnF+u<z9 z2gb>vZJv~8nK)+MXg%j_V2jRI$4 znLr(ro37CzlFLFA0^5W-+{9Q^T5lW!W*W zOXi(X@{O@5z5S<9q7|3?Cv<&wzR+{~uSRMap6VY%_A1@YHB4Jk?mnpXlD|n)VP9*` zxvq1t`WI(A>Y7LG|KepwEo%e2(FgoG@QEe_1}B3|U|*$w+5pVF?=6t4P3%gQ*a{sYtsa@{~wo<9CnGZ3)e@Irb7 z0isZHo=VCE5o!L|MeHxQw}36inwr6gFPpkP6hGph6~!2fM+$I$cD*66;8Fs@ z(sffMT*Db)Tlknh403HYlD*G^CE#{vNJv!IdPqN#-A7w3bm~1B@e-;r$tyvTo+BTT z;5@-iUk`?}l1zEd7KeHByrm@vpy*%26(rH>mha3ZR5$I@dFM6JbLdsY#`b#q`Ny}f zm^40f^z_-Yq2=?yvk4-MTR!Fmt(x2>*vZlX4}>3s6zwtj?S)yEwsFs9n4prHbZF={ zrjbxKi?vMf&$#&l0*j)Bqc9z|(P{PCHBWI|eGc}UU`=H3a;|~SUAv-qdL|k%Y{nJY zJrWg9f}=3mQtO;}${AhH!{gVNg%8;H39~M3N8TZR%R_zcHKDD=PM``de%$`-u0!dO zodKY+rbu8FW@EWn5W|gv@gG{+SfZM^f1dG0j(-5w7jX%Ps&@}A4;b;%x4`0&*oJWs#_OwZO7K%GhJH1{_QkBXQ6f43070NfE<&5PRy z8^AkJAZ8GD(=l*swrh+3=7di?+Ga@gFT;-LdZ(Az=Y0oKD?vNI`gQzinc;<`Ou}%< z3P0Kxd5g^NWyp^w*n&3f4-YuJB3A0M5x;))<3rnAGpT&{aKGhnJTNG2|2mx4C^;kw zD>~KMWuobTmC2egKwaiVD{}JCCrB~eDE0dkaFQq9Uz+@*Q-$|pRWc1JK4&KLT5@oRsEPu*BJKC{L z%DqS5EhAG5A6c@C@YiU74`&jiFX@f2X?8QzJm+-jg#I1V^5-`bySyz$)XFid*LMbY z@j5S1dIvgxSZ^Q3f^Y>m4GkFzLt6qq-BZ(f-mU>uxm}6U>&#s?kFMnE*{tC)tV%n^*E1$spdUFwld5>;B# z6X;$#hTIrOu2RXTZ|pLktR}`=;fKY4i%hdcg0K6*V6(`1R1EXL$oluhwIma1!d9-| zsZg{UGH&$9X>5yJeX_z%l56Q6KMCs$KkGSYTDe8<39Ms22SNz=*~hVuAZ`BBrWK7HS?)M~DHr$Kfh4EhHe0*sKMCdsj}munFQ~XJ(}u-d zOg|&0%yxY1qhVo2CR5T;Azw$*qRIaliOnD~)r<4~3MvZPvUBTa9%V4YVwk?B`GgWX8yhTO z!9J0wJ#ZBT2Yd9)pTtx(D3i~&ZA))vA1*PySA2G3xkU5QBVzHHx+BkM*afH_M0T@p zsdt}jW1i|qv&wuE9~$}~8N`CT)238KK~%^_u%boX&lw;*;y?Cp^kIX=nddP;rdr*` zQMetpY>yWUg0jbB`Z-LKIm;Yar?y`UwjtM~(Ry{##q`m8Kd#FHi^;te2%Oxi*3Fo| z2L2{&?)%f7+|Ku7N}$5LXWbr}z$prR>2>>0So0H^bWgif{}zp0drmexQ|6WS$a$0B zgoRbKsxrJ8{~#=h*Rny+!s3U*D%sZEllS^PxU z5R_V@LlQ*k1}TaGE4bHj^--?Zwk+G^ z(27e(Mhk*upneZRHG9Rm8)=D_toV$0o zpgo{}5wwL&h%H+Ez=zc`q^yvBiVZP){`}3bB-lw)N0oB3{X?Kyt^OB*YEN(MO+*Vl zlWYeTd#a&M+}~v8B83%$Pw-#U{x*L{I8nAmvcxKk(o(;R#l*|GJ2psZzjD zhvF->T_5k6nty}-7hk3jS=^Cj08i8gGBvThJwL3zLbzqLrxYvz`?*LIizSHJ0oi&- z$p_@o@83pHXNa876Uw7q7q@rKI+<|8&%Bk$Xa>i}BBK~D}@;J(UxTonJRo1Tkp4#v~JZsbJ!rR{%p4eb0ttyag5eLE<5 z)tYOe5@mBgws~%mvs;@nL!P;o*IpdcqK;`?kzET9jWV0wOD~uQYP9gRGU=X|>l~C` z)SyDE*b&HDQq_3Cb&Otimcj6@YoJchPrp(z1EP`me&+5duX-Q@+i|$nQiyz> z+a0MrzucHn;(6^^Zf-NZkRf5)Y99L&9l#|_zUt-D6_k+P*oaPjThyje-TIqrIj3kL z7RbtEL?y;`&geRd;FH#YQg$udbtngeUdaB?HW@CZI-dx6S6Dc{!c#F4hZv^V^z&%vwo9i#@z_bn?_jW$zF8p2teF?ptYyXvOi#DVVYN@~v}m&6AlUum886!c4LD@nJZu*UPUgpp3bNRT(tUAGOjM}e!+g4Rl6*+zxC!?+5*Rav! zKCfmSGaPQi&jd3TeF+b7>fu+j?k#y@6Ge+k9>Tp^E}Ue z-`92he!uH?%{xq~CdS_oiIzl0)?%6|;BUa)CtH;yyla{IaFenp~9mpnI;h-SFZx$@g;#~k@7QEsV z4L_+5@7d2;4}{I;?8y^}8yvEu<=4iJzfy%%Ua*6BYKpP!doOtDX?#C<|K+8ATRal@ z4U9y&dFQ7{d21OQCwj@!vN1@?Qi1YB0W8pEw9lfOnr4O8V__KQVD>D-@1#Ev^|bKuYf-zP+wDVGl4B4fRZ%mVS~a{^#l zx-jn~Aj!OTI;?!C4SebHaAprS?3rpeZ&ohsCLEbL0~Te3z7gp zOd1U&k$pWqJ%SzP<nMh(MhDzBq}&APK`b z2u$HI4SXZW35xZ!BQEBD+d9@-`=1IZy8OW7o6^nC9c_aQOL9-V8fl;;Q*8mjN%Y98 z#_MAivS;S{7B{KotSrO0VbP0N&ZzCC@8{Fr=^r157j=rwG`+<7BDq$Pd;t9mLPX7| zyT-;wF}R+BJ-r~n6c$r7_9Np=rsNae2kRZ1g49cr*+Lvd8H3XRpx)acvm{LRg6cOk zG#C%j`h^J+G|cNlI`RV%-|6hWQj0|f-nN1sZf)7E<+W3sgJdRd+de_$S{}PT3G?ej~k~l7S+9)n@$8c$T;CFNwzf=I$04b*eKIiYXJEC|>;>H0b1g3*7 zOe#T9KVxS2u{jo?2f_kKb|+cO%z75DIGAoE(Pz)mto=I=J;&Ev9JIW}VEpc5hBWxE zHfN#n1g>5m^r2I4!j8ROeY&={JL1myt?R^l)&%$ht4GyQ-}ybuwrw4_86Eb%$!qjE zW<)=%7y{DO_20GQE$Bc1r{A8PJ)^XrBHyO--min>BC}MB!uvh!xNT^*s-u>~o-E1E zzv|yNZ=CY|vK~0tWNIp=tVWXqvvhLQ3Y!Z`({NQHc3)syRRfsnOrv5I>#c($+!x+$#@S3^W z!O^|%-g4mQKLyr1yjqr?_ZAUzJR#r3CBAx9EOXI4J^RrSTRVBU_k^4aBxt}Z-2-;3A@-X1aM#wGuIvox>4D!jiYnDT2g*jLs~$Q zo&R~|Cf z>Mr_aSGW5hRY0D>EV|gA(c2JTyf$jPnT0R5zObW*N?Tb@##j1*0c) z>8-~MQnqXnjiCZoqpyH%k7S(Mt14%|OKufpm~d1Vmc1IzL1xBJ{L6!P~Ga zagMUw$LLm}2ett-YR`<=xN#}~Lg!!Vub36W>ZHXi9`f8gbGn^{y+oKVu#ki^0<5Kx zk&&ph{hqCpeShCyqq{$QILG2+nuw_iAH_)5W!pj9 zP^9GhiQD~hYCE6s@DtV><9!rQQ^T3+>SmJrwFyLwk*FCs1$i1E8Df^rZ_h7`P#Jtp z@+i9gke3{U2BMPS3jvg>4R!xuLL=5Cd?Y;YMbs5ZoRhtkP}`zpab3OI9^+=TWNCzs zgh)xMc+F?d+`a!zn6w!X0Jc;W{|K~@Z`wOLG?HtqhPe{!Fk}?{&{Y2(ojMHn{-80= z^)=`5veRJ=tq`$G%G|}^OwqGUgiv*LwGgkLJ%672SqU;e!&6BCrkF$tTPZ~wNel#p zRl&+3Y+Nxh6iNs&6+7 zsuSB?UJ|imJ!pj>ds#N^U6Qi5_d%9qAr>EH^xpb*!rI#Nx{@cIAH|$@YGj#+voE1- z^7=P=pbwtl&Acbn;5ZWLqIFx_d-7JLPt1Y?)$Q6jD<3fLmH%d;i+Qvne6Hk~_%ui* zG>NDT7kQh-j;~i6e0H&)CqHnNh^eTrPhkpA!wT9?CZgc;+2`bKtyX3p1;_=UAXr_( zhBdH~Cn`6AZAW2?eTR*#k z{1?@q4D&zX(MFMEmKvr*DhAo|3H_@TcBs06`u8-BD}6tUwXtyvHqz=;2{e+51SYoI zbmGJzqPJHrH>hA#5up;5Uaj$t7|Lrg8Y9-v5jAABT4wVFTEmM>nCEpC0(dVS=wR6d`Wj1FGg-6mO``6N{exuh* zXkDULCr#SzwB~usM?&pz(RaK70#>E*>ta;RaI1NJ*J&I_gdo~#a3T^)Pws02@uQa4 zD=?m>+4JUUa^9f^zi~&>7@s&jQ+VZ2Xl+LTE=cpr%F$2DU+>>k2tDpX#oVb)GufwO z#?(ff_aHgOhQ~~5H(L-52wb|KqD)kmP-uj8y}Y`ppd41>Zbj@@a5ea3PHQU$Dha`@ zL$#9ht`3iT_cQ~BaET#4)IBHmj98q)o)VHU7~Bi)GT$B2){mzQ-g9XV3DZCSd`AhL zTUdDYelK{eD_x2;%|fE(PlqokdCskH1~H@{+1qt|9bRtC)>QO70lon!&j=hOD&T;k z(}pRA)B1Ehe%^CeE$D1HLX#L{bw$29j^NksPZGQm=Yr=QI^3)I=Fy7%T|lI>c>XwB3CQJY__Jha4TW9^UbgHh4l%3b2^XfcRoUAf+9Yz zj|^xce0UN;b@?f67kjEq6tRYXe!Wnw?EJ=fW5mWks8t?J&}7IBd=S#AY8bW-`82J} z>F%TFqENT1@1={q8hEc61YCc!EN0RS1Rk_&hfN7LFj&W)h8!4{=#txbeO*+PWx)LT zglHPYL#!I(G|S7&ks;82a<+cjL6=;KvmW(lTxn_Z{1;5sa3lK$UeeZ$e`gKo(CI9X1WlsKE}Bh0S}y{;DV+H&@0mv4WX)X2XJJ8c%5hXx0i z`aIUoy#CXzaA8{x)%;K3a+Ch*Mn+|G4?g-=PyXq5LmuwBILggrNBx4$x$#&2Zs^Gu zZZ`p2c9QUaGGT(^jkQj4&6=Z?^De)5dLDC&2Zx%R2KCpVm&UdtVyOD2s$Gjav3wdXw`+PZD$lJe~XF)E-*b^9OEJUS6V$XM1t-+>UB_ zUvIW5Rg=AGmoWTv_wKQ-xi+r0M+PSO_;mc}m7RNInB#$|?JF8E5sOeH&pNN8h^*62 zn$=fIh_egK5--?!tkr-4X|dZ6eNn2or?scnj!-jsRMaJd`o6%RSHD{qUfG$;&6w+x+vAV{}#Nq3`khja@1 z9>4cK_ul8ezvuJZ&*y#r_$^>&pS{-JXYEycpSAbl_ss7V%m<1xGA8PpYVwK*IS>X0 z2!x4mi?nmWgn&SH_O8yFPvNwB`UbRjzkx77lprh+8%V?y>EbA@u8sixk8nN(Py;Z| z@u#ogdvNOOSP#^QB z{PJ(*4}a18tz7pPjkcx?Kr;Z8pS=8+vf00s|9)S91cZg;{qyzzFSuHG0Q`eM@^BF7 zk4*p8`#)v%&pIqJfCWB47a#sv=a2&e37-M=G5@SHO9p{zgFqmPxqsF%W`RINC=jS- z80qHx`fv9DQ32om7`<3XoH(!z-Z@0-z6Lcv-4R<1FNIi~JdTFD(Y}qN7fxt-icj&Y z7T@uXZSLQ{e=mU`O7e>Gf0+fwAC3Or2MMZMIk-BwSUEV-@^Ny5gyD)R*w}yFh4KOB zOAx81(<>JtcMEA%cLAMedfL+5FYO#bzvn?RAY1_M;oif?zefZigb>{)B_ScbPfJb- z{Lu2yFwy|OJTL)vR(1iHs)Ue`gsK5T0byWoW@aB27*vl7B)ZF^08&#;NWu+Z={XNQR-nnu& zT|Q0T34{?j)t0cB`D(O0k)*G9{BTr#i3<{nB$p9#OdPY`;^z~>ui~96o8z8Ipjbc{ zFxwVnRq#cw^=np)417aW1IQc|_L!gqP!5I#N5ZtKuf?RMP;UByqKl0){fE!I0>#?j zyYr@vMa7JLnZ6IQA!!LCbnjQ=@OBfE37p!K=mJpV8 zepA%85hK$SaGkdke5Amk-5Zq;Do-Cc7iQS#38PG33|(5H+;3uMkQhiP%JP2Bv=C z(@y@zfFy`eofX;4TFyj>S55|^_JoJ!)ug0!2nlo3w?vHkJ|PN*5ql|L&=dzft5Nmb zQ`QP9+I)}mv*z^r)d#W#$nmuJ91|F1T48z|0eK+IT~W@X+>*;#FPrqwWkQ}-TZ8Nd zQ7V0%-}pX-=7%@hPF1R=uI4s&uMZ=(KI6~9^!heZx1y@T+xGUDw4rhP^s6 z#4LnsKdp+bt%{j1XMF1wc&x#kuuy^4E9+c9AWI0fZ20(j%k((jSoP~`&I~Ld29^3X z=*Qb9Dmmb+kOJ1nTDts`U81{DLj&U(<+}NmUpOm~vS_`WXE_}@n%~A|3#N^qi`h`2 z4Tf@_BQ{HU^&19u;{|7Q5*i{@%hslBr~(mV8&MwngS-vJHVT_jadn$n>!Ka;pN0%3 zdB?OD5H4lOpSnd~^u-AvR5}DT3S|qve0?@>z;v?Ntd;6qnZ9<|H)TFDFhSo6A|=y! z(J&}#lNiXoKR!6>OCBwgZ@HR2rLth~`J1gFprFYiz70VpV3iX zGEgU`YUl3}J2N(-`dsuUn|(uRmFe&})`4$)0=NR;tQ>Vx%q-f5?x-dYH{+De58Ir1 zn_h(W$s)y{cOT+8Ml}hairU~Dv`8uJeN{-&az>}yCXOLJs8jBRRSj8ndnpY}Jf7+H zb}7#0%vU){esH}}H#AcTRqu9-!LI6%;d9+s(ABTu5hYZeSoUH_{Xp+jQnwuMQ<*NW z*+Uq~@R)bvk1@kpNmcL*!ofMLSYF*x>B6T%#dF^`Rlf_{8>d~*EJt069EfqAs8kM| z8e>hi2QHgij^PCt`%g?iaUCwcd0HPmHfKXBOd*khL$45Tcamm%u ziJER^lp80kKuH<9Ag&!o-wvY{s~Q|~SM?g{+$Pj2!5@sW+o%}jv(v9f$`x8X-do#K zU$vKDy|bNc$|wefX2q0g;MZ^_}tH17&w#_(Oei_^nbe!D_PAW^)gtVGc(a*o??VtL+eC3zeIEQXp zMdp_YB`d%UZ3jLL)vxV)$czg2>q-exow=MiRhHtyh9%2A8f2g!M80U6mHbbgdpqwuc!yEooCA;oh{WsMv;HU!=GALa00X@%DNe$p-(ls&~|{OqP73AJ&{D(N9%H(N&$I z3)%~HQL~$bC3<42B9+a;YX_Nvu(OjBrGqFZ*kjhdHeBSJFp@;&$B!9v z*}-LR4xErBmqe<-07pHojnP#6DFNdg5k?WJ74^084}Pwlh&fgIiZ_Mg{D|eWTJJAm zkMinV0j2=U>SAl5MmHnZ&4SIylM0N*R#- z4Ce+jX_#z|65~j}%wxtfKqQQ1;kW|0fN&lIEa}5Y+98R&P~+?=k;E3?xR~hqSFOCwQTk69tZ~J0A!T8I7~z0pDuZ!hf1FH- zH}|pOCq98#3<#n_owq<*GXz@QZnP^}X|SmpFUTnrA1#?SS>n1sJv?%Hx~!(A#u=^C zm=gW$#Lm!H{pjSvS=_-`l`yHoMqk8ff2eGh#qgD{@I;jOt$0zi;rQnbVA2_Wwz(B8 zDM2BAGOotiL@hpdplW3CX>6bxm?}769qQo-K^`}zc=dsa3T5oFc=fo5Pk^)M^~(@M zy!6R24JvV5a3RnM(+7ul6o zlE$IxnR4c|t^lONjt!_u0Dn-auQQzf@wcjo!3foaP1gw4A-8z(YYWfSD)HIV7c1L{ zopBEQf_U|QP2RFqo$C3-)tdTkfo9}KL0v;jij4}iAOS{;$D^GEo9Mto)_pSZ>!_oN&JK7BBC2Z_JOIc z9Wn$mkBbXw0ewvrSO3u)?+7rlAPEyizLWDQbm#*n6=&Jc2V)#{$|zg=#yv7H#>dYm zs_0pZud=pYJU4YTCQxth#tN9RZk$;$YTl63LZ`BY?c^PkyIc;?zz@YnIBB`#{phUe+O=DOgGRk=M@e1SNoC8I z^`FDp^SvjLo_sc141R#T#$0c%B{NgsxsW%N7;JAvvpBr?TAHcoR_q#<%K@xNKMjoZ z>(htA6ma=@XFBJ~-7Pwh1i4UThL?F?Uu;r+Oa**Bt~IV}$P2DwK^Ke3sRQqsK$EP~ zTj%D8&wrnYgm33qYiA=LAV-G>M@pqe#nXNzs=b%Y?E5%ztVvlZDdyCI*B&qlQGpj#eM9^aGYyrc4LQOF+RpgY{uU%ELapM&eB>o?o0r z+#UTLuqMC{OR$b=WT|; zS9|BC1-}Ko)+{oN5#Qe+BEyA6azhyNZfQ~fY3@4{FXLZ}EV)9O<6@U%!_|I51sAJb zJ7{Q=<{auRh?jwC=DWqI0Dc0^6A?Y4Tq>E_ zUR6Cn3rG$g{dD>iG0!(t+n=G;>?ktSxU)$iG#ojx+b_b7CzNV2Fv-&dKdQ^?s{h{W z)+|%1CK3Hojoj*>KTq7JDa|HYGH&2yv9WO!>wc6g()05`2p;IJpO=K6SRc-3n~x=u z{w5X@C&3nH7gy=Sc{~w|chRMfk{dR2KaL#U;xByrc?n2l!|GZ>QbO{bRHn*;^Ou7G ziARgcXO%vsNTL3DbWZ&>Rh0d=RY6xC?`P|ud-~Q^kNwb{+ZoQPNoSr{YvvU@_C{Vl z-(7rtybWyzeYsCw>Qy)$qzZ4AipH0)lbMPxK+auGqGgxk$D`mqOqkD~)Nl8AwsDXxPQ;!K=BS&j+t4f2IyzLQe(!MRtC2 zA6}d)9Pc*r!T2IOH;Y)41^7}HT<|Y_XDc_3t{+rqV$FX#bUk=e7nQu3vR}$Yb)lA~ z<}OL^>@r~?z)s&w(v8#W{-&Wz0CF*CXsDVSU$(XkaqugJ)6y`C0M-P_D z@wr)Smk382-~1|`s;=Ag`XPQYnzEcJPe{4jSH9V7gs4B<&iv?Ssg~OkJ##H`ya8B! z%6!z`qNI57*=m2dgx-lk;|wrcab78$9(8gmlfakBTBn`>S&_v;C%aBjV=n<06&C2I zhnwJFq#;^2X~Dy>az2`V*yIlSUFz25kg@>C0n0^VHL;Fe|&2SQRpfJ%IkPu$Yty%}a7jfWiGLF7Kcz%;HRwttl;_@St9J)#8X)$h;**f^T zGgQkRg&zFIA#xyrJ5DvYaJ6Hc?(=i-pu_-OQ|~&skj|%n=EZw8cikKw9Xq`%wz_)s zv*SekH|Xhc-RafU_Uhz;xSy}u$LQE$&+7+`!VA8JbuV2Eh1RFM7n%3=lVKI`5A5_k z5Xy>PGR)+Oi2lFvyl)X+yzL;_v+Okchmnsrs-tKnh9% zS=;g`!eMycE79I?W+tTpP1q2nTj+V<74hRF<)GPMaDV(AVqt!@@yqFI=Qr4PQy`8pG|)%_H~diQSWytnTWK zI&HEU!s^9JA?F&WGdo1P-q~#heL~0Ecluc10U5(|+E4FN6YNyclOd zgau>)++h`OM5X)8i@F}Wp}z#{PWpU_+Uq$UO1p^pg9VbGjSBZbAg+Z=a-mbcjpNPn z2ZW88{!75qucz-LUtq?`x>@UP(J1Y$ES>n}5U)?}k-&LmQ5;pTSkSi)E4w>-)vG!9 z>K$w^qSlF0WU02r9WBv=qyC>{3`9(8Q`7t*A>IQJdPfD9}c*s;LC z!Tb%{czyrSCg+(-{nMJ#hs%a+ip#QbLPPHUQ2&GGWuEBP)_oIeYT5P5M@7b3Jb=jmG(|BAqu%_aQ z%QZ_&bCbDIIa1yCSFCc0LW7RVU%i1Af7l9$&CALmM!HHMbc#> zMeOA6Hyy_G^YNLblGbUMbhoHFOUlKB^FGRXYEqMtV{yN6X4Z$8CVGt~>fF$R-e_pe z>ba2ohy7epWuutMitb+JICFio&%56MvF$F3K^c=NagP!bbzeH^Q_Xq3Yn!V<a5vB=Zy|zQn_mHR||3o4yAI_`E}i2&4oTZ7%zENX|WGK=^ILYV1u%dwQ!F1 zXzu;=-I|}R(|RJ)_w%KcC0vj-mp^2PNp^gHdo(mO^!ccq2dtv|rh2uUlqW&wdy@z} z`nV>d02T8av|Cg$FRxk|$D+He%{W>p*{`WFUzbk&zE??1H|$2DX74quqJP~2y{jLa z90x1s>Gyuro2VaavF}ICD@L;SERw1EVmv+0D9t_aRp0h>@D~mN#<8~|=I6IIICOG! zoQG~rG}H#i`fuzMU&QEU6wRhAsuZVF#unrhx+p>Y{3n*HR1$%Kf3ffgoGGv)H+ zq{8^m6?8@N8obZzDap)@2XpC$+n(#}pH%d7c~N~oL=`;k*){*V6iM@miG`&icd3SL zl)!vEshTi{v^ajBV^5ZP?#MxV_o2dAf@06mWTL*AB;p>~s82yoooequ#X$F^emrS1 zlC|@5h0oRpzr4CwVw|aqBWmtgeg^qPQ8ueh57dJ$T5@+ z_1nfKEmB)r+=^ZP23ZQM7@db(bq^q{G}!50jfTrI*xZ>$c-_g5=P%`Yn4B$9kP~Lf zbiZx>!JUGfnrt%j=VCwB%=^91xxV_tyBPQ_6~CDbNfJd)9oe^h^B!XlN=MZmbl1HW zwdzj5legNv@Y;N??jOrg%J-SCh<8I|bV6PxHaV7!kNG)A;zf<|lu3&Px-0yBqLRgt zV)SO3_0hgjoCPlNp~iDvD%O0zZW2*vQa2m|=~q1(p;560Sc!2=Mfq-3y*BQ<50N4j z`2&ouvjGp(7Z~&V0bz0NI@kbTlsXz_PA^T*jlsW4XdcEC>^CKo0UPG#d;9jyig41y(a^BD{zrvVq7}Rq@av%Vepoa4k~h=!$cI6-Ol+Nrp%t=oPMX4* zUP?+z^7aThQbrCmCDesFW|N_iuAZ!aWgw1^_vgKZum#(uJs`8B9$w>4c007`TbPuf z1H7u6rdR-x{fhDEDYD$E%0P^) zrk9dVg_42sC6s+mQ}$iHYwUPv*aM0zn_szhmt1>%GI7)`(sJdmUU%gd{NSw-$zy+N zz{nK0N}$(|%1W%I+GrSL6V?Xp7Y zXZvu!6ow@n>Ma4=+tDnXr65c237nW3gy)r0{x7!}Z zRX&k2>AopBo%mv_o2UX#&L_w}Ftg(wj%QP%O4 zx_?WMOkQJrcW3Q}HM|=69-62*ucZ4>VWsCQJn`<6a)!B_w*aHzA_ie%U}6Js_rFF%jDbl4p{09*1?5&J)p%h_&m*mA z=IHe1Z9vRlgTnkXsM|_9_xB5EFQaw5$sRc5%O?nmBaoEf5%uSoWcQTiVr@stB2Fak@cfLwUh_x&$~l)LZtZys ze$G$#qEg-hec53cVJ;#re*5)ZX5ADMWUWRSk5;1=3Ea}v@@Y85*9<1oBQvBy)~as) z`_|hq>l3aIVOgP}vG$`5^7--~#taM)FnTnO_5kTPllGu6TU-WVLz?P??}yz%+RsR$ zbfG0=ME%G;pufU?%VuXFE60qfiV zDDk^{-X-Ts^z>`>8y|lB^kcK_f5x!rBI#yjU@S`WtTCtNWAnj8lPTWH{lss$qUer> z(XVo~vHNXteFFVMGjZ~{Ss9*l1;dmiLv#C6Qhp+0i$3sN8@_@5)fvPQ0|2U1A`oNxZlGW@hYTwJn z`l-yirXd&Sw5k9wZA6*;tC`X`vCcRXVmE$%+I10Ct;87loeFZpQB?!y^+?qB-15!# zX3qTw$|ONYY4ZeM0z3%HVx1`hlhSkT*D@OQi?uYh)<#nFts^TrABT=u3*EC0xjuwe zymnIcW$Tm1tcZV}KN_o8#HnULA5taVX_#SN?neByW5Q&|?4kCx;|@m^SEQVFXRcq~ zP3K;B&To(zT4ThWpM0Ceau}D7PQY5>ljx5x>!z>F{O7&`HUonIG3L)x5e5)s{{B!z z456dtk=EdT0+@?>Y<64u=wa6K(LbJwr0CAjAL{8t!|{NCg4+&3b+Q1l#mWjrlg-0h zKLialj=$(J4&%C?!VKfINm~UoBB>RP^iQBV%@!V3aYQlGfmOL}X0jbo=eXBUC|AP9@kl2fw;3d(qMxSl zPPxdiRS+sDF}R7!7>vjxgVeV}((>tWgG1vWN!*=uxZ7|j(TET9j1H{!A}Ea6u-z*} z-;fI|ZSG@92S%u3gr*R^fkTo}1GFQ7vb48sLy(L~JpMd34>dVQgjxWdgr4{S9AXBs zA$o(N+CXVWSfQv+OJ07FgRXk=I-=Ui@3Dk1a^exOLr`=gZNgMm&eDrN<^DXcA;h$w>P{`>bKaOgZUvk;2TG4Bk5x~gJi z3J&cfFm2W%a72g$qGf?DUBaCWsW~9Y4s#{Ap=b_MFDpI6S90w{k<^bA5FezA=?_t~ z(|B#m8&Ecg&oXXrR=WdyV z+;Cz@Ae7YuP6lOV34!tAni1gz(13YOAy%j^iXFItRa-& zc!|d2k>j?9lbEgbFa?FEaw{Zznz!Kx8fuLuzkJLckk@gGYbwdF#>~S^W);aJ8XWlI zI|`8$+{Y4>psGS7NFI)l?C9*pO>WDvXe{z;`{_j|sTi7&EF&F8C(a>ycP5?H$+U!3 zZdF*74>wp)C`5dKDG-<~l8{Iu;uiB;)G4H1GdvZc6W^vXQQLm5tPs zwlZC|B%-yuehiG&F%QZ~={Ta)SB@J8MkMEy<)B!S;LgdGhf}6>6Vkch(>rq-JYRP>V71fyuQ7VJHV*-790vzm9{j4vQJ2| zBEtD)b~%Vm8?(zj^lBu7-Uoz;liy+WrqnObdBnVD`x_*iAKLfVeTX9Hur;A0yiSOE z1(^?~?;;Q3gCxb^y!N1e3yL~v29D_X(-aMyEr2CRa`v4>0^2&)nWV%J=>*dpXh1t{ zcy?rTKs&|rUS9MYc@HJl(zC~%D_u&OXugPkM-Mt8+^sx{!%M2AI-X;AJJPY`v#Q(s za1GKR=l~s9oZq9)%%aap!ODge4w=G7#Dn2&esz%mW5VLBnIs6!guHg+JG3YsQiOhF z0$i|l3h);mY9d}pKnMJmcO!aQ^SvW-5DGysli)tGe;{4V4{Prz@PwODbS~K<@>lT% zI!T1~)H9YNBkH+|lsF0ACm@$l%o>mdMv}xx!n8+sle5>sbmBZYW(f$Hj)GAM(vc(- zOSVKY9rv-tQmlj=qyZ{KKmakr1JA@03v-|Y5Yi>M=vXi#oCvQA%!y4W+>X@KHil%( zLDKXNM@GTYUOml_B#XzLv@sPQaYJM*a8)31R+&d+WR(z`*h5AXDs%_#4JbWLpAXD0 z4g^q&JTm(}-q4UFy&N+$6auwG2WFna3y2vRCAXmV#Ur~LxuT%(mrcwAF%WeQh(`i9 zNgAx*c)tq*kC1S06KB?k^D>zPJ)O8_k;*QoCZDj8h?z;sFCXDe$~U4|xXzG&RHUa6 zuR#wqKS^N0?MDL6;w5^jLq^rUz7m>%$O$0UVWu9nHquF&-#LuGA)VoRNIcG_fMCyU zXkjtKsa<@i7)eQvNAQ}O1WGr$K>+3Z28Tl5bAe@yXPw|y7Heg-0iMziBg4FZwHsgA z5qS7LeOYt~?_z9+Znhp!-$DgHPiv^hM|IRWY_@%*{0+iXM5}uw>3wR*l+JPvF*Un} zj%1*Ev5CE)(BQ$JWc^(*SX*{(X+{vSEcx!+`(XRm4qFHn7$YaW%FuCyK%mS*9d43&3oXP|JL{9dcY`aIf*Or7+D% zQ@aRet56$(rERm&;Nl&hk`AdGe}<>BY!czmzT7-4_(gtbL=zG`$TaIZ=xXf5p>0es zX8B7_bjr*=DcOQN8JoKfjx?@X2FqHF=E?!kzBKDgfp8#-WQ`;uor%Q_dfy$H@`FFA zT`@&JRcOSzorm*_scC~(Eo4rfNw#)G&X(NYeJyONW^pNO6H#&l<=eZZv)<-hb$HuF zhRuS_!k$1UL4k-#ZVo@Cm=v=nQ_#Ut3A6v`L%TGNAfhQH`j4z2rMiu zSIk1+n?a$F0ALvPr~xvh97X9!9^2Edj}cvzjf^CG6Yx9RcQziM#!jfKR%i0bG^-{# zO#BA*PI(JlK6=}Xq0uYavLNPpb>B+)CVF^|j_P&)@$+A`??)OA-HmwP_Zb@p5x6bi zxAPq;I)v>lJ~X){Eb=hEIP9L&6=!asqPz4uIrQv5-fpvmLZu>#Rn<|$j6;#6BNg^i zN>H%X6q|Ce1U?W2($zHIp+pQseQ{4M9Vy&h>em*%QpQJK1%U>3yJ z9*fKr<x`YsSw8;CZ_*J1Npy|rm$=m5+29`lE;Ns%Nt2!XqKz9i5l$O+PncrU8kudn>NSV0@?e zb%1otBeHy+{9acFvYR)m^!})c%$5ek?urCytN<5>X*1-Sy-R|zp+vzXNupZpSQ+_2 zmceXJ&Oo4mBhA_(X>h)I$-u+Sp5?9CW*z!J3fGt}wZ}X0H*-T8D=o2+TxP!I9G9OS zqq4mgWQ5=NBY!fc-*uLFP4LR}>7+7UGkKD94i#8Sfa-`@GS@8l7v7-|j#LyX~Cw88++*1zxSK-vn>&r@pCgx3Y%?g~g>vRk^!5@v1 zN23qYimq@gez;N*L`n`)EkytN;iD?Va{5c&_(SFw;E`|tmnikgp`B!@o2Sul5Q9mz zn0w3K@jdjW{7B;X(bDs?39fk=l6MpS<;b1d8)Bn_o0`E?IzA;sy4C{TP%z7(NffUY z(yY>qORIvtSK(E~pjQgP4UNb-%}mO%Psa&ChrpVh7ry4kiOC2R7%6Sm9L%Kp+5J(& zUa4@E|5?y9_K(yp2mjU)Yto;_G<{^TXC~|ZmCcz(*!c?zhm2@hnS24%eAvx$Gh@gg zXYqB=5=jM}K)Fn|Jx7{ONk>`n{J&Z!#(C z@|gA%P<~Dda9K#D)p&EzPrPmz@N~@Z@SRrx)sxB5+aB&bv09Yp%S)QyAkaHSe+Fiv zoR+emmk~vEOdewV?CrON?qqxRx){Eq#zZq8LuBBCU!|#}8QAWw*pHhTu^@G7C$uK5 z4ovEyMS?UaT~Xi2Y0t`8!f-1!O+|cG6>>011@6FgDCKl++XdOJi-ra^u1^Ym>n?)4 zN0J0`X#J?PKG&pkq5fyYy}U7kY~=#fHBqb7n`0g+OM&8pt+6AY6qd4F(`LFbBhs7| zNJP5qdD3^}f&9eH`%jIyR2kLd)zpg3*sd+_w(N83KCU8XG45FQSX@53y)&wjE%2R2 zS_-o0%4VJ9o8;gxN0erL z^UnG61bYXuQ4|I{R_G_mFV~)B>&@G@zy)cq)ZfPx3F=0$fe$tGicQEA;@c##nNgj8 zpqm1L$d#K+m7qx{FZ(qZRZoNblyha?fPdm}C`e7+^9w$$^4@N#e>#%Q(|zrdONTfn zKu?ho65wdZnVa&O&DFxMCF7mVs~BIRY~y=}x=W>PCQ)K1?W;?fYbu_S?bftcL2F#G zC!wYE$KgZ5Owno99nAvgoO8wW@fYyMUoZrR!mi9Y$syeZRPLe1NpW775UM}Ln6wf7 z#cEIPV|kNtgA6!vxQguO%=6FKEm_mC6jkhso}6}PJ6#u%smHE5k!D4Ex#nj4c2qa% zfoj-^q=#If#-}eGoZ`26NLRPXdkK6>vokba1Ic028ZrMZZLphLlPCN0u6WuIO$T^lRA4Q+lWScL!d^XvJX znErf=KPUA-CE!vipXC16(r2fyc0ND+nXVgWAbu$eKw^nJAL4%1Jvi)b; zzd<)NDb&9~ZT>)_@vm2!fLs#@1lcga&knOc=po}uWAafwqtA=JuU3?#fSsABpQz=c zOHkI!qgXs9Bd$bD^JTRCF7NRhuh8N&ZyAXqowu(SQ+jPvMDV3?tkQ_%UftC>aNUu% zn;eH%?5Dd8-F?8@@kDgy{+xGd+Oqsl&;zH-AFzw}8m|rQx{C7OChvyGHcI^lF}^cw z&C~Pcp9N#6#)b{ELUZs%v)Zt6ajLIO&)hn^i<^g%HTCM^7rE85WqEZH(XOzkaPdDVZnSnD|Tv({B?1%)RIHin)}Gq;Lq zbR2I0>*Ge8?u`5-2l{Mm(j5Nv!1lD+x@SUK6s|ZeX5n?02OZBl5A4KC_6QaVKSO@` zllXXuvUac#{1n&6IPfKqHh|f^#EyP?(-sy$kDYEbonZ9Kr^1)&*hx{Tj!&*$`4WW3 zaxM@aUF`lKULs`uN+Iw!=(F&4aBHdbNw1*y?xMc3gMjPH&80T=godl)v>?y}-UG&u z6zABZiH}xQb`?Ut#qH+D#p8hUAN>aX&6&y*T#$`7*xPJ37c8J-J(jC-n=ulf`?84M(YJEdzavvVodzZQ z`i)tP(BZDIn)HLIU71BjVplEK47Fc!Yvh~XXWluO4o}1>!kVpAInO zZd|+m67C)4>V!Cq0nsakU>=+KLYw47u6GU|S9gBZi6oc_!-9r$J{?zFXpLiw2Kg_4 zuBoFQFbkkMv#uH0{%VC7g7w5ZTM=~=7dxjh`#8TS;+?IqO_Ao#vW9sQSccKTSsS8A z&#>NLk5y|hkbJt}?c08zGl)SQuzXZMkADZdmFj|EKJp;(&CSn?{ii~u&Orr&x*hnX zGF87pjlMA)kuji1T1plY?+<1MMKSHP+xYI^E&IliKXFMV2f-HLt{aHxrtQ6z0764( zmKq2HUauW6O0`FHzd}JzX7PjPq)X=meJNW05owaKeB1lJu9xkUhxQ{vv=w)`dEn|2 zoXL-L-^TVQKN$BWdLP{DqW8>5=jeG?cu1;}g@PfNg-GYiSZUc45G@}I)~2CO$7b5> zVDrk%WsuMk4=r!@!X1j>aYej?PRHKiuuF{GO#8+FS`gS2r}u1eV{XGc}9TxQ|+XXNCD6a1i}uBKLwM; zADBK8-QTmT-^*=lYy~|~y94R~)BeQ;NbS*#sAub6#30}>8de(3dPnh>f*itOv~V?y zZ&>)v-*A6@Vt{Dhu+sjm0uuys85HMk1>wT#QL`B#PsLC0|Bm__!M}ZCsBw2Fi!af} zC8g!y4T~@R8~Wcb@iB(QPdZ>=WCYIuZR=myCx4x|`gcMQh&TY!0Rm|aiyw0}o^*gQ z@c)YhVDVqz4e-+P-!Fyfh=kj}HXZ}b{#PKPbs7eN)c&aKKY=&++^zp$;Q!qKn-=us zAGHrg{!#p23XrUSGXKAj{u_Ff02_(L`frv0{gU=yF0r})<>H^k{}LPs^nb?xjS>U@ zKb6v7^nYCDzrmCLcJ+@7V3UdYuZ?VM;Pf5Ne;EM=F|hH={X|-wN5kobspH$2*neze zLpECqS&nR`$|ZJ@ek%!i+a}8LTz=tk&W2pZPC3U-?sskqiYAc| z1RN^6>JX5S$L6e?k4{NwY5)*iuPaW;l6MM~Tbn*~ahihRuT4eA$*Ik#6Y4BDUn)7O zs3-eeP@As10(&8FNIHcIUKCV&DG9aI$QQQaW*GvvgruBP#DaTNpvgQc_?=~C|Cpd9t+ofG8|l;ujDCy$_J1urhjyd9EM=~Nri zM@Pmm>TCoCHeiHHNQ+ft{hn5cIo93vw1YMgI32jG5|3z~;Cah6-KFH)I;+kB z-^zfxXFMO0@5?J{;DU|Xlx>S%v6~e>Bf05(jGOu!MDlQw?2xm@RqjiK31yVshx4(N ztx-W3?(!*L%y(DSWdZEcc-9KiaJB>ov-R7qA1t+vEt`L~q#6Hc9uolIe8S&V|98!6 z@JO3F#j3yk=T1LlF9}5_MuXTkW|)E`+bDncp>EnS<2>+QZh7p1cl-LwbiiSs=DFIV zbJd~*awlkCx@%s$E^dnPWQaf`i`k^BVH;)BzMeUAS)k00ULF~lUea;A85?KOyz-~X z9LqBfW7;rT&NW@@ zyB-qQE`YyCCH?RUFdll+r+J)Q$jJ=|3L-1FHnyGvNk)7@u)Isryb{V5muuA1VRH_X zx`(bfHDdGPWF`hO+(3h8J9T-7%oA61l)b&GU<5s{IH0XOppxx%UKg9=mjQkW&X{+? z2%eInFvBsxf|azjGOn35*SC5J&Pa0|a!;ILJ+TW*bW7p&jv=Q)_kvs?qoU$l@alE<#PY+Sb zYtB(e3WULV%#wg^3`K~;(RYX?D=8`U;u%Qj+SF%~QIDWw_KA;Mv&JO5f+6h+at3yH zg3NQmqOjxG6f7djadTGV&l%q`SEEVw9z(Z~Dj{u<30N_)qa>D3hpAc9GP!JzUaD^b zBS)lftT%~qgAF@7=f&Gkv!NffpNwN4REBr4w>chiS4ae?`k8)x7ZAWBY&;MPlcwKI zmKoKgBO&-KV}rw{6ecJrPP`?QGk^Zrr2SWDKy#2(4vAd9Y-i~*O`sfZ<+j!4JqQ{c zOJ;BrG9E22r+6+9oUNN(MYD`A%2UPPWe^u|>K~}I>>ucp16>Mm?xQ_PoeOz`0CFW_-s)Int z7?pXz<-yW1GY?~&f&gYfR};{uW=+$DO$unFqgMovlujt zX#Ds-Q4Oo`hpLKWZ$!UXrRV5jksf0laBysh5=x6Ab4t|jfK>)d_awI>PSR3gt0Dku zc)4Gak*C#-DaP>uzOu03tT@G(FkVmxlsSH)Mqvq78Q9TL@Rr`q6v=o%=#&|YVG$#Z zO}hzOPV~WYW(h_dLU9@6gY{pwzGT+7$fO54bM~wt#9+ax*)LHEW^V6svgM6q923Tj zM-uZwo_8=-HiJoQNhpQIcZY2T@L&PpP+L#FH?SoVKHI~=I5=FH<$W6XkSS3gOPIIc zuJ$ryjUF7SY+5tBSr`1;B`vTg!9p0}TInf@iNMJCpz!W9U{J05R$8OoiC&$~oN%-Of^71yqK z#P9&yiAqXMo+5&2`V@>WdIjm9-bJkpQ6?QTm&C1QUgt+bE$Om^Z={%)ps~2F*7BPn; zjw|{P%%u}+WR(pc&Je58Ln3E0$loUY2HiO%@Fc>3RhL)3SyiPrJ0x_rROOvnm5K;v zN+aX2-%sN1z=>H&ly1GmoI$>8eBX;PrXH=|Dz6qvLk#dHRw{%|I@*F__MwJf83~bso85Z zh!M2kM$HnnYhQ|1Z%I|HpekldV()cr+Ta>#jcThUqV|lP#;8$5j99gT*ed8R_xA^U z9_R5npZDkWdYyBg??aaYzW_h5TGxJ3x}l%N7@%ND5+(w(z?yr|+=H>84c0+! z$*yE_Fas51$ft})`FS@)`wg=a{WGN>wi~{Ox)r*i2h_R=M+B`mGwfd%7cy&evUM1g zgbYE;U07pLHdB=-vc^qWnWeA*PTap&Vv*XQIAW`~Ts~SLq&ApdsuL(ETaVq0siGAV zl%o$SgC4egAS(_lQS{#!h5^BF)?8}A_^$Fg}FztQ9PxSbiIzr*x+#xp|1 ztx!&6j{v@ulIhf9H@_w_Q z#J#YSG{5@6VnHR?rk`032wY1pEFbHS0=E!ry43_S<08tRxu@1r3Ep9Ouez>R0BsC=^MInI?-0m$17N-8tAd9liW-i=5I)QP_wE6++M;=$J4k zk(2WKcJl1|3P+UlA+WY&#duejKmbxX+x}|_7<9K80@iea)@U)OMrnvqzCi&Esq#7u zCH_4v^?qE@-km7QF;1c|D=tZE<}X6$%HYU|j-U=mjpVE0hGr5@iCRf~a|cpuZzW{h z%?~TffgyxzM3-!=m!+j9-uxg*na7vPvxx9i{bqoW;3VyAy4rS`aAliAhM71Fq*3z>c=({Q<4Z{0o0+{LOnfLN ztTS=$>*f$qpvIlr_jLaBk?Cq$T3jH1O^d=)MvSS9DWREZ zOy+Lk4dxaN^ukSg|DkZ)T! zengRb!!vc%*nQYeF>dlMUYS;xu;rY~roO%R5wluCOrv?xuwtCgoWK6^Vk;e5hA zXzLVC*x&g+*Pd=i_E}vx;vxB=`?;`JL0PhxJrx|Be@Tw|WH$dxMwuQvo|2nyh#`Ryy+ zI#nMu2q=D2QXw$<8kScthB+E!_m%Gq-_js&x#mOt^0}Jr98L$Vv3R<_N~%Ca83n+L znHi6vZX~o^Y}Y-Kcft>pVJ7uZ-lGv#*5wI+hiq<=I3Eb`sYhk0D>Hp>&0%AD0*6=( z)}SzJzSmcX^(3v?v`jNO*~mTuogf@x?wdPLE>wcuOa1?0@^J#4tygkwqn5iSeg3t` zbTEE^+P89U%XL=-uoQ-1ATkWN#T1p~*)ot(8M6fWOX@41A!l*n{^5EBQD=J?F+-Y; zGiRk`>H`@K$M@15x17PZQHJhN_5nIj4#t{EPOLVdjBd*Q)m2cRpk)Do=U8&Pj8Ta9 z#p+VD@O5s(Y~&2jMq2KUWO!A>-<1TmpB_C5OK-dci7mTH_qq@^I z#yhD(rdjU9DUH8;ppT%z9r&laM>l&AKFIG?j2*u=)tBv7-gI0ZZxVdxSMH22+;eA) zgWIkd?+;iqN%mE;U8Mgx3g@D=r^Rmlvs|t?OqrHP4>$jkuenxfPWiYDq`>1%0Wj#RtxpOAgMR#x@=&8!1X?0yA9#|*LhPP^fv<+yCB96Y!Ii2@*{w2 z@{--pVoU5??4d_<@v$vhes{P_XIs_G>oSOCjZ#&CPQT0`2%Jf(iZCp2;E*f z!H$CNM`(ETgD>S#3#cbG2|pv zO_3C&m<_E;WCT?eiran)@n96v)Dg{Pah4}<^i=jCzXgD#=*N4vp~FxQ{G}F_03pcK zbWzV5BSbt#up%r6d_PbQvJ{eNQc)V^Such2L-NmUm6O{YLKzSBPuv~UP5ocM&Jl5l zw7gwrGK0aYgTHJ!*2|S%XpmuLy2NWJM_9@K{|nQNI@j_~T&gFhs9T|~f~}KJ0XUuU z5iHN`=KkFLHMv=~rts{xPH{KrluiBNDi&%WvIB7|nk!Y(S{!CA#F!#{SQ`Ek=byZT zh{q^jxIeE+uGIWWSdO0(aYOkHJH`(C7p~I70At~uZg+5vClj|y?vm8(H04LytR8@w ze821N>lf=*Rb-Wx$4Nb0;bk;TnDX)Ho}74@FhGdCMIBZmYcdlfI#U%wLpg+IJmjM=onP10wW8`;ryYcX+e*lTlycTaWP{BKvlovEmL8OKUkB z^kb-o&yTagDFz^nx3hf*OUK6H_Q~VmDv?}0ocNN~bo9R2;%J|h&{{0_T`V44TUeV~ zo101x@m^$q58SdmhcSE=gici+Nq}~P$ObsKpL@K3*~H!w8}LhonL9)IVy6iY|FD_R zed>L2hIan>hF0RhHCm2<4YOxBKGRz1)$7|ejsHH+GQ zuc|uvXzrtIIqfwmeVgR6sIyh!G+QL7FXXj9Okbz)Lt#VoY5Z?|H@ZVWUrZRT&ZVKU zBg$vK;c-o(&H31o*nQ+f$wXwFeP8Nif(waD@tcHb5H+d}H|K%2`A}iwX#24)GgQ3b zJ)=rX)WrInE^Z@INhp4kuhrGoq?T2LOh?1wqf88+ZyqRhYJRt~d42ebQBj)K7g<+P zxoMbJAj)L6BOpn6XWhH*GilH-tZW~&hrZ$s1=0PtP^Az{07SAvK)0*jBi-e=BFgZ& z(F+0bt>Ep{y~0+EC<2}YF^~}>;_R9B&D;w4yxk4nscahMe6wirlMT?+X|3u&-MZ+o zp05j|$&r4&E;?t9$EyqJNuK|#5#BqDzFdk1Rt(T6|N11CXSFes53_Ma^_TIgTZZuh zhd=Wog23zTlnR8e39F%lVz{B{x;e&Ydzgy|w#yz?iG#yyuw7fZslSBtMTG|jsC~m+ z_X3DXZ@RniuGTOP!bdE=pfXYrobBIP3y)EP!%L%hLFP+`9EOuDn@@&_A-DN{ElSJT z;AylL7e(JzhXaA~B;TUKDN3AwHD>)nVM5aT&RXbB-(O;XIMKQ#6!}(|OSis)j7AqH zaJ$`OKM9Dy3$^cx2Rq&3v@zwodArtn^Wov7Hw|}RM8FsP#D*_N8o^@4+?Br>dhkg; z?ux~4H3x2r23Sq7F#`;hV0&&krSbA#i)|MRl?i|c0kzQu;v8pX(*++ra@0s3AVFoz zNfG(EXn2nuQtF|rz~-IBrK^>#=^_Bp`mf?F^Sm+N7|J?6>V3xe3w(SPJB4M->6)I; z$eb~7BB*wLI~5Usj69F1`q{`@1vlnlx+pK`DFlKxB6ANgbC?UR?TOr34ZP!b8plxZ zPIu4NN(YRpDJDHRl*I9!OIM*Nhh21b=(5c~_Yvd&W{m^DH+FPV$2#Ij)cHW}A5}Ln z`TtB)cfnXU@A`R_R4ZXq0nGN`UT4K@MXV^K#n=r~mrf2s#WwA@Wq4-{-vHJAC%NuM zNtu`E@%n--0rk(n8TP54eblZW9W5U_EcjaO)z6zTcL<0c6j|Mmwex+wuWqdAOtE9? zVG7<858ug9DFCD*#H*k01HIq9BBHKTe0oV4A9njLd{M1Gx$=<`Rdo**7M|yw$GLiP z9zB#P<>aHSo7EF%XL2tvTl0B)isr>T;<4jB+10Gh<+^;{B;y}Mk=1K3ddFGbOx=L< z^J4aIHO_8L04tRLX7@zSk5jod_>i%aqDWe{S+TqhyciTd<965O?G_T2ui0q~VWon{ zAOA&w43O6@zL*C7W-ub*#8A&!B*_lxNkww3;RU)6NWwe`@W3K}p~KZ**xwAC5NDIU zqDFty8~wC1r~V(K>IThUqPCd|Ja+Gb=2~r|+X)M)4&y*7*@ka0)y?x5*Wp_AfN^zY zo=P+4F;}mPyva{VTsg1Ye}aWvoXj7S$C=coP#yZWSr+d*+8@q;VZi5$*_)b=dOe_;)+#U6xfC$I@sGAP+%bhe)mjZE@ z!HC4H!?`uYe0aMv<(gY-^zO4I{mSj81r(Qpf_Y5q;4kKR2%+KOIOV)*!Q}&UHkjY(3}mndI9&-Y5G>cMdRiq zTxnUz&MFCb>y_VCE5nX&B;**}O4%{bdbdttGEkygj9hDz+pZ`Cq=2SDGt2o&6eHz8;Z~d9bk{AQW&95vOrg^Ic?s3U2@B)=|Y- z1XDpqj`&@+vV+~MlZ&YEfoM^|HSse*hXx6lf}z!Os9gR2B-}hbb+o5&X*;}C`iS9* z-NNW<6=T6DX=d?QtUnaH$o7x#n2Z2L&!n7;wy0shzqqgZ9h8`2Rw2V19~-4y%B2>mkx8(;d5n6Lo;nVZT@H2;OGvdA~@SJF^T27L(X>1Ul<-R zb7|bm9i()_lHim3?Te^-k_t4uU3%&YSs9Zk`BtefhKTyvd}lC|S<7_&kZFIjN$Sr} zb?5m+-5p@ zy&X^sH-H;1Zne7;;(6t&<#4{i&?wwW4DqKjI(^ zkNj#%LkT0Nmr~$lXQJvq_|2zeRr87|@8ID)=_0tsL9Z@XOtZix)3@9I>S>)Un2bLE zqm=KJ=fB9`483T{NS%zQML^B1G=B}@@5i0fOa`+E1I*B?GbuL@`FuDSEYZuXiTGd5VJwZNcQ?nmpDWu0v!nsdazzq6x7mF}BwI5R&9HPC(8Gh>ew zS0lObFlcuUC7L1#+REqmL90ed&JYocTyFwUP7)Xx_BCrJ=NsXXR<%yQk&)x3UOKLQuEkJ zicZTFTdDI_#SFx5?@JN(*2Jz`2HM0ICKC#kzR9ZEodZQ(yVgj4+-6wwMbP{h%6U!1 zq%C)%eP zSh9;)=saXAl8d&G7v%lVniaAk)n1-;x%OG?DXpclVZ80^@_2~x$EoR=u-C7&#f*>R ztryCQUqWsmE*zq{fi<%>JCEARQjKeQ*hq@APoJtI_BLHg<3$gP3qHYgB-h+dowW7O zyvHX1l)rjki=p=>5-UB+UU;peKXp&AX&Nt>T9pI@>96@5fW#}r$mU0+mt8!VX6|=1 z^DI%wF`%n?-S*Gtf`!a2^7u{mqH-{&x!C&eLzMOJMyXJE{ z0vHLR@?YWnk>nvB;Lap(Z%h(Ze7!y{n3^T68!U<#hIsS__i0>(f}(hwoCKB*5szY-OkdPI?o!l~A*C zxXGcmV3=6>X?VJ8edK`oNRX$@V5{T77_R|m$rLC8|NQcC#7f&jTE#?fxYf932N)d` zUe8)`!m?;``!esLJ?lQoe2;7A7O@5*Vw(UM=lrQKlrv~pPlCsADn~pa`38xA9~ROQ zMNLH$V;50q=x3d1{@W(K7lMikOi#m+Fg{U^6AZDac}%Qr>r&0|;9O5%NW@-`64O%N_aGkqyxw{TI1S98qM|foN1HF$ z<6g^oLS7x8Fy@%xRq($A>Q)ReIwP1A_W;+6D^4dZ*D}vhN=EzL%}K9}mA7P}>hC>p zf6f*Mvg)#*K^W@*nW33QMZ{!r@Sn*MSQk9ALCVQZwu)eFI7q2_-XuZMa=RNAlC6M} zsU3?#6a-ImjyRm#f3l!_dQ7qoo;Sp`j^)ucKOpbrKfBb81430t#)^%&oo>}4I-B11 ze>{32?d`L7G50o@rdi*-5$gD_Ezn(Cr{hDYNSdy0N(bdhSaFfM@gILJ*RVTLy2Fb{ zO8&b0mY;TV6b`sUe6cq=cn)Y?w&`5MT$Ih6yx5u)_&x`|R@Ox3);txDRMaffIp^Uy z8o#Rdn<0Pbf+Ml5nl_hsuJ$X^Z~8X_60?`e(H{?1uJmg>g~- zVWqKCdAo7C?s}&l)O5U(DlRwm09_V1q*pQr^|c5o5;;0y8+V>6+urV+AJ*S%GAYLe z2aPj@_O5VpO~Px`$?v3W&Zqm?nEAM`R?O<+GMvN$n5#%8xJ)^JmJ4n5XSt0# zA)k(#enuF742hihpUI(gM^B&w_qn!;FEjZfBGM6&KKN3n`#-LG5;NKsxvYJ)@Thg; zR4JOx?%i=nq+7J6%VoC&g4N-7T;=Q1A8PrtrhXuly#!T^@1eds^zQgNDU(Loy13b*B=FQ zs{KkJc^B?c9e>8{^I%7!>JofYOcD9>10?#K8;Hh!l^f?C=sX{YM&OPw)P@&#c>YHq z?r0pESR9sac#LaBMx9;g{f{xMi;=nNOO5YU(|zZ_94prc#OF|oP;k<3 z1`6se^JEHMZ2e*X_ee>(q)2s@$Min`QLFBnx+P%i{HLvcJE4{N!H!G7NKyNwjj=9Y zZ>X+_*xn`4A%?R~FT@pnXcV+ToL-&atQ`FKxZ)uReh%=?{}8tfVeM&{gzk zLZAcMxh|K}5?eOmi9!BFBLdaEt$l64fv&z2chqb^1`U{^m?0#sv+PQ883}uL#!!PDLo#c*2g+xm&BR!>zj)`YZI;GpZcTL0I znh-cNjiQVIe8)!DY@S{@R)RMst`VFRby^)?(ll?!US?9Zb$P?@`973Ww3G!#V;C4| z0+_=)VMX8y%cKtsN7+8+o?c4&eV z!O=l(gXi}g4L5jHoU7xf1_saCO2oP%=e<9r63;Nl(` zXWPED?X?lFO|mWL6ze|Q=Cqmd{S_noCkkkkIO@8NaRFu_FM|6G+2voczVnegyInc5 ztBFPL&P!i&^QD1J=!mFm16j;u56AO2igxiGtNC+vJM#z)P6WB#nbsZFmxP<|oi zN(QzowC!`s`RIE}_zBr{-51OAE}4-bWRYz^{KgW&;H88@3s0%Dr-O63%A6UwIx8~D z^#WcW_sgOgY=U`c?b7k_xx>O-+b?UChz{>ZZv0ZIS{e#^8oeqSrY9=2E+)S$p=zpY9j?Cz z;=UoFFrg*%oQoG2^fKvEb)z25bKu*->OA3_<>StYk2tu%u~GGVLHar@t1ysGUrEru4{w z5$YwsU8K2(WbGS$Fy&iO;?Of>S+pnCx)9K_ zzmSmMI;fex?vb|7}LA)gpU3y7bx)E;1sy#2REu`m8pW& zjZbk8@UDwyHAI~G9EmoV($opAm1g5b7C_6M8{30No*_6&NDG=&=d;=UB+S5UHNEWI zBQX7v!{t-^9Sk(yL(MF+C?dQb2xEE!w84HcpS(f8H?n|M92dXsqdiiEXPF1i7Rwn} zDfH+OuGcp59{jQxv#4g%bp99AX~DB}Ed(B0_Ytx9nNV?FJvsHGvPGjt&y0;BoE|j{ ztl!+~IE{rOomd&xs3jzNe19%|e+nkOZqM{TK-`S3{$aqdW@2bI7cHDhIlQ^WZno9c zPR|pQlDafbm$o#wTMf9wFr$30lBRBCv3%_kM8{w?oue?Qe=PFw#2=HpnJL_PALD~i zO<7JrfR82>6{=6YbW?4*=6k0VoAuJW7rL)~Xp^gSE6yb^T4TCp-(-Aiu(f?m8t!Qo zHK8{KY@W@ioum(vZBjW#gJxVA6E90!GnnYhp_bI<$T`B)1=-_rN98vILhkZgWOrEP w4*i*nb2M!nO&dX@qmWH@wh}_f-XnW&**xcm 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

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

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

04 - Introduction to Tidyverse

+
+ + + +
+ +
+
Author
+
+

David Rach

+
+
+ +
+
Published
+
+

February 23, 2026

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

+
+

AGPL-3.0 CC BY-SA 4.0

+
+

For the YouTube livestream schedule, see here

+

For screen-shot slides, click here

+
+

Background

+

Within our daily workflows as cytometrist, after acquiring data on our respective instruments, we begin analyzing the resulting datasets. After implementing various workflows, we then export data for downstream statistical analysis.

+

When I first started my Ph.D program, a substantial amount of my day was spent renaming column names of the exported data so that they would fit nicely in a Microsoft Excel sheet column; setting up formulas to combine proportion of positive cells across positive quadrants, etc. Once this was done, additional hours would go by as I copied and pasted contents of those columns over to a GraphPad Prism worksheet for statistical analysis.

+

This of course was in an ideal scenario. Often times, the data was less organized, and instead of time spent copying and pasting over columns, it would first be spent rearranging values from individual cells in the worksheet that were separated by spaces, all the while trying to remember what various color codes and bold font stood for.

+

Today, we will explore what makes data “tidy”, and how to use the toolsets implemented in the various tidyverse R packages. At it’s simplest, if we think of and organize all our data in terms of rows and columns, we need fewer tools (ie. functions) to reshape and extract useful information that we are interested in. Additionally, this approach aligns more closely with how computers work, allowing us to carry out tasks that would otherwise have taken hours in mere seconds.

+

The dataset we will be using today is a manually-gated spectral flow cytometry dataset (similar to ones we would see exported by commercial software), and has been intentionally left slightly messy. You could however just as easily use a “matrix” or “data.frame” object exported from inside an fcs file, or swap in your own dataset. You would just need to make sure to switch out the input data by providing an alternate file path, etc.

+
+
+
+

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 creating a “Week04” project folder, copy over the contents of “course/04_IntroToTidyverse” to that folder. This will hopefully prevent any merge issues when you attempt to bring in new data to your local Cytometry in R folder next week. Please remember once you have set up your project folder to stage, commit and pus your changes to “Week04” to GitHub so that they are backed up remotely.

+

If you are having issues syncing due to the Take-Home Problem merge conflict, see this walkthrough

+
+
+
+
+

read.csv

+

We 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:

+
+
thefilepath <- file.path("data", "Dataset.csv")
+
+thefilepath
+
+
[1] "data/Dataset.csv"
+
+
+
+
+
+ +
+
+Reminder +
+
+
+

We 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.

+
+
+

Above, 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.

+

Since 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.

+
+
Data <- read.csv(file=thefilepath, check.names=FALSE)
+colnames(Data)
+
+
 [1] "bid"               "timepoint"         "Condition"        
+ [4] "Date"              "infant_sex"        "ptype"            
+ [7] "root"              "singletsFSC"       "singletsSSC"      
+[10] "singletsSSCB"      "CD45"              "NotMonocytes"     
+[13] "nonDebris"         "lymphocytes"       "live"             
+[16] "Dump+"             "Dump-"             "Tcells"           
+[19] "Vd2+"              "Vd2-"              "Va7.2+"           
+[22] "Va7.2-"            "CD4+"              "CD4-"             
+[25] "CD8+"              "CD8-"              "Tcells_count"     
+[28] "lymphocytes_count" "Monocytes"         "Debris"           
+[31] "CD45_count"       
+
+
+

As 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?

+

Let’s see what happens to the column names when we set “check.names” argument to TRUE:

+
+
Data_Alternative <- read.csv(thefilepath, check.names=TRUE)
+colnames(Data_Alternative)
+
+
 [1] "bid"               "timepoint"         "Condition"        
+ [4] "Date"              "infant_sex"        "ptype"            
+ [7] "root"              "singletsFSC"       "singletsSSC"      
+[10] "singletsSSCB"      "CD45"              "NotMonocytes"     
+[13] "nonDebris"         "lymphocytes"       "live"             
+[16] "Dump."             "Dump..1"           "Tcells"           
+[19] "Vd2."              "Vd2..1"            "Va7.2."           
+[22] "Va7.2..1"          "CD4."              "CD4..1"           
+[25] "CD8."              "CD8..1"            "Tcells_count"     
+[28] "lymphocytes_count" "Monocytes"         "Debris"           
+[31] "CD45_count"       
+
+
+

As 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.

+

+

Because of this, it is often better to rename columns individually after import, which we will learn how to do later today.

+

Following up with what we practiced last week, lets use the head() function to visualize the first few rows of data.

+
+
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
+
+
+

When 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.

+

+

We could also achieve the same window to open using the View() function:

+
+
View(Data)
+
+

Wrapping up our brief recap of last week functions, we can check an objects type using both the class() and str() functions.

+
+
class(Data)
+
+
[1] "data.frame"
+
+
+
+
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 ...
+
+
+
+
+

data.frame

+

Or alternatively using the new-to-us glimpse() function

+
+
glimpse(Data)
+
+
Error in `glimpse()`:
+! could not find function "glimpse"
+
+
+
+
+
+ +
+
+Checkpoint 1 +
+
+
+

This however returns an error. Any idea why this might be occuring?

+
+
+
+
+Code +
# We haven't attached/loaded the package in which the function glimpse is within
+
+
+
+
+
+ +
+
+Checkpoint 2 +
+
+
+

How would we locate a package a not-yet-loaded function is within?

+
+
+
+
+Code +
# We can use double ? to search all installed packages for a function, regardless
+# if the package is attached to the environment or not
+
+??glimpse
+
+
+

+

From 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.

+
+
library(dplyr)
+glimpse(Data)
+
+
Rows: 196
+Columns: 31
+$ bid               <chr> "INF0052", "INF0100", "INF0100", "INF0100", "INF0179…
+$ timepoint         <int> 0, 0, 4, 9, 0, 4, 9, 4, 9, 0, 0, 4, 9, 0, 4, 9, 4, 9…
+$ Condition         <chr> "Ctrl", "Ctrl", "Ctrl", "Ctrl", "Ctrl", "Ctrl", "Ctr…
+$ Date              <chr> "2025-07-26", "2025-07-26", "2025-07-26", "2025-07-2…
+$ infant_sex        <chr> "Male", "Male", "Male", "Male", "Male", "Male", "Mal…
+$ ptype             <chr> "HEU-hi", "HEU-lo", "HEU-lo", "HEU-lo", "HU", "HU", …
+$ root              <int> 2098368, 2020184, 1155040, 358624, 1362216, 1044808,…
+$ singletsFSC       <int> 1894070, 1791890, 1033320, 328624, 1206309, 917398, …
+$ singletsSSC       <int> 1666179, 1697083, 875465, 289327, 1032946, 735579, 9…
+$ singletsSSCB      <int> 1537396, 1579098, 845446, 276289, 982736, 685592, 94…
+$ CD45              <dbl> 0.5952943, 0.9106762, 0.9705765, 0.9819573, 0.957259…
+$ NotMonocytes      <dbl> 0.8820349, 0.9052256, 0.9845400, 0.9855070, 0.955627…
+$ nonDebris         <dbl> 0.8627649, 0.8602660, 0.9578793, 0.9412615, 0.840783…
+$ lymphocytes       <dbl> 0.6420138, 0.2145848, 0.7403110, 0.6511588, 0.705478…
+$ live              <dbl> 0.9020581, 0.8908981, 0.8757665, 0.9153242, 0.895214…
+$ `Dump+`           <dbl> 0.21090996, 0.06252775, 0.20023803, 0.21469246, 0.33…
+$ `Dump-`           <dbl> 0.6911482, 0.8283703, 0.6755285, 0.7006317, 0.556895…
+$ Tcells            <dbl> 0.2804264, 0.6748298, 0.6119129, 0.6314431, 0.439643…
+$ `Vd2+`            <dbl> 0.008120361, 0.007265620, 0.004651313, 0.011348967, …
+$ `Vd2-`            <dbl> 0.9918796, 0.9927344, 0.9953487, 0.9886510, 0.995246…
+$ `Va7.2+`          <dbl> 0.014480704, 0.015774991, 0.015794019, 0.017023451, …
+$ `Va7.2-`          <dbl> 0.9773989, 0.9769594, 0.9795547, 0.9716276, 0.981924…
+$ `CD4+`            <dbl> 0.6341164, 0.6119112, 0.6639621, 0.4378944, 0.739256…
+$ `CD4-`            <dbl> 0.3432825, 0.3650482, 0.3155925, 0.5337331, 0.242668…
+$ `CD8+`            <dbl> 0.2734826, 0.3357696, 0.2862104, 0.4861231, 0.195063…
+$ `CD8-`            <dbl> 0.06979990, 0.02927858, 0.02938209, 0.04761008, 0.04…
+$ Tcells_count      <int> 164771, 208241, 371723, 111552, 291777, 271870, 4879…
+$ lymphocytes_count <int> 587573, 308583, 607477, 176662, 663667, 510730, 7262…
+$ Monocytes         <dbl> 0.11796509, 0.09477437, 0.01545999, 0.01449297, 0.04…
+$ Debris            <dbl> 0.13723513, 0.13973396, 0.04212072, 0.05873854, 0.15…
+$ CD45_count        <int> 915203, 1438047, 820570, 271304, 940733, 675857, 921…
+
+
+

We 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]))

+
+
dim(Data)
+
+
[1] 196  31
+
+
+
+
+

Column value type

+

As 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.

+

+

If 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

+
+
# colnames(Data)  # To recheck the column names
+
+is.character(Data$bid)
+
+
[1] TRUE
+
+
+
+
is.numeric(Data$bid)
+
+
[1] FALSE
+
+
+
+
# colnames(Data)  # To recheck the column names
+
+is.character(Data$Tcells_count)
+
+
[1] FALSE
+
+
+

For numeric columns using the is.numeric() function, we can also be subtype specific using either is.integer() or is.double().

+
+
# colnames(Data)  # To recheck the column names
+
+is.numeric(Data$Tcells_count)
+
+
[1] TRUE
+
+
is.integer(Data$Tcells_count)
+
+
[1] TRUE
+
+
is.double(Data$Tcells_count)
+
+
[1] FALSE
+
+
+
+
+
+ +
+
+Reminder +
+
+
+

As 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.

+
+
+
+
# colnames(Data)  # To recheck the column names
+is.numeric(Data$CD8-)
+
+
Error in parse(text = input): <text>:2:21: unexpected ')'
+1: # colnames(Data)  # To recheck the column names
+2: is.numeric(Data$CD8-)
+                       ^
+
+
+
+
# colnames(Data)  # To recheck the column names
+is.numeric(Data$`CD8-`)
+
+
[1] TRUE
+
+
+
+
+

select (Columns)

+

Now 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.

+
+
library(dplyr)
+
+

We 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)

+
+
DateColumn <- select(Data, "Date")
+DateColumn
+
+
          Date
+1   2025-07-26
+2   2025-07-26
+3   2025-07-26
+4   2025-07-26
+5   2025-07-26
+6   2025-07-26
+7   2025-07-26
+8   2025-07-26
+9   2025-07-26
+10  2025-07-26
+11  2025-07-26
+12  2025-07-26
+13  2025-07-26
+14  2025-07-26
+15  2025-07-26
+16  2025-07-26
+17  2025-07-26
+18  2025-07-26
+19  2025-07-26
+20  2025-07-26
+21  2025-07-26
+22  2025-07-26
+23  2025-07-26
+24  2025-07-26
+25  2025-07-26
+26  2025-07-26
+27  2025-07-29
+28  2025-07-29
+29  2025-07-29
+30  2025-07-29
+31  2025-07-29
+32  2025-07-29
+33  2025-07-29
+34  2025-07-29
+35  2025-07-29
+36  2025-07-29
+37  2025-07-29
+38  2025-07-29
+39  2025-07-29
+40  2025-07-29
+41  2025-07-29
+42  2025-07-29
+43  2025-07-29
+44  2025-07-29
+45  2025-07-29
+46  2025-07-29
+47  2025-07-29
+48  2025-07-29
+49  2025-07-31
+50  2025-07-31
+51  2025-07-31
+52  2025-07-31
+53  2025-07-31
+54  2025-07-31
+55  2025-07-31
+56  2025-07-31
+57  2025-07-31
+58  2025-07-31
+59  2025-07-31
+60  2025-07-31
+61  2025-07-31
+62  2025-07-31
+63  2025-07-31
+64  2025-07-31
+65  2025-07-31
+66  2025-07-31
+67  2025-07-31
+68  2025-07-31
+69  2025-07-31
+70  2025-07-31
+71  2025-07-31
+72  2025-07-31
+73  2025-07-31
+74  2025-07-31
+75  2025-07-31
+76  2025-08-05
+77  2025-08-05
+78  2025-08-05
+79  2025-08-05
+80  2025-08-05
+81  2025-08-05
+82  2025-08-05
+83  2025-08-05
+84  2025-08-05
+85  2025-08-05
+86  2025-08-05
+87  2025-08-05
+88  2025-08-05
+89  2025-08-05
+90  2025-08-05
+91  2025-08-05
+92  2025-08-05
+93  2025-08-05
+94  2025-08-05
+95  2025-08-05
+96  2025-08-05
+97  2025-08-05
+98  2025-08-05
+99  2025-08-07
+100 2025-08-07
+101 2025-08-07
+102 2025-08-07
+103 2025-08-07
+104 2025-08-07
+105 2025-08-07
+106 2025-08-07
+107 2025-08-07
+108 2025-08-07
+109 2025-08-07
+110 2025-08-07
+111 2025-08-07
+112 2025-08-07
+113 2025-08-07
+114 2025-08-07
+115 2025-08-07
+116 2025-08-07
+117 2025-08-07
+118 2025-08-07
+119 2025-08-07
+120 2025-08-07
+121 2025-08-07
+122 2025-08-07
+123 2025-08-07
+124 2025-08-07
+125 2025-08-22
+126 2025-08-22
+127 2025-08-22
+128 2025-08-22
+129 2025-08-22
+130 2025-08-22
+131 2025-08-22
+132 2025-08-22
+133 2025-08-22
+134 2025-08-22
+135 2025-08-22
+136 2025-08-22
+137 2025-08-22
+138 2025-08-22
+139 2025-08-22
+140 2025-08-22
+141 2025-08-22
+142 2025-08-22
+143 2025-08-22
+144 2025-08-22
+145 2025-08-22
+146 2025-08-22
+147 2025-08-22
+148 2025-08-22
+149 2025-08-22
+150 2025-08-22
+151 2025-08-22
+152 2025-08-28
+153 2025-08-28
+154 2025-08-28
+155 2025-08-28
+156 2025-08-28
+157 2025-08-28
+158 2025-08-28
+159 2025-08-28
+160 2025-08-28
+161 2025-08-28
+162 2025-08-28
+163 2025-08-28
+164 2025-08-28
+165 2025-08-28
+166 2025-08-28
+167 2025-08-28
+168 2025-08-28
+169 2025-08-28
+170 2025-08-28
+171 2025-08-28
+172 2025-08-28
+173 2025-08-28
+174 2025-08-28
+175 2025-08-28
+176 2025-08-28
+177 2025-08-28
+178 2025-08-28
+179 2025-08-30
+180 2025-08-30
+181 2025-08-30
+182 2025-08-30
+183 2025-08-30
+184 2025-08-30
+185 2025-08-30
+186 2025-08-30
+187 2025-08-30
+188 2025-08-30
+189 2025-08-30
+190 2025-08-30
+191 2025-08-30
+192 2025-08-30
+193 2025-08-30
+194 2025-08-30
+195 2025-08-30
+196 2025-08-30
+
+
+

This results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object.

+
+

Pipe Operators

+

While 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:

+
+
DateColumn <- Data |> select("Date")
+DateColumn
+
+
          Date
+1   2025-07-26
+2   2025-07-26
+3   2025-07-26
+4   2025-07-26
+5   2025-07-26
+6   2025-07-26
+7   2025-07-26
+8   2025-07-26
+9   2025-07-26
+10  2025-07-26
+11  2025-07-26
+12  2025-07-26
+13  2025-07-26
+14  2025-07-26
+15  2025-07-26
+16  2025-07-26
+17  2025-07-26
+18  2025-07-26
+19  2025-07-26
+20  2025-07-26
+21  2025-07-26
+22  2025-07-26
+23  2025-07-26
+24  2025-07-26
+25  2025-07-26
+26  2025-07-26
+27  2025-07-29
+28  2025-07-29
+29  2025-07-29
+30  2025-07-29
+31  2025-07-29
+32  2025-07-29
+33  2025-07-29
+34  2025-07-29
+35  2025-07-29
+36  2025-07-29
+37  2025-07-29
+38  2025-07-29
+39  2025-07-29
+40  2025-07-29
+41  2025-07-29
+42  2025-07-29
+43  2025-07-29
+44  2025-07-29
+45  2025-07-29
+46  2025-07-29
+47  2025-07-29
+48  2025-07-29
+49  2025-07-31
+50  2025-07-31
+51  2025-07-31
+52  2025-07-31
+53  2025-07-31
+54  2025-07-31
+55  2025-07-31
+56  2025-07-31
+57  2025-07-31
+58  2025-07-31
+59  2025-07-31
+60  2025-07-31
+61  2025-07-31
+62  2025-07-31
+63  2025-07-31
+64  2025-07-31
+65  2025-07-31
+66  2025-07-31
+67  2025-07-31
+68  2025-07-31
+69  2025-07-31
+70  2025-07-31
+71  2025-07-31
+72  2025-07-31
+73  2025-07-31
+74  2025-07-31
+75  2025-07-31
+76  2025-08-05
+77  2025-08-05
+78  2025-08-05
+79  2025-08-05
+80  2025-08-05
+81  2025-08-05
+82  2025-08-05
+83  2025-08-05
+84  2025-08-05
+85  2025-08-05
+86  2025-08-05
+87  2025-08-05
+88  2025-08-05
+89  2025-08-05
+90  2025-08-05
+91  2025-08-05
+92  2025-08-05
+93  2025-08-05
+94  2025-08-05
+95  2025-08-05
+96  2025-08-05
+97  2025-08-05
+98  2025-08-05
+99  2025-08-07
+100 2025-08-07
+101 2025-08-07
+102 2025-08-07
+103 2025-08-07
+104 2025-08-07
+105 2025-08-07
+106 2025-08-07
+107 2025-08-07
+108 2025-08-07
+109 2025-08-07
+110 2025-08-07
+111 2025-08-07
+112 2025-08-07
+113 2025-08-07
+114 2025-08-07
+115 2025-08-07
+116 2025-08-07
+117 2025-08-07
+118 2025-08-07
+119 2025-08-07
+120 2025-08-07
+121 2025-08-07
+122 2025-08-07
+123 2025-08-07
+124 2025-08-07
+125 2025-08-22
+126 2025-08-22
+127 2025-08-22
+128 2025-08-22
+129 2025-08-22
+130 2025-08-22
+131 2025-08-22
+132 2025-08-22
+133 2025-08-22
+134 2025-08-22
+135 2025-08-22
+136 2025-08-22
+137 2025-08-22
+138 2025-08-22
+139 2025-08-22
+140 2025-08-22
+141 2025-08-22
+142 2025-08-22
+143 2025-08-22
+144 2025-08-22
+145 2025-08-22
+146 2025-08-22
+147 2025-08-22
+148 2025-08-22
+149 2025-08-22
+150 2025-08-22
+151 2025-08-22
+152 2025-08-28
+153 2025-08-28
+154 2025-08-28
+155 2025-08-28
+156 2025-08-28
+157 2025-08-28
+158 2025-08-28
+159 2025-08-28
+160 2025-08-28
+161 2025-08-28
+162 2025-08-28
+163 2025-08-28
+164 2025-08-28
+165 2025-08-28
+166 2025-08-28
+167 2025-08-28
+168 2025-08-28
+169 2025-08-28
+170 2025-08-28
+171 2025-08-28
+172 2025-08-28
+173 2025-08-28
+174 2025-08-28
+175 2025-08-28
+176 2025-08-28
+177 2025-08-28
+178 2025-08-28
+179 2025-08-30
+180 2025-08-30
+181 2025-08-30
+182 2025-08-30
+183 2025-08-30
+184 2025-08-30
+185 2025-08-30
+186 2025-08-30
+187 2025-08-30
+188 2025-08-30
+189 2025-08-30
+190 2025-08-30
+191 2025-08-30
+192 2025-08-30
+193 2025-08-30
+194 2025-08-30
+195 2025-08-30
+196 2025-08-30
+
+
+

“What in the world is that thing |> ?”

+

Glad 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:

+
+
# magrittr %>% pipe
+
+DateColumn <- Data %>% select("Date")
+
+# base R |> pipe
+DateColumn <- Data |> select("Date")
+
+

“How do we interpret/read that line of code?”

+

Let’s break it down, starting off just to the right of the assignment arrow (<-) with our data.frame “Data”.

+
+
Data
+
+

We 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.

+
+
Data |> 
+
+

In 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.

+
+
Data |> select()
+
+

To complete the transfer, we provide the desired column name to select() to act on (“Date” in this case)

+
+
Data |> select("Date")
+
+

In summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column

+
+
Data |> select("Date")
+
+
          Date
+1   2025-07-26
+2   2025-07-26
+3   2025-07-26
+4   2025-07-26
+5   2025-07-26
+6   2025-07-26
+7   2025-07-26
+8   2025-07-26
+9   2025-07-26
+10  2025-07-26
+11  2025-07-26
+12  2025-07-26
+13  2025-07-26
+14  2025-07-26
+15  2025-07-26
+16  2025-07-26
+17  2025-07-26
+18  2025-07-26
+19  2025-07-26
+20  2025-07-26
+21  2025-07-26
+22  2025-07-26
+23  2025-07-26
+24  2025-07-26
+25  2025-07-26
+26  2025-07-26
+27  2025-07-29
+28  2025-07-29
+29  2025-07-29
+30  2025-07-29
+31  2025-07-29
+32  2025-07-29
+33  2025-07-29
+34  2025-07-29
+35  2025-07-29
+36  2025-07-29
+37  2025-07-29
+38  2025-07-29
+39  2025-07-29
+40  2025-07-29
+41  2025-07-29
+42  2025-07-29
+43  2025-07-29
+44  2025-07-29
+45  2025-07-29
+46  2025-07-29
+47  2025-07-29
+48  2025-07-29
+49  2025-07-31
+50  2025-07-31
+51  2025-07-31
+52  2025-07-31
+53  2025-07-31
+54  2025-07-31
+55  2025-07-31
+56  2025-07-31
+57  2025-07-31
+58  2025-07-31
+59  2025-07-31
+60  2025-07-31
+61  2025-07-31
+62  2025-07-31
+63  2025-07-31
+64  2025-07-31
+65  2025-07-31
+66  2025-07-31
+67  2025-07-31
+68  2025-07-31
+69  2025-07-31
+70  2025-07-31
+71  2025-07-31
+72  2025-07-31
+73  2025-07-31
+74  2025-07-31
+75  2025-07-31
+76  2025-08-05
+77  2025-08-05
+78  2025-08-05
+79  2025-08-05
+80  2025-08-05
+81  2025-08-05
+82  2025-08-05
+83  2025-08-05
+84  2025-08-05
+85  2025-08-05
+86  2025-08-05
+87  2025-08-05
+88  2025-08-05
+89  2025-08-05
+90  2025-08-05
+91  2025-08-05
+92  2025-08-05
+93  2025-08-05
+94  2025-08-05
+95  2025-08-05
+96  2025-08-05
+97  2025-08-05
+98  2025-08-05
+99  2025-08-07
+100 2025-08-07
+101 2025-08-07
+102 2025-08-07
+103 2025-08-07
+104 2025-08-07
+105 2025-08-07
+106 2025-08-07
+107 2025-08-07
+108 2025-08-07
+109 2025-08-07
+110 2025-08-07
+111 2025-08-07
+112 2025-08-07
+113 2025-08-07
+114 2025-08-07
+115 2025-08-07
+116 2025-08-07
+117 2025-08-07
+118 2025-08-07
+119 2025-08-07
+120 2025-08-07
+121 2025-08-07
+122 2025-08-07
+123 2025-08-07
+124 2025-08-07
+125 2025-08-22
+126 2025-08-22
+127 2025-08-22
+128 2025-08-22
+129 2025-08-22
+130 2025-08-22
+131 2025-08-22
+132 2025-08-22
+133 2025-08-22
+134 2025-08-22
+135 2025-08-22
+136 2025-08-22
+137 2025-08-22
+138 2025-08-22
+139 2025-08-22
+140 2025-08-22
+141 2025-08-22
+142 2025-08-22
+143 2025-08-22
+144 2025-08-22
+145 2025-08-22
+146 2025-08-22
+147 2025-08-22
+148 2025-08-22
+149 2025-08-22
+150 2025-08-22
+151 2025-08-22
+152 2025-08-28
+153 2025-08-28
+154 2025-08-28
+155 2025-08-28
+156 2025-08-28
+157 2025-08-28
+158 2025-08-28
+159 2025-08-28
+160 2025-08-28
+161 2025-08-28
+162 2025-08-28
+163 2025-08-28
+164 2025-08-28
+165 2025-08-28
+166 2025-08-28
+167 2025-08-28
+168 2025-08-28
+169 2025-08-28
+170 2025-08-28
+171 2025-08-28
+172 2025-08-28
+173 2025-08-28
+174 2025-08-28
+175 2025-08-28
+176 2025-08-28
+177 2025-08-28
+178 2025-08-28
+179 2025-08-30
+180 2025-08-30
+181 2025-08-30
+182 2025-08-30
+183 2025-08-30
+184 2025-08-30
+185 2025-08-30
+186 2025-08-30
+187 2025-08-30
+188 2025-08-30
+189 2025-08-30
+190 2025-08-30
+191 2025-08-30
+192 2025-08-30
+193 2025-08-30
+194 2025-08-30
+195 2025-08-30
+196 2025-08-30
+
+
+

One 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.

+
+
Data |> select("Date") |> nrow()
+
+
[1] 196
+
+
+

For 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).

+
+
+

R Quirks

+
+
+
+ +
+
+Odd R Behavior # 1 +
+
+
+

While 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:

+
+
+
+
Data |> select(Date) |> head(5)
+
+
        Date
+1 2025-07-26
+2 2025-07-26
+3 2025-07-26
+4 2025-07-26
+5 2025-07-26
+
+
+
+
+
+ +
+
+. +
+
+
+

The 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.

+
+
+
+
+

Selecting multiple columns

+

Since 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:

+
+
Subset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`)
+
+head(Subset, 5)
+
+
      bid timepoint Condition    Tcells      CD8+      CD4+
+1 INF0052         0      Ctrl 0.2804264 0.2734826 0.6341164
+2 INF0100         0      Ctrl 0.6748298 0.3357696 0.6119112
+3 INF0100         4      Ctrl 0.6119129 0.2862104 0.6639621
+4 INF0100         9      Ctrl 0.6314431 0.4861231 0.4378944
+5 INF0179         0      Ctrl 0.4396437 0.1950634 0.7392563
+
+
+

You will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object:

+
+
Subset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, )
+
+head(Subset, 5)
+
+
      bid    Tcells      CD8+      CD4+ timepoint Condition
+1 INF0052 0.2804264 0.2734826 0.6341164         0      Ctrl
+2 INF0100 0.6748298 0.3357696 0.6119112         0      Ctrl
+3 INF0100 0.6119129 0.2862104 0.6639621         4      Ctrl
+4 INF0100 0.6314431 0.4861231 0.4378944         9      Ctrl
+5 INF0179 0.4396437 0.1950634 0.7392563         0      Ctrl
+
+
+
+
+
+

relocate

+

Alternatively, 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.

+

Looking 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:

+
+
Data |> relocate(Tcells, .after=bid) |> head(5)
+
+
      bid    Tcells timepoint Condition       Date infant_sex  ptype    root
+1 INF0052 0.2804264         0      Ctrl 2025-07-26       Male HEU-hi 2098368
+2 INF0100 0.6748298         0      Ctrl 2025-07-26       Male HEU-lo 2020184
+3 INF0100 0.6119129         4      Ctrl 2025-07-26       Male HEU-lo 1155040
+4 INF0100 0.6314431         9      Ctrl 2025-07-26       Male HEU-lo  358624
+5 INF0179 0.4396437         0      Ctrl 2025-07-26       Male     HU 1362216
+  singletsFSC singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris
+1     1894070     1666179      1537396 0.5952943    0.8820349 0.8627649
+2     1791890     1697083      1579098 0.9106762    0.9052256 0.8602660
+3     1033320      875465       845446 0.9705765    0.9845400 0.9578793
+4      328624      289327       276289 0.9819573    0.9855070 0.9412615
+5     1206309     1032946       982736 0.9572591    0.9556272 0.8407837
+  lymphocytes      live      Dump+     Dump-        Vd2+      Vd2-     Va7.2+
+1   0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070
+2   0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499
+3   0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402
+4   0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345
+5   0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182
+     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
+4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
+5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
+  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
+4            176662 0.01449297 0.05873854     271304
+5            663667 0.04437285 0.15921627     940733
+
+
# |> head(5) is used only to make the website output visualization manageable :D
+
+

Similar to what we saw with select(), this approach can also be used for more than 1 column:

+
+
Data |> relocate(Tcells, Monocytes, .after=bid) |> head(5)
+
+
      bid    Tcells  Monocytes timepoint Condition       Date infant_sex  ptype
+1 INF0052 0.2804264 0.11796509         0      Ctrl 2025-07-26       Male HEU-hi
+2 INF0100 0.6748298 0.09477437         0      Ctrl 2025-07-26       Male HEU-lo
+3 INF0100 0.6119129 0.01545999         4      Ctrl 2025-07-26       Male HEU-lo
+4 INF0100 0.6314431 0.01449297         9      Ctrl 2025-07-26       Male HEU-lo
+5 INF0179 0.4396437 0.04437285         0      Ctrl 2025-07-26       Male     HU
+     root singletsFSC singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris
+1 2098368     1894070     1666179      1537396 0.5952943    0.8820349 0.8627649
+2 2020184     1791890     1697083      1579098 0.9106762    0.9052256 0.8602660
+3 1155040     1033320      875465       845446 0.9705765    0.9845400 0.9578793
+4  358624      328624      289327       276289 0.9819573    0.9855070 0.9412615
+5 1362216     1206309     1032946       982736 0.9572591    0.9556272 0.8407837
+  lymphocytes      live      Dump+     Dump-        Vd2+      Vd2-     Va7.2+
+1   0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070
+2   0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499
+3   0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402
+4   0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345
+5   0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182
+     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
+4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
+5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
+  lymphocytes_count     Debris CD45_count
+1            587573 0.13723513     915203
+2            308583 0.13973396    1438047
+3            607477 0.04212072     820570
+4            176662 0.05873854     271304
+5            663667 0.15921627     940733
+
+
# |> head(5) is used only to make the website output visualization manageable :D
+
+

We can also modify the argument so that columns are placed before a certain column

+
+
Data |> relocate(Tcells, .before=Date) |> head(5)
+
+
      bid timepoint Condition    Tcells       Date infant_sex  ptype    root
+1 INF0052         0      Ctrl 0.2804264 2025-07-26       Male HEU-hi 2098368
+2 INF0100         0      Ctrl 0.6748298 2025-07-26       Male HEU-lo 2020184
+3 INF0100         4      Ctrl 0.6119129 2025-07-26       Male HEU-lo 1155040
+4 INF0100         9      Ctrl 0.6314431 2025-07-26       Male HEU-lo  358624
+5 INF0179         0      Ctrl 0.4396437 2025-07-26       Male     HU 1362216
+  singletsFSC singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris
+1     1894070     1666179      1537396 0.5952943    0.8820349 0.8627649
+2     1791890     1697083      1579098 0.9106762    0.9052256 0.8602660
+3     1033320      875465       845446 0.9705765    0.9845400 0.9578793
+4      328624      289327       276289 0.9819573    0.9855070 0.9412615
+5     1206309     1032946       982736 0.9572591    0.9556272 0.8407837
+  lymphocytes      live      Dump+     Dump-        Vd2+      Vd2-     Va7.2+
+1   0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070
+2   0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499
+3   0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402
+4   0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345
+5   0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182
+     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
+4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
+5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
+  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
+4            176662 0.01449297 0.05873854     271304
+5            663667 0.04437285 0.15921627     940733
+
+
# |> head(5) is used only to make the website output visualization manageable :D
+
+

And as we might suspect, we could specify a column index location rather than using a column name.

+
+
Data |> relocate(Date, .before=1) |> head(5)
+
+
        Date     bid timepoint Condition infant_sex  ptype    root singletsFSC
+1 2025-07-26 INF0052         0      Ctrl       Male HEU-hi 2098368     1894070
+2 2025-07-26 INF0100         0      Ctrl       Male HEU-lo 2020184     1791890
+3 2025-07-26 INF0100         4      Ctrl       Male HEU-lo 1155040     1033320
+4 2025-07-26 INF0100         9      Ctrl       Male HEU-lo  358624      328624
+5 2025-07-26 INF0179         0      Ctrl       Male     HU 1362216     1206309
+  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
+4      289327       276289 0.9819573    0.9855070 0.9412615   0.6511588
+5     1032946       982736 0.9572591    0.9556272 0.8407837   0.7054786
+       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
+4 0.9153242 0.21469246 0.7006317 0.6314431 0.011348967 0.9886510 0.01702345
+5 0.8952140 0.33831877 0.5568953 0.4396437 0.004753630 0.9952464 0.01332182
+     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
+4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
+5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
+  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
+4            176662 0.01449297 0.05873854     271304
+5            663667 0.04437285 0.15921627     940733
+
+
# |> head(5) is used only to make the website output visualization manageable :D
+
+
+
+

rename

+

At 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?

+

In 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:

+
+
colnames(Subset)
+
+
[1] "bid"       "Tcells"    "CD8+"      "CD4+"      "timepoint" "Condition"
+
+
colnames(Subset)[3]
+
+
[1] "CD8+"
+
+
+
+
colnames(Subset)[3] <- "CD8Positive"
+colnames(Subset)
+
+
[1] "bid"         "Tcells"      "CD8Positive" "CD4+"        "timepoint"  
+[6] "Condition"  
+
+
+

With 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

+
+
Renamed <- Subset |> rename(CD4_Positive = `CD4+`)
+colnames(Renamed)
+
+
[1] "bid"          "Tcells"       "CD8Positive"  "CD4_Positive" "timepoint"   
+[6] "Condition"   
+
+
+

If 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.

+
+
Renamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`)
+colnames(Renamed_Multiple)
+
+
[1] "specimen"         "Tcells"           "CD8Positive"      "CD4Positive"     
+[5] "timepoint_months" "stimulation"     
+
+
+
+
+

pull

+

Sometimes, 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

+
+
Data |> pull(Date) |> head(10)
+
+
 [1] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+ [6] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+
+
+

This 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:

+
+
Data |> pull(Date) |> 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"
+
+
+
+
+

filter (Rows)

+

So 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.

+

The 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

+
+
Data |> pull(Condition) |> unique() 
+
+
[1] "Ctrl" "PPD"  "SEB" 
+
+
+

In 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?

+

Within 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.

+
+
PPDOnly <- Data |> filter(Condition == "PPD")
+head(PPDOnly, 5)
+
+
      bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1 INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
+2 INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
+3 INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
+4 INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
+5 INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
+  singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1     1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
+2     1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
+3      796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
+4      626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
+5     1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
+       live      Dump+     Dump-    Tcells        Vd2+      Vd2-     Va7.2+
+1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057
+2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801
+3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790
+4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298
+5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237
+     Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
+2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
+3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
+4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
+5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
+  lymphocytes_count  Monocytes     Debris CD45_count
+1            652155 0.13801632 0.15703150    1017713
+2            314717 0.07480391 0.12281107    1447451
+3            544883 0.01512811 0.04439511     745037
+4            366784 0.01578611 0.18769586     589379
+5            663169 0.04243146 0.08655621     947858
+
+
+

While 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”

+
+
Data |> filter(Condition %in% "PPD") |> head(10)
+
+
       bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1  INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
+2  INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
+3  INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
+4  INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
+5  INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
+6  INF0179         4       PPD 2025-07-26       Male     HU 1240984     1089933
+7  INF0179         9       PPD 2025-07-26       Male     HU 1705960     1492142
+8  INF0186         4       PPD 2025-07-26     Female HEU-hi  848584      759606
+9  INF0186         9       PPD 2025-07-26     Female HEU-hi 1425416     1259825
+10 INF0134         0       PPD 2025-07-29     Female HEU-lo 1245024     1126248
+   singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1      1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
+2      1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
+3       796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
+4       626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
+5      1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
+6       868877       814909 0.9855947    0.9541417 0.9400824   0.7303074
+7      1163543      1107878 0.9820919    0.9816909 0.9681656   0.7933252
+8       648405       607514 0.9824778    0.9539480 0.9250170   0.6720872
+9      1089955      1014266 0.9771490    0.9552573 0.9137615   0.6332438
+10      993895       896183 0.7915660    0.8042298 0.7899781   0.5924868
+        live      Dump+     Dump-    Tcells        Vd2+      Vd2-     Va7.2+
+1  0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057
+2  0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801
+3  0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790
+4  0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298
+5  0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237
+6  0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.01266884
+7  0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.01330324
+8  0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.04352519
+9  0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.03738187
+10 0.9003481 0.15485733 0.7454908 0.3314561 0.009453601 0.9905464 0.02587717
+      Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1  0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
+2  0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
+3  0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
+4  0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
+5  0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
+6  0.9830107 0.6318771 0.3511336 0.3177460 0.03338760       331680
+7  0.9839630 0.7016361 0.2823269 0.2559335 0.02639338       577228
+8  0.9469912 0.5309109 0.4160803 0.3912185 0.02486181       190855
+9  0.9443941 0.5033806 0.4410135 0.4213381 0.01967539       365177
+10 0.9646692 0.6964224 0.2682468 0.2260394 0.04220742       139312
+   lymphocytes_count  Monocytes     Debris CD45_count
+1             652155 0.13801632 0.15703150    1017713
+2             314717 0.07480391 0.12281107    1447451
+3             544883 0.01512811 0.04439511     745037
+4             366784 0.01578611 0.18769586     589379
+5             663169 0.04243146 0.08655621     947858
+6             586561 0.04585829 0.05991758     803170
+7             863168 0.01830910 0.03183437    1088038
+8             401148 0.04605198 0.07498295     596869
+9             627601 0.04474270 0.08623847     991089
+10            420303 0.19577016 0.21002188     709388
+
+
+

Similar 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()/

+
+
Data |> filter(Condition %in% c("PPD", "SEB")) |> head(10)
+
+
       bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1  INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
+2  INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
+3  INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
+4  INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
+5  INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
+6  INF0179         4       PPD 2025-07-26       Male     HU 1240984     1089933
+7  INF0179         9       PPD 2025-07-26       Male     HU 1705960     1492142
+8  INF0186         4       PPD 2025-07-26     Female HEU-hi  848584      759606
+9  INF0186         9       PPD 2025-07-26     Female HEU-hi 1425416     1259825
+10 INF0052         0       SEB 2025-07-26       Male HEU-hi 2523776     2282292
+   singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1      1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
+2      1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
+3       796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
+4       626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
+5      1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
+6       868877       814909 0.9855947    0.9541417 0.9400824   0.7303074
+7      1163543      1107878 0.9820919    0.9816909 0.9681656   0.7933252
+8       648405       607514 0.9824778    0.9539480 0.9250170   0.6720872
+9      1089955      1014266 0.9771490    0.9552573 0.9137615   0.6332438
+10     2041563      1889418 0.5783591    0.8878072 0.8670150   0.6718563
+        live      Dump+     Dump-    Tcells        Vd2+      Vd2-      Va7.2+
+1  0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.015070567
+2  0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.016718006
+3  0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.016097899
+4  0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.018552985
+5  0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.012972375
+6  0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.012668837
+7  0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.013303235
+8  0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.043525189
+9  0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.037381872
+10 0.9115652 0.23344716 0.6781180 0.2741661 0.009225633 0.9907744 0.008420812
+      Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1  0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
+2  0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
+3  0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
+4  0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
+5  0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
+6  0.9830107 0.6318771 0.3511336 0.3177460 0.03338760       331680
+7  0.9839630 0.7016361 0.2823269 0.2559335 0.02639338       577228
+8  0.9469912 0.5309109 0.4160803 0.3912185 0.02486181       190855
+9  0.9443941 0.5033806 0.4410135 0.4213381 0.01967539       365177
+10 0.9823536 0.6083254 0.3740281 0.2811756 0.09285249       201287
+   lymphocytes_count  Monocytes     Debris CD45_count
+1             652155 0.13801632 0.15703150    1017713
+2             314717 0.07480391 0.12281107    1447451
+3             544883 0.01512811 0.04439511     745037
+4             366784 0.01578611 0.18769586     589379
+5             663169 0.04243146 0.08655621     947858
+6             586561 0.04585829 0.05991758     803170
+7             863168 0.01830910 0.03183437    1088038
+8             401148 0.04605198 0.07498295     596869
+9             627601 0.04474270 0.08623847     991089
+10            734179 0.11219277 0.13298504    1092762
+
+
+

Alternatively, we could have set up the vector externally, and then provided it to filter()

+
+
TheseConditions <- c("PPD", "SEB")
+Data |> filter(Condition %in% TheseConditions) |> head(10)
+
+
       bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1  INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
+2  INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
+3  INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
+4  INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
+5  INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
+6  INF0179         4       PPD 2025-07-26       Male     HU 1240984     1089933
+7  INF0179         9       PPD 2025-07-26       Male     HU 1705960     1492142
+8  INF0186         4       PPD 2025-07-26     Female HEU-hi  848584      759606
+9  INF0186         9       PPD 2025-07-26     Female HEU-hi 1425416     1259825
+10 INF0052         0       SEB 2025-07-26       Male HEU-hi 2523776     2282292
+   singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1      1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
+2      1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
+3       796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
+4       626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
+5      1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
+6       868877       814909 0.9855947    0.9541417 0.9400824   0.7303074
+7      1163543      1107878 0.9820919    0.9816909 0.9681656   0.7933252
+8       648405       607514 0.9824778    0.9539480 0.9250170   0.6720872
+9      1089955      1014266 0.9771490    0.9552573 0.9137615   0.6332438
+10     2041563      1889418 0.5783591    0.8878072 0.8670150   0.6718563
+        live      Dump+     Dump-    Tcells        Vd2+      Vd2-      Va7.2+
+1  0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.015070567
+2  0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.016718006
+3  0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.016097899
+4  0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.018552985
+5  0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.012972375
+6  0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.012668837
+7  0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.013303235
+8  0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.043525189
+9  0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.037381872
+10 0.9115652 0.23344716 0.6781180 0.2741661 0.009225633 0.9907744 0.008420812
+      Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1  0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
+2  0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
+3  0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
+4  0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
+5  0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
+6  0.9830107 0.6318771 0.3511336 0.3177460 0.03338760       331680
+7  0.9839630 0.7016361 0.2823269 0.2559335 0.02639338       577228
+8  0.9469912 0.5309109 0.4160803 0.3912185 0.02486181       190855
+9  0.9443941 0.5033806 0.4410135 0.4213381 0.01967539       365177
+10 0.9823536 0.6083254 0.3740281 0.2811756 0.09285249       201287
+   lymphocytes_count  Monocytes     Debris CD45_count
+1             652155 0.13801632 0.15703150    1017713
+2             314717 0.07480391 0.12281107    1447451
+3             544883 0.01512811 0.04439511     745037
+4             366784 0.01578611 0.18769586     589379
+5             663169 0.04243146 0.08655621     947858
+6             586561 0.04585829 0.05991758     803170
+7             863168 0.01830910 0.03183437    1088038
+8             401148 0.04605198 0.07498295     596869
+9             627601 0.04474270 0.08623847     991089
+10            734179 0.11219277 0.13298504    1092762
+
+
+

While 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

+
+
IsThisASpectralInstrument <- TRUE
+
+!IsThisASpectralInstrument
+
+
[1] FALSE
+
+
+

In the context of the dplyr package, we can use ! within the filter() to remove rows that contain a certain value

+
+
Subset <- Data |> filter(!Condition %in% "SEB")
+Subset |> pull(Condition) |> unique()
+
+
[1] "Ctrl" "PPD" 
+
+
+

Likewise, we can also use it with the select() to exclude columns we don’t want to include

+
+
Subset <- Data |> select(!timepoint)
+Subset[1:3,]
+
+
      bid Condition       Date infant_sex  ptype    root singletsFSC
+1 INF0052      Ctrl 2025-07-26       Male HEU-hi 2098368     1894070
+2 INF0100      Ctrl 2025-07-26       Male HEU-lo 2020184     1791890
+3 INF0100      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
+
+
+
+
+

mutate

+

As 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.

+

Let’s start by slimming down our current Data to a smaller workable example, highlighting the functions and pipes we learned about today

+
+
TidyData <- Data |> filter(Condition %in% "Ctrl") |> filter(timepoint %in% "0") |>
+     select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |>
+      rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen)
+
+
+
TidyData
+
+
   specimen       Date timepoint condition Tcells_count CD45_count
+1   INF0052 2025-07-26         0      Ctrl       164771     915203
+2   INF0100 2025-07-26         0      Ctrl       208241    1438047
+3   INF0179 2025-07-26         0      Ctrl       291777     940733
+4   INF0134 2025-07-29         0      Ctrl       127866     689676
+5   INF0148 2025-07-29         0      Ctrl       234335    1013985
+6   INF0191 2025-07-29         0      Ctrl        55780     715443
+7   INF0124 2025-07-31         0      Ctrl        70297     687720
+8   INF0149 2025-07-31         0      Ctrl       107900     857845
+9   INF0169 2025-07-31         0      Ctrl        75540     854594
+10  INF0019 2025-08-05         0      Ctrl       208055     873622
+11  INF0032 2025-08-05         0      Ctrl       361034     753064
+12  INF0180 2025-08-05         0      Ctrl       284958    1049663
+13  INF0155 2025-08-07         0      Ctrl       281626    1065048
+14  INF0158 2025-08-07         0      Ctrl       280913    1249338
+15  INF0159 2025-08-07         0      Ctrl       452551    1190219
+16  INF0013 2025-08-22         0      Ctrl       182751     836573
+17  INF0023 2025-08-22         0      Ctrl       218435     968035
+18  INF0030 2025-08-22         0      Ctrl        85521     732321
+19  INF0166 2025-08-28         0      Ctrl       225650     739495
+20  INF0199 2025-08-28         0      Ctrl       169736    1112176
+21  INF0207 2025-08-28         0      Ctrl        39055     905365
+22  INF0614 2025-08-30         0      Ctrl       224396    1569007
+23  INF0622 2025-08-30         0      Ctrl       161924     939307
+
+
+

The 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:

+
+
TidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count)
+TidyData
+
+
   specimen       Date timepoint condition Tcells_count CD45_count
+1   INF0052 2025-07-26         0      Ctrl       164771     915203
+2   INF0100 2025-07-26         0      Ctrl       208241    1438047
+3   INF0179 2025-07-26         0      Ctrl       291777     940733
+4   INF0134 2025-07-29         0      Ctrl       127866     689676
+5   INF0148 2025-07-29         0      Ctrl       234335    1013985
+6   INF0191 2025-07-29         0      Ctrl        55780     715443
+7   INF0124 2025-07-31         0      Ctrl        70297     687720
+8   INF0149 2025-07-31         0      Ctrl       107900     857845
+9   INF0169 2025-07-31         0      Ctrl        75540     854594
+10  INF0019 2025-08-05         0      Ctrl       208055     873622
+11  INF0032 2025-08-05         0      Ctrl       361034     753064
+12  INF0180 2025-08-05         0      Ctrl       284958    1049663
+13  INF0155 2025-08-07         0      Ctrl       281626    1065048
+14  INF0158 2025-08-07         0      Ctrl       280913    1249338
+15  INF0159 2025-08-07         0      Ctrl       452551    1190219
+16  INF0013 2025-08-22         0      Ctrl       182751     836573
+17  INF0023 2025-08-22         0      Ctrl       218435     968035
+18  INF0030 2025-08-22         0      Ctrl        85521     732321
+19  INF0166 2025-08-28         0      Ctrl       225650     739495
+20  INF0199 2025-08-28         0      Ctrl       169736    1112176
+21  INF0207 2025-08-28         0      Ctrl        39055     905365
+22  INF0614 2025-08-30         0      Ctrl       224396    1569007
+23  INF0622 2025-08-30         0      Ctrl       161924     939307
+   Tcells_ProportionCD45
+1             0.18003765
+2             0.14480820
+3             0.31015921
+4             0.18540010
+5             0.23110302
+6             0.07796568
+7             0.10221747
+8             0.12578030
+9             0.08839285
+10            0.23815220
+11            0.47942008
+12            0.27147570
+13            0.26442564
+14            0.22484948
+15            0.38022498
+16            0.21845195
+17            0.22564783
+18            0.11678076
+19            0.30514067
+20            0.15261613
+21            0.04313730
+22            0.14301785
+23            0.17238666
+
+
+

We 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

+
+
TidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2))
+TidyData 
+
+
   specimen       Date timepoint condition Tcells_count CD45_count
+1   INF0052 2025-07-26         0      Ctrl       164771     915203
+2   INF0100 2025-07-26         0      Ctrl       208241    1438047
+3   INF0179 2025-07-26         0      Ctrl       291777     940733
+4   INF0134 2025-07-29         0      Ctrl       127866     689676
+5   INF0148 2025-07-29         0      Ctrl       234335    1013985
+6   INF0191 2025-07-29         0      Ctrl        55780     715443
+7   INF0124 2025-07-31         0      Ctrl        70297     687720
+8   INF0149 2025-07-31         0      Ctrl       107900     857845
+9   INF0169 2025-07-31         0      Ctrl        75540     854594
+10  INF0019 2025-08-05         0      Ctrl       208055     873622
+11  INF0032 2025-08-05         0      Ctrl       361034     753064
+12  INF0180 2025-08-05         0      Ctrl       284958    1049663
+13  INF0155 2025-08-07         0      Ctrl       281626    1065048
+14  INF0158 2025-08-07         0      Ctrl       280913    1249338
+15  INF0159 2025-08-07         0      Ctrl       452551    1190219
+16  INF0013 2025-08-22         0      Ctrl       182751     836573
+17  INF0023 2025-08-22         0      Ctrl       218435     968035
+18  INF0030 2025-08-22         0      Ctrl        85521     732321
+19  INF0166 2025-08-28         0      Ctrl       225650     739495
+20  INF0199 2025-08-28         0      Ctrl       169736    1112176
+21  INF0207 2025-08-28         0      Ctrl        39055     905365
+22  INF0614 2025-08-30         0      Ctrl       224396    1569007
+23  INF0622 2025-08-30         0      Ctrl       161924     939307
+   Tcells_ProportionCD45 TcellsRounded
+1             0.18003765          0.18
+2             0.14480820          0.14
+3             0.31015921          0.31
+4             0.18540010          0.19
+5             0.23110302          0.23
+6             0.07796568          0.08
+7             0.10221747          0.10
+8             0.12578030          0.13
+9             0.08839285          0.09
+10            0.23815220          0.24
+11            0.47942008          0.48
+12            0.27147570          0.27
+13            0.26442564          0.26
+14            0.22484948          0.22
+15            0.38022498          0.38
+16            0.21845195          0.22
+17            0.22564783          0.23
+18            0.11678076          0.12
+19            0.30514067          0.31
+20            0.15261613          0.15
+21            0.04313730          0.04
+22            0.14301785          0.14
+23            0.17238666          0.17
+
+
+
+
+

arrange

+

And 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:

+
+
TidyData <- TidyData |> arrange(desc(TcellsRounded))
+
+

And 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):

+
+
TidyData |> filter(TcellsRounded > 0.3)
+
+
  specimen       Date timepoint condition Tcells_count CD45_count
+1  INF0032 2025-08-05         0      Ctrl       361034     753064
+2  INF0159 2025-08-07         0      Ctrl       452551    1190219
+3  INF0179 2025-07-26         0      Ctrl       291777     940733
+4  INF0166 2025-08-28         0      Ctrl       225650     739495
+  Tcells_ProportionCD45 TcellsRounded
+1             0.4794201          0.48
+2             0.3802250          0.38
+3             0.3101592          0.31
+4             0.3051407          0.31
+
+
+

Which is we had wanted to just retrieve the specimen IDs, we could add pull() after a new pipe argument.

+
+
TidyData |> filter(TcellsRounded > 0.3) |> pull(specimen)
+
+
[1] "INF0032" "INF0159" "INF0179" "INF0166"
+
+
+

And 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 .fcs file. Working within our project folder, this would look like this:

+
+
NewName <- paste0("MyNewDataset", ".csv")
+StorageLocation <- file.path("data", NewName)
+StorageLocation
+
+
[1] "data/MyNewDataset.csv"
+
+
+
+
write.csv(TidyData, StorageLocation, row.names=FALSE)
+
+
+
+
+

Take Away

+

In this session, we explored the main functions within the dplyr package used in context of “tidying” data, including selecting columns, filtering for rows, as well as additional functions used to create or modify existing values. We will continue to build on these throughout the course, introducing a few additional tidyverse functions we don’t have time to cover today as appropiate. As we saw, knowing how to use these functions can allow us to extensively and quickly modify our existing exported data files.

+

On important goal as we move through the course (in terms of both reproducibility and replicability) is to attempt to only modify files within R, not go back to the original csv or excel file and hand-modify individual values. This approach is not reproducible or replicable. Once set up, an R script can quickly re-carry out these same cleanup steps, and leave a documented process of how the data has changed (even more so if you are maintaining version control). If you do want to save the changes you have made, it is best to save it out as a new .csv file with which you work later.

+

Next week, we will be using these skills when setting up metadata for our .fcs files. We will additionally take a look at the main format source of controversy within Bioconductor Flow Cytometry packages, ie. whether to use a flowframe or a cytoframe. Exciting stuff, but important information to know as the functions needed to import them are slightly different. We will also look at how to import existing manually gated .wsp from FlowJo/Diva/Floreada in via the CytoML package.

+

+
+
+

Additional Resources

+

Data Organization in Spreadsheets for Ecologists This Carpentry self-study course was one of my “Aha” moments early on when learning R, and reinforced the need to try to keep my own Excel/CSV files in a tidy manner. It is worth the time going through in its entirety (even for non-Ecologist).

+

Data Analysis and Visualization in R for Ecologists Continuation of the above, and a good way to continue building on the tidyverse functions we learned today.

+

Simplistics: Introduction to Tidyverse in R The YouTube channel is mainly focused on statistics for Psych classes, but at the end of the day, we are all working with similar objects with rows and columns, just the values contained within differ.

+

Riffomonas Project Playlist: Data Manipulation with R’s Tidyverse Riffomonas has a playlist that delves into both the tidyverse functions we used today, as well as other ones we will encounter later on in the course.

+
+
+

Take-home Problems

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

Taking a dataset (either todays or one of your own), work through the column-operating functions (select(), rename(), and relocate()). Once this is done, filter() by conditions from two separate columns, arrange in an order that makes sense, and export this “tidy” data as a .csv file.

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

We used the mutate() function to create new columns, but it can also be used to modify existing ones. Various numeric columns are showing way to many significant digits. As was shown, use round() to round all these proportion columns, but use mutate to overwrite the existing column. Export this as it’s own .csv file.

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

We can also use mutate() to combine columns. For our dataset, “bid”, “timepoint”, “Condition” are separate columns that originally were all part of the filename for the individual .fcs file. Try to figure out a way to combine them back together using paste0(), and save the new column as “filename”. Once this is done, pull() the contents of this column, and using try to determine whether there were any duplicates (think innovative ways of using !, length() and unique())

+
+
+
+

AGPL-3.0 CC BY-SA 4.0

+
+ + +
+ +
+ + +
+
+ +
+ + + + + \ No newline at end of file diff --git a/docs/course/index.html b/docs/course/index.html index d16c51b..ae53cab 100644 --- a/docs/course/index.html +++ b/docs/course/index.html @@ -234,6 +234,12 @@ 03 - Inside a .FCS file + + diff --git a/docs/search.json b/docs/search.json index b35f7f3..db7a2a1 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1,4 +1,136 @@ [ + { + "objectID": "course/04_IntroToTidyverse/index.html", + "href": "course/04_IntroToTidyverse/index.html", + "title": "04 - Introduction to Tidyverse", + "section": "", + "text": "For the YouTube livestream schedule, see here\nFor screen-shot slides, click here", + "crumbs": [ + "About", + "Intro to R", + "04 - Intro to Tidyverse" + ] + }, + { + "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", + "04 - Intro to Tidyverse" + ] + }, + { + "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", + "04 - Intro to Tidyverse" + ] + }, + { + "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", + "04 - Intro to Tidyverse" + ] + }, + { + "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\n\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n4 2025-07-26\n5 2025-07-26\n6 2025-07-26\n7 2025-07-26\n8 2025-07-26\n9 2025-07-26\n10 2025-07-26\n11 2025-07-26\n12 2025-07-26\n13 2025-07-26\n14 2025-07-26\n15 2025-07-26\n16 2025-07-26\n17 2025-07-26\n18 2025-07-26\n19 2025-07-26\n20 2025-07-26\n21 2025-07-26\n22 2025-07-26\n23 2025-07-26\n24 2025-07-26\n25 2025-07-26\n26 2025-07-26\n27 2025-07-29\n28 2025-07-29\n29 2025-07-29\n30 2025-07-29\n31 2025-07-29\n32 2025-07-29\n33 2025-07-29\n34 2025-07-29\n35 2025-07-29\n36 2025-07-29\n37 2025-07-29\n38 2025-07-29\n39 2025-07-29\n40 2025-07-29\n41 2025-07-29\n42 2025-07-29\n43 2025-07-29\n44 2025-07-29\n45 2025-07-29\n46 2025-07-29\n47 2025-07-29\n48 2025-07-29\n49 2025-07-31\n50 2025-07-31\n51 2025-07-31\n52 2025-07-31\n53 2025-07-31\n54 2025-07-31\n55 2025-07-31\n56 2025-07-31\n57 2025-07-31\n58 2025-07-31\n59 2025-07-31\n60 2025-07-31\n61 2025-07-31\n62 2025-07-31\n63 2025-07-31\n64 2025-07-31\n65 2025-07-31\n66 2025-07-31\n67 2025-07-31\n68 2025-07-31\n69 2025-07-31\n70 2025-07-31\n71 2025-07-31\n72 2025-07-31\n73 2025-07-31\n74 2025-07-31\n75 2025-07-31\n76 2025-08-05\n77 2025-08-05\n78 2025-08-05\n79 2025-08-05\n80 2025-08-05\n81 2025-08-05\n82 2025-08-05\n83 2025-08-05\n84 2025-08-05\n85 2025-08-05\n86 2025-08-05\n87 2025-08-05\n88 2025-08-05\n89 2025-08-05\n90 2025-08-05\n91 2025-08-05\n92 2025-08-05\n93 2025-08-05\n94 2025-08-05\n95 2025-08-05\n96 2025-08-05\n97 2025-08-05\n98 2025-08-05\n99 2025-08-07\n100 2025-08-07\n101 2025-08-07\n102 2025-08-07\n103 2025-08-07\n104 2025-08-07\n105 2025-08-07\n106 2025-08-07\n107 2025-08-07\n108 2025-08-07\n109 2025-08-07\n110 2025-08-07\n111 2025-08-07\n112 2025-08-07\n113 2025-08-07\n114 2025-08-07\n115 2025-08-07\n116 2025-08-07\n117 2025-08-07\n118 2025-08-07\n119 2025-08-07\n120 2025-08-07\n121 2025-08-07\n122 2025-08-07\n123 2025-08-07\n124 2025-08-07\n125 2025-08-22\n126 2025-08-22\n127 2025-08-22\n128 2025-08-22\n129 2025-08-22\n130 2025-08-22\n131 2025-08-22\n132 2025-08-22\n133 2025-08-22\n134 2025-08-22\n135 2025-08-22\n136 2025-08-22\n137 2025-08-22\n138 2025-08-22\n139 2025-08-22\n140 2025-08-22\n141 2025-08-22\n142 2025-08-22\n143 2025-08-22\n144 2025-08-22\n145 2025-08-22\n146 2025-08-22\n147 2025-08-22\n148 2025-08-22\n149 2025-08-22\n150 2025-08-22\n151 2025-08-22\n152 2025-08-28\n153 2025-08-28\n154 2025-08-28\n155 2025-08-28\n156 2025-08-28\n157 2025-08-28\n158 2025-08-28\n159 2025-08-28\n160 2025-08-28\n161 2025-08-28\n162 2025-08-28\n163 2025-08-28\n164 2025-08-28\n165 2025-08-28\n166 2025-08-28\n167 2025-08-28\n168 2025-08-28\n169 2025-08-28\n170 2025-08-28\n171 2025-08-28\n172 2025-08-28\n173 2025-08-28\n174 2025-08-28\n175 2025-08-28\n176 2025-08-28\n177 2025-08-28\n178 2025-08-28\n179 2025-08-30\n180 2025-08-30\n181 2025-08-30\n182 2025-08-30\n183 2025-08-30\n184 2025-08-30\n185 2025-08-30\n186 2025-08-30\n187 2025-08-30\n188 2025-08-30\n189 2025-08-30\n190 2025-08-30\n191 2025-08-30\n192 2025-08-30\n193 2025-08-30\n194 2025-08-30\n195 2025-08-30\n196 2025-08-30\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\n\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n4 2025-07-26\n5 2025-07-26\n6 2025-07-26\n7 2025-07-26\n8 2025-07-26\n9 2025-07-26\n10 2025-07-26\n11 2025-07-26\n12 2025-07-26\n13 2025-07-26\n14 2025-07-26\n15 2025-07-26\n16 2025-07-26\n17 2025-07-26\n18 2025-07-26\n19 2025-07-26\n20 2025-07-26\n21 2025-07-26\n22 2025-07-26\n23 2025-07-26\n24 2025-07-26\n25 2025-07-26\n26 2025-07-26\n27 2025-07-29\n28 2025-07-29\n29 2025-07-29\n30 2025-07-29\n31 2025-07-29\n32 2025-07-29\n33 2025-07-29\n34 2025-07-29\n35 2025-07-29\n36 2025-07-29\n37 2025-07-29\n38 2025-07-29\n39 2025-07-29\n40 2025-07-29\n41 2025-07-29\n42 2025-07-29\n43 2025-07-29\n44 2025-07-29\n45 2025-07-29\n46 2025-07-29\n47 2025-07-29\n48 2025-07-29\n49 2025-07-31\n50 2025-07-31\n51 2025-07-31\n52 2025-07-31\n53 2025-07-31\n54 2025-07-31\n55 2025-07-31\n56 2025-07-31\n57 2025-07-31\n58 2025-07-31\n59 2025-07-31\n60 2025-07-31\n61 2025-07-31\n62 2025-07-31\n63 2025-07-31\n64 2025-07-31\n65 2025-07-31\n66 2025-07-31\n67 2025-07-31\n68 2025-07-31\n69 2025-07-31\n70 2025-07-31\n71 2025-07-31\n72 2025-07-31\n73 2025-07-31\n74 2025-07-31\n75 2025-07-31\n76 2025-08-05\n77 2025-08-05\n78 2025-08-05\n79 2025-08-05\n80 2025-08-05\n81 2025-08-05\n82 2025-08-05\n83 2025-08-05\n84 2025-08-05\n85 2025-08-05\n86 2025-08-05\n87 2025-08-05\n88 2025-08-05\n89 2025-08-05\n90 2025-08-05\n91 2025-08-05\n92 2025-08-05\n93 2025-08-05\n94 2025-08-05\n95 2025-08-05\n96 2025-08-05\n97 2025-08-05\n98 2025-08-05\n99 2025-08-07\n100 2025-08-07\n101 2025-08-07\n102 2025-08-07\n103 2025-08-07\n104 2025-08-07\n105 2025-08-07\n106 2025-08-07\n107 2025-08-07\n108 2025-08-07\n109 2025-08-07\n110 2025-08-07\n111 2025-08-07\n112 2025-08-07\n113 2025-08-07\n114 2025-08-07\n115 2025-08-07\n116 2025-08-07\n117 2025-08-07\n118 2025-08-07\n119 2025-08-07\n120 2025-08-07\n121 2025-08-07\n122 2025-08-07\n123 2025-08-07\n124 2025-08-07\n125 2025-08-22\n126 2025-08-22\n127 2025-08-22\n128 2025-08-22\n129 2025-08-22\n130 2025-08-22\n131 2025-08-22\n132 2025-08-22\n133 2025-08-22\n134 2025-08-22\n135 2025-08-22\n136 2025-08-22\n137 2025-08-22\n138 2025-08-22\n139 2025-08-22\n140 2025-08-22\n141 2025-08-22\n142 2025-08-22\n143 2025-08-22\n144 2025-08-22\n145 2025-08-22\n146 2025-08-22\n147 2025-08-22\n148 2025-08-22\n149 2025-08-22\n150 2025-08-22\n151 2025-08-22\n152 2025-08-28\n153 2025-08-28\n154 2025-08-28\n155 2025-08-28\n156 2025-08-28\n157 2025-08-28\n158 2025-08-28\n159 2025-08-28\n160 2025-08-28\n161 2025-08-28\n162 2025-08-28\n163 2025-08-28\n164 2025-08-28\n165 2025-08-28\n166 2025-08-28\n167 2025-08-28\n168 2025-08-28\n169 2025-08-28\n170 2025-08-28\n171 2025-08-28\n172 2025-08-28\n173 2025-08-28\n174 2025-08-28\n175 2025-08-28\n176 2025-08-28\n177 2025-08-28\n178 2025-08-28\n179 2025-08-30\n180 2025-08-30\n181 2025-08-30\n182 2025-08-30\n183 2025-08-30\n184 2025-08-30\n185 2025-08-30\n186 2025-08-30\n187 2025-08-30\n188 2025-08-30\n189 2025-08-30\n190 2025-08-30\n191 2025-08-30\n192 2025-08-30\n193 2025-08-30\n194 2025-08-30\n195 2025-08-30\n196 2025-08-30\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\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n4 2025-07-26\n5 2025-07-26\n6 2025-07-26\n7 2025-07-26\n8 2025-07-26\n9 2025-07-26\n10 2025-07-26\n11 2025-07-26\n12 2025-07-26\n13 2025-07-26\n14 2025-07-26\n15 2025-07-26\n16 2025-07-26\n17 2025-07-26\n18 2025-07-26\n19 2025-07-26\n20 2025-07-26\n21 2025-07-26\n22 2025-07-26\n23 2025-07-26\n24 2025-07-26\n25 2025-07-26\n26 2025-07-26\n27 2025-07-29\n28 2025-07-29\n29 2025-07-29\n30 2025-07-29\n31 2025-07-29\n32 2025-07-29\n33 2025-07-29\n34 2025-07-29\n35 2025-07-29\n36 2025-07-29\n37 2025-07-29\n38 2025-07-29\n39 2025-07-29\n40 2025-07-29\n41 2025-07-29\n42 2025-07-29\n43 2025-07-29\n44 2025-07-29\n45 2025-07-29\n46 2025-07-29\n47 2025-07-29\n48 2025-07-29\n49 2025-07-31\n50 2025-07-31\n51 2025-07-31\n52 2025-07-31\n53 2025-07-31\n54 2025-07-31\n55 2025-07-31\n56 2025-07-31\n57 2025-07-31\n58 2025-07-31\n59 2025-07-31\n60 2025-07-31\n61 2025-07-31\n62 2025-07-31\n63 2025-07-31\n64 2025-07-31\n65 2025-07-31\n66 2025-07-31\n67 2025-07-31\n68 2025-07-31\n69 2025-07-31\n70 2025-07-31\n71 2025-07-31\n72 2025-07-31\n73 2025-07-31\n74 2025-07-31\n75 2025-07-31\n76 2025-08-05\n77 2025-08-05\n78 2025-08-05\n79 2025-08-05\n80 2025-08-05\n81 2025-08-05\n82 2025-08-05\n83 2025-08-05\n84 2025-08-05\n85 2025-08-05\n86 2025-08-05\n87 2025-08-05\n88 2025-08-05\n89 2025-08-05\n90 2025-08-05\n91 2025-08-05\n92 2025-08-05\n93 2025-08-05\n94 2025-08-05\n95 2025-08-05\n96 2025-08-05\n97 2025-08-05\n98 2025-08-05\n99 2025-08-07\n100 2025-08-07\n101 2025-08-07\n102 2025-08-07\n103 2025-08-07\n104 2025-08-07\n105 2025-08-07\n106 2025-08-07\n107 2025-08-07\n108 2025-08-07\n109 2025-08-07\n110 2025-08-07\n111 2025-08-07\n112 2025-08-07\n113 2025-08-07\n114 2025-08-07\n115 2025-08-07\n116 2025-08-07\n117 2025-08-07\n118 2025-08-07\n119 2025-08-07\n120 2025-08-07\n121 2025-08-07\n122 2025-08-07\n123 2025-08-07\n124 2025-08-07\n125 2025-08-22\n126 2025-08-22\n127 2025-08-22\n128 2025-08-22\n129 2025-08-22\n130 2025-08-22\n131 2025-08-22\n132 2025-08-22\n133 2025-08-22\n134 2025-08-22\n135 2025-08-22\n136 2025-08-22\n137 2025-08-22\n138 2025-08-22\n139 2025-08-22\n140 2025-08-22\n141 2025-08-22\n142 2025-08-22\n143 2025-08-22\n144 2025-08-22\n145 2025-08-22\n146 2025-08-22\n147 2025-08-22\n148 2025-08-22\n149 2025-08-22\n150 2025-08-22\n151 2025-08-22\n152 2025-08-28\n153 2025-08-28\n154 2025-08-28\n155 2025-08-28\n156 2025-08-28\n157 2025-08-28\n158 2025-08-28\n159 2025-08-28\n160 2025-08-28\n161 2025-08-28\n162 2025-08-28\n163 2025-08-28\n164 2025-08-28\n165 2025-08-28\n166 2025-08-28\n167 2025-08-28\n168 2025-08-28\n169 2025-08-28\n170 2025-08-28\n171 2025-08-28\n172 2025-08-28\n173 2025-08-28\n174 2025-08-28\n175 2025-08-28\n176 2025-08-28\n177 2025-08-28\n178 2025-08-28\n179 2025-08-30\n180 2025-08-30\n181 2025-08-30\n182 2025-08-30\n183 2025-08-30\n184 2025-08-30\n185 2025-08-30\n186 2025-08-30\n187 2025-08-30\n188 2025-08-30\n189 2025-08-30\n190 2025-08-30\n191 2025-08-30\n192 2025-08-30\n193 2025-08-30\n194 2025-08-30\n195 2025-08-30\n196 2025-08-30\n\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(5)\n\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n4 2025-07-26\n5 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, 5)\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\n4 INF0100 9 Ctrl 0.6314431 0.4861231 0.4378944\n5 INF0179 0 Ctrl 0.4396437 0.1950634 0.7392563\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, 5)\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\n4 INF0100 0.6314431 0.4861231 0.4378944 9 Ctrl\n5 INF0179 0.4396437 0.1950634 0.7392563 0 Ctrl", + "crumbs": [ + "About", + "Intro to R", + "04 - Intro to Tidyverse" + ] + }, + { + "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(5)\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\n4 INF0100 0.6314431 9 Ctrl 2025-07-26 Male HEU-lo 358624\n5 INF0179 0.4396437 0 Ctrl 2025-07-26 Male HU 1362216\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\n4 328624 289327 276289 0.9819573 0.9855070 0.9412615\n5 1206309 1032946 982736 0.9572591 0.9556272 0.8407837\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\n4 0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345\n5 0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182\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\n4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008 111552\n5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485 291777\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\n4 176662 0.01449297 0.05873854 271304\n5 663667 0.04437285 0.15921627 940733\n\n# |> head(5) 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(5)\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\n4 INF0100 0.6314431 0.01449297 9 Ctrl 2025-07-26 Male HEU-lo\n5 INF0179 0.4396437 0.04437285 0 Ctrl 2025-07-26 Male HU\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\n4 358624 328624 289327 276289 0.9819573 0.9855070 0.9412615\n5 1362216 1206309 1032946 982736 0.9572591 0.9556272 0.8407837\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\n4 0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345\n5 0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182\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\n4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008 111552\n5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485 291777\n lymphocytes_count Debris CD45_count\n1 587573 0.13723513 915203\n2 308583 0.13973396 1438047\n3 607477 0.04212072 820570\n4 176662 0.05873854 271304\n5 663667 0.15921627 940733\n\n# |> head(5) 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(5)\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\n4 INF0100 9 Ctrl 0.6314431 2025-07-26 Male HEU-lo 358624\n5 INF0179 0 Ctrl 0.4396437 2025-07-26 Male HU 1362216\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\n4 328624 289327 276289 0.9819573 0.9855070 0.9412615\n5 1206309 1032946 982736 0.9572591 0.9556272 0.8407837\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\n4 0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345\n5 0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182\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\n4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008 111552\n5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485 291777\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\n4 176662 0.01449297 0.05873854 271304\n5 663667 0.04437285 0.15921627 940733\n\n# |> head(5) 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(5)\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\n4 2025-07-26 INF0100 9 Ctrl Male HEU-lo 358624 328624\n5 2025-07-26 INF0179 0 Ctrl Male HU 1362216 1206309\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\n4 289327 276289 0.9819573 0.9855070 0.9412615 0.6511588\n5 1032946 982736 0.9572591 0.9556272 0.8407837 0.7054786\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\n4 0.9153242 0.21469246 0.7006317 0.6314431 0.011348967 0.9886510 0.01702345\n5 0.8952140 0.33831877 0.5568953 0.4396437 0.004753630 0.9952464 0.01332182\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\n4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008 111552\n5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485 291777\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\n4 176662 0.01449297 0.05873854 271304\n5 663667 0.04437285 0.15921627 940733\n\n# |> head(5) is used only to make the website output visualization manageable :D", + "crumbs": [ + "About", + "Intro to R", + "04 - Intro to Tidyverse" + ] + }, + { + "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", + "04 - Intro to Tidyverse" + ] + }, + { + "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(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 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", + "04 - Intro to Tidyverse" + ] + }, + { + "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(10)\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\n6 INF0179 4 PPD 2025-07-26 Male HU 1240984 1089933\n7 INF0179 9 PPD 2025-07-26 Male HU 1705960 1492142\n8 INF0186 4 PPD 2025-07-26 Female HEU-hi 848584 759606\n9 INF0186 9 PPD 2025-07-26 Female HEU-hi 1425416 1259825\n10 INF0134 0 PPD 2025-07-29 Female HEU-lo 1245024 1126248\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\n6 868877 814909 0.9855947 0.9541417 0.9400824 0.7303074\n7 1163543 1107878 0.9820919 0.9816909 0.9681656 0.7933252\n8 648405 607514 0.9824778 0.9539480 0.9250170 0.6720872\n9 1089955 1014266 0.9771490 0.9552573 0.9137615 0.6332438\n10 993895 896183 0.7915660 0.8042298 0.7899781 0.5924868\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\n6 0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.01266884\n7 0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.01330324\n8 0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.04352519\n9 0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.03738187\n10 0.9003481 0.15485733 0.7454908 0.3314561 0.009453601 0.9905464 0.02587717\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\n6 0.9830107 0.6318771 0.3511336 0.3177460 0.03338760 331680\n7 0.9839630 0.7016361 0.2823269 0.2559335 0.02639338 577228\n8 0.9469912 0.5309109 0.4160803 0.3912185 0.02486181 190855\n9 0.9443941 0.5033806 0.4410135 0.4213381 0.01967539 365177\n10 0.9646692 0.6964224 0.2682468 0.2260394 0.04220742 139312\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\n6 586561 0.04585829 0.05991758 803170\n7 863168 0.01830910 0.03183437 1088038\n8 401148 0.04605198 0.07498295 596869\n9 627601 0.04474270 0.08623847 991089\n10 420303 0.19577016 0.21002188 709388\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(10)\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\n6 INF0179 4 PPD 2025-07-26 Male HU 1240984 1089933\n7 INF0179 9 PPD 2025-07-26 Male HU 1705960 1492142\n8 INF0186 4 PPD 2025-07-26 Female HEU-hi 848584 759606\n9 INF0186 9 PPD 2025-07-26 Female HEU-hi 1425416 1259825\n10 INF0052 0 SEB 2025-07-26 Male HEU-hi 2523776 2282292\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\n6 868877 814909 0.9855947 0.9541417 0.9400824 0.7303074\n7 1163543 1107878 0.9820919 0.9816909 0.9681656 0.7933252\n8 648405 607514 0.9824778 0.9539480 0.9250170 0.6720872\n9 1089955 1014266 0.9771490 0.9552573 0.9137615 0.6332438\n10 2041563 1889418 0.5783591 0.8878072 0.8670150 0.6718563\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.015070567\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.016718006\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.016097899\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.018552985\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.012972375\n6 0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.012668837\n7 0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.013303235\n8 0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.043525189\n9 0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.037381872\n10 0.9115652 0.23344716 0.6781180 0.2741661 0.009225633 0.9907744 0.008420812\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\n6 0.9830107 0.6318771 0.3511336 0.3177460 0.03338760 331680\n7 0.9839630 0.7016361 0.2823269 0.2559335 0.02639338 577228\n8 0.9469912 0.5309109 0.4160803 0.3912185 0.02486181 190855\n9 0.9443941 0.5033806 0.4410135 0.4213381 0.01967539 365177\n10 0.9823536 0.6083254 0.3740281 0.2811756 0.09285249 201287\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\n6 586561 0.04585829 0.05991758 803170\n7 863168 0.01830910 0.03183437 1088038\n8 401148 0.04605198 0.07498295 596869\n9 627601 0.04474270 0.08623847 991089\n10 734179 0.11219277 0.13298504 1092762\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(10)\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\n6 INF0179 4 PPD 2025-07-26 Male HU 1240984 1089933\n7 INF0179 9 PPD 2025-07-26 Male HU 1705960 1492142\n8 INF0186 4 PPD 2025-07-26 Female HEU-hi 848584 759606\n9 INF0186 9 PPD 2025-07-26 Female HEU-hi 1425416 1259825\n10 INF0052 0 SEB 2025-07-26 Male HEU-hi 2523776 2282292\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\n6 868877 814909 0.9855947 0.9541417 0.9400824 0.7303074\n7 1163543 1107878 0.9820919 0.9816909 0.9681656 0.7933252\n8 648405 607514 0.9824778 0.9539480 0.9250170 0.6720872\n9 1089955 1014266 0.9771490 0.9552573 0.9137615 0.6332438\n10 2041563 1889418 0.5783591 0.8878072 0.8670150 0.6718563\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.015070567\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.016718006\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.016097899\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.018552985\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.012972375\n6 0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.012668837\n7 0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.013303235\n8 0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.043525189\n9 0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.037381872\n10 0.9115652 0.23344716 0.6781180 0.2741661 0.009225633 0.9907744 0.008420812\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\n6 0.9830107 0.6318771 0.3511336 0.3177460 0.03338760 331680\n7 0.9839630 0.7016361 0.2823269 0.2559335 0.02639338 577228\n8 0.9469912 0.5309109 0.4160803 0.3912185 0.02486181 190855\n9 0.9443941 0.5033806 0.4410135 0.4213381 0.01967539 365177\n10 0.9823536 0.6083254 0.3740281 0.2811756 0.09285249 201287\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\n6 586561 0.04585829 0.05991758 803170\n7 863168 0.01830910 0.03183437 1088038\n8 401148 0.04605198 0.07498295 596869\n9 627601 0.04474270 0.08623847 991089\n10 734179 0.11219277 0.13298504 1092762\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", + "04 - Intro to Tidyverse" + ] + }, + { + "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", + "04 - Intro to Tidyverse" + ] + }, + { + "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 .fcs 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", + "04 - Intro to Tidyverse" + ] + }, { "objectID": "course/03_InsideFCSFile/index.html", "href": "course/03_InsideFCSFile/index.html", @@ -2248,5 +2380,33 @@ "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/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." } ] \ No newline at end of file From 4b9e0fdc0ca19ad0e43db4e290de97504cd640aa Mon Sep 17 00:00:00 2001 From: David Rach Date: Tue, 24 Feb 2026 11:26:59 -0500 Subject: [PATCH 05/10] Abbreviating column select outputs for website, plus slide deck for Week 4 --- course/04_IntroToTidyverse/index.qmd | 37 +- course/04_IntroToTidyverse/slides.qmd | 1199 ++++++ docs/course/03_InsideFCSFile/index.html | 8 +- docs/course/03_InsideFCSFile/slides.html | 8 +- docs/course/04_IntroToTidyverse/index.html | 1031 +---- docs/course/04_IntroToTidyverse/slides.html | 3902 +++++++++++++++++++ docs/search.json | 2548 ++++++------ 7 files changed, 6597 insertions(+), 2136 deletions(-) create mode 100644 course/04_IntroToTidyverse/slides.qmd create mode 100644 docs/course/04_IntroToTidyverse/slides.html diff --git a/course/04_IntroToTidyverse/index.qmd b/course/04_IntroToTidyverse/index.qmd index f62f7f8..dc71ad5 100644 --- a/course/04_IntroToTidyverse/index.qmd +++ b/course/04_IntroToTidyverse/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/04_IntroToTidyverse/slides.qmd) # Background @@ -232,7 +232,7 @@ We will start with the `select()` function. It is used to "select" a column from ```{r} DateColumn <- select(Data, "Date") -DateColumn +DateColumn[1:10,] ``` This results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object. @@ -243,7 +243,7 @@ While the above line of code works to select a column, when you encounter `selec ```{r} DateColumn <- Data |> select("Date") -DateColumn +DateColumn[1:10,] ``` ... **"What in the world is that thing |> ?"** ... @@ -294,6 +294,7 @@ Data |> select("Date") In summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column ```{r} +#| eval: FALSE Data |> select("Date") ``` @@ -312,7 +313,7 @@ While we used "" around the column name in our previous example, unlike what we ::: ```{r} -Data |> select(Date) |> head(5) +Data |> select(Date) |> head(3) ``` :::{.callout-note title="."} @@ -326,7 +327,7 @@ Since we are able to select one column, can we select multiple (similar to a [Da ```{r} Subset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`) -head(Subset, 5) +head(Subset, 3) ``` You will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object: @@ -334,7 +335,7 @@ You will notice that the order in which we selected the columns will dictate the ```{r} Subset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, ) -head(Subset, 5) +head(Subset, 3) ``` ## relocate @@ -344,33 +345,33 @@ Alternatively, we occasionally want to move one column. While we could respecify Looking 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: ```{r} -Data |> relocate(Tcells, .after=bid) |> head(5) +Data |> relocate(Tcells, .after=bid) |> head(3) -# |> head(5) is used only to make the website output visualization manageable :D +# |> head(3) is used only to make the website output visualization manageable :D ``` Similar to what we saw with `select()`, this approach can also be used for more than 1 column: ```{r} -Data |> relocate(Tcells, Monocytes, .after=bid) |> head(5) +Data |> relocate(Tcells, Monocytes, .after=bid) |> head(3) -# |> head(5) is used only to make the website output visualization manageable :D +# |> head(3) is used only to make the website output visualization manageable :D ``` We can also modify the argument so that columns are placed before a certain column ```{r} -Data |> relocate(Tcells, .before=Date) |> head(5) +Data |> relocate(Tcells, .before=Date) |> head(3) -# |> head(5) is used only to make the website output visualization manageable :D +# |> head(3) is used only to make the website output visualization manageable :D ``` And as we might suspect, we could specify a column index location rather than using a column name. ```{r} -Data |> relocate(Date, .before=1) |> head(5) +Data |> relocate(Date, .before=1) |> head(3) -# |> head(5) is used only to make the website output visualization manageable :D +# |> head(3) is used only to make the website output visualization manageable :D ``` ## rename @@ -408,7 +409,7 @@ colnames(Renamed_Multiple) Sometimes, 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 ```{r} -Data |> pull(Date) |> head(10) +Data |> pull(Date) |> head(5) ``` This 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: @@ -440,20 +441,20 @@ head(PPDOnly, 5) While 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" ```{r} -Data |> filter(Condition %in% "PPD") |> head(10) +Data |> filter(Condition %in% "PPD") |> head(5) ``` Similar 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()`/ ```{r} -Data |> filter(Condition %in% c("PPD", "SEB")) |> head(10) +Data |> filter(Condition %in% c("PPD", "SEB")) |> head(5) ``` Alternatively, we could have set up the vector externally, and then provided it to `filter()` ```{r} TheseConditions <- c("PPD", "SEB") -Data |> filter(Condition %in% TheseConditions) |> head(10) +Data |> filter(Condition %in% TheseConditions) |> head(5) ``` While this works when we have a limited number of variant condition values, what if had many more but only wanted to exclude one value? diff --git a/course/04_IntroToTidyverse/slides.qmd b/course/04_IntroToTidyverse/slides.qmd new file mode 100644 index 0000000..97a8b8f --- /dev/null +++ b/course/04_IntroToTidyverse/slides.qmd @@ -0,0 +1,1199 @@ +--- +title: "04 - Introduction to Tidyverse" +author: "David Rach" +date: 02-24-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="."} +Within our daily workflows as cytometrist, after acquiring data on our respective instruments, we begin analyzing the resulting datasets. After implementing various workflows, we then export data for downstream statistical analysis. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +When I first started my Ph.D program, a substantial amount of my day was spent renaming column names of the exported data so that they would fit nicely in a Microsoft Excel sheet column; setting up formulas to combine proportion of positive cells across positive quadrants, etc. Once this was done, additional hours would go by as I copied and pasted contents of those columns over to a GraphPad Prism worksheet for statistical analysis. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +This of course was in an ideal scenario. Often times, the data was less organized, and instead of time spent copying and pasting over columns, it would first be spent rearranging values from individual cells in the worksheet that were separated by spaces, all the while trying to remember what various color codes and bold font stood for. +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +Today, we will explore what makes data ["tidy"](https://vita.had.co.nz/papers/tidy-data.pdf), and how to use the toolsets implemented in the various [tidyverse](https://cran.r-project.org/web/packages/tidyverse/vignettes/paper.html) R packages. At it's simplest, if we think of and organize all our data in terms of rows and columns, we need fewer tools (ie. functions) to reshape and extract useful information that we are interested in. Additionally, this approach aligns more closely with how computers work, allowing us to carry out tasks that would otherwise have taken hours in mere seconds. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +The dataset we will be using today is a manually-gated spectral flow cytometry dataset (similar to ones we would see exported by commercial software), and has been intentionally left slightly messy. You could however just as easily use a "matrix" or "data.frame" object exported from inside an [fcs file](/course/03_InsideFCSFile/), or swap in your own dataset. You would just need to make sure to switch out the input data by providing an alternate [file path](/course/02_FilePaths/), etc. +::: +::: + +--- + +# Walk Through + +:::{.callout-important title="Housekeeping"} +As we do [every week](/course/02_FilePaths/index.qmd), 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 creating a "Week04" project folder, copy over the contents of "course/04_IntroToTidyverse" to that folder. This will hopefully prevent any merge issues when you attempt to bring in new data to your local Cytometry in R folder next week. Please remember once you have set up your project folder to stage, commit and pus your changes to "Week04" to GitHub so that they are backed up remotely. + +If you are having issues syncing due to the Take-Home Problem merge conflict, see this [walkthrough](https://umgcccfcsr.github.io/CytometryInR/course/00_BonusContent/PullConflicts/) +::: + +--- + +## read.csv + +::: {.fragment} +::: {.callout-tip title="."} +We 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: +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE +#| include: FALSE + +# For use only when building the website, otherwise keep eval to FALSE +thefilepath <- file.path(getwd(), "course", "04_IntroToTidyverse", "data", "Dataset.csv") + +thefilepath +``` + +::: + +::: {.fragment} +```{r} +#| eval: TRUE +thefilepath <- file.path("data", "Dataset.csv") + +thefilepath +``` + +::: + +--- + +::: {.fragment} +:::{.callout-tip title="Reminder"} +We 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. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Above, 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. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Since 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. +::: +::: + +::: {.fragment} +```{r} +Data <- read.csv(file=thefilepath, check.names=FALSE) +colnames(Data) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As 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? + +Let's see what happens to the column names when we set "check.names" argument to TRUE: +::: +::: + + +::: {.fragment} +```{r} +Data_Alternative <- read.csv(thefilepath, check.names=TRUE) +colnames(Data_Alternative) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +As we can see, any column name that contained a special character or a space was automatically converted over to [R-approved syntax](https://ssojet.com/escaping/regex-escaping-in-r#understanding-the-need-for-escaping-special-characters). 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. +::: +::: + +::: {.fragment} +![](images/00_CheckNamesTRUE.png) +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Because of this, it is often better to rename columns individually after import, which we will learn how to do later today. + +Following up with what we practiced last week, lets use the `head()` function to visualize the first few rows of data. +::: +::: + +::: {.fragment} +```{r} +head(Data, 3) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +When 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. +::: +::: + +--- + +![](images/01_DataView.png) + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We could also achieve the same window to open using the `View()` function: +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE +View(Data) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Wrapping up our brief recap of [last week](/course/03_InsideFCSFile/index.qmd) functions, we can check an objects type using both the `class()` and `str()` functions. +::: +::: + +::: {.fragment} +```{r} +class(Data) +``` + +::: + +::: {.fragment} +```{r} +str(Data) +``` + +::: + +--- + +## data.frame + +::: {.fragment} +::: {.callout-tip title="."} +Or alternatively using the new-to-us `glimpse()` function +::: +::: + +::: {.fragment} +```{r} +#| error: TRUE +glimpse(Data) +``` + +::: + +--- + +:::{.callout-tip title="Checkpoint 1"} +This however returns an error. Any idea why this might be occuring? +::: + +::: {.fragment} +```{r} +#| code-fold: TRUE + +# We haven't attached/loaded the package in which the function glimpse is within +``` + +::: + +--- + +:::{.callout-tip title="Checkpoint 2"} +How would we locate a package a not-yet-loaded function is within? +::: + +::: {.fragment} +```{r} +#| code-fold: TRUE +#| eval: FALSE + +# We can use double ? to search all installed packages for a function, regardless +# if the package is attached to the environment or not + +??glimpse +``` + +::: + +--- + +![](images/02_Glimpse.png) + +::: {.fragment} +::: {.callout-tip title="."} +From 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. +::: +::: + +::: {.fragment} +```{r} +#| message: FALSE +#| warning: FALSE +library(dplyr) +glimpse(Data) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We 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])) +::: +::: + +::: {.fragment} +```{r} +dim(Data) +``` + +::: + +--- + +## Column value type + +::: {.fragment} +::: {.callout-tip title="."} +As 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](https://www.r-bloggers.com/2023/09/understanding-data-types-in-r/) 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. +::: +::: + +--- + +![](images/03_ColumnClass.png) + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If 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 +::: +::: + +::: {.fragment} +```{r} +# colnames(Data) # To recheck the column names + +is.character(Data$bid) +``` + +::: + +::: {.fragment} +```{r} +is.numeric(Data$bid) +``` + +::: + +::: {.fragment} +```{r} +# colnames(Data) # To recheck the column names + +is.character(Data$Tcells_count) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +For numeric columns using the `is.numeric()` function, we can also be [subtype](https://www.r-bloggers.com/2023/09/understanding-data-types-in-r/) specific using either `is.integer()` or `is.double()`. +::: +::: + +::: {.fragment} +```{r} +# colnames(Data) # To recheck the column names + +is.numeric(Data$Tcells_count) +is.integer(Data$Tcells_count) +is.double(Data$Tcells_count) +``` + +::: + +--- + +:::{.callout-tip title="Reminder"} +As we observed last week with keywords, column names that contain [special characters](https://ssojet.com/escaping/regex-escaping-in-r#understanding-the-need-for-escaping-special-characters) like $ or spaces will need to be surrounded with tick marks in order for the function to be able to run. +::: + +::: {.fragment} +```{r} +#| error: TRUE + +# colnames(Data) # To recheck the column names +is.numeric(Data$CD8-) +``` + +::: + +::: {.fragment} +```{r} +# colnames(Data) # To recheck the column names +is.numeric(Data$`CD8-`) +``` + +::: + +--- + +## select (Columns) + +::: {.fragment} +::: {.callout-tip title="."} +Now 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. +::: +::: + +::: {.fragment} +```{r} +library(dplyr) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We 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) +::: +::: + +::: {.fragment} +```{r} +DateColumn <- select(Data, "Date") +DateColumn +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +This results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object. +::: +::: + +--- + +### Pipe Operators + +::: {.fragment} +::: {.callout-tip title="."} +While 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: +::: +::: + +::: {.fragment} +```{r} +DateColumn <- Data |> select("Date") +DateColumn +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +... **"What in the world is that thing |> ?"** ... +::: +::: + + +::: {.fragment} +::: {.callout-tip title="."} +Glad you asked! An useful feature of the tidyverse packages is their use of [pipes](https://r4ds.had.co.nz/pipes.html) (either the original `magrittr` package's "%>%" or `base R version >4.1.0's` "|>""), usually appearing like this: +::: +::: + +::: {.fragment} +```{r} +# magrittr %>% pipe + +DateColumn <- Data %>% select("Date") + +# base R |> pipe +DateColumn <- Data |> select("Date") +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +... **"How do we interpret/read that line of code?"** ... +::: +::: + +::: {.fragment} +::: {.callout-tip title="."} +Let's break it down, starting off just to the right of the assignment arrow (<-) with our data.frame "Data". +::: +::: + +::: {.fragment} +```{r} +#| eval: false + +Data +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We 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. +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE +Data |> +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +In 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. +::: +::: + +::: {.fragment} +```{r} +#| eval: FALSE +Data |> select() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +To complete the transfer, we provide the desired column name to `select()` to act on ("Date" in this case) +::: +::: + + +::: {.fragment} +```{r} +#| eval: FALSE +Data |> select("Date") +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +In summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column +::: +::: + +::: {.fragment} +```{r} +Data |> select("Date") +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +One 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. +::: +::: + +::: {.fragment} +```{r} +Data |> select("Date") |> nrow() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +For 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](https://tidyverse.org/blog/2023/04/base-vs-magrittr-pipe/) 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). +::: +::: + +--- + +### R Quirks + +:::{.callout-note title="Odd R Behavior # 1"} +While 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: +::: + +::: {.fragment} +```{r} +Data |> select(Date) |> head(5) +``` + +::: + +--- + +:::{.callout-note title="."} +The reasons for this Odd R behaviour are nuanced and for [another day](https://adv-r.hadley.nz/evaluation.html). 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. +::: + +--- + +### Selecting multiple columns + +::: {.fragment} +::: {.callout-tip title="."} +Since 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: +::: +::: + +::: {.fragment} +```{r} +Subset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`) + +head(Subset, 5) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +You will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object: +::: +::: + +::: {.fragment} +```{r} +Subset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, ) + +head(Subset, 5) +``` + +::: + +--- + +## relocate + +::: {.fragment} +::: {.callout-tip title="."} +Alternatively, 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. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Looking 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: +::: +::: + +::: {.fragment} +```{r} +Data |> relocate(Tcells, .after=bid) |> head(5) + +# |> head(5) is used only to make the website output visualization manageable :D +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Similar to what we saw with `select()`, this approach can also be used for more than 1 column: +::: +::: + +::: {.fragment} +```{r} +Data |> relocate(Tcells, Monocytes, .after=bid) |> head(5) + +# |> head(5) is used only to make the website output visualization manageable :D +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We can also modify the argument so that columns are placed before a certain column +::: +::: + +::: {.fragment} +```{r} +Data |> relocate(Tcells, .before=Date) |> head(5) + +# |> head(5) is used only to make the website output visualization manageable :D +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +And as we might suspect, we could specify a column index location rather than using a column name. +::: +::: + +::: {.fragment} +```{r} +Data |> relocate(Date, .before=1) |> head(5) + +# |> head(5) is used only to make the website output visualization manageable :D +``` + +::: + +--- + +## rename + +::: {.fragment} +::: {.callout-tip title="."} +At 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? +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +In 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: +::: +::: + + +::: {.fragment} +```{r} +colnames(Subset) +colnames(Subset)[3] +``` + +::: + + +::: {.fragment} +```{r} +colnames(Subset)[3] <- "CD8Positive" +colnames(Subset) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +With 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 +::: +::: + +::: {.fragment} +```{r} +Renamed <- Subset |> rename(CD4_Positive = `CD4+`) +colnames(Renamed) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +If 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. +::: +::: + +::: {.fragment} +```{r} +Renamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`) +colnames(Renamed_Multiple) +``` + +::: + +--- + +## pull + +::: {.fragment} +::: {.callout-tip title="."} +Sometimes, 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 +::: +::: + +::: {.fragment} +```{r} +Data |> pull(Date) |> head(10) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +This 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: +::: +::: + +::: {.fragment} +```{r} +Data |> pull(Date) |> unique() +``` + +::: + +--- + + +## filter (Rows) + +::: {.fragment} +::: {.callout-tip title="."} +So 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. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +The 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 +::: +::: + +::: {.fragment} +```{r} +Data |> pull(Condition) |> unique() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +In the case of this dataset, looks like the .fcs files where treated with either left alone, treated with [PPD (Purified Protein Derrivative)](https://en.wikipedia.org/wiki/Tuberculin) or [SEB](https://en.wikipedia.org/wiki/Enterotoxin_type_B). What if we wanted to subset only those treated with PPD? +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Within `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. +::: +::: + +::: {.fragment} +```{r} +PPDOnly <- Data |> filter(Condition == "PPD") +head(PPDOnly, 5) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +While 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" +::: +::: + +::: {.fragment} +```{r} +Data |> filter(Condition %in% "PPD") |> head(10) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Similar 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()`/ +::: +::: + +::: {.fragment} +```{r} +Data |> filter(Condition %in% c("PPD", "SEB")) |> head(10) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Alternatively, we could have set up the vector externally, and then provided it to `filter()` +::: +::: + +::: {.fragment} +```{r} +TheseConditions <- c("PPD", "SEB") +Data |> filter(Condition %in% TheseConditions) |> head(10) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +While 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](/course/02_FilePaths/index.qmd), when we add a ! in front of a logical value, we get the opposite logical value returned +::: +::: + +::: {.fragment} +```{r} +IsThisASpectralInstrument <- TRUE + +!IsThisASpectralInstrument +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +In the context of the `dplyr` package, we can use ! within the `filter()` to remove rows that contain a certain value +::: +::: + +::: {.fragment} +```{r} +Subset <- Data |> filter(!Condition %in% "SEB") +Subset |> pull(Condition) |> unique() +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Likewise, we can also use it with the `select()` to exclude columns we don't want to include +::: +::: + +::: {.fragment} +```{r} +Subset <- Data |> select(!timepoint) +Subset[1:3,] +``` + +::: + +--- + + +## mutate + +::: {.fragment} +::: {.callout-tip title="."} +As 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. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Let's start by slimming down our current Data to a smaller workable example, highlighting the functions and pipes we learned about today +::: +::: + +::: {.fragment} +```{r} +TidyData <- Data |> filter(Condition %in% "Ctrl") |> filter(timepoint %in% "0") |> + select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |> + rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen) +``` + +::: + +--- + +::: {.fragment} +```{r} +TidyData +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +The `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: +::: +::: + +::: {.fragment} +```{r} +TidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count) +TidyData +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +We 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 +::: +::: + +::: {.fragment} +```{r} +TidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2)) +TidyData +``` + +::: + +--- + + +## arrange + +::: {.fragment} +::: {.callout-tip title="."} +And 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`: +::: +::: + +::: {.fragment} +```{r} +TidyData <- TidyData |> arrange(desc(TcellsRounded)) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +And 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): +::: +::: + +::: {.fragment} +```{r} +TidyData |> filter(TcellsRounded > 0.3) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Which is we had wanted to just retrieve the specimen IDs, we could add `pull()` after a new pipe argument. +::: +::: + +::: {.fragment} +```{r} +TidyData |> filter(TcellsRounded > 0.3) |> pull(specimen) +``` + +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +And 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 .fcs file. Working within our project folder, this would look like this: +::: +::: + +::: {.fragment} +```{r} +NewName <- paste0("MyNewDataset", ".csv") +StorageLocation <- file.path("data", NewName) +StorageLocation +``` +::: + +::: {.fragment} +```{r} +#| eval: FALSE +write.csv(TidyData, StorageLocation, row.names=FALSE) +``` +::: + +--- + +# Take Away + +::: {.fragment} +::: {.callout-tip title="."} +In this session, we explored the main functions within the `dplyr` package used in context of "tidying" data, including selecting columns, filtering for rows, as well as additional functions used to create or modify existing values. We will continue to build on these throughout the course, introducing a few additional tidyverse functions we don't have time to cover today as appropiate. As we saw, knowing how to use these functions can allow us to extensively and quickly modify our existing exported data files. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +On important goal as we move through the course (in terms of both reproducibility and replicability) is to attempt to only modify files within R, not go back to the original csv or excel file and hand-modify individual values. This approach is not reproducible or replicable. Once set up, an R script can quickly re-carry out these same cleanup steps, and leave a documented process of how the data has changed (even more so if you are maintaining version control). If you do want to save the changes you have made, it is best to save it out as a new .csv file with which you work later. +::: +::: + +--- + +::: {.fragment} +::: {.callout-tip title="."} +Next week, we will be using these skills when setting up metadata for our .fcs files. We will additionally take a look at the main format source of controversy within Bioconductor Flow Cytometry packages, ie. whether to use a flowframe or a cytoframe. Exciting stuff, but important information to know as the functions needed to import them are slightly different. We will also look at how to import existing manually gated .wsp from FlowJo/Diva/Floreada in via the `CytoML` package. +::: +::: + +--- + +![](images/TakeAway.jpg) + +--- + +# Additional Resources + +[Data Organization in Spreadsheets for Ecologists](https://datacarpentry.github.io/spreadsheet-ecology-lesson/) This Carpentry self-study course was one of my "Aha" moments early on when learning R, and reinforced the need to try to keep my own Excel/CSV files in a tidy manner. It is worth the time going through in its entirety (even for non-Ecologist). + +[Data Analysis and Visualization in R for Ecologists](https://datacarpentry.github.io/R-ecology-lesson/) Continuation of the above, and a good way to continue building on the tidyverse functions we learned today. + +--- + +[Simplistics: Introduction to Tidyverse in R](https://youtu.be/Bg4qxVNaDck?si=QPQq8TzOZ1w6XSy4) The YouTube channel is mainly focused on statistics for Psych classes, but at the end of the day, we are all working with similar objects with rows and columns, just the values contained within differ. + +[Riffomonas Project Playlist: Data Manipulation with R's Tidyverse](https://youtube.com/playlist?list=PLmNrK_nkqBpKf7j_ewpUm-w33R6PJYtD9&si=BVmDZPIXjRuHjERP) Riffomonas has a playlist that delves into both the tidyverse functions we used today, as well as other ones we will encounter later on in the course. + +--- + +# Take-home Problems + +:::{.callout-tip title="Problem 1"} +Taking a dataset (either todays or one of your own), work through the column-operating functions (`select()`, `rename()`, and `relocate()`). Once this is done, `filter()` by conditions from two separate columns, arrange in an order that makes sense, and export this "tidy" data as a .csv file. +::: + +--- + +:::{.callout-tip title="Problem 2"} +We used the `mutate()` function to create new columns, but it can also be used to modify existing ones. Various numeric columns are showing way to many significant digits. As was shown, use `round()` to round all these proportion columns, but use mutate to overwrite the existing column. Export this as it's own .csv file. +::: + +--- + +:::{.callout-tip title="Problem 3"} +We can also use `mutate()` to combine columns. For our dataset, "bid", "timepoint", "Condition" are separate columns that originally were all part of the filename for the individual .fcs file. Try to figure out a way to combine them back together using `paste0()`, and save the new column as "filename". Once this is done, `pull()` the contents of this column, and using try to determine whether there were any duplicates (think innovative ways of using !, `length()` and `unique()`) +::: + +--- + +::: {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 8cfb1d6..185576f 100644 --- a/docs/course/03_InsideFCSFile/index.html +++ b/docs/course/03_InsideFCSFile/index.html @@ -540,8 +540,8 @@

flowCore

plotly::ggplotly(plot)
-
- +
+
@@ -587,8 +587,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 b31607b..47df3a9 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/index.html b/docs/course/04_IntroToTidyverse/index.html index ddd5b7d..4e25dd5 100644 --- a/docs/course/04_IntroToTidyverse/index.html +++ b/docs/course/04_IntroToTidyverse/index.html @@ -368,7 +368,7 @@

04 - Introduction to Tidyverse

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

Background

Within our daily workflows as cytometrist, after acquiring data on our respective instruments, we begin analyzing the resulting datasets. After implementing various workflows, we then export data for downstream statistical analysis.

@@ -722,205 +722,10 @@

select (Columns)

We 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)

DateColumn <- select(Data, "Date")
-DateColumn
+DateColumn[1:10,]
-
          Date
-1   2025-07-26
-2   2025-07-26
-3   2025-07-26
-4   2025-07-26
-5   2025-07-26
-6   2025-07-26
-7   2025-07-26
-8   2025-07-26
-9   2025-07-26
-10  2025-07-26
-11  2025-07-26
-12  2025-07-26
-13  2025-07-26
-14  2025-07-26
-15  2025-07-26
-16  2025-07-26
-17  2025-07-26
-18  2025-07-26
-19  2025-07-26
-20  2025-07-26
-21  2025-07-26
-22  2025-07-26
-23  2025-07-26
-24  2025-07-26
-25  2025-07-26
-26  2025-07-26
-27  2025-07-29
-28  2025-07-29
-29  2025-07-29
-30  2025-07-29
-31  2025-07-29
-32  2025-07-29
-33  2025-07-29
-34  2025-07-29
-35  2025-07-29
-36  2025-07-29
-37  2025-07-29
-38  2025-07-29
-39  2025-07-29
-40  2025-07-29
-41  2025-07-29
-42  2025-07-29
-43  2025-07-29
-44  2025-07-29
-45  2025-07-29
-46  2025-07-29
-47  2025-07-29
-48  2025-07-29
-49  2025-07-31
-50  2025-07-31
-51  2025-07-31
-52  2025-07-31
-53  2025-07-31
-54  2025-07-31
-55  2025-07-31
-56  2025-07-31
-57  2025-07-31
-58  2025-07-31
-59  2025-07-31
-60  2025-07-31
-61  2025-07-31
-62  2025-07-31
-63  2025-07-31
-64  2025-07-31
-65  2025-07-31
-66  2025-07-31
-67  2025-07-31
-68  2025-07-31
-69  2025-07-31
-70  2025-07-31
-71  2025-07-31
-72  2025-07-31
-73  2025-07-31
-74  2025-07-31
-75  2025-07-31
-76  2025-08-05
-77  2025-08-05
-78  2025-08-05
-79  2025-08-05
-80  2025-08-05
-81  2025-08-05
-82  2025-08-05
-83  2025-08-05
-84  2025-08-05
-85  2025-08-05
-86  2025-08-05
-87  2025-08-05
-88  2025-08-05
-89  2025-08-05
-90  2025-08-05
-91  2025-08-05
-92  2025-08-05
-93  2025-08-05
-94  2025-08-05
-95  2025-08-05
-96  2025-08-05
-97  2025-08-05
-98  2025-08-05
-99  2025-08-07
-100 2025-08-07
-101 2025-08-07
-102 2025-08-07
-103 2025-08-07
-104 2025-08-07
-105 2025-08-07
-106 2025-08-07
-107 2025-08-07
-108 2025-08-07
-109 2025-08-07
-110 2025-08-07
-111 2025-08-07
-112 2025-08-07
-113 2025-08-07
-114 2025-08-07
-115 2025-08-07
-116 2025-08-07
-117 2025-08-07
-118 2025-08-07
-119 2025-08-07
-120 2025-08-07
-121 2025-08-07
-122 2025-08-07
-123 2025-08-07
-124 2025-08-07
-125 2025-08-22
-126 2025-08-22
-127 2025-08-22
-128 2025-08-22
-129 2025-08-22
-130 2025-08-22
-131 2025-08-22
-132 2025-08-22
-133 2025-08-22
-134 2025-08-22
-135 2025-08-22
-136 2025-08-22
-137 2025-08-22
-138 2025-08-22
-139 2025-08-22
-140 2025-08-22
-141 2025-08-22
-142 2025-08-22
-143 2025-08-22
-144 2025-08-22
-145 2025-08-22
-146 2025-08-22
-147 2025-08-22
-148 2025-08-22
-149 2025-08-22
-150 2025-08-22
-151 2025-08-22
-152 2025-08-28
-153 2025-08-28
-154 2025-08-28
-155 2025-08-28
-156 2025-08-28
-157 2025-08-28
-158 2025-08-28
-159 2025-08-28
-160 2025-08-28
-161 2025-08-28
-162 2025-08-28
-163 2025-08-28
-164 2025-08-28
-165 2025-08-28
-166 2025-08-28
-167 2025-08-28
-168 2025-08-28
-169 2025-08-28
-170 2025-08-28
-171 2025-08-28
-172 2025-08-28
-173 2025-08-28
-174 2025-08-28
-175 2025-08-28
-176 2025-08-28
-177 2025-08-28
-178 2025-08-28
-179 2025-08-30
-180 2025-08-30
-181 2025-08-30
-182 2025-08-30
-183 2025-08-30
-184 2025-08-30
-185 2025-08-30
-186 2025-08-30
-187 2025-08-30
-188 2025-08-30
-189 2025-08-30
-190 2025-08-30
-191 2025-08-30
-192 2025-08-30
-193 2025-08-30
-194 2025-08-30
-195 2025-08-30
-196 2025-08-30
+
 [1] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+ [6] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"

This results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object.

@@ -929,205 +734,10 @@

Pipe Operators

While 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:

DateColumn <- Data |> select("Date")
-DateColumn
+DateColumn[1:10,]
-
          Date
-1   2025-07-26
-2   2025-07-26
-3   2025-07-26
-4   2025-07-26
-5   2025-07-26
-6   2025-07-26
-7   2025-07-26
-8   2025-07-26
-9   2025-07-26
-10  2025-07-26
-11  2025-07-26
-12  2025-07-26
-13  2025-07-26
-14  2025-07-26
-15  2025-07-26
-16  2025-07-26
-17  2025-07-26
-18  2025-07-26
-19  2025-07-26
-20  2025-07-26
-21  2025-07-26
-22  2025-07-26
-23  2025-07-26
-24  2025-07-26
-25  2025-07-26
-26  2025-07-26
-27  2025-07-29
-28  2025-07-29
-29  2025-07-29
-30  2025-07-29
-31  2025-07-29
-32  2025-07-29
-33  2025-07-29
-34  2025-07-29
-35  2025-07-29
-36  2025-07-29
-37  2025-07-29
-38  2025-07-29
-39  2025-07-29
-40  2025-07-29
-41  2025-07-29
-42  2025-07-29
-43  2025-07-29
-44  2025-07-29
-45  2025-07-29
-46  2025-07-29
-47  2025-07-29
-48  2025-07-29
-49  2025-07-31
-50  2025-07-31
-51  2025-07-31
-52  2025-07-31
-53  2025-07-31
-54  2025-07-31
-55  2025-07-31
-56  2025-07-31
-57  2025-07-31
-58  2025-07-31
-59  2025-07-31
-60  2025-07-31
-61  2025-07-31
-62  2025-07-31
-63  2025-07-31
-64  2025-07-31
-65  2025-07-31
-66  2025-07-31
-67  2025-07-31
-68  2025-07-31
-69  2025-07-31
-70  2025-07-31
-71  2025-07-31
-72  2025-07-31
-73  2025-07-31
-74  2025-07-31
-75  2025-07-31
-76  2025-08-05
-77  2025-08-05
-78  2025-08-05
-79  2025-08-05
-80  2025-08-05
-81  2025-08-05
-82  2025-08-05
-83  2025-08-05
-84  2025-08-05
-85  2025-08-05
-86  2025-08-05
-87  2025-08-05
-88  2025-08-05
-89  2025-08-05
-90  2025-08-05
-91  2025-08-05
-92  2025-08-05
-93  2025-08-05
-94  2025-08-05
-95  2025-08-05
-96  2025-08-05
-97  2025-08-05
-98  2025-08-05
-99  2025-08-07
-100 2025-08-07
-101 2025-08-07
-102 2025-08-07
-103 2025-08-07
-104 2025-08-07
-105 2025-08-07
-106 2025-08-07
-107 2025-08-07
-108 2025-08-07
-109 2025-08-07
-110 2025-08-07
-111 2025-08-07
-112 2025-08-07
-113 2025-08-07
-114 2025-08-07
-115 2025-08-07
-116 2025-08-07
-117 2025-08-07
-118 2025-08-07
-119 2025-08-07
-120 2025-08-07
-121 2025-08-07
-122 2025-08-07
-123 2025-08-07
-124 2025-08-07
-125 2025-08-22
-126 2025-08-22
-127 2025-08-22
-128 2025-08-22
-129 2025-08-22
-130 2025-08-22
-131 2025-08-22
-132 2025-08-22
-133 2025-08-22
-134 2025-08-22
-135 2025-08-22
-136 2025-08-22
-137 2025-08-22
-138 2025-08-22
-139 2025-08-22
-140 2025-08-22
-141 2025-08-22
-142 2025-08-22
-143 2025-08-22
-144 2025-08-22
-145 2025-08-22
-146 2025-08-22
-147 2025-08-22
-148 2025-08-22
-149 2025-08-22
-150 2025-08-22
-151 2025-08-22
-152 2025-08-28
-153 2025-08-28
-154 2025-08-28
-155 2025-08-28
-156 2025-08-28
-157 2025-08-28
-158 2025-08-28
-159 2025-08-28
-160 2025-08-28
-161 2025-08-28
-162 2025-08-28
-163 2025-08-28
-164 2025-08-28
-165 2025-08-28
-166 2025-08-28
-167 2025-08-28
-168 2025-08-28
-169 2025-08-28
-170 2025-08-28
-171 2025-08-28
-172 2025-08-28
-173 2025-08-28
-174 2025-08-28
-175 2025-08-28
-176 2025-08-28
-177 2025-08-28
-178 2025-08-28
-179 2025-08-30
-180 2025-08-30
-181 2025-08-30
-182 2025-08-30
-183 2025-08-30
-184 2025-08-30
-185 2025-08-30
-186 2025-08-30
-187 2025-08-30
-188 2025-08-30
-189 2025-08-30
-190 2025-08-30
-191 2025-08-30
-192 2025-08-30
-193 2025-08-30
-194 2025-08-30
-195 2025-08-30
-196 2025-08-30
+
 [1] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+ [6] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"

“What in the world is that thing |> ?”

@@ -1160,209 +770,10 @@

Pipe Operators

In summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column

Data |> select("Date")
-
-
          Date
-1   2025-07-26
-2   2025-07-26
-3   2025-07-26
-4   2025-07-26
-5   2025-07-26
-6   2025-07-26
-7   2025-07-26
-8   2025-07-26
-9   2025-07-26
-10  2025-07-26
-11  2025-07-26
-12  2025-07-26
-13  2025-07-26
-14  2025-07-26
-15  2025-07-26
-16  2025-07-26
-17  2025-07-26
-18  2025-07-26
-19  2025-07-26
-20  2025-07-26
-21  2025-07-26
-22  2025-07-26
-23  2025-07-26
-24  2025-07-26
-25  2025-07-26
-26  2025-07-26
-27  2025-07-29
-28  2025-07-29
-29  2025-07-29
-30  2025-07-29
-31  2025-07-29
-32  2025-07-29
-33  2025-07-29
-34  2025-07-29
-35  2025-07-29
-36  2025-07-29
-37  2025-07-29
-38  2025-07-29
-39  2025-07-29
-40  2025-07-29
-41  2025-07-29
-42  2025-07-29
-43  2025-07-29
-44  2025-07-29
-45  2025-07-29
-46  2025-07-29
-47  2025-07-29
-48  2025-07-29
-49  2025-07-31
-50  2025-07-31
-51  2025-07-31
-52  2025-07-31
-53  2025-07-31
-54  2025-07-31
-55  2025-07-31
-56  2025-07-31
-57  2025-07-31
-58  2025-07-31
-59  2025-07-31
-60  2025-07-31
-61  2025-07-31
-62  2025-07-31
-63  2025-07-31
-64  2025-07-31
-65  2025-07-31
-66  2025-07-31
-67  2025-07-31
-68  2025-07-31
-69  2025-07-31
-70  2025-07-31
-71  2025-07-31
-72  2025-07-31
-73  2025-07-31
-74  2025-07-31
-75  2025-07-31
-76  2025-08-05
-77  2025-08-05
-78  2025-08-05
-79  2025-08-05
-80  2025-08-05
-81  2025-08-05
-82  2025-08-05
-83  2025-08-05
-84  2025-08-05
-85  2025-08-05
-86  2025-08-05
-87  2025-08-05
-88  2025-08-05
-89  2025-08-05
-90  2025-08-05
-91  2025-08-05
-92  2025-08-05
-93  2025-08-05
-94  2025-08-05
-95  2025-08-05
-96  2025-08-05
-97  2025-08-05
-98  2025-08-05
-99  2025-08-07
-100 2025-08-07
-101 2025-08-07
-102 2025-08-07
-103 2025-08-07
-104 2025-08-07
-105 2025-08-07
-106 2025-08-07
-107 2025-08-07
-108 2025-08-07
-109 2025-08-07
-110 2025-08-07
-111 2025-08-07
-112 2025-08-07
-113 2025-08-07
-114 2025-08-07
-115 2025-08-07
-116 2025-08-07
-117 2025-08-07
-118 2025-08-07
-119 2025-08-07
-120 2025-08-07
-121 2025-08-07
-122 2025-08-07
-123 2025-08-07
-124 2025-08-07
-125 2025-08-22
-126 2025-08-22
-127 2025-08-22
-128 2025-08-22
-129 2025-08-22
-130 2025-08-22
-131 2025-08-22
-132 2025-08-22
-133 2025-08-22
-134 2025-08-22
-135 2025-08-22
-136 2025-08-22
-137 2025-08-22
-138 2025-08-22
-139 2025-08-22
-140 2025-08-22
-141 2025-08-22
-142 2025-08-22
-143 2025-08-22
-144 2025-08-22
-145 2025-08-22
-146 2025-08-22
-147 2025-08-22
-148 2025-08-22
-149 2025-08-22
-150 2025-08-22
-151 2025-08-22
-152 2025-08-28
-153 2025-08-28
-154 2025-08-28
-155 2025-08-28
-156 2025-08-28
-157 2025-08-28
-158 2025-08-28
-159 2025-08-28
-160 2025-08-28
-161 2025-08-28
-162 2025-08-28
-163 2025-08-28
-164 2025-08-28
-165 2025-08-28
-166 2025-08-28
-167 2025-08-28
-168 2025-08-28
-169 2025-08-28
-170 2025-08-28
-171 2025-08-28
-172 2025-08-28
-173 2025-08-28
-174 2025-08-28
-175 2025-08-28
-176 2025-08-28
-177 2025-08-28
-178 2025-08-28
-179 2025-08-30
-180 2025-08-30
-181 2025-08-30
-182 2025-08-30
-183 2025-08-30
-184 2025-08-30
-185 2025-08-30
-186 2025-08-30
-187 2025-08-30
-188 2025-08-30
-189 2025-08-30
-190 2025-08-30
-191 2025-08-30
-192 2025-08-30
-193 2025-08-30
-194 2025-08-30
-195 2025-08-30
-196 2025-08-30
-

One 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.

-
Data |> select("Date") |> nrow()
+
Data |> select("Date") |> nrow()
[1] 196
@@ -1385,14 +796,12 @@

R Quirks

-
Data |> select(Date) |> head(5)
+
Data |> select(Date) |> head(3)
        Date
 1 2025-07-26
 2 2025-07-26
-3 2025-07-26
-4 2025-07-26
-5 2025-07-26
+3 2025-07-26
@@ -1413,30 +822,26 @@

R Quirks

Selecting multiple columns

Since 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:

-
Subset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`)
-
-head(Subset, 5)
+
Subset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`)
+
+head(Subset, 3)
      bid timepoint Condition    Tcells      CD8+      CD4+
 1 INF0052         0      Ctrl 0.2804264 0.2734826 0.6341164
 2 INF0100         0      Ctrl 0.6748298 0.3357696 0.6119112
-3 INF0100         4      Ctrl 0.6119129 0.2862104 0.6639621
-4 INF0100         9      Ctrl 0.6314431 0.4861231 0.4378944
-5 INF0179         0      Ctrl 0.4396437 0.1950634 0.7392563
+3 INF0100 4 Ctrl 0.6119129 0.2862104 0.6639621

You will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object:

-
Subset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, )
-
-head(Subset, 5)
+
Subset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, )
+
+head(Subset, 3)
      bid    Tcells      CD8+      CD4+ timepoint Condition
 1 INF0052 0.2804264 0.2734826 0.6341164         0      Ctrl
 2 INF0100 0.6748298 0.3357696 0.6119112         0      Ctrl
-3 INF0100 0.6119129 0.2862104 0.6639621         4      Ctrl
-4 INF0100 0.6314431 0.4861231 0.4378944         9      Ctrl
-5 INF0179 0.4396437 0.1950634 0.7392563         0      Ctrl
+3 INF0100 0.6119129 0.2862104 0.6639621 4 Ctrl
@@ -1446,151 +851,111 @@

relocate

Alternatively, 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.

Looking 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:

-
Data |> relocate(Tcells, .after=bid) |> head(5)
+
Data |> relocate(Tcells, .after=bid) |> head(3)
      bid    Tcells timepoint Condition       Date infant_sex  ptype    root
 1 INF0052 0.2804264         0      Ctrl 2025-07-26       Male HEU-hi 2098368
 2 INF0100 0.6748298         0      Ctrl 2025-07-26       Male HEU-lo 2020184
 3 INF0100 0.6119129         4      Ctrl 2025-07-26       Male HEU-lo 1155040
-4 INF0100 0.6314431         9      Ctrl 2025-07-26       Male HEU-lo  358624
-5 INF0179 0.4396437         0      Ctrl 2025-07-26       Male     HU 1362216
   singletsFSC singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris
 1     1894070     1666179      1537396 0.5952943    0.8820349 0.8627649
 2     1791890     1697083      1579098 0.9106762    0.9052256 0.8602660
 3     1033320      875465       845446 0.9705765    0.9845400 0.9578793
-4      328624      289327       276289 0.9819573    0.9855070 0.9412615
-5     1206309     1032946       982736 0.9572591    0.9556272 0.8407837
   lymphocytes      live      Dump+     Dump-        Vd2+      Vd2-     Va7.2+
 1   0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070
 2   0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499
 3   0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402
-4   0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345
-5   0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182
      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
-4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
-5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
   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
-4            176662 0.01449297 0.05873854     271304
-5            663667 0.04437285 0.15921627     940733
+3 607477 0.01545999 0.04212072 820570
-
# |> head(5) is used only to make the website output visualization manageable :D
+
# |> head(3) is used only to make the website output visualization manageable :D

Similar to what we saw with select(), this approach can also be used for more than 1 column:

-
Data |> relocate(Tcells, Monocytes, .after=bid) |> head(5)
+
Data |> relocate(Tcells, Monocytes, .after=bid) |> head(3)
      bid    Tcells  Monocytes timepoint Condition       Date infant_sex  ptype
 1 INF0052 0.2804264 0.11796509         0      Ctrl 2025-07-26       Male HEU-hi
 2 INF0100 0.6748298 0.09477437         0      Ctrl 2025-07-26       Male HEU-lo
 3 INF0100 0.6119129 0.01545999         4      Ctrl 2025-07-26       Male HEU-lo
-4 INF0100 0.6314431 0.01449297         9      Ctrl 2025-07-26       Male HEU-lo
-5 INF0179 0.4396437 0.04437285         0      Ctrl 2025-07-26       Male     HU
      root singletsFSC singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris
 1 2098368     1894070     1666179      1537396 0.5952943    0.8820349 0.8627649
 2 2020184     1791890     1697083      1579098 0.9106762    0.9052256 0.8602660
 3 1155040     1033320      875465       845446 0.9705765    0.9845400 0.9578793
-4  358624      328624      289327       276289 0.9819573    0.9855070 0.9412615
-5 1362216     1206309     1032946       982736 0.9572591    0.9556272 0.8407837
   lymphocytes      live      Dump+     Dump-        Vd2+      Vd2-     Va7.2+
 1   0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070
 2   0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499
 3   0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402
-4   0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345
-5   0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182
      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
-4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
-5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
   lymphocytes_count     Debris CD45_count
 1            587573 0.13723513     915203
 2            308583 0.13973396    1438047
-3            607477 0.04212072     820570
-4            176662 0.05873854     271304
-5            663667 0.15921627     940733
+3 607477 0.04212072 820570
-
# |> head(5) is used only to make the website output visualization manageable :D
+
# |> head(3) is used only to make the website output visualization manageable :D

We can also modify the argument so that columns are placed before a certain column

-
Data |> relocate(Tcells, .before=Date) |> head(5)
+
Data |> relocate(Tcells, .before=Date) |> head(3)
      bid timepoint Condition    Tcells       Date infant_sex  ptype    root
 1 INF0052         0      Ctrl 0.2804264 2025-07-26       Male HEU-hi 2098368
 2 INF0100         0      Ctrl 0.6748298 2025-07-26       Male HEU-lo 2020184
 3 INF0100         4      Ctrl 0.6119129 2025-07-26       Male HEU-lo 1155040
-4 INF0100         9      Ctrl 0.6314431 2025-07-26       Male HEU-lo  358624
-5 INF0179         0      Ctrl 0.4396437 2025-07-26       Male     HU 1362216
   singletsFSC singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris
 1     1894070     1666179      1537396 0.5952943    0.8820349 0.8627649
 2     1791890     1697083      1579098 0.9106762    0.9052256 0.8602660
 3     1033320      875465       845446 0.9705765    0.9845400 0.9578793
-4      328624      289327       276289 0.9819573    0.9855070 0.9412615
-5     1206309     1032946       982736 0.9572591    0.9556272 0.8407837
   lymphocytes      live      Dump+     Dump-        Vd2+      Vd2-     Va7.2+
 1   0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070
 2   0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499
 3   0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402
-4   0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345
-5   0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182
      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
-4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
-5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
   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
-4            176662 0.01449297 0.05873854     271304
-5            663667 0.04437285 0.15921627     940733
+3 607477 0.01545999 0.04212072 820570
-
# |> head(5) is used only to make the website output visualization manageable :D
+
# |> head(3) is used only to make the website output visualization manageable :D

And as we might suspect, we could specify a column index location rather than using a column name.

-
Data |> relocate(Date, .before=1) |> head(5)
+
Data |> relocate(Date, .before=1) |> head(3)
        Date     bid timepoint Condition infant_sex  ptype    root singletsFSC
 1 2025-07-26 INF0052         0      Ctrl       Male HEU-hi 2098368     1894070
 2 2025-07-26 INF0100         0      Ctrl       Male HEU-lo 2020184     1791890
 3 2025-07-26 INF0100         4      Ctrl       Male HEU-lo 1155040     1033320
-4 2025-07-26 INF0100         9      Ctrl       Male HEU-lo  358624      328624
-5 2025-07-26 INF0179         0      Ctrl       Male     HU 1362216     1206309
   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
-4      289327       276289 0.9819573    0.9855070 0.9412615   0.6511588
-5     1032946       982736 0.9572591    0.9556272 0.8407837   0.7054786
        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
-4 0.9153242 0.21469246 0.7006317 0.6314431 0.011348967 0.9886510 0.01702345
-5 0.8952140 0.33831877 0.5568953 0.4396437 0.004753630 0.9952464 0.01332182
      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
-4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
-5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
   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
-4            176662 0.01449297 0.05873854     271304
-5            663667 0.04437285 0.15921627     940733
+3 607477 0.01545999 0.04212072 820570
-
# |> head(5) is used only to make the website output visualization manageable :D
+
# |> head(3) is used only to make the website output visualization manageable :D
@@ -1598,18 +963,18 @@

rename

At 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?

In 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:

-
colnames(Subset)
+
colnames(Subset)
[1] "bid"       "Tcells"    "CD8+"      "CD4+"      "timepoint" "Condition"
-
colnames(Subset)[3]
+
colnames(Subset)[3]
[1] "CD8+"
-
colnames(Subset)[3] <- "CD8Positive"
-colnames(Subset)
+
colnames(Subset)[3] <- "CD8Positive"
+colnames(Subset)
[1] "bid"         "Tcells"      "CD8Positive" "CD4+"        "timepoint"  
 [6] "Condition"  
@@ -1617,8 +982,8 @@

rename

With 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

-
Renamed <- Subset |> rename(CD4_Positive = `CD4+`)
-colnames(Renamed)
+
Renamed <- Subset |> rename(CD4_Positive = `CD4+`)
+colnames(Renamed)
[1] "bid"          "Tcells"       "CD8Positive"  "CD4_Positive" "timepoint"   
 [6] "Condition"   
@@ -1626,8 +991,8 @@

rename

If 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.

-
Renamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`)
-colnames(Renamed_Multiple)
+
Renamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`)
+colnames(Renamed_Multiple)
[1] "specimen"         "Tcells"           "CD8Positive"      "CD4Positive"     
 [5] "timepoint_months" "stimulation"     
@@ -1638,15 +1003,14 @@

rename

pull

Sometimes, 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

-
Data |> pull(Date) |> head(10)
+
Data |> pull(Date) |> head(5)
-
 [1] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
- [6] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+
[1] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"

This 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:

-
Data |> pull(Date) |> unique()
+
Data |> pull(Date) |> 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"
@@ -1658,7 +1022,7 @@

filter (Rows)

So 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.

The 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

-
Data |> pull(Condition) |> unique() 
+
Data |> pull(Condition) |> unique() 
[1] "Ctrl" "PPD"  "SEB" 
@@ -1666,8 +1030,8 @@

filter (Rows)

In 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?

Within 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.

-
PPDOnly <- Data |> filter(Condition == "PPD")
-head(PPDOnly, 5)
+
PPDOnly <- Data |> filter(Condition == "PPD")
+head(PPDOnly, 5)
      bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
 1 INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
@@ -1703,209 +1067,134 @@ 

filter (Rows)

While 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”

-
Data |> filter(Condition %in% "PPD") |> head(10)
+
Data |> filter(Condition %in% "PPD") |> head(5)
-
       bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
-1  INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
-2  INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
-3  INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
-4  INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
-5  INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
-6  INF0179         4       PPD 2025-07-26       Male     HU 1240984     1089933
-7  INF0179         9       PPD 2025-07-26       Male     HU 1705960     1492142
-8  INF0186         4       PPD 2025-07-26     Female HEU-hi  848584      759606
-9  INF0186         9       PPD 2025-07-26     Female HEU-hi 1425416     1259825
-10 INF0134         0       PPD 2025-07-29     Female HEU-lo 1245024     1126248
-   singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
-1      1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
-2      1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
-3       796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
-4       626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
-5      1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
-6       868877       814909 0.9855947    0.9541417 0.9400824   0.7303074
-7      1163543      1107878 0.9820919    0.9816909 0.9681656   0.7933252
-8       648405       607514 0.9824778    0.9539480 0.9250170   0.6720872
-9      1089955      1014266 0.9771490    0.9552573 0.9137615   0.6332438
-10      993895       896183 0.7915660    0.8042298 0.7899781   0.5924868
-        live      Dump+     Dump-    Tcells        Vd2+      Vd2-     Va7.2+
-1  0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057
-2  0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801
-3  0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790
-4  0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298
-5  0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237
-6  0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.01266884
-7  0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.01330324
-8  0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.04352519
-9  0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.03738187
-10 0.9003481 0.15485733 0.7454908 0.3314561 0.009453601 0.9905464 0.02587717
-      Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
-1  0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
-2  0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
-3  0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
-4  0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
-5  0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
-6  0.9830107 0.6318771 0.3511336 0.3177460 0.03338760       331680
-7  0.9839630 0.7016361 0.2823269 0.2559335 0.02639338       577228
-8  0.9469912 0.5309109 0.4160803 0.3912185 0.02486181       190855
-9  0.9443941 0.5033806 0.4410135 0.4213381 0.01967539       365177
-10 0.9646692 0.6964224 0.2682468 0.2260394 0.04220742       139312
-   lymphocytes_count  Monocytes     Debris CD45_count
-1             652155 0.13801632 0.15703150    1017713
-2             314717 0.07480391 0.12281107    1447451
-3             544883 0.01512811 0.04439511     745037
-4             366784 0.01578611 0.18769586     589379
-5             663169 0.04243146 0.08655621     947858
-6             586561 0.04585829 0.05991758     803170
-7             863168 0.01830910 0.03183437    1088038
-8             401148 0.04605198 0.07498295     596869
-9             627601 0.04474270 0.08623847     991089
-10            420303 0.19577016 0.21002188     709388
+
      bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1 INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
+2 INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
+3 INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
+4 INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
+5 INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
+  singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1     1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
+2     1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
+3      796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
+4      626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
+5     1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
+       live      Dump+     Dump-    Tcells        Vd2+      Vd2-     Va7.2+
+1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057
+2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801
+3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790
+4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298
+5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237
+     Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
+2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
+3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
+4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
+5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
+  lymphocytes_count  Monocytes     Debris CD45_count
+1            652155 0.13801632 0.15703150    1017713
+2            314717 0.07480391 0.12281107    1447451
+3            544883 0.01512811 0.04439511     745037
+4            366784 0.01578611 0.18769586     589379
+5            663169 0.04243146 0.08655621     947858

Similar 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()/

-
Data |> filter(Condition %in% c("PPD", "SEB")) |> head(10)
+
Data |> filter(Condition %in% c("PPD", "SEB")) |> head(5)
-
       bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
-1  INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
-2  INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
-3  INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
-4  INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
-5  INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
-6  INF0179         4       PPD 2025-07-26       Male     HU 1240984     1089933
-7  INF0179         9       PPD 2025-07-26       Male     HU 1705960     1492142
-8  INF0186         4       PPD 2025-07-26     Female HEU-hi  848584      759606
-9  INF0186         9       PPD 2025-07-26     Female HEU-hi 1425416     1259825
-10 INF0052         0       SEB 2025-07-26       Male HEU-hi 2523776     2282292
-   singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
-1      1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
-2      1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
-3       796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
-4       626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
-5      1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
-6       868877       814909 0.9855947    0.9541417 0.9400824   0.7303074
-7      1163543      1107878 0.9820919    0.9816909 0.9681656   0.7933252
-8       648405       607514 0.9824778    0.9539480 0.9250170   0.6720872
-9      1089955      1014266 0.9771490    0.9552573 0.9137615   0.6332438
-10     2041563      1889418 0.5783591    0.8878072 0.8670150   0.6718563
-        live      Dump+     Dump-    Tcells        Vd2+      Vd2-      Va7.2+
-1  0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.015070567
-2  0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.016718006
-3  0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.016097899
-4  0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.018552985
-5  0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.012972375
-6  0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.012668837
-7  0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.013303235
-8  0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.043525189
-9  0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.037381872
-10 0.9115652 0.23344716 0.6781180 0.2741661 0.009225633 0.9907744 0.008420812
-      Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
-1  0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
-2  0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
-3  0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
-4  0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
-5  0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
-6  0.9830107 0.6318771 0.3511336 0.3177460 0.03338760       331680
-7  0.9839630 0.7016361 0.2823269 0.2559335 0.02639338       577228
-8  0.9469912 0.5309109 0.4160803 0.3912185 0.02486181       190855
-9  0.9443941 0.5033806 0.4410135 0.4213381 0.01967539       365177
-10 0.9823536 0.6083254 0.3740281 0.2811756 0.09285249       201287
-   lymphocytes_count  Monocytes     Debris CD45_count
-1             652155 0.13801632 0.15703150    1017713
-2             314717 0.07480391 0.12281107    1447451
-3             544883 0.01512811 0.04439511     745037
-4             366784 0.01578611 0.18769586     589379
-5             663169 0.04243146 0.08655621     947858
-6             586561 0.04585829 0.05991758     803170
-7             863168 0.01830910 0.03183437    1088038
-8             401148 0.04605198 0.07498295     596869
-9             627601 0.04474270 0.08623847     991089
-10            734179 0.11219277 0.13298504    1092762
+
      bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1 INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
+2 INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
+3 INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
+4 INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
+5 INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
+  singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1     1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
+2     1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
+3      796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
+4      626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
+5     1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
+       live      Dump+     Dump-    Tcells        Vd2+      Vd2-     Va7.2+
+1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057
+2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801
+3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790
+4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298
+5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237
+     Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
+2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
+3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
+4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
+5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
+  lymphocytes_count  Monocytes     Debris CD45_count
+1            652155 0.13801632 0.15703150    1017713
+2            314717 0.07480391 0.12281107    1447451
+3            544883 0.01512811 0.04439511     745037
+4            366784 0.01578611 0.18769586     589379
+5            663169 0.04243146 0.08655621     947858

Alternatively, we could have set up the vector externally, and then provided it to filter()

-
TheseConditions <- c("PPD", "SEB")
-Data |> filter(Condition %in% TheseConditions) |> head(10)
+
TheseConditions <- c("PPD", "SEB")
+Data |> filter(Condition %in% TheseConditions) |> head(5)
-
       bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
-1  INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
-2  INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
-3  INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
-4  INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
-5  INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
-6  INF0179         4       PPD 2025-07-26       Male     HU 1240984     1089933
-7  INF0179         9       PPD 2025-07-26       Male     HU 1705960     1492142
-8  INF0186         4       PPD 2025-07-26     Female HEU-hi  848584      759606
-9  INF0186         9       PPD 2025-07-26     Female HEU-hi 1425416     1259825
-10 INF0052         0       SEB 2025-07-26       Male HEU-hi 2523776     2282292
-   singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
-1      1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
-2      1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
-3       796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
-4       626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
-5      1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
-6       868877       814909 0.9855947    0.9541417 0.9400824   0.7303074
-7      1163543      1107878 0.9820919    0.9816909 0.9681656   0.7933252
-8       648405       607514 0.9824778    0.9539480 0.9250170   0.6720872
-9      1089955      1014266 0.9771490    0.9552573 0.9137615   0.6332438
-10     2041563      1889418 0.5783591    0.8878072 0.8670150   0.6718563
-        live      Dump+     Dump-    Tcells        Vd2+      Vd2-      Va7.2+
-1  0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.015070567
-2  0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.016718006
-3  0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.016097899
-4  0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.018552985
-5  0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.012972375
-6  0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.012668837
-7  0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.013303235
-8  0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.043525189
-9  0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.037381872
-10 0.9115652 0.23344716 0.6781180 0.2741661 0.009225633 0.9907744 0.008420812
-      Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
-1  0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
-2  0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
-3  0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
-4  0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
-5  0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
-6  0.9830107 0.6318771 0.3511336 0.3177460 0.03338760       331680
-7  0.9839630 0.7016361 0.2823269 0.2559335 0.02639338       577228
-8  0.9469912 0.5309109 0.4160803 0.3912185 0.02486181       190855
-9  0.9443941 0.5033806 0.4410135 0.4213381 0.01967539       365177
-10 0.9823536 0.6083254 0.3740281 0.2811756 0.09285249       201287
-   lymphocytes_count  Monocytes     Debris CD45_count
-1             652155 0.13801632 0.15703150    1017713
-2             314717 0.07480391 0.12281107    1447451
-3             544883 0.01512811 0.04439511     745037
-4             366784 0.01578611 0.18769586     589379
-5             663169 0.04243146 0.08655621     947858
-6             586561 0.04585829 0.05991758     803170
-7             863168 0.01830910 0.03183437    1088038
-8             401148 0.04605198 0.07498295     596869
-9             627601 0.04474270 0.08623847     991089
-10            734179 0.11219277 0.13298504    1092762
+
      bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1 INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
+2 INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
+3 INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
+4 INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
+5 INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
+  singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1     1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
+2     1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
+3      796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
+4      626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
+5     1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
+       live      Dump+     Dump-    Tcells        Vd2+      Vd2-     Va7.2+
+1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057
+2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801
+3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790
+4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298
+5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237
+     Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
+2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
+3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
+4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
+5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
+  lymphocytes_count  Monocytes     Debris CD45_count
+1            652155 0.13801632 0.15703150    1017713
+2            314717 0.07480391 0.12281107    1447451
+3            544883 0.01512811 0.04439511     745037
+4            366784 0.01578611 0.18769586     589379
+5            663169 0.04243146 0.08655621     947858

While 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

-
IsThisASpectralInstrument <- TRUE
-
-!IsThisASpectralInstrument
+
IsThisASpectralInstrument <- TRUE
+
+!IsThisASpectralInstrument
[1] FALSE

In the context of the dplyr package, we can use ! within the filter() to remove rows that contain a certain value

-
Subset <- Data |> filter(!Condition %in% "SEB")
-Subset |> pull(Condition) |> unique()
+
Subset <- Data |> filter(!Condition %in% "SEB")
+Subset |> pull(Condition) |> unique()
[1] "Ctrl" "PPD" 

Likewise, we can also use it with the select() to exclude columns we don’t want to include

-
Subset <- Data |> select(!timepoint)
-Subset[1:3,]
+
Subset <- Data |> select(!timepoint)
+Subset[1:3,]
      bid Condition       Date infant_sex  ptype    root singletsFSC
 1 INF0052      Ctrl 2025-07-26       Male HEU-hi 2098368     1894070
@@ -1935,12 +1224,12 @@ 

mutate

As 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.

Let’s start by slimming down our current Data to a smaller workable example, highlighting the functions and pipes we learned about today

-
TidyData <- Data |> filter(Condition %in% "Ctrl") |> filter(timepoint %in% "0") |>
-     select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |>
-      rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen)
+
TidyData <- Data |> filter(Condition %in% "Ctrl") |> filter(timepoint %in% "0") |>
+     select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |>
+      rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen)
-
TidyData
+
TidyData
   specimen       Date timepoint condition Tcells_count CD45_count
 1   INF0052 2025-07-26         0      Ctrl       164771     915203
@@ -1970,8 +1259,8 @@ 

mutate

The 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:

-
TidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count)
-TidyData
+
TidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count)
+TidyData
   specimen       Date timepoint condition Tcells_count CD45_count
 1   INF0052 2025-07-26         0      Ctrl       164771     915203
@@ -2025,8 +1314,8 @@ 

mutate

We 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

-
TidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2))
-TidyData 
+
TidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2))
+TidyData 
   specimen       Date timepoint condition Tcells_count CD45_count
 1   INF0052 2025-07-26         0      Ctrl       164771     915203
@@ -2083,11 +1372,11 @@ 

mutate

arrange

And 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:

-
TidyData <- TidyData |> arrange(desc(TcellsRounded))
+
TidyData <- TidyData |> arrange(desc(TcellsRounded))

And 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):

-
TidyData |> filter(TcellsRounded > 0.3)
+
TidyData |> filter(TcellsRounded > 0.3)
  specimen       Date timepoint condition Tcells_count CD45_count
 1  INF0032 2025-08-05         0      Ctrl       361034     753064
@@ -2103,22 +1392,22 @@ 

arrange

Which is we had wanted to just retrieve the specimen IDs, we could add pull() after a new pipe argument.

-
TidyData |> filter(TcellsRounded > 0.3) |> pull(specimen)
+
TidyData |> filter(TcellsRounded > 0.3) |> pull(specimen)
[1] "INF0032" "INF0159" "INF0179" "INF0166"

And 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 .fcs file. Working within our project folder, this would look like this:

-
NewName <- paste0("MyNewDataset", ".csv")
-StorageLocation <- file.path("data", NewName)
-StorageLocation
+
NewName <- paste0("MyNewDataset", ".csv")
+StorageLocation <- file.path("data", NewName)
+StorageLocation
[1] "data/MyNewDataset.csv"
-
write.csv(TidyData, StorageLocation, row.names=FALSE)
+
write.csv(TidyData, StorageLocation, row.names=FALSE)
diff --git a/docs/course/04_IntroToTidyverse/slides.html b/docs/course/04_IntroToTidyverse/slides.html new file mode 100644 index 0000000..210abe2 --- /dev/null +++ b/docs/course/04_IntroToTidyverse/slides.html @@ -0,0 +1,3902 @@ + + + + + + + + + + + + + + Cytometry in R – 04 - Introduction to Tidyverse + + + + + + + + + + + + + + + + + +
+
+ +
+

04 - Introduction to Tidyverse

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

2026-02-24

+
+
+ +

+
+

AGPL-3.0 CC BY-SA 4.0

+
+
+
+ +
+
+
+

Background

+
+
+
+
+
+
+ +
+

.

+
+
+

Within our daily workflows as cytometrist, after acquiring data on our respective instruments, we begin analyzing the resulting datasets. After implementing various workflows, we then export data for downstream statistical analysis.

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

.

+
+
+

When I first started my Ph.D program, a substantial amount of my day was spent renaming column names of the exported data so that they would fit nicely in a Microsoft Excel sheet column; setting up formulas to combine proportion of positive cells across positive quadrants, etc. Once this was done, additional hours would go by as I copied and pasted contents of those columns over to a GraphPad Prism worksheet for statistical analysis.

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

.

+
+
+

This of course was in an ideal scenario. Often times, the data was less organized, and instead of time spent copying and pasting over columns, it would first be spent rearranging values from individual cells in the worksheet that were separated by spaces, all the while trying to remember what various color codes and bold font stood for.

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

.

+
+
+

Today, we will explore what makes data “tidy”, and how to use the toolsets implemented in the various tidyverse R packages. At it’s simplest, if we think of and organize all our data in terms of rows and columns, we need fewer tools (ie. functions) to reshape and extract useful information that we are interested in. Additionally, this approach aligns more closely with how computers work, allowing us to carry out tasks that would otherwise have taken hours in mere seconds.

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

.

+
+
+

The dataset we will be using today is a manually-gated spectral flow cytometry dataset (similar to ones we would see exported by commercial software), and has been intentionally left slightly messy. You could however just as easily use a “matrix” or “data.frame” object exported from inside an fcs file, or swap in your own dataset. You would just need to make sure to switch out the input data by providing an alternate file path, etc.

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

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 creating a “Week04” project folder, copy over the contents of “course/04_IntroToTidyverse” to that folder. This will hopefully prevent any merge issues when you attempt to bring in new data to your local Cytometry in R folder next week. Please remember once you have set up your project folder to stage, commit and pus your changes to “Week04” to GitHub so that they are backed up remotely.

+

If you are having issues syncing due to the Take-Home Problem merge conflict, see this walkthrough

+
+
+
+
+
+
+

read.csv

+
+
+
+
+
+
+ +
+

.

+
+
+

We 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:

+
+
+
+
+
+
+ +
+
+
+
thefilepath <- file.path("data", "Dataset.csv")
+
+thefilepath
+
+
[1] "data/Dataset.csv"
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

Reminder

+
+
+

We 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.

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

.

+
+
+

Above, 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.

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

.

+
+
+

Since 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.

+
+
+
+
+
+
+
+
Data <- read.csv(file=thefilepath, check.names=FALSE)
+colnames(Data)
+
+
 [1] "bid"               "timepoint"         "Condition"        
+ [4] "Date"              "infant_sex"        "ptype"            
+ [7] "root"              "singletsFSC"       "singletsSSC"      
+[10] "singletsSSCB"      "CD45"              "NotMonocytes"     
+[13] "nonDebris"         "lymphocytes"       "live"             
+[16] "Dump+"             "Dump-"             "Tcells"           
+[19] "Vd2+"              "Vd2-"              "Va7.2+"           
+[22] "Va7.2-"            "CD4+"              "CD4-"             
+[25] "CD8+"              "CD8-"              "Tcells_count"     
+[28] "lymphocytes_count" "Monocytes"         "Debris"           
+[31] "CD45_count"       
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

As 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?

+

Let’s see what happens to the column names when we set “check.names” argument to TRUE:

+
+
+
+
+
+
+
+
Data_Alternative <- read.csv(thefilepath, check.names=TRUE)
+colnames(Data_Alternative)
+
+
 [1] "bid"               "timepoint"         "Condition"        
+ [4] "Date"              "infant_sex"        "ptype"            
+ [7] "root"              "singletsFSC"       "singletsSSC"      
+[10] "singletsSSCB"      "CD45"              "NotMonocytes"     
+[13] "nonDebris"         "lymphocytes"       "live"             
+[16] "Dump."             "Dump..1"           "Tcells"           
+[19] "Vd2."              "Vd2..1"            "Va7.2."           
+[22] "Va7.2..1"          "CD4."              "CD4..1"           
+[25] "CD8."              "CD8..1"            "Tcells_count"     
+[28] "lymphocytes_count" "Monocytes"         "Debris"           
+[31] "CD45_count"       
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

As 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.

+
+
+
+
+
+
+

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

.

+
+
+

Because of this, it is often better to rename columns individually after import, which we will learn how to do later today.

+

Following up with what we practiced last week, lets use the head() function to visualize the first few rows of data.

+
+
+
+
+
+
+
+
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
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

When 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.

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

.

+
+
+

We could also achieve the same window to open using the View() function:

+
+
+
+
+
+
+
+
View(Data)
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Wrapping up our brief recap of last week functions, we can check an objects type using both the class() and str() functions.

+
+
+
+
+
+
+
+
class(Data)
+
+
[1] "data.frame"
+
+
+
+
+
+
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 ...
+
+
+
+
+
+

data.frame

+
+
+
+
+
+
+ +
+

.

+
+
+

Or alternatively using the new-to-us glimpse() function

+
+
+
+
+
+
+
+
glimpse(Data)
+
+
Error in `glimpse()`:
+! could not find function "glimpse"
+
+
+
+
+
+ +
+
+
+
+
+ +
+

Checkpoint 1

+
+
+

This however returns an error. Any idea why this might be occuring?

+
+
+
+
+
+
+
+Code +
# We haven't attached/loaded the package in which the function glimpse is within
+
+
+
+
+
+ +
+
+
+
+
+ +
+

Checkpoint 2

+
+
+

How would we locate a package a not-yet-loaded function is within?

+
+
+
+
+
+
+
+Code +
# We can use double ? to search all installed packages for a function, regardless
+# if the package is attached to the environment or not
+
+??glimpse
+
+
+
+
+
+ + +
+
+
+
+
+
+ +
+

.

+
+
+

From 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.

+
+
+
+
+
+
+
+
library(dplyr)
+glimpse(Data)
+
+
Rows: 196
+Columns: 31
+$ bid               <chr> "INF0052", "INF0100", "INF0100", "INF0100", "INF0179…
+$ timepoint         <int> 0, 0, 4, 9, 0, 4, 9, 4, 9, 0, 0, 4, 9, 0, 4, 9, 4, 9…
+$ Condition         <chr> "Ctrl", "Ctrl", "Ctrl", "Ctrl", "Ctrl", "Ctrl", "Ctr…
+$ Date              <chr> "2025-07-26", "2025-07-26", "2025-07-26", "2025-07-2…
+$ infant_sex        <chr> "Male", "Male", "Male", "Male", "Male", "Male", "Mal…
+$ ptype             <chr> "HEU-hi", "HEU-lo", "HEU-lo", "HEU-lo", "HU", "HU", …
+$ root              <int> 2098368, 2020184, 1155040, 358624, 1362216, 1044808,…
+$ singletsFSC       <int> 1894070, 1791890, 1033320, 328624, 1206309, 917398, …
+$ singletsSSC       <int> 1666179, 1697083, 875465, 289327, 1032946, 735579, 9…
+$ singletsSSCB      <int> 1537396, 1579098, 845446, 276289, 982736, 685592, 94…
+$ CD45              <dbl> 0.5952943, 0.9106762, 0.9705765, 0.9819573, 0.957259…
+$ NotMonocytes      <dbl> 0.8820349, 0.9052256, 0.9845400, 0.9855070, 0.955627…
+$ nonDebris         <dbl> 0.8627649, 0.8602660, 0.9578793, 0.9412615, 0.840783…
+$ lymphocytes       <dbl> 0.6420138, 0.2145848, 0.7403110, 0.6511588, 0.705478…
+$ live              <dbl> 0.9020581, 0.8908981, 0.8757665, 0.9153242, 0.895214…
+$ `Dump+`           <dbl> 0.21090996, 0.06252775, 0.20023803, 0.21469246, 0.33…
+$ `Dump-`           <dbl> 0.6911482, 0.8283703, 0.6755285, 0.7006317, 0.556895…
+$ Tcells            <dbl> 0.2804264, 0.6748298, 0.6119129, 0.6314431, 0.439643…
+$ `Vd2+`            <dbl> 0.008120361, 0.007265620, 0.004651313, 0.011348967, …
+$ `Vd2-`            <dbl> 0.9918796, 0.9927344, 0.9953487, 0.9886510, 0.995246…
+$ `Va7.2+`          <dbl> 0.014480704, 0.015774991, 0.015794019, 0.017023451, …
+$ `Va7.2-`          <dbl> 0.9773989, 0.9769594, 0.9795547, 0.9716276, 0.981924…
+$ `CD4+`            <dbl> 0.6341164, 0.6119112, 0.6639621, 0.4378944, 0.739256…
+$ `CD4-`            <dbl> 0.3432825, 0.3650482, 0.3155925, 0.5337331, 0.242668…
+$ `CD8+`            <dbl> 0.2734826, 0.3357696, 0.2862104, 0.4861231, 0.195063…
+$ `CD8-`            <dbl> 0.06979990, 0.02927858, 0.02938209, 0.04761008, 0.04…
+$ Tcells_count      <int> 164771, 208241, 371723, 111552, 291777, 271870, 4879…
+$ lymphocytes_count <int> 587573, 308583, 607477, 176662, 663667, 510730, 7262…
+$ Monocytes         <dbl> 0.11796509, 0.09477437, 0.01545999, 0.01449297, 0.04…
+$ Debris            <dbl> 0.13723513, 0.13973396, 0.04212072, 0.05873854, 0.15…
+$ CD45_count        <int> 915203, 1438047, 820570, 271304, 940733, 675857, 921…
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

We 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]))

+
+
+
+
+
+
+
+
dim(Data)
+
+
[1] 196  31
+
+
+
+
+
+

Column value type

+
+
+
+
+
+
+ +
+

.

+
+
+

As 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.

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

.

+
+
+

If 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

+
+
+
+
+
+
+
+
# colnames(Data)  # To recheck the column names
+
+is.character(Data$bid)
+
+
[1] TRUE
+
+
+
+
+
+
is.numeric(Data$bid)
+
+
[1] FALSE
+
+
+
+
+
+
# colnames(Data)  # To recheck the column names
+
+is.character(Data$Tcells_count)
+
+
[1] FALSE
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

For numeric columns using the is.numeric() function, we can also be subtype specific using either is.integer() or is.double().

+
+
+
+
+
+
+
+
# colnames(Data)  # To recheck the column names
+
+is.numeric(Data$Tcells_count)
+
+
[1] TRUE
+
+
is.integer(Data$Tcells_count)
+
+
[1] TRUE
+
+
is.double(Data$Tcells_count)
+
+
[1] FALSE
+
+
+
+
+
+ +
+
+
+
+
+ +
+

Reminder

+
+
+

As 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.

+
+
+
+
+
+
+
# colnames(Data)  # To recheck the column names
+is.numeric(Data$CD8-)
+
+
Error in parse(text = input): <text>:2:21: unexpected ')'
+1: # colnames(Data)  # To recheck the column names
+2: is.numeric(Data$CD8-)
+                       ^
+
+
+
+
+
+
# colnames(Data)  # To recheck the column names
+is.numeric(Data$`CD8-`)
+
+
[1] TRUE
+
+
+
+
+
+

select (Columns)

+
+
+
+
+
+
+ +
+

.

+
+
+

Now 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.

+
+
+
+
+
+
+
+
library(dplyr)
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

We 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)

+
+
+
+
+
+
+
+
DateColumn <- select(Data, "Date")
+DateColumn
+
+
          Date
+1   2025-07-26
+2   2025-07-26
+3   2025-07-26
+4   2025-07-26
+5   2025-07-26
+6   2025-07-26
+7   2025-07-26
+8   2025-07-26
+9   2025-07-26
+10  2025-07-26
+11  2025-07-26
+12  2025-07-26
+13  2025-07-26
+14  2025-07-26
+15  2025-07-26
+16  2025-07-26
+17  2025-07-26
+18  2025-07-26
+19  2025-07-26
+20  2025-07-26
+21  2025-07-26
+22  2025-07-26
+23  2025-07-26
+24  2025-07-26
+25  2025-07-26
+26  2025-07-26
+27  2025-07-29
+28  2025-07-29
+29  2025-07-29
+30  2025-07-29
+31  2025-07-29
+32  2025-07-29
+33  2025-07-29
+34  2025-07-29
+35  2025-07-29
+36  2025-07-29
+37  2025-07-29
+38  2025-07-29
+39  2025-07-29
+40  2025-07-29
+41  2025-07-29
+42  2025-07-29
+43  2025-07-29
+44  2025-07-29
+45  2025-07-29
+46  2025-07-29
+47  2025-07-29
+48  2025-07-29
+49  2025-07-31
+50  2025-07-31
+51  2025-07-31
+52  2025-07-31
+53  2025-07-31
+54  2025-07-31
+55  2025-07-31
+56  2025-07-31
+57  2025-07-31
+58  2025-07-31
+59  2025-07-31
+60  2025-07-31
+61  2025-07-31
+62  2025-07-31
+63  2025-07-31
+64  2025-07-31
+65  2025-07-31
+66  2025-07-31
+67  2025-07-31
+68  2025-07-31
+69  2025-07-31
+70  2025-07-31
+71  2025-07-31
+72  2025-07-31
+73  2025-07-31
+74  2025-07-31
+75  2025-07-31
+76  2025-08-05
+77  2025-08-05
+78  2025-08-05
+79  2025-08-05
+80  2025-08-05
+81  2025-08-05
+82  2025-08-05
+83  2025-08-05
+84  2025-08-05
+85  2025-08-05
+86  2025-08-05
+87  2025-08-05
+88  2025-08-05
+89  2025-08-05
+90  2025-08-05
+91  2025-08-05
+92  2025-08-05
+93  2025-08-05
+94  2025-08-05
+95  2025-08-05
+96  2025-08-05
+97  2025-08-05
+98  2025-08-05
+99  2025-08-07
+100 2025-08-07
+101 2025-08-07
+102 2025-08-07
+103 2025-08-07
+104 2025-08-07
+105 2025-08-07
+106 2025-08-07
+107 2025-08-07
+108 2025-08-07
+109 2025-08-07
+110 2025-08-07
+111 2025-08-07
+112 2025-08-07
+113 2025-08-07
+114 2025-08-07
+115 2025-08-07
+116 2025-08-07
+117 2025-08-07
+118 2025-08-07
+119 2025-08-07
+120 2025-08-07
+121 2025-08-07
+122 2025-08-07
+123 2025-08-07
+124 2025-08-07
+125 2025-08-22
+126 2025-08-22
+127 2025-08-22
+128 2025-08-22
+129 2025-08-22
+130 2025-08-22
+131 2025-08-22
+132 2025-08-22
+133 2025-08-22
+134 2025-08-22
+135 2025-08-22
+136 2025-08-22
+137 2025-08-22
+138 2025-08-22
+139 2025-08-22
+140 2025-08-22
+141 2025-08-22
+142 2025-08-22
+143 2025-08-22
+144 2025-08-22
+145 2025-08-22
+146 2025-08-22
+147 2025-08-22
+148 2025-08-22
+149 2025-08-22
+150 2025-08-22
+151 2025-08-22
+152 2025-08-28
+153 2025-08-28
+154 2025-08-28
+155 2025-08-28
+156 2025-08-28
+157 2025-08-28
+158 2025-08-28
+159 2025-08-28
+160 2025-08-28
+161 2025-08-28
+162 2025-08-28
+163 2025-08-28
+164 2025-08-28
+165 2025-08-28
+166 2025-08-28
+167 2025-08-28
+168 2025-08-28
+169 2025-08-28
+170 2025-08-28
+171 2025-08-28
+172 2025-08-28
+173 2025-08-28
+174 2025-08-28
+175 2025-08-28
+176 2025-08-28
+177 2025-08-28
+178 2025-08-28
+179 2025-08-30
+180 2025-08-30
+181 2025-08-30
+182 2025-08-30
+183 2025-08-30
+184 2025-08-30
+185 2025-08-30
+186 2025-08-30
+187 2025-08-30
+188 2025-08-30
+189 2025-08-30
+190 2025-08-30
+191 2025-08-30
+192 2025-08-30
+193 2025-08-30
+194 2025-08-30
+195 2025-08-30
+196 2025-08-30
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

This results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object.

+
+
+
+
+
+
+
+ +

Pipe Operators

+
+
+
+
+
+
+ +
+

.

+
+
+

While 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:

+
+
+
+
+
+
+
+
DateColumn <- Data |> select("Date")
+DateColumn
+
+
          Date
+1   2025-07-26
+2   2025-07-26
+3   2025-07-26
+4   2025-07-26
+5   2025-07-26
+6   2025-07-26
+7   2025-07-26
+8   2025-07-26
+9   2025-07-26
+10  2025-07-26
+11  2025-07-26
+12  2025-07-26
+13  2025-07-26
+14  2025-07-26
+15  2025-07-26
+16  2025-07-26
+17  2025-07-26
+18  2025-07-26
+19  2025-07-26
+20  2025-07-26
+21  2025-07-26
+22  2025-07-26
+23  2025-07-26
+24  2025-07-26
+25  2025-07-26
+26  2025-07-26
+27  2025-07-29
+28  2025-07-29
+29  2025-07-29
+30  2025-07-29
+31  2025-07-29
+32  2025-07-29
+33  2025-07-29
+34  2025-07-29
+35  2025-07-29
+36  2025-07-29
+37  2025-07-29
+38  2025-07-29
+39  2025-07-29
+40  2025-07-29
+41  2025-07-29
+42  2025-07-29
+43  2025-07-29
+44  2025-07-29
+45  2025-07-29
+46  2025-07-29
+47  2025-07-29
+48  2025-07-29
+49  2025-07-31
+50  2025-07-31
+51  2025-07-31
+52  2025-07-31
+53  2025-07-31
+54  2025-07-31
+55  2025-07-31
+56  2025-07-31
+57  2025-07-31
+58  2025-07-31
+59  2025-07-31
+60  2025-07-31
+61  2025-07-31
+62  2025-07-31
+63  2025-07-31
+64  2025-07-31
+65  2025-07-31
+66  2025-07-31
+67  2025-07-31
+68  2025-07-31
+69  2025-07-31
+70  2025-07-31
+71  2025-07-31
+72  2025-07-31
+73  2025-07-31
+74  2025-07-31
+75  2025-07-31
+76  2025-08-05
+77  2025-08-05
+78  2025-08-05
+79  2025-08-05
+80  2025-08-05
+81  2025-08-05
+82  2025-08-05
+83  2025-08-05
+84  2025-08-05
+85  2025-08-05
+86  2025-08-05
+87  2025-08-05
+88  2025-08-05
+89  2025-08-05
+90  2025-08-05
+91  2025-08-05
+92  2025-08-05
+93  2025-08-05
+94  2025-08-05
+95  2025-08-05
+96  2025-08-05
+97  2025-08-05
+98  2025-08-05
+99  2025-08-07
+100 2025-08-07
+101 2025-08-07
+102 2025-08-07
+103 2025-08-07
+104 2025-08-07
+105 2025-08-07
+106 2025-08-07
+107 2025-08-07
+108 2025-08-07
+109 2025-08-07
+110 2025-08-07
+111 2025-08-07
+112 2025-08-07
+113 2025-08-07
+114 2025-08-07
+115 2025-08-07
+116 2025-08-07
+117 2025-08-07
+118 2025-08-07
+119 2025-08-07
+120 2025-08-07
+121 2025-08-07
+122 2025-08-07
+123 2025-08-07
+124 2025-08-07
+125 2025-08-22
+126 2025-08-22
+127 2025-08-22
+128 2025-08-22
+129 2025-08-22
+130 2025-08-22
+131 2025-08-22
+132 2025-08-22
+133 2025-08-22
+134 2025-08-22
+135 2025-08-22
+136 2025-08-22
+137 2025-08-22
+138 2025-08-22
+139 2025-08-22
+140 2025-08-22
+141 2025-08-22
+142 2025-08-22
+143 2025-08-22
+144 2025-08-22
+145 2025-08-22
+146 2025-08-22
+147 2025-08-22
+148 2025-08-22
+149 2025-08-22
+150 2025-08-22
+151 2025-08-22
+152 2025-08-28
+153 2025-08-28
+154 2025-08-28
+155 2025-08-28
+156 2025-08-28
+157 2025-08-28
+158 2025-08-28
+159 2025-08-28
+160 2025-08-28
+161 2025-08-28
+162 2025-08-28
+163 2025-08-28
+164 2025-08-28
+165 2025-08-28
+166 2025-08-28
+167 2025-08-28
+168 2025-08-28
+169 2025-08-28
+170 2025-08-28
+171 2025-08-28
+172 2025-08-28
+173 2025-08-28
+174 2025-08-28
+175 2025-08-28
+176 2025-08-28
+177 2025-08-28
+178 2025-08-28
+179 2025-08-30
+180 2025-08-30
+181 2025-08-30
+182 2025-08-30
+183 2025-08-30
+184 2025-08-30
+185 2025-08-30
+186 2025-08-30
+187 2025-08-30
+188 2025-08-30
+189 2025-08-30
+190 2025-08-30
+191 2025-08-30
+192 2025-08-30
+193 2025-08-30
+194 2025-08-30
+195 2025-08-30
+196 2025-08-30
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

“What in the world is that thing |> ?”

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

.

+
+
+

Glad 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:

+
+
+
+
+
+
+
+
# magrittr %>% pipe
+
+DateColumn <- Data %>% select("Date")
+
+# base R |> pipe
+DateColumn <- Data |> select("Date")
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

“How do we interpret/read that line of code?”

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

.

+
+
+

Let’s break it down, starting off just to the right of the assignment arrow (<-) with our data.frame “Data”.

+
+
+
+
+
+
+
+
Data
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

We 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.

+
+
+
+
+
+
+
+
Data |> 
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

In 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.

+
+
+
+
+
+
+
+
Data |> select()
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

To complete the transfer, we provide the desired column name to select() to act on (“Date” in this case)

+
+
+
+
+
+
+
+
Data |> select("Date")
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

In summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column

+
+
+
+
+
+
+
+
Data |> select("Date")
+
+
          Date
+1   2025-07-26
+2   2025-07-26
+3   2025-07-26
+4   2025-07-26
+5   2025-07-26
+6   2025-07-26
+7   2025-07-26
+8   2025-07-26
+9   2025-07-26
+10  2025-07-26
+11  2025-07-26
+12  2025-07-26
+13  2025-07-26
+14  2025-07-26
+15  2025-07-26
+16  2025-07-26
+17  2025-07-26
+18  2025-07-26
+19  2025-07-26
+20  2025-07-26
+21  2025-07-26
+22  2025-07-26
+23  2025-07-26
+24  2025-07-26
+25  2025-07-26
+26  2025-07-26
+27  2025-07-29
+28  2025-07-29
+29  2025-07-29
+30  2025-07-29
+31  2025-07-29
+32  2025-07-29
+33  2025-07-29
+34  2025-07-29
+35  2025-07-29
+36  2025-07-29
+37  2025-07-29
+38  2025-07-29
+39  2025-07-29
+40  2025-07-29
+41  2025-07-29
+42  2025-07-29
+43  2025-07-29
+44  2025-07-29
+45  2025-07-29
+46  2025-07-29
+47  2025-07-29
+48  2025-07-29
+49  2025-07-31
+50  2025-07-31
+51  2025-07-31
+52  2025-07-31
+53  2025-07-31
+54  2025-07-31
+55  2025-07-31
+56  2025-07-31
+57  2025-07-31
+58  2025-07-31
+59  2025-07-31
+60  2025-07-31
+61  2025-07-31
+62  2025-07-31
+63  2025-07-31
+64  2025-07-31
+65  2025-07-31
+66  2025-07-31
+67  2025-07-31
+68  2025-07-31
+69  2025-07-31
+70  2025-07-31
+71  2025-07-31
+72  2025-07-31
+73  2025-07-31
+74  2025-07-31
+75  2025-07-31
+76  2025-08-05
+77  2025-08-05
+78  2025-08-05
+79  2025-08-05
+80  2025-08-05
+81  2025-08-05
+82  2025-08-05
+83  2025-08-05
+84  2025-08-05
+85  2025-08-05
+86  2025-08-05
+87  2025-08-05
+88  2025-08-05
+89  2025-08-05
+90  2025-08-05
+91  2025-08-05
+92  2025-08-05
+93  2025-08-05
+94  2025-08-05
+95  2025-08-05
+96  2025-08-05
+97  2025-08-05
+98  2025-08-05
+99  2025-08-07
+100 2025-08-07
+101 2025-08-07
+102 2025-08-07
+103 2025-08-07
+104 2025-08-07
+105 2025-08-07
+106 2025-08-07
+107 2025-08-07
+108 2025-08-07
+109 2025-08-07
+110 2025-08-07
+111 2025-08-07
+112 2025-08-07
+113 2025-08-07
+114 2025-08-07
+115 2025-08-07
+116 2025-08-07
+117 2025-08-07
+118 2025-08-07
+119 2025-08-07
+120 2025-08-07
+121 2025-08-07
+122 2025-08-07
+123 2025-08-07
+124 2025-08-07
+125 2025-08-22
+126 2025-08-22
+127 2025-08-22
+128 2025-08-22
+129 2025-08-22
+130 2025-08-22
+131 2025-08-22
+132 2025-08-22
+133 2025-08-22
+134 2025-08-22
+135 2025-08-22
+136 2025-08-22
+137 2025-08-22
+138 2025-08-22
+139 2025-08-22
+140 2025-08-22
+141 2025-08-22
+142 2025-08-22
+143 2025-08-22
+144 2025-08-22
+145 2025-08-22
+146 2025-08-22
+147 2025-08-22
+148 2025-08-22
+149 2025-08-22
+150 2025-08-22
+151 2025-08-22
+152 2025-08-28
+153 2025-08-28
+154 2025-08-28
+155 2025-08-28
+156 2025-08-28
+157 2025-08-28
+158 2025-08-28
+159 2025-08-28
+160 2025-08-28
+161 2025-08-28
+162 2025-08-28
+163 2025-08-28
+164 2025-08-28
+165 2025-08-28
+166 2025-08-28
+167 2025-08-28
+168 2025-08-28
+169 2025-08-28
+170 2025-08-28
+171 2025-08-28
+172 2025-08-28
+173 2025-08-28
+174 2025-08-28
+175 2025-08-28
+176 2025-08-28
+177 2025-08-28
+178 2025-08-28
+179 2025-08-30
+180 2025-08-30
+181 2025-08-30
+182 2025-08-30
+183 2025-08-30
+184 2025-08-30
+185 2025-08-30
+186 2025-08-30
+187 2025-08-30
+188 2025-08-30
+189 2025-08-30
+190 2025-08-30
+191 2025-08-30
+192 2025-08-30
+193 2025-08-30
+194 2025-08-30
+195 2025-08-30
+196 2025-08-30
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

One 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.

+
+
+
+
+
+
+
+
Data |> select("Date") |> nrow()
+
+
[1] 196
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

For 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).

+
+
+
+
+
+
+
+ +

R Quirks

+
+
+
+
+
+ +
+

Odd R Behavior # 1

+
+
+

While 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:

+
+
+
+
+
+
+
Data |> select(Date) |> head(5)
+
+
        Date
+1 2025-07-26
+2 2025-07-26
+3 2025-07-26
+4 2025-07-26
+5 2025-07-26
+
+
+
+
+
+ +
+
+
+
+
+ +
+

.

+
+
+

The 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.

+
+
+
+
+
+
+ +

Selecting multiple columns

+
+
+
+
+
+
+ +
+

.

+
+
+

Since 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:

+
+
+
+
+
+
+
+
Subset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`)
+
+head(Subset, 5)
+
+
      bid timepoint Condition    Tcells      CD8+      CD4+
+1 INF0052         0      Ctrl 0.2804264 0.2734826 0.6341164
+2 INF0100         0      Ctrl 0.6748298 0.3357696 0.6119112
+3 INF0100         4      Ctrl 0.6119129 0.2862104 0.6639621
+4 INF0100         9      Ctrl 0.6314431 0.4861231 0.4378944
+5 INF0179         0      Ctrl 0.4396437 0.1950634 0.7392563
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

You will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object:

+
+
+
+
+
+
+
+
Subset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, )
+
+head(Subset, 5)
+
+
      bid    Tcells      CD8+      CD4+ timepoint Condition
+1 INF0052 0.2804264 0.2734826 0.6341164         0      Ctrl
+2 INF0100 0.6748298 0.3357696 0.6119112         0      Ctrl
+3 INF0100 0.6119129 0.2862104 0.6639621         4      Ctrl
+4 INF0100 0.6314431 0.4861231 0.4378944         9      Ctrl
+5 INF0179 0.4396437 0.1950634 0.7392563         0      Ctrl
+
+
+
+
+
+

relocate

+
+
+
+
+
+
+ +
+

.

+
+
+

Alternatively, 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.

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

.

+
+
+

Looking 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:

+
+
+
+
+
+
+
+
Data |> relocate(Tcells, .after=bid) |> head(5)
+
+
      bid    Tcells timepoint Condition       Date infant_sex  ptype    root
+1 INF0052 0.2804264         0      Ctrl 2025-07-26       Male HEU-hi 2098368
+2 INF0100 0.6748298         0      Ctrl 2025-07-26       Male HEU-lo 2020184
+3 INF0100 0.6119129         4      Ctrl 2025-07-26       Male HEU-lo 1155040
+4 INF0100 0.6314431         9      Ctrl 2025-07-26       Male HEU-lo  358624
+5 INF0179 0.4396437         0      Ctrl 2025-07-26       Male     HU 1362216
+  singletsFSC singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris
+1     1894070     1666179      1537396 0.5952943    0.8820349 0.8627649
+2     1791890     1697083      1579098 0.9106762    0.9052256 0.8602660
+3     1033320      875465       845446 0.9705765    0.9845400 0.9578793
+4      328624      289327       276289 0.9819573    0.9855070 0.9412615
+5     1206309     1032946       982736 0.9572591    0.9556272 0.8407837
+  lymphocytes      live      Dump+     Dump-        Vd2+      Vd2-     Va7.2+
+1   0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070
+2   0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499
+3   0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402
+4   0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345
+5   0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182
+     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
+4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
+5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
+  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
+4            176662 0.01449297 0.05873854     271304
+5            663667 0.04437285 0.15921627     940733
+
+
# |> head(5) is used only to make the website output visualization manageable :D
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Similar to what we saw with select(), this approach can also be used for more than 1 column:

+
+
+
+
+
+
+
+
Data |> relocate(Tcells, Monocytes, .after=bid) |> head(5)
+
+
      bid    Tcells  Monocytes timepoint Condition       Date infant_sex  ptype
+1 INF0052 0.2804264 0.11796509         0      Ctrl 2025-07-26       Male HEU-hi
+2 INF0100 0.6748298 0.09477437         0      Ctrl 2025-07-26       Male HEU-lo
+3 INF0100 0.6119129 0.01545999         4      Ctrl 2025-07-26       Male HEU-lo
+4 INF0100 0.6314431 0.01449297         9      Ctrl 2025-07-26       Male HEU-lo
+5 INF0179 0.4396437 0.04437285         0      Ctrl 2025-07-26       Male     HU
+     root singletsFSC singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris
+1 2098368     1894070     1666179      1537396 0.5952943    0.8820349 0.8627649
+2 2020184     1791890     1697083      1579098 0.9106762    0.9052256 0.8602660
+3 1155040     1033320      875465       845446 0.9705765    0.9845400 0.9578793
+4  358624      328624      289327       276289 0.9819573    0.9855070 0.9412615
+5 1362216     1206309     1032946       982736 0.9572591    0.9556272 0.8407837
+  lymphocytes      live      Dump+     Dump-        Vd2+      Vd2-     Va7.2+
+1   0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070
+2   0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499
+3   0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402
+4   0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345
+5   0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182
+     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
+4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
+5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
+  lymphocytes_count     Debris CD45_count
+1            587573 0.13723513     915203
+2            308583 0.13973396    1438047
+3            607477 0.04212072     820570
+4            176662 0.05873854     271304
+5            663667 0.15921627     940733
+
+
# |> head(5) is used only to make the website output visualization manageable :D
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

We can also modify the argument so that columns are placed before a certain column

+
+
+
+
+
+
+
+
Data |> relocate(Tcells, .before=Date) |> head(5)
+
+
      bid timepoint Condition    Tcells       Date infant_sex  ptype    root
+1 INF0052         0      Ctrl 0.2804264 2025-07-26       Male HEU-hi 2098368
+2 INF0100         0      Ctrl 0.6748298 2025-07-26       Male HEU-lo 2020184
+3 INF0100         4      Ctrl 0.6119129 2025-07-26       Male HEU-lo 1155040
+4 INF0100         9      Ctrl 0.6314431 2025-07-26       Male HEU-lo  358624
+5 INF0179         0      Ctrl 0.4396437 2025-07-26       Male     HU 1362216
+  singletsFSC singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris
+1     1894070     1666179      1537396 0.5952943    0.8820349 0.8627649
+2     1791890     1697083      1579098 0.9106762    0.9052256 0.8602660
+3     1033320      875465       845446 0.9705765    0.9845400 0.9578793
+4      328624      289327       276289 0.9819573    0.9855070 0.9412615
+5     1206309     1032946       982736 0.9572591    0.9556272 0.8407837
+  lymphocytes      live      Dump+     Dump-        Vd2+      Vd2-     Va7.2+
+1   0.6420138 0.9020581 0.21090996 0.6911482 0.008120361 0.9918796 0.01448070
+2   0.2145848 0.8908981 0.06252775 0.8283703 0.007265620 0.9927344 0.01577499
+3   0.7403110 0.8757665 0.20023803 0.6755285 0.004651313 0.9953487 0.01579402
+4   0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345
+5   0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182
+     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
+4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
+5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
+  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
+4            176662 0.01449297 0.05873854     271304
+5            663667 0.04437285 0.15921627     940733
+
+
# |> head(5) is used only to make the website output visualization manageable :D
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

And as we might suspect, we could specify a column index location rather than using a column name.

+
+
+
+
+
+
+
+
Data |> relocate(Date, .before=1) |> head(5)
+
+
        Date     bid timepoint Condition infant_sex  ptype    root singletsFSC
+1 2025-07-26 INF0052         0      Ctrl       Male HEU-hi 2098368     1894070
+2 2025-07-26 INF0100         0      Ctrl       Male HEU-lo 2020184     1791890
+3 2025-07-26 INF0100         4      Ctrl       Male HEU-lo 1155040     1033320
+4 2025-07-26 INF0100         9      Ctrl       Male HEU-lo  358624      328624
+5 2025-07-26 INF0179         0      Ctrl       Male     HU 1362216     1206309
+  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
+4      289327       276289 0.9819573    0.9855070 0.9412615   0.6511588
+5     1032946       982736 0.9572591    0.9556272 0.8407837   0.7054786
+       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
+4 0.9153242 0.21469246 0.7006317 0.6314431 0.011348967 0.9886510 0.01702345
+5 0.8952140 0.33831877 0.5568953 0.4396437 0.004753630 0.9952464 0.01332182
+     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
+4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008       111552
+5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485       291777
+  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
+4            176662 0.01449297 0.05873854     271304
+5            663667 0.04437285 0.15921627     940733
+
+
# |> head(5) is used only to make the website output visualization manageable :D
+
+
+
+
+

rename

+
+
+
+
+
+
+ +
+

.

+
+
+

At 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?

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

.

+
+
+

In 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:

+
+
+
+
+
+
+
+
colnames(Subset)
+
+
[1] "bid"       "Tcells"    "CD8+"      "CD4+"      "timepoint" "Condition"
+
+
colnames(Subset)[3]
+
+
[1] "CD8+"
+
+
+
+
+
+
colnames(Subset)[3] <- "CD8Positive"
+colnames(Subset)
+
+
[1] "bid"         "Tcells"      "CD8Positive" "CD4+"        "timepoint"  
+[6] "Condition"  
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

With 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

+
+
+
+
+
+
+
+
Renamed <- Subset |> rename(CD4_Positive = `CD4+`)
+colnames(Renamed)
+
+
[1] "bid"          "Tcells"       "CD8Positive"  "CD4_Positive" "timepoint"   
+[6] "Condition"   
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

If 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.

+
+
+
+
+
+
+
+
Renamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`)
+colnames(Renamed_Multiple)
+
+
[1] "specimen"         "Tcells"           "CD8Positive"      "CD4Positive"     
+[5] "timepoint_months" "stimulation"     
+
+
+
+
+
+

pull

+
+
+
+
+
+
+ +
+

.

+
+
+

Sometimes, 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

+
+
+
+
+
+
+
+
Data |> pull(Date) |> head(10)
+
+
 [1] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+ [6] "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26" "2025-07-26"
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

This 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:

+
+
+
+
+
+
+
+
Data |> pull(Date) |> 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"
+
+
+
+
+
+

filter (Rows)

+
+
+
+
+
+
+ +
+

.

+
+
+

So 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.

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

.

+
+
+

The 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

+
+
+
+
+
+
+
+
Data |> pull(Condition) |> unique() 
+
+
[1] "Ctrl" "PPD"  "SEB" 
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

In 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?

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

.

+
+
+

Within 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.

+
+
+
+
+
+
+
+
PPDOnly <- Data |> filter(Condition == "PPD")
+head(PPDOnly, 5)
+
+
      bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1 INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
+2 INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
+3 INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
+4 INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
+5 INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
+  singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1     1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
+2     1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
+3      796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
+4      626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
+5     1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
+       live      Dump+     Dump-    Tcells        Vd2+      Vd2-     Va7.2+
+1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057
+2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801
+3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790
+4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298
+5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237
+     Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1 0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
+2 0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
+3 0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
+4 0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
+5 0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
+  lymphocytes_count  Monocytes     Debris CD45_count
+1            652155 0.13801632 0.15703150    1017713
+2            314717 0.07480391 0.12281107    1447451
+3            544883 0.01512811 0.04439511     745037
+4            366784 0.01578611 0.18769586     589379
+5            663169 0.04243146 0.08655621     947858
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

While 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”

+
+
+
+
+
+
+
+
Data |> filter(Condition %in% "PPD") |> head(10)
+
+
       bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1  INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
+2  INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
+3  INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
+4  INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
+5  INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
+6  INF0179         4       PPD 2025-07-26       Male     HU 1240984     1089933
+7  INF0179         9       PPD 2025-07-26       Male     HU 1705960     1492142
+8  INF0186         4       PPD 2025-07-26     Female HEU-hi  848584      759606
+9  INF0186         9       PPD 2025-07-26     Female HEU-hi 1425416     1259825
+10 INF0134         0       PPD 2025-07-29     Female HEU-lo 1245024     1126248
+   singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1      1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
+2      1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
+3       796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
+4       626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
+5      1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
+6       868877       814909 0.9855947    0.9541417 0.9400824   0.7303074
+7      1163543      1107878 0.9820919    0.9816909 0.9681656   0.7933252
+8       648405       607514 0.9824778    0.9539480 0.9250170   0.6720872
+9      1089955      1014266 0.9771490    0.9552573 0.9137615   0.6332438
+10      993895       896183 0.7915660    0.8042298 0.7899781   0.5924868
+        live      Dump+     Dump-    Tcells        Vd2+      Vd2-     Va7.2+
+1  0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.01507057
+2  0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.01671801
+3  0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.01609790
+4  0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.01855298
+5  0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.01297237
+6  0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.01266884
+7  0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.01330324
+8  0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.04352519
+9  0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.03738187
+10 0.9003481 0.15485733 0.7454908 0.3314561 0.009453601 0.9905464 0.02587717
+      Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1  0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
+2  0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
+3  0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
+4  0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
+5  0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
+6  0.9830107 0.6318771 0.3511336 0.3177460 0.03338760       331680
+7  0.9839630 0.7016361 0.2823269 0.2559335 0.02639338       577228
+8  0.9469912 0.5309109 0.4160803 0.3912185 0.02486181       190855
+9  0.9443941 0.5033806 0.4410135 0.4213381 0.01967539       365177
+10 0.9646692 0.6964224 0.2682468 0.2260394 0.04220742       139312
+   lymphocytes_count  Monocytes     Debris CD45_count
+1             652155 0.13801632 0.15703150    1017713
+2             314717 0.07480391 0.12281107    1447451
+3             544883 0.01512811 0.04439511     745037
+4             366784 0.01578611 0.18769586     589379
+5             663169 0.04243146 0.08655621     947858
+6             586561 0.04585829 0.05991758     803170
+7             863168 0.01830910 0.03183437    1088038
+8             401148 0.04605198 0.07498295     596869
+9             627601 0.04474270 0.08623847     991089
+10            420303 0.19577016 0.21002188     709388
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Similar 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()/

+
+
+
+
+
+
+
+
Data |> filter(Condition %in% c("PPD", "SEB")) |> head(10)
+
+
       bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1  INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
+2  INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
+3  INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
+4  INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
+5  INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
+6  INF0179         4       PPD 2025-07-26       Male     HU 1240984     1089933
+7  INF0179         9       PPD 2025-07-26       Male     HU 1705960     1492142
+8  INF0186         4       PPD 2025-07-26     Female HEU-hi  848584      759606
+9  INF0186         9       PPD 2025-07-26     Female HEU-hi 1425416     1259825
+10 INF0052         0       SEB 2025-07-26       Male HEU-hi 2523776     2282292
+   singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1      1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
+2      1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
+3       796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
+4       626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
+5      1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
+6       868877       814909 0.9855947    0.9541417 0.9400824   0.7303074
+7      1163543      1107878 0.9820919    0.9816909 0.9681656   0.7933252
+8       648405       607514 0.9824778    0.9539480 0.9250170   0.6720872
+9      1089955      1014266 0.9771490    0.9552573 0.9137615   0.6332438
+10     2041563      1889418 0.5783591    0.8878072 0.8670150   0.6718563
+        live      Dump+     Dump-    Tcells        Vd2+      Vd2-      Va7.2+
+1  0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.015070567
+2  0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.016718006
+3  0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.016097899
+4  0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.018552985
+5  0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.012972375
+6  0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.012668837
+7  0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.013303235
+8  0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.043525189
+9  0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.037381872
+10 0.9115652 0.23344716 0.6781180 0.2741661 0.009225633 0.9907744 0.008420812
+      Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1  0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
+2  0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
+3  0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
+4  0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
+5  0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
+6  0.9830107 0.6318771 0.3511336 0.3177460 0.03338760       331680
+7  0.9839630 0.7016361 0.2823269 0.2559335 0.02639338       577228
+8  0.9469912 0.5309109 0.4160803 0.3912185 0.02486181       190855
+9  0.9443941 0.5033806 0.4410135 0.4213381 0.01967539       365177
+10 0.9823536 0.6083254 0.3740281 0.2811756 0.09285249       201287
+   lymphocytes_count  Monocytes     Debris CD45_count
+1             652155 0.13801632 0.15703150    1017713
+2             314717 0.07480391 0.12281107    1447451
+3             544883 0.01512811 0.04439511     745037
+4             366784 0.01578611 0.18769586     589379
+5             663169 0.04243146 0.08655621     947858
+6             586561 0.04585829 0.05991758     803170
+7             863168 0.01830910 0.03183437    1088038
+8             401148 0.04605198 0.07498295     596869
+9             627601 0.04474270 0.08623847     991089
+10            734179 0.11219277 0.13298504    1092762
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Alternatively, we could have set up the vector externally, and then provided it to filter()

+
+
+
+
+
+
+
+
TheseConditions <- c("PPD", "SEB")
+Data |> filter(Condition %in% TheseConditions) |> head(10)
+
+
       bid timepoint Condition       Date infant_sex  ptype    root singletsFSC
+1  INF0052         0       PPD 2025-07-26       Male HEU-hi 2363512     2136616
+2  INF0100         0       PPD 2025-07-26       Male HEU-lo 2049112     1821676
+3  INF0100         4       PPD 2025-07-26       Male HEU-lo 1063496      946587
+4  INF0100         9       PPD 2025-07-26       Male HEU-lo  788368      714198
+5  INF0179         0       PPD 2025-07-26       Male     HU 1380336     1242311
+6  INF0179         4       PPD 2025-07-26       Male     HU 1240984     1089933
+7  INF0179         9       PPD 2025-07-26       Male     HU 1705960     1492142
+8  INF0186         4       PPD 2025-07-26     Female HEU-hi  848584      759606
+9  INF0186         9       PPD 2025-07-26     Female HEU-hi 1425416     1259825
+10 INF0052         0       SEB 2025-07-26       Male HEU-hi 2523776     2282292
+   singletsSSC singletsSSCB      CD45 NotMonocytes nonDebris lymphocytes
+1      1875394      1732620 0.5873838    0.8619837 0.8429685   0.6408044
+2      1717636      1597085 0.9063081    0.9251961 0.8771889   0.2174284
+3       796056       767297 0.9709891    0.9848719 0.9556049   0.7313503
+4       626387       600011 0.9822803    0.9842139 0.8123041   0.6223228
+5      1047081      1000877 0.9470275    0.9575685 0.9134438   0.6996502
+6       868877       814909 0.9855947    0.9541417 0.9400824   0.7303074
+7      1163543      1107878 0.9820919    0.9816909 0.9681656   0.7933252
+8       648405       607514 0.9824778    0.9539480 0.9250170   0.6720872
+9      1089955      1014266 0.9771490    0.9552573 0.9137615   0.6332438
+10     2041563      1889418 0.5783591    0.8878072 0.8670150   0.6718563
+        live      Dump+     Dump-    Tcells        Vd2+      Vd2-      Va7.2+
+1  0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.015070567
+2  0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.016718006
+3  0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.016097899
+4  0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.018552985
+5  0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.012972375
+6  0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.012668837
+7  0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.013303235
+8  0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.043525189
+9  0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.037381872
+10 0.9115652 0.23344716 0.6781180 0.2741661 0.009225633 0.9907744 0.008420812
+      Va7.2-      CD4+      CD4-      CD8+       CD8- Tcells_count
+1  0.9775212 0.6340345 0.3434867 0.2744119 0.06907479       184930
+2  0.9761448 0.6145707 0.3615741 0.3312279 0.03034620       211987
+3  0.9786475 0.6559480 0.3226994 0.2912084 0.03149109       326378
+4  0.9695111 0.4306889 0.5388222 0.4908558 0.04796636       238021
+5  0.9826447 0.7499194 0.2327253 0.1850897 0.04763554       294549
+6  0.9830107 0.6318771 0.3511336 0.3177460 0.03338760       331680
+7  0.9839630 0.7016361 0.2823269 0.2559335 0.02639338       577228
+8  0.9469912 0.5309109 0.4160803 0.3912185 0.02486181       190855
+9  0.9443941 0.5033806 0.4410135 0.4213381 0.01967539       365177
+10 0.9823536 0.6083254 0.3740281 0.2811756 0.09285249       201287
+   lymphocytes_count  Monocytes     Debris CD45_count
+1             652155 0.13801632 0.15703150    1017713
+2             314717 0.07480391 0.12281107    1447451
+3             544883 0.01512811 0.04439511     745037
+4             366784 0.01578611 0.18769586     589379
+5             663169 0.04243146 0.08655621     947858
+6             586561 0.04585829 0.05991758     803170
+7             863168 0.01830910 0.03183437    1088038
+8             401148 0.04605198 0.07498295     596869
+9             627601 0.04474270 0.08623847     991089
+10            734179 0.11219277 0.13298504    1092762
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

While 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

+
+
+
+
+
+
+
+
IsThisASpectralInstrument <- TRUE
+
+!IsThisASpectralInstrument
+
+
[1] FALSE
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

In the context of the dplyr package, we can use ! within the filter() to remove rows that contain a certain value

+
+
+
+
+
+
+
+
Subset <- Data |> filter(!Condition %in% "SEB")
+Subset |> pull(Condition) |> unique()
+
+
[1] "Ctrl" "PPD" 
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Likewise, we can also use it with the select() to exclude columns we don’t want to include

+
+
+
+
+
+
+
+
Subset <- Data |> select(!timepoint)
+Subset[1:3,]
+
+
      bid Condition       Date infant_sex  ptype    root singletsFSC
+1 INF0052      Ctrl 2025-07-26       Male HEU-hi 2098368     1894070
+2 INF0100      Ctrl 2025-07-26       Male HEU-lo 2020184     1791890
+3 INF0100      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
+
+
+
+
+
+

mutate

+
+
+
+
+
+
+ +
+

.

+
+
+

As 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.

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

.

+
+
+

Let’s start by slimming down our current Data to a smaller workable example, highlighting the functions and pipes we learned about today

+
+
+
+
+
+
+
+
TidyData <- Data |> filter(Condition %in% "Ctrl") |> filter(timepoint %in% "0") |>
+     select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |>
+      rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen)
+
+
+
+
+ +
+
+
TidyData
+
+
   specimen       Date timepoint condition Tcells_count CD45_count
+1   INF0052 2025-07-26         0      Ctrl       164771     915203
+2   INF0100 2025-07-26         0      Ctrl       208241    1438047
+3   INF0179 2025-07-26         0      Ctrl       291777     940733
+4   INF0134 2025-07-29         0      Ctrl       127866     689676
+5   INF0148 2025-07-29         0      Ctrl       234335    1013985
+6   INF0191 2025-07-29         0      Ctrl        55780     715443
+7   INF0124 2025-07-31         0      Ctrl        70297     687720
+8   INF0149 2025-07-31         0      Ctrl       107900     857845
+9   INF0169 2025-07-31         0      Ctrl        75540     854594
+10  INF0019 2025-08-05         0      Ctrl       208055     873622
+11  INF0032 2025-08-05         0      Ctrl       361034     753064
+12  INF0180 2025-08-05         0      Ctrl       284958    1049663
+13  INF0155 2025-08-07         0      Ctrl       281626    1065048
+14  INF0158 2025-08-07         0      Ctrl       280913    1249338
+15  INF0159 2025-08-07         0      Ctrl       452551    1190219
+16  INF0013 2025-08-22         0      Ctrl       182751     836573
+17  INF0023 2025-08-22         0      Ctrl       218435     968035
+18  INF0030 2025-08-22         0      Ctrl        85521     732321
+19  INF0166 2025-08-28         0      Ctrl       225650     739495
+20  INF0199 2025-08-28         0      Ctrl       169736    1112176
+21  INF0207 2025-08-28         0      Ctrl        39055     905365
+22  INF0614 2025-08-30         0      Ctrl       224396    1569007
+23  INF0622 2025-08-30         0      Ctrl       161924     939307
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

The 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:

+
+
+
+
+
+
+
+
TidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count)
+TidyData
+
+
   specimen       Date timepoint condition Tcells_count CD45_count
+1   INF0052 2025-07-26         0      Ctrl       164771     915203
+2   INF0100 2025-07-26         0      Ctrl       208241    1438047
+3   INF0179 2025-07-26         0      Ctrl       291777     940733
+4   INF0134 2025-07-29         0      Ctrl       127866     689676
+5   INF0148 2025-07-29         0      Ctrl       234335    1013985
+6   INF0191 2025-07-29         0      Ctrl        55780     715443
+7   INF0124 2025-07-31         0      Ctrl        70297     687720
+8   INF0149 2025-07-31         0      Ctrl       107900     857845
+9   INF0169 2025-07-31         0      Ctrl        75540     854594
+10  INF0019 2025-08-05         0      Ctrl       208055     873622
+11  INF0032 2025-08-05         0      Ctrl       361034     753064
+12  INF0180 2025-08-05         0      Ctrl       284958    1049663
+13  INF0155 2025-08-07         0      Ctrl       281626    1065048
+14  INF0158 2025-08-07         0      Ctrl       280913    1249338
+15  INF0159 2025-08-07         0      Ctrl       452551    1190219
+16  INF0013 2025-08-22         0      Ctrl       182751     836573
+17  INF0023 2025-08-22         0      Ctrl       218435     968035
+18  INF0030 2025-08-22         0      Ctrl        85521     732321
+19  INF0166 2025-08-28         0      Ctrl       225650     739495
+20  INF0199 2025-08-28         0      Ctrl       169736    1112176
+21  INF0207 2025-08-28         0      Ctrl        39055     905365
+22  INF0614 2025-08-30         0      Ctrl       224396    1569007
+23  INF0622 2025-08-30         0      Ctrl       161924     939307
+   Tcells_ProportionCD45
+1             0.18003765
+2             0.14480820
+3             0.31015921
+4             0.18540010
+5             0.23110302
+6             0.07796568
+7             0.10221747
+8             0.12578030
+9             0.08839285
+10            0.23815220
+11            0.47942008
+12            0.27147570
+13            0.26442564
+14            0.22484948
+15            0.38022498
+16            0.21845195
+17            0.22564783
+18            0.11678076
+19            0.30514067
+20            0.15261613
+21            0.04313730
+22            0.14301785
+23            0.17238666
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

We 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

+
+
+
+
+
+
+
+
TidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2))
+TidyData 
+
+
   specimen       Date timepoint condition Tcells_count CD45_count
+1   INF0052 2025-07-26         0      Ctrl       164771     915203
+2   INF0100 2025-07-26         0      Ctrl       208241    1438047
+3   INF0179 2025-07-26         0      Ctrl       291777     940733
+4   INF0134 2025-07-29         0      Ctrl       127866     689676
+5   INF0148 2025-07-29         0      Ctrl       234335    1013985
+6   INF0191 2025-07-29         0      Ctrl        55780     715443
+7   INF0124 2025-07-31         0      Ctrl        70297     687720
+8   INF0149 2025-07-31         0      Ctrl       107900     857845
+9   INF0169 2025-07-31         0      Ctrl        75540     854594
+10  INF0019 2025-08-05         0      Ctrl       208055     873622
+11  INF0032 2025-08-05         0      Ctrl       361034     753064
+12  INF0180 2025-08-05         0      Ctrl       284958    1049663
+13  INF0155 2025-08-07         0      Ctrl       281626    1065048
+14  INF0158 2025-08-07         0      Ctrl       280913    1249338
+15  INF0159 2025-08-07         0      Ctrl       452551    1190219
+16  INF0013 2025-08-22         0      Ctrl       182751     836573
+17  INF0023 2025-08-22         0      Ctrl       218435     968035
+18  INF0030 2025-08-22         0      Ctrl        85521     732321
+19  INF0166 2025-08-28         0      Ctrl       225650     739495
+20  INF0199 2025-08-28         0      Ctrl       169736    1112176
+21  INF0207 2025-08-28         0      Ctrl        39055     905365
+22  INF0614 2025-08-30         0      Ctrl       224396    1569007
+23  INF0622 2025-08-30         0      Ctrl       161924     939307
+   Tcells_ProportionCD45 TcellsRounded
+1             0.18003765          0.18
+2             0.14480820          0.14
+3             0.31015921          0.31
+4             0.18540010          0.19
+5             0.23110302          0.23
+6             0.07796568          0.08
+7             0.10221747          0.10
+8             0.12578030          0.13
+9             0.08839285          0.09
+10            0.23815220          0.24
+11            0.47942008          0.48
+12            0.27147570          0.27
+13            0.26442564          0.26
+14            0.22484948          0.22
+15            0.38022498          0.38
+16            0.21845195          0.22
+17            0.22564783          0.23
+18            0.11678076          0.12
+19            0.30514067          0.31
+20            0.15261613          0.15
+21            0.04313730          0.04
+22            0.14301785          0.14
+23            0.17238666          0.17
+
+
+
+
+
+

arrange

+
+
+
+
+
+
+ +
+

.

+
+
+

And 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:

+
+
+
+
+
+
+
+
TidyData <- TidyData |> arrange(desc(TcellsRounded))
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

And 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):

+
+
+
+
+
+
+
+
TidyData |> filter(TcellsRounded > 0.3)
+
+
  specimen       Date timepoint condition Tcells_count CD45_count
+1  INF0032 2025-08-05         0      Ctrl       361034     753064
+2  INF0159 2025-08-07         0      Ctrl       452551    1190219
+3  INF0179 2025-07-26         0      Ctrl       291777     940733
+4  INF0166 2025-08-28         0      Ctrl       225650     739495
+  Tcells_ProportionCD45 TcellsRounded
+1             0.4794201          0.48
+2             0.3802250          0.38
+3             0.3101592          0.31
+4             0.3051407          0.31
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

Which is we had wanted to just retrieve the specimen IDs, we could add pull() after a new pipe argument.

+
+
+
+
+
+
+
+
TidyData |> filter(TcellsRounded > 0.3) |> pull(specimen)
+
+
[1] "INF0032" "INF0159" "INF0179" "INF0166"
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+

.

+
+
+

And 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 .fcs file. Working within our project folder, this would look like this:

+
+
+
+
+
+
+
+
NewName <- paste0("MyNewDataset", ".csv")
+StorageLocation <- file.path("data", NewName)
+StorageLocation
+
+
[1] "data/MyNewDataset.csv"
+
+
+
+
+
+
write.csv(TidyData, StorageLocation, row.names=FALSE)
+
+
+
+
+ +
+
+
+

Take Away

+
+
+
+
+
+
+ +
+

.

+
+
+

In this session, we explored the main functions within the dplyr package used in context of “tidying” data, including selecting columns, filtering for rows, as well as additional functions used to create or modify existing values. We will continue to build on these throughout the course, introducing a few additional tidyverse functions we don’t have time to cover today as appropiate. As we saw, knowing how to use these functions can allow us to extensively and quickly modify our existing exported data files.

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

.

+
+
+

On important goal as we move through the course (in terms of both reproducibility and replicability) is to attempt to only modify files within R, not go back to the original csv or excel file and hand-modify individual values. This approach is not reproducible or replicable. Once set up, an R script can quickly re-carry out these same cleanup steps, and leave a documented process of how the data has changed (even more so if you are maintaining version control). If you do want to save the changes you have made, it is best to save it out as a new .csv file with which you work later.

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

.

+
+
+

Next week, we will be using these skills when setting up metadata for our .fcs files. We will additionally take a look at the main format source of controversy within Bioconductor Flow Cytometry packages, ie. whether to use a flowframe or a cytoframe. Exciting stuff, but important information to know as the functions needed to import them are slightly different. We will also look at how to import existing manually gated .wsp from FlowJo/Diva/Floreada in via the CytoML package.

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

Additional Resources

+

Data Organization in Spreadsheets for Ecologists This Carpentry self-study course was one of my “Aha” moments early on when learning R, and reinforced the need to try to keep my own Excel/CSV files in a tidy manner. It is worth the time going through in its entirety (even for non-Ecologist).

+

Data Analysis and Visualization in R for Ecologists Continuation of the above, and a good way to continue building on the tidyverse functions we learned today.

+
+
+ +

Simplistics: Introduction to Tidyverse in R The YouTube channel is mainly focused on statistics for Psych classes, but at the end of the day, we are all working with similar objects with rows and columns, just the values contained within differ.

+

Riffomonas Project Playlist: Data Manipulation with R’s Tidyverse Riffomonas has a playlist that delves into both the tidyverse functions we used today, as well as other ones we will encounter later on in the course.

+
+
+ +
+
+
+

Take-home Problems

+
+
+
+
+
+ +
+

Problem 1

+
+
+

Taking a dataset (either todays or one of your own), work through the column-operating functions (select(), rename(), and relocate()). Once this is done, filter() by conditions from two separate columns, arrange in an order that makes sense, and export this “tidy” data as a .csv file.

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

Problem 2

+
+
+

We used the mutate() function to create new columns, but it can also be used to modify existing ones. Various numeric columns are showing way to many significant digits. As was shown, use round() to round all these proportion columns, but use mutate to overwrite the existing column. Export this as it’s own .csv file.

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

Problem 3

+
+
+

We can also use mutate() to combine columns. For our dataset, “bid”, “timepoint”, “Condition” are separate columns that originally were all part of the filename for the individual .fcs file. Try to figure out a way to combine them back together using paste0(), and save the new column as “filename”. Once this is done, pull() the contents of this column, and using try to determine whether there were any duplicates (think innovative ways of using !, length() and unique())

+
+
+
+
+
+
+ +
+

AGPL-3.0 CC BY-SA 4.0

+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/search.json b/docs/search.json index db7a2a1..98fb589 100644 --- a/docs/search.json +++ b/docs/search.json @@ -52,7 +52,7 @@ "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\n\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n4 2025-07-26\n5 2025-07-26\n6 2025-07-26\n7 2025-07-26\n8 2025-07-26\n9 2025-07-26\n10 2025-07-26\n11 2025-07-26\n12 2025-07-26\n13 2025-07-26\n14 2025-07-26\n15 2025-07-26\n16 2025-07-26\n17 2025-07-26\n18 2025-07-26\n19 2025-07-26\n20 2025-07-26\n21 2025-07-26\n22 2025-07-26\n23 2025-07-26\n24 2025-07-26\n25 2025-07-26\n26 2025-07-26\n27 2025-07-29\n28 2025-07-29\n29 2025-07-29\n30 2025-07-29\n31 2025-07-29\n32 2025-07-29\n33 2025-07-29\n34 2025-07-29\n35 2025-07-29\n36 2025-07-29\n37 2025-07-29\n38 2025-07-29\n39 2025-07-29\n40 2025-07-29\n41 2025-07-29\n42 2025-07-29\n43 2025-07-29\n44 2025-07-29\n45 2025-07-29\n46 2025-07-29\n47 2025-07-29\n48 2025-07-29\n49 2025-07-31\n50 2025-07-31\n51 2025-07-31\n52 2025-07-31\n53 2025-07-31\n54 2025-07-31\n55 2025-07-31\n56 2025-07-31\n57 2025-07-31\n58 2025-07-31\n59 2025-07-31\n60 2025-07-31\n61 2025-07-31\n62 2025-07-31\n63 2025-07-31\n64 2025-07-31\n65 2025-07-31\n66 2025-07-31\n67 2025-07-31\n68 2025-07-31\n69 2025-07-31\n70 2025-07-31\n71 2025-07-31\n72 2025-07-31\n73 2025-07-31\n74 2025-07-31\n75 2025-07-31\n76 2025-08-05\n77 2025-08-05\n78 2025-08-05\n79 2025-08-05\n80 2025-08-05\n81 2025-08-05\n82 2025-08-05\n83 2025-08-05\n84 2025-08-05\n85 2025-08-05\n86 2025-08-05\n87 2025-08-05\n88 2025-08-05\n89 2025-08-05\n90 2025-08-05\n91 2025-08-05\n92 2025-08-05\n93 2025-08-05\n94 2025-08-05\n95 2025-08-05\n96 2025-08-05\n97 2025-08-05\n98 2025-08-05\n99 2025-08-07\n100 2025-08-07\n101 2025-08-07\n102 2025-08-07\n103 2025-08-07\n104 2025-08-07\n105 2025-08-07\n106 2025-08-07\n107 2025-08-07\n108 2025-08-07\n109 2025-08-07\n110 2025-08-07\n111 2025-08-07\n112 2025-08-07\n113 2025-08-07\n114 2025-08-07\n115 2025-08-07\n116 2025-08-07\n117 2025-08-07\n118 2025-08-07\n119 2025-08-07\n120 2025-08-07\n121 2025-08-07\n122 2025-08-07\n123 2025-08-07\n124 2025-08-07\n125 2025-08-22\n126 2025-08-22\n127 2025-08-22\n128 2025-08-22\n129 2025-08-22\n130 2025-08-22\n131 2025-08-22\n132 2025-08-22\n133 2025-08-22\n134 2025-08-22\n135 2025-08-22\n136 2025-08-22\n137 2025-08-22\n138 2025-08-22\n139 2025-08-22\n140 2025-08-22\n141 2025-08-22\n142 2025-08-22\n143 2025-08-22\n144 2025-08-22\n145 2025-08-22\n146 2025-08-22\n147 2025-08-22\n148 2025-08-22\n149 2025-08-22\n150 2025-08-22\n151 2025-08-22\n152 2025-08-28\n153 2025-08-28\n154 2025-08-28\n155 2025-08-28\n156 2025-08-28\n157 2025-08-28\n158 2025-08-28\n159 2025-08-28\n160 2025-08-28\n161 2025-08-28\n162 2025-08-28\n163 2025-08-28\n164 2025-08-28\n165 2025-08-28\n166 2025-08-28\n167 2025-08-28\n168 2025-08-28\n169 2025-08-28\n170 2025-08-28\n171 2025-08-28\n172 2025-08-28\n173 2025-08-28\n174 2025-08-28\n175 2025-08-28\n176 2025-08-28\n177 2025-08-28\n178 2025-08-28\n179 2025-08-30\n180 2025-08-30\n181 2025-08-30\n182 2025-08-30\n183 2025-08-30\n184 2025-08-30\n185 2025-08-30\n186 2025-08-30\n187 2025-08-30\n188 2025-08-30\n189 2025-08-30\n190 2025-08-30\n191 2025-08-30\n192 2025-08-30\n193 2025-08-30\n194 2025-08-30\n195 2025-08-30\n196 2025-08-30\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\n\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n4 2025-07-26\n5 2025-07-26\n6 2025-07-26\n7 2025-07-26\n8 2025-07-26\n9 2025-07-26\n10 2025-07-26\n11 2025-07-26\n12 2025-07-26\n13 2025-07-26\n14 2025-07-26\n15 2025-07-26\n16 2025-07-26\n17 2025-07-26\n18 2025-07-26\n19 2025-07-26\n20 2025-07-26\n21 2025-07-26\n22 2025-07-26\n23 2025-07-26\n24 2025-07-26\n25 2025-07-26\n26 2025-07-26\n27 2025-07-29\n28 2025-07-29\n29 2025-07-29\n30 2025-07-29\n31 2025-07-29\n32 2025-07-29\n33 2025-07-29\n34 2025-07-29\n35 2025-07-29\n36 2025-07-29\n37 2025-07-29\n38 2025-07-29\n39 2025-07-29\n40 2025-07-29\n41 2025-07-29\n42 2025-07-29\n43 2025-07-29\n44 2025-07-29\n45 2025-07-29\n46 2025-07-29\n47 2025-07-29\n48 2025-07-29\n49 2025-07-31\n50 2025-07-31\n51 2025-07-31\n52 2025-07-31\n53 2025-07-31\n54 2025-07-31\n55 2025-07-31\n56 2025-07-31\n57 2025-07-31\n58 2025-07-31\n59 2025-07-31\n60 2025-07-31\n61 2025-07-31\n62 2025-07-31\n63 2025-07-31\n64 2025-07-31\n65 2025-07-31\n66 2025-07-31\n67 2025-07-31\n68 2025-07-31\n69 2025-07-31\n70 2025-07-31\n71 2025-07-31\n72 2025-07-31\n73 2025-07-31\n74 2025-07-31\n75 2025-07-31\n76 2025-08-05\n77 2025-08-05\n78 2025-08-05\n79 2025-08-05\n80 2025-08-05\n81 2025-08-05\n82 2025-08-05\n83 2025-08-05\n84 2025-08-05\n85 2025-08-05\n86 2025-08-05\n87 2025-08-05\n88 2025-08-05\n89 2025-08-05\n90 2025-08-05\n91 2025-08-05\n92 2025-08-05\n93 2025-08-05\n94 2025-08-05\n95 2025-08-05\n96 2025-08-05\n97 2025-08-05\n98 2025-08-05\n99 2025-08-07\n100 2025-08-07\n101 2025-08-07\n102 2025-08-07\n103 2025-08-07\n104 2025-08-07\n105 2025-08-07\n106 2025-08-07\n107 2025-08-07\n108 2025-08-07\n109 2025-08-07\n110 2025-08-07\n111 2025-08-07\n112 2025-08-07\n113 2025-08-07\n114 2025-08-07\n115 2025-08-07\n116 2025-08-07\n117 2025-08-07\n118 2025-08-07\n119 2025-08-07\n120 2025-08-07\n121 2025-08-07\n122 2025-08-07\n123 2025-08-07\n124 2025-08-07\n125 2025-08-22\n126 2025-08-22\n127 2025-08-22\n128 2025-08-22\n129 2025-08-22\n130 2025-08-22\n131 2025-08-22\n132 2025-08-22\n133 2025-08-22\n134 2025-08-22\n135 2025-08-22\n136 2025-08-22\n137 2025-08-22\n138 2025-08-22\n139 2025-08-22\n140 2025-08-22\n141 2025-08-22\n142 2025-08-22\n143 2025-08-22\n144 2025-08-22\n145 2025-08-22\n146 2025-08-22\n147 2025-08-22\n148 2025-08-22\n149 2025-08-22\n150 2025-08-22\n151 2025-08-22\n152 2025-08-28\n153 2025-08-28\n154 2025-08-28\n155 2025-08-28\n156 2025-08-28\n157 2025-08-28\n158 2025-08-28\n159 2025-08-28\n160 2025-08-28\n161 2025-08-28\n162 2025-08-28\n163 2025-08-28\n164 2025-08-28\n165 2025-08-28\n166 2025-08-28\n167 2025-08-28\n168 2025-08-28\n169 2025-08-28\n170 2025-08-28\n171 2025-08-28\n172 2025-08-28\n173 2025-08-28\n174 2025-08-28\n175 2025-08-28\n176 2025-08-28\n177 2025-08-28\n178 2025-08-28\n179 2025-08-30\n180 2025-08-30\n181 2025-08-30\n182 2025-08-30\n183 2025-08-30\n184 2025-08-30\n185 2025-08-30\n186 2025-08-30\n187 2025-08-30\n188 2025-08-30\n189 2025-08-30\n190 2025-08-30\n191 2025-08-30\n192 2025-08-30\n193 2025-08-30\n194 2025-08-30\n195 2025-08-30\n196 2025-08-30\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\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n4 2025-07-26\n5 2025-07-26\n6 2025-07-26\n7 2025-07-26\n8 2025-07-26\n9 2025-07-26\n10 2025-07-26\n11 2025-07-26\n12 2025-07-26\n13 2025-07-26\n14 2025-07-26\n15 2025-07-26\n16 2025-07-26\n17 2025-07-26\n18 2025-07-26\n19 2025-07-26\n20 2025-07-26\n21 2025-07-26\n22 2025-07-26\n23 2025-07-26\n24 2025-07-26\n25 2025-07-26\n26 2025-07-26\n27 2025-07-29\n28 2025-07-29\n29 2025-07-29\n30 2025-07-29\n31 2025-07-29\n32 2025-07-29\n33 2025-07-29\n34 2025-07-29\n35 2025-07-29\n36 2025-07-29\n37 2025-07-29\n38 2025-07-29\n39 2025-07-29\n40 2025-07-29\n41 2025-07-29\n42 2025-07-29\n43 2025-07-29\n44 2025-07-29\n45 2025-07-29\n46 2025-07-29\n47 2025-07-29\n48 2025-07-29\n49 2025-07-31\n50 2025-07-31\n51 2025-07-31\n52 2025-07-31\n53 2025-07-31\n54 2025-07-31\n55 2025-07-31\n56 2025-07-31\n57 2025-07-31\n58 2025-07-31\n59 2025-07-31\n60 2025-07-31\n61 2025-07-31\n62 2025-07-31\n63 2025-07-31\n64 2025-07-31\n65 2025-07-31\n66 2025-07-31\n67 2025-07-31\n68 2025-07-31\n69 2025-07-31\n70 2025-07-31\n71 2025-07-31\n72 2025-07-31\n73 2025-07-31\n74 2025-07-31\n75 2025-07-31\n76 2025-08-05\n77 2025-08-05\n78 2025-08-05\n79 2025-08-05\n80 2025-08-05\n81 2025-08-05\n82 2025-08-05\n83 2025-08-05\n84 2025-08-05\n85 2025-08-05\n86 2025-08-05\n87 2025-08-05\n88 2025-08-05\n89 2025-08-05\n90 2025-08-05\n91 2025-08-05\n92 2025-08-05\n93 2025-08-05\n94 2025-08-05\n95 2025-08-05\n96 2025-08-05\n97 2025-08-05\n98 2025-08-05\n99 2025-08-07\n100 2025-08-07\n101 2025-08-07\n102 2025-08-07\n103 2025-08-07\n104 2025-08-07\n105 2025-08-07\n106 2025-08-07\n107 2025-08-07\n108 2025-08-07\n109 2025-08-07\n110 2025-08-07\n111 2025-08-07\n112 2025-08-07\n113 2025-08-07\n114 2025-08-07\n115 2025-08-07\n116 2025-08-07\n117 2025-08-07\n118 2025-08-07\n119 2025-08-07\n120 2025-08-07\n121 2025-08-07\n122 2025-08-07\n123 2025-08-07\n124 2025-08-07\n125 2025-08-22\n126 2025-08-22\n127 2025-08-22\n128 2025-08-22\n129 2025-08-22\n130 2025-08-22\n131 2025-08-22\n132 2025-08-22\n133 2025-08-22\n134 2025-08-22\n135 2025-08-22\n136 2025-08-22\n137 2025-08-22\n138 2025-08-22\n139 2025-08-22\n140 2025-08-22\n141 2025-08-22\n142 2025-08-22\n143 2025-08-22\n144 2025-08-22\n145 2025-08-22\n146 2025-08-22\n147 2025-08-22\n148 2025-08-22\n149 2025-08-22\n150 2025-08-22\n151 2025-08-22\n152 2025-08-28\n153 2025-08-28\n154 2025-08-28\n155 2025-08-28\n156 2025-08-28\n157 2025-08-28\n158 2025-08-28\n159 2025-08-28\n160 2025-08-28\n161 2025-08-28\n162 2025-08-28\n163 2025-08-28\n164 2025-08-28\n165 2025-08-28\n166 2025-08-28\n167 2025-08-28\n168 2025-08-28\n169 2025-08-28\n170 2025-08-28\n171 2025-08-28\n172 2025-08-28\n173 2025-08-28\n174 2025-08-28\n175 2025-08-28\n176 2025-08-28\n177 2025-08-28\n178 2025-08-28\n179 2025-08-30\n180 2025-08-30\n181 2025-08-30\n182 2025-08-30\n183 2025-08-30\n184 2025-08-30\n185 2025-08-30\n186 2025-08-30\n187 2025-08-30\n188 2025-08-30\n189 2025-08-30\n190 2025-08-30\n191 2025-08-30\n192 2025-08-30\n193 2025-08-30\n194 2025-08-30\n195 2025-08-30\n196 2025-08-30\n\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(5)\n\n Date\n1 2025-07-26\n2 2025-07-26\n3 2025-07-26\n4 2025-07-26\n5 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, 5)\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\n4 INF0100 9 Ctrl 0.6314431 0.4861231 0.4378944\n5 INF0179 0 Ctrl 0.4396437 0.1950634 0.7392563\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, 5)\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\n4 INF0100 0.6314431 0.4861231 0.4378944 9 Ctrl\n5 INF0179 0.4396437 0.1950634 0.7392563 0 Ctrl", + "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", @@ -64,7 +64,7 @@ "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(5)\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\n4 INF0100 0.6314431 9 Ctrl 2025-07-26 Male HEU-lo 358624\n5 INF0179 0.4396437 0 Ctrl 2025-07-26 Male HU 1362216\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\n4 328624 289327 276289 0.9819573 0.9855070 0.9412615\n5 1206309 1032946 982736 0.9572591 0.9556272 0.8407837\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\n4 0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345\n5 0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182\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\n4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008 111552\n5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485 291777\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\n4 176662 0.01449297 0.05873854 271304\n5 663667 0.04437285 0.15921627 940733\n\n# |> head(5) 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(5)\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\n4 INF0100 0.6314431 0.01449297 9 Ctrl 2025-07-26 Male HEU-lo\n5 INF0179 0.4396437 0.04437285 0 Ctrl 2025-07-26 Male HU\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\n4 358624 328624 289327 276289 0.9819573 0.9855070 0.9412615\n5 1362216 1206309 1032946 982736 0.9572591 0.9556272 0.8407837\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\n4 0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345\n5 0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182\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\n4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008 111552\n5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485 291777\n lymphocytes_count Debris CD45_count\n1 587573 0.13723513 915203\n2 308583 0.13973396 1438047\n3 607477 0.04212072 820570\n4 176662 0.05873854 271304\n5 663667 0.15921627 940733\n\n# |> head(5) 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(5)\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\n4 INF0100 9 Ctrl 0.6314431 2025-07-26 Male HEU-lo 358624\n5 INF0179 0 Ctrl 0.4396437 2025-07-26 Male HU 1362216\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\n4 328624 289327 276289 0.9819573 0.9855070 0.9412615\n5 1206309 1032946 982736 0.9572591 0.9556272 0.8407837\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\n4 0.6511588 0.9153242 0.21469246 0.7006317 0.011348967 0.9886510 0.01702345\n5 0.7054786 0.8952140 0.33831877 0.5568953 0.004753630 0.9952464 0.01332182\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\n4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008 111552\n5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485 291777\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\n4 176662 0.01449297 0.05873854 271304\n5 663667 0.04437285 0.15921627 940733\n\n# |> head(5) 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(5)\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\n4 2025-07-26 INF0100 9 Ctrl Male HEU-lo 358624 328624\n5 2025-07-26 INF0179 0 Ctrl Male HU 1362216 1206309\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\n4 289327 276289 0.9819573 0.9855070 0.9412615 0.6511588\n5 1032946 982736 0.9572591 0.9556272 0.8407837 0.7054786\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\n4 0.9153242 0.21469246 0.7006317 0.6314431 0.011348967 0.9886510 0.01702345\n5 0.8952140 0.33831877 0.5568953 0.4396437 0.004753630 0.9952464 0.01332182\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\n4 0.9716276 0.4378944 0.5337331 0.4861231 0.04761008 111552\n5 0.9819246 0.7392563 0.2426682 0.1950634 0.04760485 291777\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\n4 176662 0.01449297 0.05873854 271304\n5 663667 0.04437285 0.15921627 940733\n\n# |> head(5) is used only to make the website output visualization manageable :D", + "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", @@ -88,7 +88,7 @@ "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(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 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\"", + "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", @@ -100,7 +100,7 @@ "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(10)\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\n6 INF0179 4 PPD 2025-07-26 Male HU 1240984 1089933\n7 INF0179 9 PPD 2025-07-26 Male HU 1705960 1492142\n8 INF0186 4 PPD 2025-07-26 Female HEU-hi 848584 759606\n9 INF0186 9 PPD 2025-07-26 Female HEU-hi 1425416 1259825\n10 INF0134 0 PPD 2025-07-29 Female HEU-lo 1245024 1126248\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\n6 868877 814909 0.9855947 0.9541417 0.9400824 0.7303074\n7 1163543 1107878 0.9820919 0.9816909 0.9681656 0.7933252\n8 648405 607514 0.9824778 0.9539480 0.9250170 0.6720872\n9 1089955 1014266 0.9771490 0.9552573 0.9137615 0.6332438\n10 993895 896183 0.7915660 0.8042298 0.7899781 0.5924868\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\n6 0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.01266884\n7 0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.01330324\n8 0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.04352519\n9 0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.03738187\n10 0.9003481 0.15485733 0.7454908 0.3314561 0.009453601 0.9905464 0.02587717\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\n6 0.9830107 0.6318771 0.3511336 0.3177460 0.03338760 331680\n7 0.9839630 0.7016361 0.2823269 0.2559335 0.02639338 577228\n8 0.9469912 0.5309109 0.4160803 0.3912185 0.02486181 190855\n9 0.9443941 0.5033806 0.4410135 0.4213381 0.01967539 365177\n10 0.9646692 0.6964224 0.2682468 0.2260394 0.04220742 139312\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\n6 586561 0.04585829 0.05991758 803170\n7 863168 0.01830910 0.03183437 1088038\n8 401148 0.04605198 0.07498295 596869\n9 627601 0.04474270 0.08623847 991089\n10 420303 0.19577016 0.21002188 709388\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(10)\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\n6 INF0179 4 PPD 2025-07-26 Male HU 1240984 1089933\n7 INF0179 9 PPD 2025-07-26 Male HU 1705960 1492142\n8 INF0186 4 PPD 2025-07-26 Female HEU-hi 848584 759606\n9 INF0186 9 PPD 2025-07-26 Female HEU-hi 1425416 1259825\n10 INF0052 0 SEB 2025-07-26 Male HEU-hi 2523776 2282292\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\n6 868877 814909 0.9855947 0.9541417 0.9400824 0.7303074\n7 1163543 1107878 0.9820919 0.9816909 0.9681656 0.7933252\n8 648405 607514 0.9824778 0.9539480 0.9250170 0.6720872\n9 1089955 1014266 0.9771490 0.9552573 0.9137615 0.6332438\n10 2041563 1889418 0.5783591 0.8878072 0.8670150 0.6718563\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.015070567\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.016718006\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.016097899\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.018552985\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.012972375\n6 0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.012668837\n7 0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.013303235\n8 0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.043525189\n9 0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.037381872\n10 0.9115652 0.23344716 0.6781180 0.2741661 0.009225633 0.9907744 0.008420812\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\n6 0.9830107 0.6318771 0.3511336 0.3177460 0.03338760 331680\n7 0.9839630 0.7016361 0.2823269 0.2559335 0.02639338 577228\n8 0.9469912 0.5309109 0.4160803 0.3912185 0.02486181 190855\n9 0.9443941 0.5033806 0.4410135 0.4213381 0.01967539 365177\n10 0.9823536 0.6083254 0.3740281 0.2811756 0.09285249 201287\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\n6 586561 0.04585829 0.05991758 803170\n7 863168 0.01830910 0.03183437 1088038\n8 401148 0.04605198 0.07498295 596869\n9 627601 0.04474270 0.08623847 991089\n10 734179 0.11219277 0.13298504 1092762\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(10)\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\n6 INF0179 4 PPD 2025-07-26 Male HU 1240984 1089933\n7 INF0179 9 PPD 2025-07-26 Male HU 1705960 1492142\n8 INF0186 4 PPD 2025-07-26 Female HEU-hi 848584 759606\n9 INF0186 9 PPD 2025-07-26 Female HEU-hi 1425416 1259825\n10 INF0052 0 SEB 2025-07-26 Male HEU-hi 2523776 2282292\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\n6 868877 814909 0.9855947 0.9541417 0.9400824 0.7303074\n7 1163543 1107878 0.9820919 0.9816909 0.9681656 0.7933252\n8 648405 607514 0.9824778 0.9539480 0.9250170 0.6720872\n9 1089955 1014266 0.9771490 0.9552573 0.9137615 0.6332438\n10 2041563 1889418 0.5783591 0.8878072 0.8670150 0.6718563\n live Dump+ Dump- Tcells Vd2+ Vd2- Va7.2+\n1 0.9009254 0.20743228 0.6934931 0.2835676 0.007408209 0.9925918 0.015070567\n2 0.8929673 0.06181426 0.8311531 0.6735798 0.007137230 0.9928628 0.016718006\n3 0.8782307 0.20727202 0.6709587 0.5989873 0.005254643 0.9947454 0.016097899\n4 0.9566639 0.23164587 0.7250180 0.6489405 0.011935922 0.9880641 0.018552985\n5 0.8856898 0.33186111 0.5538287 0.4441538 0.004382972 0.9956170 0.012972375\n6 0.9602599 0.34357211 0.6166878 0.5654655 0.004320429 0.9956796 0.012668837\n7 0.9344566 0.24759143 0.6868651 0.6687319 0.002733755 0.9972662 0.013303235\n8 0.8622229 0.32641070 0.5358122 0.4757720 0.009483639 0.9905164 0.043525189\n9 0.8793039 0.23863251 0.6406714 0.5818617 0.018224039 0.9817760 0.037381872\n10 0.9115652 0.23344716 0.6781180 0.2741661 0.009225633 0.9907744 0.008420812\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\n6 0.9830107 0.6318771 0.3511336 0.3177460 0.03338760 331680\n7 0.9839630 0.7016361 0.2823269 0.2559335 0.02639338 577228\n8 0.9469912 0.5309109 0.4160803 0.3912185 0.02486181 190855\n9 0.9443941 0.5033806 0.4410135 0.4213381 0.01967539 365177\n10 0.9823536 0.6083254 0.3740281 0.2811756 0.09285249 201287\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\n6 586561 0.04585829 0.05991758 803170\n7 863168 0.01830910 0.03183437 1088038\n8 401148 0.04605198 0.07498295 596869\n9 627601 0.04474270 0.08623847 991089\n10 734179 0.11219277 0.13298504 1092762\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", + "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", @@ -132,832 +132,999 @@ ] }, { - "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", - "03 - Inside a .FCS file" - ] + "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/03_InsideFCSFile/index.html#getting-set-up", - "href": "course/03_InsideFCSFile/index.html#getting-set-up", + "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/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\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" - ] + "text": "Getting Set Up" }, { - "objectID": "course/03_InsideFCSFile/index.html#flowcore", - "href": "course/03_InsideFCSFile/index.html#flowcore", + "objectID": "course/03_InsideFCSFile/slides.html#flowcore", + "href": "course/03_InsideFCSFile/slides.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", - "03 - Inside a .FCS file" - ] + "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/index.html#flowframe", - "href": "course/03_InsideFCSFile/index.html#flowframe", + "objectID": "course/03_InsideFCSFile/slides.html#flowframe", + "href": "course/03_InsideFCSFile/slides.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", - "03 - Inside a .FCS file" - ] + "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/index.html#early-metadata", - "href": "course/03_InsideFCSFile/index.html#early-metadata", + "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\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", - "03 - Inside a .FCS file" - ] + "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/index.html#detector-values", - "href": "course/03_InsideFCSFile/index.html#detector-values", + "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\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", - "03 - Inside a .FCS file" - ] + "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/index.html#middle-metadata", - "href": "course/03_InsideFCSFile/index.html#middle-metadata", + "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\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", - "03 - Inside a .FCS file" - ] + "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/index.html#laser-metadata", - "href": "course/03_InsideFCSFile/index.html#laser-metadata", + "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\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" - ] + "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/index.html#display", - "href": "course/03_InsideFCSFile/index.html#display", + "objectID": "course/03_InsideFCSFile/slides.html#display", + "href": "course/03_InsideFCSFile/slides.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", - "03 - Inside a .FCS file" - ] + "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#flowcore-parameters", - "href": "course/03_InsideFCSFile/index.html#flowcore-parameters", + "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\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" - ] + "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/index.html", - "href": "course/02_FilePaths/index.html", - "title": "02 - File Paths", + "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\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": "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/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", - "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\")]", + "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/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#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_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#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_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#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_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#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_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#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#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#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_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#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_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/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_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/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/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/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/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_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", + "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." + "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_Quarto/slides.html#hyperlinks", - "href": "course/00_Quarto/slides.html#hyperlinks", + "objectID": "course/00_Quarto/index.html#hyperlinks", + "href": "course/00_Quarto/index.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." + "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_Quarto/slides.html#images", - "href": "course/00_Quarto/slides.html#images", + "objectID": "course/00_Quarto/index.html#images", + "href": "course/00_Quarto/index.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." + "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/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_Homeworks/slides.html#discussions-forum", - "href": "course/00_Homeworks/slides.html#discussions-forum", + "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.", + "crumbs": [ + "About", + "Getting Started", + "00 - Getting Help" + ] }, { - "objectID": "course/00_GitHub/slides.html#creating-an-account", - "href": "course/00_GitHub/slides.html#creating-an-account", + "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\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." + "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/slides.html#github-profile", - "href": "course/00_GitHub/slides.html#github-profile", + "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\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…" + "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/slides.html#github-readme", - "href": "course/00_GitHub/slides.html#github-readme", + "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\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." + "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/slides.html#github-repository", - "href": "course/00_GitHub/slides.html#github-repository", + "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\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)" + "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/slides.html#forking-cytometryinr", - "href": "course/00_GitHub/slides.html#forking-cytometryinr", + "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\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." + "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/slides.html#new-folder-from-template", - "href": "course/00_Git/slides.html#new-folder-from-template", + "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\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." + "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/slides.html#creating-subfolders", - "href": "course/00_Git/slides.html#creating-subfolders", + "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\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." + "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/slides.html#creating-files", - "href": "course/00_Git/slides.html#creating-files", + "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\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." + "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/slides.html#qmd-files", - "href": "course/00_Git/slides.html#qmd-files", + "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\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)." + "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_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_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/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#resources", + "href": "course/index.html#resources", + "title": "Cytometry in R", + "section": "Resources", + "text": "Resources\nThe pre-course learning materials are now available, providing walkthroughs of how to set up your workstations with the required software, and exercises to help you become more familiar with the various teaching and coding resources we will be using throughout the course.\nNarrated versions of the walk through materials are now also available via YouTube" }, { - "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/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 Monday, Tuesday and Thursday from 4-5 pm EST in Bressler Research Building Room 7-035. We invite you to make whichever session best fits your schedule. 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_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#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_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#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/UpdatedPullRequest.html", - "href": "course/00_BonusContent/PullConflicts/UpdatedPullRequest.html", - "title": "Updated Pull Request Protocol", + "objectID": "ExistingResources.html", + "href": "ExistingResources.html", + "title": "Existing Resources", "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." + "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_BonusContent/Immport/images/index.html", - "href": "course/00_BonusContent/Immport/images/index.html", - "title": "ImmPort - Downloading Datasets", + "objectID": "index.html", + "href": "index.html", + "title": "About", "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 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.\nIf you did not previously complete the interest form, and would like to be added to our mailing list, please complete the form here\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 Sundays 2200 EST (Monday 0300 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 Monday, Tuesday and Thursday from 4-5 pm EST in Bressler Research Building Conference Room 7-035 (around the corner from the Flow Core).\nWe invite you to make whichever session best fits your schedule. If 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": "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.\nIf you did not complete the original interest form, and would like to be added to our mailing list, please complete the form here\nThe pre-course learning materials are now available via the Course tab. They consist of walkthroughs of how to set up your workstations with the required software, and exercises to help you become more familiar with the various teaching and coding resources we will be using throughout the course.\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 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 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 and posters.\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": "PackageWalkthroughs.html#flowcore", @@ -1457,929 +1624,832 @@ "text": "flowMagic" }, { - "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.\nIf you did not complete the original interest form, and would like to be added to our mailing list, please complete the form here\nThe pre-course learning materials are now available via the Course tab. They consist of walkthroughs of how to set up your workstations with the required software, and exercises to help you become more familiar with the various teaching and coding resources we will be using throughout the course.\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 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 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 and posters.\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": "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.\nIf you did not previously complete the interest form, and would like to be added to our mailing list, please complete the form here\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 Sundays 2200 EST (Monday 0300 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 Monday, Tuesday and Thursday from 4-5 pm EST in Bressler Research Building Conference Room 7-035 (around the corner from the Flow Core).\nWe invite you to make whichever session best fits your schedule. If 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": "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/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\nThe pre-course learning materials are now available, providing walkthroughs of how to set up your workstations with the required software, and exercises to help you become more familiar with the various teaching and coding resources we will be using throughout the course.\nNarrated versions of the walk through materials are now also 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 Monday, Tuesday and Thursday from 4-5 pm EST in Bressler Research Building Room 7-035. We invite you to make whichever session best fits your schedule. 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": "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", + "objectID": "course/00_BonusContent/Immport/images/index.html", + "href": "course/00_BonusContent/Immport/images/index.html", + "title": "ImmPort - Downloading Datasets", "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" + "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": "course/00_Floreada/index.html", - "href": "course/00_Floreada/index.html", - "title": "Using Floreada", + "objectID": "course/00_BonusContent/PullConflicts/UpdatedPullRequest.html", + "href": "course/00_BonusContent/PullConflicts/UpdatedPullRequest.html", + "title": "Updated Pull Request Protocol", "section": "", - "text": "For the YouTube livestream recording, see here\nFor screen-shot slides, click here", - "crumbs": [ - "About", - "Getting Started", - "00 - Floreada" - ] + "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/index.html#floreada", - "href": "course/00_Floreada/index.html#floreada", + "objectID": "course/00_Floreada/slides.html#floreada", + "href": "course/00_Floreada/slides.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" - ] + "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#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_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": "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_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" - ] - }, - { - "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" - ] - }, - { - "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": "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#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.", - "crumbs": [ - "About", - "Getting Started", - "00 - Getting Help" - ] - }, - { - "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": "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/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" - ] + "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/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_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" - ] + "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/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" - ] + "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/MacOS.html", - "href": "course/00_WorkstationSetup/MacOS.html", - "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\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 MacOS. Based on our pre-course interest form, you make up a solid proportion of the course participants." + "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/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/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/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/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/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/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/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#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/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#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/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#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/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#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", - "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#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_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#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_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#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_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#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_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#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#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#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#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#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-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/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", + "02 - File Paths" + ] }, { - "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/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/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/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#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/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/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#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", + "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/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", + "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#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#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#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#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#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#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#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#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#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#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#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#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#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/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#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" + "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#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" + "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/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/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/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/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", + "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", + "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#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" + "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/03_InsideFCSFile/slides.html#flowcore", - "href": "course/03_InsideFCSFile/slides.html#flowcore", + "objectID": "course/03_InsideFCSFile/index.html#flowcore", + "href": "course/03_InsideFCSFile/index.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." + "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", + "03 - Inside a .FCS file" + ] }, { - "objectID": "course/03_InsideFCSFile/slides.html#flowframe", - "href": "course/03_InsideFCSFile/slides.html#flowframe", + "objectID": "course/03_InsideFCSFile/index.html#flowframe", + "href": "course/03_InsideFCSFile/index.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)" + "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", + "03 - Inside a .FCS file" + ] }, { - "objectID": "course/03_InsideFCSFile/slides.html#early-metadata", - "href": "course/03_InsideFCSFile/slides.html#early-metadata", + "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\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\"" + "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", + "03 - Inside a .FCS file" + ] }, { - "objectID": "course/03_InsideFCSFile/slides.html#detector-values", - "href": "course/03_InsideFCSFile/slides.html#detector-values", + "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\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\"" + "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", + "03 - Inside a .FCS file" + ] }, { - "objectID": "course/03_InsideFCSFile/slides.html#middle-metadata", - "href": "course/03_InsideFCSFile/slides.html#middle-metadata", + "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\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\"" + "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", + "03 - Inside a .FCS file" + ] }, { - "objectID": "course/03_InsideFCSFile/slides.html#laser-metadata", - "href": "course/03_InsideFCSFile/slides.html#laser-metadata", + "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\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\"" + "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#display", - "href": "course/03_InsideFCSFile/slides.html#display", + "objectID": "course/03_InsideFCSFile/index.html#display", + "href": "course/03_InsideFCSFile/index.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\"" + "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-parameters", - "href": "course/03_InsideFCSFile/slides.html#flowcore-parameters", + "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\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" + "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/04_IntroToTidyverse/BonusContent.html", From e9dd72d06fcd1c3d5c5843b70c1d95735ca9f4ff Mon Sep 17 00:00:00 2001 From: David Rach Date: Tue, 24 Feb 2026 23:12:20 -0500 Subject: [PATCH 06/10] Week 4 Initial Recording --- course/04_IntroToTidyverse/index.qmd | 4 +++- docs/course/03_InsideFCSFile/index.html | 8 ++++---- docs/course/03_InsideFCSFile/slides.html | 8 ++++---- docs/course/04_IntroToTidyverse/index.html | 4 +++- docs/search.json | 2 +- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/course/04_IntroToTidyverse/index.qmd b/course/04_IntroToTidyverse/index.qmd index dc71ad5..e09e252 100644 --- a/course/04_IntroToTidyverse/index.qmd +++ b/course/04_IntroToTidyverse/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/mZBg_NKXGtM?t=445) + + For screen-shot slides, click [here](/course/04_IntroToTidyverse/slides.qmd) diff --git a/docs/course/03_InsideFCSFile/index.html b/docs/course/03_InsideFCSFile/index.html index 185576f..2122153 100644 --- a/docs/course/03_InsideFCSFile/index.html +++ b/docs/course/03_InsideFCSFile/index.html @@ -540,8 +540,8 @@

flowCore

plotly::ggplotly(plot)
-
- +
+
@@ -587,8 +587,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 47df3a9..4cf0f5d 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/index.html b/docs/course/04_IntroToTidyverse/index.html index 4e25dd5..24d8180 100644 --- a/docs/course/04_IntroToTidyverse/index.html +++ b/docs/course/04_IntroToTidyverse/index.html @@ -367,7 +367,9 @@

04 - Introduction to Tidyverse

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

Background

diff --git a/docs/search.json b/docs/search.json index 98fb589..210270e 100644 --- a/docs/search.json +++ b/docs/search.json @@ -4,7 +4,7 @@ "href": "course/04_IntroToTidyverse/index.html", "title": "04 - Introduction to Tidyverse", "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", From acca3f38b50ce11d043b7b03f3cbcf66b2d4c255 Mon Sep 17 00:00:00 2001 From: David Rach Date: Wed, 25 Feb 2026 18:30:00 -0500 Subject: [PATCH 07/10] CSV (not FCS) --- course/04_IntroToTidyverse/index.qmd | 2 +- course/04_IntroToTidyverse/slides.qmd | 2 +- docs/course/03_InsideFCSFile/index.html | 8 ++++---- docs/course/03_InsideFCSFile/slides.html | 8 ++++---- docs/course/04_IntroToTidyverse/index.html | 2 +- docs/course/04_IntroToTidyverse/slides.html | 2 +- docs/search.json | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/course/04_IntroToTidyverse/index.qmd b/course/04_IntroToTidyverse/index.qmd index e09e252..7b17589 100644 --- a/course/04_IntroToTidyverse/index.qmd +++ b/course/04_IntroToTidyverse/index.qmd @@ -533,7 +533,7 @@ Which is we had wanted to just retrieve the specimen IDs, we could add `pull()` TidyData |> filter(TcellsRounded > 0.3) |> pull(specimen) ``` -And 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 .fcs file. Working within our project folder, this would look like this: +And 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: ```{r} NewName <- paste0("MyNewDataset", ".csv") diff --git a/course/04_IntroToTidyverse/slides.qmd b/course/04_IntroToTidyverse/slides.qmd index 97a8b8f..9b98420 100644 --- a/course/04_IntroToTidyverse/slides.qmd +++ b/course/04_IntroToTidyverse/slides.qmd @@ -1109,7 +1109,7 @@ TidyData |> filter(TcellsRounded > 0.3) |> pull(specimen) ::: {.fragment} ::: {.callout-tip title="."} -And 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 .fcs file. Working within our project folder, this would look like this: +And 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: ::: ::: diff --git a/docs/course/03_InsideFCSFile/index.html b/docs/course/03_InsideFCSFile/index.html index 2122153..012c915 100644 --- a/docs/course/03_InsideFCSFile/index.html +++ b/docs/course/03_InsideFCSFile/index.html @@ -540,8 +540,8 @@

flowCore

plotly::ggplotly(plot)
-
- +
+
@@ -587,8 +587,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 4cf0f5d..0b6c271 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/index.html b/docs/course/04_IntroToTidyverse/index.html index 24d8180..46ff771 100644 --- a/docs/course/04_IntroToTidyverse/index.html +++ b/docs/course/04_IntroToTidyverse/index.html @@ -1399,7 +1399,7 @@

arrange

[1] "INF0032" "INF0159" "INF0179" "INF0166"
-

And 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 .fcs file. Working within our project folder, this would look like this:

+

And 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:

NewName <- paste0("MyNewDataset", ".csv")
 StorageLocation <- file.path("data", NewName)
diff --git a/docs/course/04_IntroToTidyverse/slides.html b/docs/course/04_IntroToTidyverse/slides.html
index 210abe2..931cec0 100644
--- a/docs/course/04_IntroToTidyverse/slides.html
+++ b/docs/course/04_IntroToTidyverse/slides.html
@@ -3307,7 +3307,7 @@ 

arrange

.

-

And 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 .fcs file. Working within our project folder, this would look like this:

+

And 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:

diff --git a/docs/search.json b/docs/search.json index 210270e..cf58c5a 100644 --- a/docs/search.json +++ b/docs/search.json @@ -124,7 +124,7 @@ "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 .fcs 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)", + "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", From 58e2b7d8f621d636f90e4589f39b6cda3e463aa6 Mon Sep 17 00:00:00 2001 From: David Rach Date: Thu, 26 Feb 2026 11:05:00 -0500 Subject: [PATCH 08/10] Updated YouTube link for Week # 4 --- course/04_IntroToTidyverse/index.qmd | 4 ++-- docs/course/03_InsideFCSFile/index.html | 8 ++++---- docs/course/03_InsideFCSFile/slides.html | 8 ++++---- docs/course/04_IntroToTidyverse/index.html | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/course/04_IntroToTidyverse/index.qmd b/course/04_IntroToTidyverse/index.qmd index 7b17589..c5b77de 100644 --- a/course/04_IntroToTidyverse/index.qmd +++ b/course/04_IntroToTidyverse/index.qmd @@ -13,9 +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 recording, see [here](https://youtu.be/mZBg_NKXGtM?t=445) +For the YouTube livestream recording, see [here](https://youtu.be/luC7SY4RJcU?t=204) - + For screen-shot slides, click [here](/course/04_IntroToTidyverse/slides.qmd) diff --git a/docs/course/03_InsideFCSFile/index.html b/docs/course/03_InsideFCSFile/index.html index 012c915..e3c3f75 100644 --- a/docs/course/03_InsideFCSFile/index.html +++ b/docs/course/03_InsideFCSFile/index.html @@ -540,8 +540,8 @@

flowCore

plotly::ggplotly(plot)
-
- +
+
@@ -587,8 +587,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 0b6c271..fd0963c 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/index.html b/docs/course/04_IntroToTidyverse/index.html index 46ff771..7e19156 100644 --- a/docs/course/04_IntroToTidyverse/index.html +++ b/docs/course/04_IntroToTidyverse/index.html @@ -367,8 +367,8 @@

04 - Introduction to Tidyverse

AGPL-3.0 CC BY-SA 4.0

-

For the YouTube livestream recording, see here

-

For screen-shot slides, click here

From d487ee90df959381302813fdcb69ef9a5761bc8e Mon Sep 17 00:00:00 2001 From: Jarkko Toivonen Date: Thu, 26 Feb 2026 21:57:06 +0200 Subject: [PATCH 09/10] Solutions for week_03 in branch week_03 --- .../homeworks/jttoivon/details.png | Bin 0 -> 10729 bytes .../homeworks/jttoivon/keywords.png | Bin 0 -> 35996 bytes .../homeworks/jttoivon/menu.png | Bin 0 -> 7174 bytes .../jttoivon/observables-and-cells.png | Bin 0 -> 3928 bytes .../homeworks/jttoivon/solutions_03.html | 7834 +++++++++++++++++ .../homeworks/jttoivon/solutions_03.qmd | 441 + 6 files changed, 8275 insertions(+) create mode 100644 course/03_InsideFCSFile/homeworks/jttoivon/details.png create mode 100644 course/03_InsideFCSFile/homeworks/jttoivon/keywords.png create mode 100644 course/03_InsideFCSFile/homeworks/jttoivon/menu.png create mode 100644 course/03_InsideFCSFile/homeworks/jttoivon/observables-and-cells.png create mode 100644 course/03_InsideFCSFile/homeworks/jttoivon/solutions_03.html create mode 100644 course/03_InsideFCSFile/homeworks/jttoivon/solutions_03.qmd diff --git a/course/03_InsideFCSFile/homeworks/jttoivon/details.png b/course/03_InsideFCSFile/homeworks/jttoivon/details.png new file mode 100644 index 0000000000000000000000000000000000000000..8814eb5d101773426f583bce0342bcd449286761 GIT binary patch literal 10729 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 literal 0 HcmV?d00001 diff --git a/course/03_InsideFCSFile/homeworks/jttoivon/keywords.png b/course/03_InsideFCSFile/homeworks/jttoivon/keywords.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f06043c756153326c6c0175a188155bb338179 GIT binary patch literal 35996 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 literal 0 HcmV?d00001 diff --git a/course/03_InsideFCSFile/homeworks/jttoivon/menu.png b/course/03_InsideFCSFile/homeworks/jttoivon/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..5456ef001e66bfb9c7054117e3d9c50996e9cf85 GIT binary patch literal 7174 zcmaKR1yqz#*Dk3@NjDNoGe~zxhcqZk*U$|ENC`M}NOuiLcXui+DJ3Z&-4as5J$!fF zyVk$%e}C43Su?!vd(PSW+0TBSJz?sq@;I0jm`F%SIEo4~n&5R6{3c*L0)L_Usu!3_vCJ}@7%N;E!;dzT%bsn4vzLvh^v_k6zbq=<>+>V+9?h$f;?O# z?E*D%vvzc#)wZ^WBDq=9a`SS~T0!mXt!-g2HxpWJPHui$ZY~ZUehyxNExct8BqT~B zMHxwL&y0i259&mg*ZmTl`r+XOXu)4|7!A!&;F>x!WCj|9#0gPskGjo=d3O6I$s$X` z9@F)aJyq`Y%z@U4=9W#U{N|)2Wr?&B6-dZMuA$N$4&SSgG=Z!PXX6r1z(}VIN2Lz$3b3k3DTBy`;3I@gQfi_dTuyK84UHa#k&cctA1`Jz-_w@NShT)mc&lZA}3uy{@O2hr(kGZhh_A4KsHdW-A*;y?;JvKCEPVz)0S$lg3c!a-oJDcrB zX`zgu?F_q*k53b9FRAZOrijO6sm@DLQBif)#P6v*AuTP!6ciK+Dk=>0^eB#wjwmQ7 zo(J`_MHLl~vdqh#ieLJ7_})xb7>J;tqADsYe`#sa-I9DJ>KPM3`tr|`$4a$XKW-Ga z=N~$8ud{(Q8h8%uWP9TIj{Ksg6tB(~3VQu!7X|@`#hi|gtdbH|>#MteH}9LA=#DyW zIAmpIsYKi(kx?K0+T09Q%3nKK@AvsL$OLW)dM+QWuCM<+5FHEY%O4y{ey6KH(2m%1Fbk= zi;urri+K43nkWBx^II6<)YMd!-B0ej+bs##gLyttF|iSGHn~c*x+wVH8!l1RrVuZrb?+O~# z!kQRfs#6)4m360`>UA|!u17B5kWtsRlf3yuO@e`z)*r;V#&t`Tg|M%;cXfAnX!UDI z5E42`es#45fy$4%i&l3rgVT}j^WEvv?`eDygiNYA+N{|n>hIqxnwdR6YXAG}sPkU@ z!-o$qUcBH0ps6tG8uqy!7+11tTWUY6yn|Go> zg%SYFKRKDSySv-d+uQYG|GnSk>SJ6Q@$cgZX^6{slEv|_?u5j|pCZ@+sRIY$y7tBv z3k~+*6MTI90C1zBp`obfv48Ayd2ZKD<+k>AjbiQJzkhT3-Fo_+ml{=@4-y1pllOrC zf5Cz1)`il1yp7GspnAaIPJS|PpkbXA{>S^9mBG=`zLk}1jXb%D@o{6`uI!I@sWCBl z!tVP;f2C8zy!ksiIxerTC!1X@>FMbe6ctwwms)EiLIJo(v&7g+E0pr-0b)R)QPkhQ zwV3Qci~iJtRG++8>Zn95)MUTd6x+D$_1df#V7W?hCY{F;S6o~i z`B6A z9>---i|;AjjVpe`pC#@F!im`gKi-MPGpTKYQn8z_3j;vNii;z_#KL;t=E?OCvzwbe zcB2~eu!MS~yVLA@1)9JHvb@~f?Uhc6&ij8yEX>T~-n7)hZnVtIp;c9!rlzKsyQP(Y zI=&PXD8U?-T4e3)*a1Aw_GZ;6(3Aj+@bJWgvRmKV8wN*1R(SpTIX5>!zUE+#?pb*;EO(Wz2_gMZAa(Q`KSYfm) zjZm*L?nc=h%^Yrl?Wq@QD`yHP2B1EU%gj{K(7*?E$jHeV^Wk(;bz~wobsJ zdMceduDQS${Ki3#Ctt#T+hDe?0_)t_**Wr=SelUQrWJeVhf_uk4UNSP-*hZej+lf5 z84ZnCx8cbGmGpr~>JHv#e zq_wTBkdTnaZ{EDQ-7~tUfAKI@?O(P>U1A|Pr)_4v> zpA%VtJxNnjdeG06GX!G+rA&7CddIJk%;BEzKOPtj59To1E-}MsO}nQcNUlJbYRSxv zk9Q?O^g^Se(6ihi3-z}B#ae|&_M;g>(z?17J3BjP+Y_ikQj(z8b^Ero zw8X{5^{n+q2!Sw^zAZNe)K{k0sOr9mvXBeuD1gqdRd3QpjX3_|-v|q5Tph$;`FHcT zxUB3;U0niT7gIAc@W%XS4HOB4C>!vI`1SU4(9&K>OQWuQycbL6FhJ=V9*$UBGaVWp zE-o+M0BpicgbA|x;qsX7@zZBta&vo(v3q-aeJ*}lF1CFjl#r0%@|q7EpPo_nz3$g% zXYJY47vOR~4*s@%bTk%1<2Qiyvh9_*`HKh=$O99Vm9g*qfv2ZaKE|cWX=q4lY7)%N z%X{cJRzC`GkbV@X#_6IYbQN?s9fd!xykD3|+9R+CmwYOKw zbpV(f;4X#J1m(G0WLIzRMsYd`T69px9=xEzNN9Mvdb>;6^|5(fAq+w&;Dp5t@0IT$K zG(VHVfkQD~LD%HAjn-zgUz&)EP4Zz;wO#-kihR#_N-#s!jSvDaw=1?<_QtL0k{ zI`NW5Kt1P7f!&Ebf@B!p&{D;MCrB}3f8%}>9f()dby96XSzm$yA#d7_#w-iSUq}>M za0yk$Sfg+6>XU>(qLr?3Y z@9jx{62=enNTJ4`Y=&A?8@gCYHlIei>1UtVpOl(d(d;_d?rwV<&!+M6Q+PPk%D1_! z*_6Lqmo(72SdCfIaJ6y)Piby#bv;}ZdO-8w#6hx=pULlm*bH%B3QyBT@5^J8U>wR| z&0_QYx$3xVW>Ng_k>otvllfRnEikjY+pERSk4CIC!fwn$LP9d~@;uIKGVP=GF6+La z3C}e-=gBPrYEC~`XhglHUPl6rPYUom$f{JaHn-_Fj2#JCY@wki9)dTM^fGf9$_tf7 z5`g+rB|eHHIkumZfTGppXJ%tF1Iv{ev?c)w6%FW#fRt1o2IIrQ!THwTpQl+o@cp~_ zN{4SkLc;O&UghhBmn=_;-47y>1l#huM9=jkcf>V6O> zYCt3E*#%m~lc!IUsn!#e7=Hfz$!^q%Wue zil(&1)dt5ERY^%?&|UmWVIj3!Wbm&`4Hg`1Iu+(%(Mg|le)}e$D{gRb%dsr6NHVTK z#dt;yZS8MH_t!d6_jQ;1wPR$0PP9n2Gi7uV64^lejW;?P4Gj$q3=Vb=4`cZow7O3e zs?jJZDZMaTkD?SH00m%Q30fl%e1U<1%F!M@@F(ng4UuhaqQOsTR4ptR5eNh}wQxdU zAPOj6c`q+v%%H&IV<%Qt*11~Cr+IQwD8~P;&p`qo`3o$2e)|2}90|yYOKpA7_CDr^ z=t@gVGd#Bluy>}w=g@D80mP(qYCm5Wt3L`BeAnS41W4KZYcLMlqenJnr4F}f$G4|r zT84(v+1WIbl9F*qt6_<9Hx~yiFJC6h%mMuz(I*1i)xJ1b=s#Zl`m@n7`^5{PXlG<( z|o0&=@HIT@wU!R_miFws^v%}W=a30}ODF7`? zOiV25bE!_S2K0Q>$NP?8Ja%eFO-+K%s}aX0&l7sk8drgu^WTYf?!!BDik6HJWJ-{Z zUr4(y1w#D#+6z!8D}1_KC1Od z1a-1gh$}XgA>2hZWqN65$_T(<4KU$DAGcd-Ar6x22EoYhTliLI{R2oglgr~({U)aX zAh<#MVfx3ETUyEn8X}ObcqAl!qnRT4uxW$Ysm8*?MGK`imG9{SpFyX$7)fJ*@NAM5 zQV;WtiRN*Q=RPd_{0$b}KkF0wHO(JUQz+b+C_K{<(mE`pg9e^Br;? zA^OXAU=7Q-6Gprm*R(#TpPJ4j!mv{;J&MNE704A~#lwJOprd#{mtn@6Bd3!J=o-bq z$3%0N3stAB;*o-*1Z3jV6JhK};vqialamhukRMP7cLfUuVQhU*mA0@b=&Om0#9mul z+b4>>T5N$ufIWMM&{ff?o~R#ztNCi=<>VfLHnuhp``kTJi8dxg%UlZPezZK2#%C+& zbygI7@JT$mCXr1CSfgw!yY=(^>5d(U>grfP zuc=0US3$B7BoB%TG(!Q$WpjW6Ali8B=Xq;tYp>R6?gyG(x0KzXBHkD5jSfp|;O1C6 zh6gJ+_)_jai!u_v)z&^v?z|1EtK$W}jfIUZerU>I2oM<91kjHqrKKllXXc=H?k}~H zdb)@M@8A#Q4LJFOAq0jbCNYuWC!+-v3O3R^k}d!wIRdo!95y||-3mKUY|M#DI7XyF zQgkY%A_&;tOcXj6iRk${y%TPR9Ne+viVVMyyu(7cbo1LxZ z=O+&8hDz8C!*k6c38+ax`wxDMfkANrs3iswk#wL3famB>;WE2iSh?#9BV-~Ia(S`5 zyi8GHr$Xim#R4k7rbaUypEtYH&P9rigJTnvH<*{ydY#)u_*tOzcUj96jRM3RpPrh{ zl)dNW=cj`j-F0`0@Z!V(5-qpjONu!ua^j^${E3D8uRS6BGYo{e6g@1+9q;17}u z1gGfVMb`%-3CxlUfD{1%!55cR_>7kmCjKKdv|mR@FGpINn`2{RB^4E)0G{F6)qJE@ zvkIULxu}-iL8#S^E8-7s9gVq4ND3}`B@y!R zcAZ8!TYPC5fuTzWiqvX4^swj^E#5;VM&Th|8CyOSt;qjSw9c6Lz!_2+85!*mQ&1== zD`UTZ|Na73g_bj1EA$wU4ZA^0g6(XDGcfxuuCA$q&h+3^M8w2DMMML-XjSQ?{Bfy; z@qm?3SH}Z&Wq!EW>~=7p2$&P~dTHkW?d~NdC13skfC7^U^f@*KZ|Hje=hsl_5L^a8 z!dzy3cmxDJW$$Y*|90Mw0FWyJu!lxQCYW-Pgyg{1ctdNPbTgo*zR?{_Ioh?VKWl{cGUb$W(6eodRek^Ln9)dOGp@TD|wx5;{y~@0jE?{ z#EglFsi35kTU4Y_QfvK#aWq?E43IfEj=8xxr^R7MiYqG%D=Jj; z+6FIjtqs)F)U20*hL`{R40#}2di>gn0{~v{ddNo zEG6wfm;a|;9%eDR%k{Q8KEA$DE#=lC2(i=eJaHShfMP#vB+cy@OqQi!n|2jHp)Oh=rvD6RvW+2(@Rhv)(9s$V18tcKJ z?7=Nn=r>D&n)!RUR6FNKK}iWfh8u!QT{Fjzj#7w6cROYeVP}s_Ng?aF-em(s4DzT+ z-K=VPy_;W95C>WW2;9l}ITSc@MtdFFaoLEfMkiL^UhP5uZ#3ZN;CEmUf-_^g&;VggRPyrb$jNy%0AvItGc?{-=~mAi+Te7Nq4wU8(CMn z3Rj3T?{Jka`R4DD7MR6ZTeARL0LBlR@81vBK!=g8R4w~d9QuUa3NlkN$t|aWF-vVm+%Ta~pigOpd6i-mHeW3c`UxCta~7Oc zl7Z%{Yl%p^XcM313+S3m*{!koZZZ<%1T&ddwi--u*y9Myff?_(Lq{8^)-u#XU;o;E zR~x0P4DSmhk|Gpj16B>!qk8#W7vOABzuP&v35*Q#AgPlC)W!-|Nn5kOhecF3POz!U z-X~}ylB#;#^}cDuA#WON(6nxE>cPMdjHdJ$I3)MFmzJm#l^9AZD%@=pC3V|H<}>u> z&!~%(@_R-`qQJ~`f{!=_E`|s^L3pt8=T+1$wTa@Z#V_NZ zD}cFU-(Lr3{GpvViqbqb$|2$`DoKjn!*J}acLN8TI|TYaT3HOVeHVD@?l;|JyOHJO z>w^kkm(8P0FewY&RBMX`oOAJqnp)|q%4r+PCvTrUS(tn$3s15dC@`1x9gei`v=;M) z&M%O@d#dH9j01^J$FEP`(Jd58nIeIlt5@=0^RsP98u=c%B=2|$5GCWi8}3R$n%){A z&a3v2{?TVT9kSG#r?S15w7ZuzG~(k@Q?nf?EMAb6K1iI%viAje{3l=F zuJny3>D&-YxVD2FFO%Lpz!Y4_K;!jt6~u}><++qJbY#RUscSbC@B2}b%~*Q+`EPv= z{5mRSay%{pk)h0FJqwK12z8xiA*rcG8m+$&C%Z^KH#4cJti}YSjf6deF%o+CCYFYG oDxUFPZ<wK$HHop4$dU%-l`TT{HQ5Ux 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 + + + + + + + + + + +Solutions for week03 + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/course/03_InsideFCSFile/homeworks/jttoivon/solutions_03.qmd b/course/03_InsideFCSFile/homeworks/jttoivon/solutions_03.qmd new file mode 100644 index 0000000..887d347 --- /dev/null +++ b/course/03_InsideFCSFile/homeworks/jttoivon/solutions_03.qmd @@ -0,0 +1,441 @@ +--- +title: Solutions for week03 +author: Jarkko Toivonen +date: "`r Sys.Date()`" +format: + html: + df-print: kable + embed-resources: true +toc: true +toc-depth: 5 +--- + + +```{r setup} +#| output: false +library(flowCore) +library(magrittr) +library(glue) +library(tibble) +library(dplyr) +library(tidyr) +library(stringr) +library(purrr) + +# Default printing causes problems when there are dollar signs in the table. +# In those cases use the below function instead of the default method +mykable <- function(df) knitr::kable(df, escape = TRUE, format = "html") +``` + + +## Problem 1 + +> Today’s walkthrough focused on a raw spectral flow cytometry file. Within a subfolder in data you will also find an unmixed .fcs file (2025_07_26…). Using what learned to day, investigate it, and see if you can catalog the main differences that occured to the keyword, parameters and exprs. Did any keywords get added, changed, deleted entirely? etc. + + +```{r} +#| label: Filenames +filename1 <- "data/CellCounts4L_AB_05_ND050_05.fcs" +filename2 <- "data/AdditionalFCSFiles/2025_07_26_AB_02_NY068_02_Ctrl.fcs" +``` + + +```{r} +#| label: Load files +flow_frame1 <- read.FCS(filename=filename1, transformation = FALSE, truncate_max_range = FALSE) +flow_frame2 <- read.FCS(filename=filename2, transformation = FALSE, truncate_max_range = FALSE) +``` + +```{r} +flow_frame1 +``` + +MFI = mean/median fluorescence intensity + +```{r} +flow_frame2 +``` + +For the second file the description column is empty only for those scatter things. +In this case of unmixed .fcs file the name column contains the fluorophore or metal name and the desc column +contains the name of the biomarker we are interested in. + +### exprs + +```{r} +e1 <- exprs(flow_frame1) +e2 <- exprs(flow_frame2) +``` + +```{r} +glue("file1: expr has {ncol(e1)} observables and {nrow(e1)} cells\n") +glue("file2: expr has {ncol(e2)} observables and {nrow(e2)} cells\n") +``` + +The column names differ, but the index names of column names are the same: + +```{r} +df1 <- tibble(id = names(colnames(e1)), name1 = colnames(e1)) +df2 <- tibble(id = names(colnames(e2)), name2 = colnames(e2)) +df <- full_join(df1, df2, by="id") +mykable(df) +``` + +### Parameters + +#### varMetadata + +The varMetadata of the parameters are the same for flow frames: + +```{r} +parameters(flow_frame1)@varMetadata +parameters(flow_frame2)@varMetadata +``` + +#### data + +In the parameters@data slot the range columns are the same except for Time. For other columns there are +differences. + +```{r} +x <- full_join( + as_tibble(parameters(flow_frame1)@data, rownames="id") %>% select(-desc), + as_tibble(parameters(flow_frame2)@data, rownames="id") %>% select(-desc), + by="id") %>% + relocate(id, name.x, name.y, range.x, range.y, minRange.x, minRange.y, maxRange.x, maxRange.y) +mykable(x) +``` + +#### dimLabels and classVersion + +No differences in the dimLabels and __classVersion__ slots: + +```{r} +flow_frame1@parameters@dimLabels +flow_frame2@parameters@dimLabels +``` + + +```{r} +flow_frame1@parameters@.__classVersion__ +flow_frame2@parameters@.__classVersion__ +``` + +### Description + +```{r} +dl1 <- keyword(flow_frame1) +dl2 <- keyword(flow_frame2) +``` + +```{r} +names(dl1) +``` + +```{r} +names(dl2) +``` + +```{r} +glue("file1: description list contains {length(dl1)} keywords") +glue("file2: description list contains {length(dl2)} keywords") +``` + +#### Metadata + +Eight metadata values changed: + +```{r} +init1 <- dl1[1:19] +init2 <- dl2[1:19] +x1 <- dl1[1:19] %>% enframe() %>% unnest(value) +x2 <- dl2[1:19] %>% enframe() %>% unnest(value) +df <- inner_join(x1, x2, by="name") +df %>% filter(value.x != value.y) %>% mykable() +``` + +#### Observables + +Information about observables: + +```{r} +#dl1[20:384] %>% names() # Each observable has 6 descriptions, except time has only 5 +parse_observables <- function(description_list) { + df <- description_list %>% + enframe("keyword") %>% + separate_wider_regex(keyword, c("\\$P", i="[0-9]+", letters="[A-Z]+"), cols_remove = FALSE) %>% + unnest(value) %>% + pivot_wider(names_from=letters, values_from=value, id_cols=i) %>% + mutate(i = as.integer(i)) %>% + arrange(i) + df +} +df1 <- parse_observables(dl1[20:384]) +df2 <- parse_observables(dl2[20:308]) +df1 +``` + +How many detectors of each color do we have? + +```{r} +tmp <- df1 %>% select(N, TYPE) %>% filter(N != "Time") +tmp %>% mutate(color = str_extract(N, "^[A-Z]+") %>% + replace_values("R" ~ "Red", + "UV" ~ "Ultra violet", + "V" ~ "Violet", + "B" ~"Blue" + )) %>% + count(TYPE, color) +``` + +In the second file the detectors are named completely differently. + +```{r} +df2 %>% count(TYPE) +``` + +The second file has in addition the "S" value for each observable, except for observables listed below. + +```{r} +colnames(df1) +colnames(df2) +``` + +Which observables have missing values for some letter. + +```{r} +df1 %>% + filter(if_any(-i, is.na)) # Show rows that have at least one NA value +df2 %>% + filter(if_any(-i, is.na)) # Show rows that have at least one NA value +``` + +#### Middle metadata + +```{r} +middle1 <- dl1[385:398] %>% discard_at("$SPILLOVER") +middle1 +``` + +```{r} +middle2_all <- dl2[309:408] %>% discard_at("$SPILLOVER") +middle2 <- middle2_all %>% discard_at(~str_starts(., "flowCore_")) +middle2 +``` + +File2 has lots of keywords that start with string flowCore_. Don't know what these are. + +```{r} +middle2_all %>% keep_at(~str_starts(., "flowCore_")) +``` + +#### Laser metadata + + +```{r} +laser1 <- dl1 %>% keep_at(~ str_starts(., "LASER")) +laser2 <- dl2 %>% keep_at(~ str_starts(., "LASER")) +glue("file1: {length(laser1)} laser keywords") +glue("file1: {length(laser1)} laser keywords") +``` + +#### Display + + +```{r} +display1 <- dl1 %>% keep_at(~ str_ends(., "DISPLAY")) +display2 <- dl2 %>% keep_at(~ str_ends(., "DISPLAY")) +bind_rows( + tibble(file="file1", display=as.character(display1)), + tibble(file="file2", display=as.character(display2)) +) %>% table() +``` + +#### Last few keywords + + +```{r} +last1 <- dl1[473:476] +last2 <- dl2[468:472] +full_join( + enframe(last1) %>% unnest(value), + enframe(last2) %>% unnest(value), + by="name" +) +``` + +The transformation keyword has been added in the second file. + +## Problem 2 + +> Today’s files were for spectral .fcs files from a Cytek Aurora within a subfolder in data you will also find a conventional flow cytometry file (2025-10_22…). Similarly, explore and see if you find any major differences (beyond the different detector or fluorophore names which will vary based on antibody panel used, etc) + +```{r} +filename3 <- "data/AdditionalFCSFiles/2025-10_22_Contrad.fcs" +``` + + +```{r} +flow_frame3 <- read.FCS(filename=filename3, transformation = FALSE, truncate_max_range = FALSE) +flow_frame3 +``` + +### exprs + +```{r} +e3 <- exprs(flow_frame3) +``` + +```{r} +glue("file3: expr has {ncol(e3)} observables and {nrow(e3)} cells\n") +``` + +### Parameters + +#### varMetadata + +```{r} +parameters(flow_frame3)@varMetadata +``` + +#### data + +```{r} +x <- as_tibble(parameters(flow_frame3)@data, rownames="id") %>% select(-desc) +mykable(x) +``` + +#### dimLabels and classVersion + +```{r} +flow_frame3@parameters@dimLabels +flow_frame3@parameters@.__classVersion__ +``` + +### Description + +```{r} +dl3 <- keyword(flow_frame3) +names(dl3) %>% head(n=40) +names(dl3) %>% tail(n=5) +``` + + + +```{r} +glue("file3: description list contains {length(dl3)} keywords") +``` + +#### Initial metadata + +```{r} +init3 <- dl3[1:34] +init3 +``` + +#### Observables + +```{r} +observable_list3 <- dl3[35:327] +``` + +Those keywords that start with dollar sign. + +```{r} +x <- parse_observables(observable_list3 %>% keep_at(~ str_starts(., "\\$"))) +x +``` + +Instead of TYPE we have G. + +Those keywords that don't start with a dollar sign. + +```{r} +observable_list3 %>% keep_at(~ ! str_starts(., "\\$")) %>% head() +``` + +The DISPLAY keywords were in different place than in the first two files. +Keywords of the form P33BS and P33MS did not appear in the first two files. + +#### Laser metadata + +No information about lasers. + +#### Last few keywords + + +```{r} +last3 <- dl3[328:330] +last3 +``` + +Compensation is applied only to the third file. + +```{r} +c(dl1$`APPLY COMPENSATION`, dl2$`APPLY COMPENSATION`, dl3$`APPLY COMPENSATION`) +``` + +### All metadata + + +```{r} +all1 <- c(init1, middle1, last1) %>% enframe(value = "file1") %>% unnest(file1) +all2 <- c(init2, middle2, last2) %>% enframe(value = "file2") %>% unnest(file2) +all3 <- c(init3, last3) %>% discard_at("SPILL") %>% enframe(value = "file3") %>% unnest(file3) +``` + + +```{r} +all <- all1 %>% + full_join(all2, by="name") %>% + full_join(all3, by="name") +``` + +```{r} +mykable(all) +``` + +Sample volume in nanoliters is not given for the last file. + +```{r} +all %>% filter(name == "$VOL") +``` + +Last file has much larger number of cells: + +```{r} +all %>% filter(name == "$TOT") +``` + +These differ as well. Not sure what they mean. + +```{r} +all %>% filter(name %in% c("$TIMESTEP", "FSC ASF", "THRESHOLD")) +``` + +## Problem 3 + +> If you have access to commercial software, take one of the .fcs files and try to see if you can see similar internal information from within the software. For those without commercial access, try the equivalent process using Floreada.io. + +I used Floreada.io. + +The number of observables and cells can be found on the bottom of the screen: + +![](observables-and-cells.png) + +By right clicking the filename a menu appears: + +![](menu.png) + +Not much details: + +![](details.png) + +A list of all keywords: + +![](keywords.png) + +By selecting the Export events choice the actual intensities can +be saved to a spreadsheet file or opened in a spreadsheet program. + + From c42cd84ce5d1330b8f906bbcf48314960ce9e925 Mon Sep 17 00:00:00 2001 From: Jarkko Toivonen Date: Sat, 28 Feb 2026 13:10:43 +0200 Subject: [PATCH 10/10] Visualize spill matrices and show laser info better --- .../homeworks/jttoivon/solutions_03.html | 1441 +++++++++++++---- .../homeworks/jttoivon/solutions_03.qmd | 88 +- 2 files changed, 1165 insertions(+), 364 deletions(-) diff --git a/course/03_InsideFCSFile/homeworks/jttoivon/solutions_03.html b/course/03_InsideFCSFile/homeworks/jttoivon/solutions_03.html index f82f62a..c12753a 100644 --- a/course/03_InsideFCSFile/homeworks/jttoivon/solutions_03.html +++ b/course/03_InsideFCSFile/homeworks/jttoivon/solutions_03.html @@ -7,7 +7,7 @@ - + Solutions for week03
+ +
+ +
+
+

Solutions for week03

+
+ + + +
+ +
+
Author
+
+

Jarkko Toivonen

+
+
+ +
+
Published
+
+

February 26, 2026

+
+
+ + +
+ + + +
+ + +
+
library(flowCore)
+library(magrittr)
+library(glue)
+library(tibble)
+library(dplyr)
+library(tidyr)
+library(stringr)
+library(purrr)
+
+# Default printing causes problems when there are dollar signs in the table.
+# In those cases use the below function instead of the default method
+mykable <- function(df) knitr::kable(df, escape = TRUE, format = "html")
+
+
+

Problem 1

+
+

Today’s walkthrough focused on a raw spectral flow cytometry file. Within a subfolder in data you will also find an unmixed .fcs file (2025_07_26…). Using what learned to day, investigate it, and see if you can catalog the main differences that occured to the keyword, parameters and exprs. Did any keywords get added, changed, deleted entirely? etc.

+
+
+
filename1 <- "data/CellCounts4L_AB_05_ND050_05.fcs"
+filename2 <- "data/AdditionalFCSFiles/2025_07_26_AB_02_NY068_02_Ctrl.fcs"
+
+
+
flow_frame1 <- read.FCS(filename=filename1, transformation = FALSE, truncate_max_range = FALSE)
+flow_frame2 <- read.FCS(filename=filename2, transformation = FALSE, truncate_max_range = FALSE)
+
+
+
flow_frame1
+
+
flowFrame object 'CellCounts4L_AB_05-ND050-05.fcs'
+with 100 cells and 61 observables:
+       name   desc     range  minRange  maxRange
+$P1    Time     NA    272140         0    272139
+$P2   UV1-A     NA   4194304      -111   4194303
+$P3   UV2-A     NA   4194304      -111   4194303
+$P4   UV3-A     NA   4194304      -111   4194303
+$P5   UV4-A     NA   4194304      -111   4194303
+...     ...    ...       ...       ...       ...
+$P57   R4-A     NA   4194304      -111   4194303
+$P58   R5-A     NA   4194304      -111   4194303
+$P59   R6-A     NA   4194304      -111   4194303
+$P60   R7-A     NA   4194304      -111   4194303
+$P61   R8-A     NA   4194304      -111   4194303
+476 keywords are stored in the 'description' slot
+
+
+

MFI = mean/median fluorescence intensity

+
+
flow_frame2
+
+
flowFrame object '2025_07_26_AB_02_NY068_02_Ctrl.fcs'
+with 100 cells and 43 observables:
+               name      desc     range  minRange    maxRange
+$P1            Time        NA    516839         0     506.501
+$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
+
+
+

For the second file the description column is empty only for those scatter things. In this case of unmixed .fcs file the name column contains the fluorophore or metal name and the desc column contains the name of the biomarker we are interested in.

+
+

exprs

+
+
e1 <- exprs(flow_frame1)
+e2 <- exprs(flow_frame2)
+
+
+
glue("file1: expr has {ncol(e1)} observables and {nrow(e1)} cells\n")
+
+
file1: expr has 61 observables and 100 cells
+
+
glue("file2: expr has {ncol(e2)} observables and {nrow(e2)} cells\n")
+
+
file2: expr has 43 observables and 100 cells
+
+
+

The column names differ, but the index names of column names are the same:

+
+
df1 <- tibble(id = names(colnames(e1)), name1 = colnames(e1))
+df2 <- tibble(id = names(colnames(e2)), name2 = colnames(e2))
+df <- full_join(df1, df2, by="id")
+mykable(df)
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
idname1name2
$P1NTimeTime
$P2NUV1-ASSC-W
$P3NUV2-ASSC-H
$P4NUV3-ASSC-A
$P5NUV4-AFSC-W
$P6NUV5-AFSC-H
$P7NUV6-AFSC-A
$P8NUV7-ASSC-B-W
$P9NUV8-ASSC-B-H
$P10NUV9-ASSC-B-A
$P11NUV10-ABUV395-A
$P12NUV11-ABUV563-A
$P13NUV12-ABUV615-A
$P14NUV13-ABUV661-A
$P15NUV14-ABUV737-A
$P16NUV15-ABUV805-A
$P17NUV16-APacific Blue-A
$P18NSSC-HBV480-A
$P19NSSC-ABV570-A
$P20NV1-ABV605-A
$P21NV2-ABV650-A
$P22NV3-ABV711-A
$P23NV4-ABV750-A
$P24NV5-ABV786-A
$P25NV6-AAlexa Fluor 488-A
$P26NV7-ASpark Blue 550-A
$P27NV8-ASpark Blue 574-A
$P28NV9-ARB613-A
$P29NV10-ARB705-A
$P30NV11-ARB780-A
$P31NV12-APE-A
$P32NV13-APE-Dazzle594-A
$P33NV14-APE-Cy5-A
$P34NV15-APE-Fire 700-A
$P35NV16-APE-Fire 744-A
$P36NFSC-HPE-Vio770-A
$P37NFSC-AAPC-A
$P38NSSC-B-HAlexa Fluor 647-A
$P39NSSC-B-AAPC-R700-A
$P40NB1-AZombie NIR-A
$P41NB2-AAPC-Fire 750-A
$P42NB3-AAPC-Fire 810-A
$P43NB4-AAF-A
$P44NB5-ANA
$P45NB6-ANA
$P46NB7-ANA
$P47NB8-ANA
$P48NB9-ANA
$P49NB10-ANA
$P50NB11-ANA
$P51NB12-ANA
$P52NB13-ANA
$P53NB14-ANA
$P54NR1-ANA
$P55NR2-ANA
$P56NR3-ANA
$P57NR4-ANA
$P58NR5-ANA
$P59NR6-ANA
$P60NR7-ANA
$P61NR8-ANA
+ + +
+
+
+
+
+

Parameters

+
+

varMetadata

+

The varMetadata of the parameters are the same for flow frames:

+
+
parameters(flow_frame1)@varMetadata
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
labelDescription
nameName of Parameter
descDescription of Parameter
rangeRange of Parameter
minRangeMinimum Parameter Value after Transforamtion
maxRangeMaximum Parameter Value after Transformation
+
+
+
parameters(flow_frame2)@varMetadata
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
labelDescription
nameName of Parameter
descDescription of Parameter
rangeRange of Parameter
minRangeMinimum Parameter Value after Transforamtion
maxRangeMaximum Parameter Value after Transformation
+
+
+
+
+
+

data

+

In the parameters@data slot the range columns are the same except for Time. For other columns there are differences.

+
+
x <- full_join(
+    as_tibble(parameters(flow_frame1)@data, rownames="id") %>% select(-desc),
+    as_tibble(parameters(flow_frame2)@data, rownames="id") %>% select(-desc),
+    by="id") %>%
+    relocate(id, name.x, name.y, range.x, range.y, minRange.x, minRange.y, maxRange.x, maxRange.y)
+mykable(x)
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
idname.xname.yrange.xrange.yminRange.xminRange.ymaxRange.xmaxRange.y
$P1TimeTime2721405168390.000000.0000272139506.5013
$P2UV1-ASSC-W41943044194304-111.000000.000041943034194303.0000
$P3UV2-ASSC-H41943044194304-111.000000.000041943034194303.0000
$P4UV3-ASSC-A41943044194304-111.000000.000041943034194303.0000
$P5UV4-AFSC-W41943044194304-111.000000.000041943034194303.0000
$P6UV5-AFSC-H41943044194304-111.000000.000041943034194303.0000
$P7UV6-AFSC-A41943044194304-111.000000.000041943034194303.0000
$P8UV7-ASSC-B-W41943044194304-26.346490.000041943034194303.0000
$P9UV8-ASSC-B-H41943044194304-111.000000.000041943034194303.0000
$P10UV9-ASSC-B-A419430441943040.000000.000041943034194303.0000
$P11UV10-ABUV395-A41943044194304-111.00000-111.000141943034192505.7500
$P12UV11-ABUV563-A41943044194304-111.00000-111.000141943034192505.7500
$P13UV12-ABUV615-A41943044194304-111.00000-111.000141943034192505.7500
$P14UV13-ABUV661-A41943044194304-111.00000-111.000141943034192505.7500
$P15UV14-ABUV737-A41943044194304-111.00000-111.000141943034192505.7500
$P16UV15-ABUV805-A41943044194304-111.00000-111.000141943034192505.7500
$P17UV16-APacific Blue-A41943044194304-111.00000-111.000141943034192505.7500
$P18SSC-HBV480-A419430441943040.00000-111.000141943034192505.7500
$P19SSC-ABV570-A419430441943040.00000-111.000141943034192505.7500
$P20V1-ABV605-A41943044194304-111.00000-111.000141943034192505.7500
$P21V2-ABV650-A41943044194304-111.00000-111.000141943034192505.7500
$P22V3-ABV711-A41943044194304-111.00000-111.000141943034192505.7500
$P23V4-ABV750-A41943044194304-111.00000-111.000141943034192505.7500
$P24V5-ABV786-A41943044194304-111.00000-111.000141943034192505.7500
$P25V6-AAlexa Fluor 488-A41943044194304-111.00000-111.000141943034192505.7500
$P26V7-ASpark Blue 550-A41943044194304-111.00000-111.000141943034192505.7500
$P27V8-ASpark Blue 574-A41943044194304-111.00000-111.000141943034192505.7500
$P28V9-ARB613-A41943044194304-111.00000-111.000141943034192505.7500
$P29V10-ARB705-A41943044194304-111.00000-111.000141943034192505.7500
$P30V11-ARB780-A41943044194304-111.00000-111.000141943034192505.7500
$P31V12-APE-A41943044194304-111.00000-111.000141943034192505.7500
$P32V13-APE-Dazzle594-A41943044194304-111.00000-111.000141943034192505.7500
$P33V14-APE-Cy5-A41943044194304-111.00000-111.000141943034192505.7500
$P34V15-APE-Fire 700-A41943044194304-111.00000-111.000141943034192505.7500
$P35V16-APE-Fire 744-A41943044194304-111.00000-111.000141943034192505.7500
$P36FSC-HPE-Vio770-A419430441943040.00000-111.000141943034192505.7500
$P37FSC-AAPC-A419430441943040.00000-111.000141943034192505.7500
$P38SSC-B-HAlexa Fluor 647-A419430441943040.00000-111.000141943034192505.7500
$P39SSC-B-AAPC-R700-A419430441943040.00000-111.000141943034192505.7500
$P40B1-AZombie NIR-A41943044194304-111.00000-111.000141943034192505.7500
$P41B2-AAPC-Fire 750-A41943044194304-111.00000-111.000141943034192505.7500
$P42B3-AAPC-Fire 810-A41943044194304-111.00000-111.000141943034192505.7500
$P43B4-AAF-A41943044194304-111.00000-111.000041943034194303.0000
$P44B5-ANA4194304NA-111.00000NA4194303NA
$P45B6-ANA4194304NA0.00000NA4194303NA
$P46B7-ANA4194304NA-111.00000NA4194303NA
$P47B8-ANA4194304NA-111.00000NA4194303NA
$P48B9-ANA4194304NA-111.00000NA4194303NA
$P49B10-ANA4194304NA-111.00000NA4194303NA
$P50B11-ANA4194304NA-111.00000NA4194303NA
$P51B12-ANA4194304NA-111.00000NA4194303NA
$P52B13-ANA4194304NA-111.00000NA4194303NA
$P53B14-ANA4194304NA-111.00000NA4194303NA
$P54R1-ANA4194304NA-111.00000NA4194303NA
$P55R2-ANA4194304NA-111.00000NA4194303NA
$P56R3-ANA4194304NA-111.00000NA4194303NA
$P57R4-ANA4194304NA-111.00000NA4194303NA
$P58R5-ANA4194304NA-111.00000NA4194303NA
$P59R6-ANA4194304NA-111.00000NA4194303NA
$P60R7-ANA4194304NA-111.00000NA4194303NA
$P61R8-ANA4194304NA-111.00000NA4194303NA
+ + +
+
+
+
+
+

dimLabels and classVersion

+

No differences in the dimLabels and classVersion slots:

+
+
flow_frame1@parameters@dimLabels
+
+
[1] "rowNames"    "columnNames"
+
+
flow_frame2@parameters@dimLabels
+
+
[1] "rowNames"    "columnNames"
+
+
+
+
flow_frame1@parameters@.__classVersion__
+
+
AnnotatedDataFrame 
+           "1.1.0" 
+
+
flow_frame2@parameters@.__classVersion__
+
+
AnnotatedDataFrame 
+           "1.1.0" 
+
+
+
+
+
+

Description

+
+
dl1 <- keyword(flow_frame1)
+dl2 <- keyword(flow_frame2)
+
+
+
names(dl1)
+
+
  [1] "$BEGINANALYSIS"     "$BEGINDATA"         "$BEGINSTEXT"       
+  [4] "$BTIM"              "$BYTEORD"           "$CYT"              
+  [7] "$CYTOLIB_VERSION"   "$CYTSN"             "$DATATYPE"         
+ [10] "$DATE"              "$ENDANALYSIS"       "$ENDDATA"          
+ [13] "$ENDSTEXT"          "$ETIM"              "$FIL"              
+ [16] "$INST"              "$MODE"              "$NEXTDATA"         
+ [19] "$OP"                "$P10B"              "$P10E"             
+ [22] "$P10N"              "$P10R"              "$P10TYPE"          
+ [25] "$P10V"              "$P11B"              "$P11E"             
+ [28] "$P11N"              "$P11R"              "$P11TYPE"          
+ [31] "$P11V"              "$P12B"              "$P12E"             
+ [34] "$P12N"              "$P12R"              "$P12TYPE"          
+ [37] "$P12V"              "$P13B"              "$P13E"             
+ [40] "$P13N"              "$P13R"              "$P13TYPE"          
+ [43] "$P13V"              "$P14B"              "$P14E"             
+ [46] "$P14N"              "$P14R"              "$P14TYPE"          
+ [49] "$P14V"              "$P15B"              "$P15E"             
+ [52] "$P15N"              "$P15R"              "$P15TYPE"          
+ [55] "$P15V"              "$P16B"              "$P16E"             
+ [58] "$P16N"              "$P16R"              "$P16TYPE"          
+ [61] "$P16V"              "$P17B"              "$P17E"             
+ [64] "$P17N"              "$P17R"              "$P17TYPE"          
+ [67] "$P17V"              "$P18B"              "$P18E"             
+ [70] "$P18N"              "$P18R"              "$P18TYPE"          
+ [73] "$P18V"              "$P19B"              "$P19E"             
+ [76] "$P19N"              "$P19R"              "$P19TYPE"          
+ [79] "$P19V"              "$P1B"               "$P1E"              
+ [82] "$P1N"               "$P1R"               "$P1TYPE"           
+ [85] "$P20B"              "$P20E"              "$P20N"             
+ [88] "$P20R"              "$P20TYPE"           "$P20V"             
+ [91] "$P21B"              "$P21E"              "$P21N"             
+ [94] "$P21R"              "$P21TYPE"           "$P21V"             
+ [97] "$P22B"              "$P22E"              "$P22N"             
+[100] "$P22R"              "$P22TYPE"           "$P22V"             
+[103] "$P23B"              "$P23E"              "$P23N"             
+[106] "$P23R"              "$P23TYPE"           "$P23V"             
+[109] "$P24B"              "$P24E"              "$P24N"             
+[112] "$P24R"              "$P24TYPE"           "$P24V"             
+[115] "$P25B"              "$P25E"              "$P25N"             
+[118] "$P25R"              "$P25TYPE"           "$P25V"             
+[121] "$P26B"              "$P26E"              "$P26N"             
+[124] "$P26R"              "$P26TYPE"           "$P26V"             
+[127] "$P27B"              "$P27E"              "$P27N"             
+[130] "$P27R"              "$P27TYPE"           "$P27V"             
+[133] "$P28B"              "$P28E"              "$P28N"             
+[136] "$P28R"              "$P28TYPE"           "$P28V"             
+[139] "$P29B"              "$P29E"              "$P29N"             
+[142] "$P29R"              "$P29TYPE"           "$P29V"             
+[145] "$P2B"               "$P2E"               "$P2N"              
+[148] "$P2R"               "$P2TYPE"            "$P2V"              
+[151] "$P30B"              "$P30E"              "$P30N"             
+[154] "$P30R"              "$P30TYPE"           "$P30V"             
+[157] "$P31B"              "$P31E"              "$P31N"             
+[160] "$P31R"              "$P31TYPE"           "$P31V"             
+[163] "$P32B"              "$P32E"              "$P32N"             
+[166] "$P32R"              "$P32TYPE"           "$P32V"             
+[169] "$P33B"              "$P33E"              "$P33N"             
+[172] "$P33R"              "$P33TYPE"           "$P33V"             
+[175] "$P34B"              "$P34E"              "$P34N"             
+[178] "$P34R"              "$P34TYPE"           "$P34V"             
+[181] "$P35B"              "$P35E"              "$P35N"             
+[184] "$P35R"              "$P35TYPE"           "$P35V"             
+[187] "$P36B"              "$P36E"              "$P36N"             
+[190] "$P36R"              "$P36TYPE"           "$P36V"             
+[193] "$P37B"              "$P37E"              "$P37N"             
+[196] "$P37R"              "$P37TYPE"           "$P37V"             
+[199] "$P38B"              "$P38E"              "$P38N"             
+[202] "$P38R"              "$P38TYPE"           "$P38V"             
+[205] "$P39B"              "$P39E"              "$P39N"             
+[208] "$P39R"              "$P39TYPE"           "$P39V"             
+[211] "$P3B"               "$P3E"               "$P3N"              
+[214] "$P3R"               "$P3TYPE"            "$P3V"              
+[217] "$P40B"              "$P40E"              "$P40N"             
+[220] "$P40R"              "$P40TYPE"           "$P40V"             
+[223] "$P41B"              "$P41E"              "$P41N"             
+[226] "$P41R"              "$P41TYPE"           "$P41V"             
+[229] "$P42B"              "$P42E"              "$P42N"             
+[232] "$P42R"              "$P42TYPE"           "$P42V"             
+[235] "$P43B"              "$P43E"              "$P43N"             
+[238] "$P43R"              "$P43TYPE"           "$P43V"             
+[241] "$P44B"              "$P44E"              "$P44N"             
+[244] "$P44R"              "$P44TYPE"           "$P44V"             
+[247] "$P45B"              "$P45E"              "$P45N"             
+[250] "$P45R"              "$P45TYPE"           "$P45V"             
+[253] "$P46B"              "$P46E"              "$P46N"             
+[256] "$P46R"              "$P46TYPE"           "$P46V"             
+[259] "$P47B"              "$P47E"              "$P47N"             
+[262] "$P47R"              "$P47TYPE"           "$P47V"             
+[265] "$P48B"              "$P48E"              "$P48N"             
+[268] "$P48R"              "$P48TYPE"           "$P48V"             
+[271] "$P49B"              "$P49E"              "$P49N"             
+[274] "$P49R"              "$P49TYPE"           "$P49V"             
+[277] "$P4B"               "$P4E"               "$P4N"              
+[280] "$P4R"               "$P4TYPE"            "$P4V"              
+[283] "$P50B"              "$P50E"              "$P50N"             
+[286] "$P50R"              "$P50TYPE"           "$P50V"             
+[289] "$P51B"              "$P51E"              "$P51N"             
+[292] "$P51R"              "$P51TYPE"           "$P51V"             
+[295] "$P52B"              "$P52E"              "$P52N"             
+[298] "$P52R"              "$P52TYPE"           "$P52V"             
+[301] "$P53B"              "$P53E"              "$P53N"             
+[304] "$P53R"              "$P53TYPE"           "$P53V"             
+[307] "$P54B"              "$P54E"              "$P54N"             
+[310] "$P54R"              "$P54TYPE"           "$P54V"             
+[313] "$P55B"              "$P55E"              "$P55N"             
+[316] "$P55R"              "$P55TYPE"           "$P55V"             
+[319] "$P56B"              "$P56E"              "$P56N"             
+[322] "$P56R"              "$P56TYPE"           "$P56V"             
+[325] "$P57B"              "$P57E"              "$P57N"             
+[328] "$P57R"              "$P57TYPE"           "$P57V"             
+[331] "$P58B"              "$P58E"              "$P58N"             
+[334] "$P58R"              "$P58TYPE"           "$P58V"             
+[337] "$P59B"              "$P59E"              "$P59N"             
+[340] "$P59R"              "$P59TYPE"           "$P59V"             
+[343] "$P5B"               "$P5E"               "$P5N"              
+[346] "$P5R"               "$P5TYPE"            "$P5V"              
+[349] "$P60B"              "$P60E"              "$P60N"             
+[352] "$P60R"              "$P60TYPE"           "$P60V"             
+[355] "$P61B"              "$P61E"              "$P61N"             
+[358] "$P61R"              "$P61TYPE"           "$P61V"             
+[361] "$P6B"               "$P6E"               "$P6N"              
+[364] "$P6R"               "$P6TYPE"            "$P6V"              
+[367] "$P7B"               "$P7E"               "$P7N"              
+[370] "$P7R"               "$P7TYPE"            "$P7V"              
+[373] "$P8B"               "$P8E"               "$P8N"              
+[376] "$P8R"               "$P8TYPE"            "$P8V"              
+[379] "$P9B"               "$P9E"               "$P9N"              
+[382] "$P9R"               "$P9TYPE"            "$P9V"              
+[385] "$PAR"               "$PROJ"              "$SPILLOVER"        
+[388] "$TIMESTEP"          "$TOT"               "$VOL"              
+[391] "APPLY COMPENSATION" "CHARSET"            "CREATOR"           
+[394] "FCSversion"         "FILENAME"           "FSC ASF"           
+[397] "GROUPNAME"          "GUID"               "LASER1ASF"         
+[400] "LASER1DELAY"        "LASER1NAME"         "LASER2ASF"         
+[403] "LASER2DELAY"        "LASER2NAME"         "LASER3ASF"         
+[406] "LASER3DELAY"        "LASER3NAME"         "LASER4ASF"         
+[409] "LASER4DELAY"        "LASER4NAME"         "ORIGINALGUID"      
+[412] "P10DISPLAY"         "P11DISPLAY"         "P12DISPLAY"        
+[415] "P13DISPLAY"         "P14DISPLAY"         "P15DISPLAY"        
+[418] "P16DISPLAY"         "P17DISPLAY"         "P18DISPLAY"        
+[421] "P19DISPLAY"         "P1DISPLAY"          "P20DISPLAY"        
+[424] "P21DISPLAY"         "P22DISPLAY"         "P23DISPLAY"        
+[427] "P24DISPLAY"         "P25DISPLAY"         "P26DISPLAY"        
+[430] "P27DISPLAY"         "P28DISPLAY"         "P29DISPLAY"        
+[433] "P2DISPLAY"          "P30DISPLAY"         "P31DISPLAY"        
+[436] "P32DISPLAY"         "P33DISPLAY"         "P34DISPLAY"        
+[439] "P35DISPLAY"         "P36DISPLAY"         "P37DISPLAY"        
+[442] "P38DISPLAY"         "P39DISPLAY"         "P3DISPLAY"         
+[445] "P40DISPLAY"         "P41DISPLAY"         "P42DISPLAY"        
+[448] "P43DISPLAY"         "P44DISPLAY"         "P45DISPLAY"        
+[451] "P46DISPLAY"         "P47DISPLAY"         "P48DISPLAY"        
+[454] "P49DISPLAY"         "P4DISPLAY"          "P50DISPLAY"        
+[457] "P51DISPLAY"         "P52DISPLAY"         "P53DISPLAY"        
+[460] "P54DISPLAY"         "P55DISPLAY"         "P56DISPLAY"        
+[463] "P57DISPLAY"         "P58DISPLAY"         "P59DISPLAY"        
+[466] "P5DISPLAY"          "P60DISPLAY"         "P61DISPLAY"        
+[469] "P6DISPLAY"          "P7DISPLAY"          "P8DISPLAY"         
+[472] "P9DISPLAY"          "THRESHOLD"          "TUBENAME"          
+[475] "USERSETTINGNAME"    "WINDOW EXTENSION"  
+
+
+
+
names(dl2)
+
+
  [1] "$BEGINANALYSIS"     "$BEGINDATA"         "$BEGINSTEXT"       
+  [4] "$BTIM"              "$BYTEORD"           "$CYT"              
+  [7] "$CYTOLIB_VERSION"   "$CYTSN"             "$DATATYPE"         
+ [10] "$DATE"              "$ENDANALYSIS"       "$ENDDATA"          
+ [13] "$ENDSTEXT"          "$ETIM"              "$FIL"              
+ [16] "$INST"              "$MODE"              "$NEXTDATA"         
+ [19] "$OP"                "$P10B"              "$P10E"             
+ [22] "$P10N"              "$P10R"              "$P10TYPE"          
+ [25] "$P10V"              "$P11B"              "$P11E"             
+ [28] "$P11N"              "$P11R"              "$P11S"             
+ [31] "$P11TYPE"           "$P11V"              "$P12B"             
+ [34] "$P12E"              "$P12N"              "$P12R"             
+ [37] "$P12S"              "$P12TYPE"           "$P12V"             
+ [40] "$P13B"              "$P13E"              "$P13N"             
+ [43] "$P13R"              "$P13S"              "$P13TYPE"          
+ [46] "$P13V"              "$P14B"              "$P14E"             
+ [49] "$P14N"              "$P14R"              "$P14S"             
+ [52] "$P14TYPE"           "$P14V"              "$P15B"             
+ [55] "$P15E"              "$P15N"              "$P15R"             
+ [58] "$P15S"              "$P15TYPE"           "$P15V"             
+ [61] "$P16B"              "$P16E"              "$P16N"             
+ [64] "$P16R"              "$P16S"              "$P16TYPE"          
+ [67] "$P16V"              "$P17B"              "$P17E"             
+ [70] "$P17N"              "$P17R"              "$P17S"             
+ [73] "$P17TYPE"           "$P17V"              "$P18B"             
+ [76] "$P18E"              "$P18N"              "$P18R"             
+ [79] "$P18S"              "$P18TYPE"           "$P18V"             
+ [82] "$P19B"              "$P19E"              "$P19N"             
+ [85] "$P19R"              "$P19S"              "$P19TYPE"          
+ [88] "$P19V"              "$P1B"               "$P1E"              
+ [91] "$P1N"               "$P1R"               "$P1TYPE"           
+ [94] "$P20B"              "$P20E"              "$P20N"             
+ [97] "$P20R"              "$P20S"              "$P20TYPE"          
+[100] "$P20V"              "$P21B"              "$P21E"             
+[103] "$P21N"              "$P21R"              "$P21S"             
+[106] "$P21TYPE"           "$P21V"              "$P22B"             
+[109] "$P22E"              "$P22N"              "$P22R"             
+[112] "$P22S"              "$P22TYPE"           "$P22V"             
+[115] "$P23B"              "$P23E"              "$P23N"             
+[118] "$P23R"              "$P23S"              "$P23TYPE"          
+[121] "$P23V"              "$P24B"              "$P24E"             
+[124] "$P24N"              "$P24R"              "$P24S"             
+[127] "$P24TYPE"           "$P24V"              "$P25B"             
+[130] "$P25E"              "$P25N"              "$P25R"             
+[133] "$P25S"              "$P25TYPE"           "$P25V"             
+[136] "$P26B"              "$P26E"              "$P26N"             
+[139] "$P26R"              "$P26S"              "$P26TYPE"          
+[142] "$P26V"              "$P27B"              "$P27E"             
+[145] "$P27N"              "$P27R"              "$P27S"             
+[148] "$P27TYPE"           "$P27V"              "$P28B"             
+[151] "$P28E"              "$P28N"              "$P28R"             
+[154] "$P28S"              "$P28TYPE"           "$P28V"             
+[157] "$P29B"              "$P29E"              "$P29N"             
+[160] "$P29R"              "$P29S"              "$P29TYPE"          
+[163] "$P29V"              "$P2B"               "$P2E"              
+[166] "$P2N"               "$P2R"               "$P2TYPE"           
+[169] "$P2V"               "$P30B"              "$P30E"             
+[172] "$P30N"              "$P30R"              "$P30S"             
+[175] "$P30TYPE"           "$P30V"              "$P31B"             
+[178] "$P31E"              "$P31N"              "$P31R"             
+[181] "$P31S"              "$P31TYPE"           "$P31V"             
+[184] "$P32B"              "$P32E"              "$P32N"             
+[187] "$P32R"              "$P32S"              "$P32TYPE"          
+[190] "$P32V"              "$P33B"              "$P33E"             
+[193] "$P33N"              "$P33R"              "$P33S"             
+[196] "$P33TYPE"           "$P33V"              "$P34B"             
+[199] "$P34E"              "$P34N"              "$P34R"             
+[202] "$P34S"              "$P34TYPE"           "$P34V"             
+[205] "$P35B"              "$P35E"              "$P35N"             
+[208] "$P35R"              "$P35S"              "$P35TYPE"          
+[211] "$P35V"              "$P36B"              "$P36E"             
+[214] "$P36N"              "$P36R"              "$P36S"             
+[217] "$P36TYPE"           "$P36V"              "$P37B"             
+[220] "$P37E"              "$P37N"              "$P37R"             
+[223] "$P37S"              "$P37TYPE"           "$P37V"             
+[226] "$P38B"              "$P38E"              "$P38N"             
+[229] "$P38R"              "$P38S"              "$P38TYPE"          
+[232] "$P38V"              "$P39B"              "$P39E"             
+[235] "$P39N"              "$P39R"              "$P39S"             
+[238] "$P39TYPE"           "$P39V"              "$P3B"              
+[241] "$P3E"               "$P3N"               "$P3R"              
+[244] "$P3TYPE"            "$P3V"               "$P40B"             
+[247] "$P40E"              "$P40N"              "$P40R"             
+[250] "$P40S"              "$P40TYPE"           "$P40V"             
+[253] "$P41B"              "$P41E"              "$P41N"             
+[256] "$P41R"              "$P41S"              "$P41TYPE"          
+[259] "$P41V"              "$P42B"              "$P42E"             
+[262] "$P42N"              "$P42R"              "$P42S"             
+[265] "$P42TYPE"           "$P42V"              "$P43B"             
+[268] "$P43E"              "$P43N"              "$P43R"             
+[271] "$P43TYPE"           "$P43V"              "$P4B"              
+[274] "$P4E"               "$P4N"               "$P4R"              
+[277] "$P4TYPE"            "$P4V"               "$P5B"              
+[280] "$P5E"               "$P5N"               "$P5R"              
+[283] "$P5TYPE"            "$P5V"               "$P6B"              
+[286] "$P6E"               "$P6N"               "$P6R"              
+[289] "$P6TYPE"            "$P6V"               "$P7B"              
+[292] "$P7E"               "$P7N"               "$P7R"              
+[295] "$P7TYPE"            "$P7V"               "$P8B"              
+[298] "$P8E"               "$P8N"               "$P8R"              
+[301] "$P8TYPE"            "$P8V"               "$P9B"              
+[304] "$P9E"               "$P9N"               "$P9R"              
+[307] "$P9TYPE"            "$P9V"               "$PAR"              
+[310] "$PROJ"              "$SPILLOVER"         "$TIMESTEP"         
+[313] "$TOT"               "$VOL"               "APPLY COMPENSATION"
+[316] "CHARSET"            "CREATOR"            "FCSversion"        
+[319] "FILENAME"           "flowCore_$P10Rmax"  "flowCore_$P10Rmin" 
+[322] "flowCore_$P11Rmax"  "flowCore_$P11Rmin"  "flowCore_$P12Rmax" 
+[325] "flowCore_$P12Rmin"  "flowCore_$P13Rmax"  "flowCore_$P13Rmin" 
+[328] "flowCore_$P14Rmax"  "flowCore_$P14Rmin"  "flowCore_$P15Rmax" 
+[331] "flowCore_$P15Rmin"  "flowCore_$P16Rmax"  "flowCore_$P16Rmin" 
+[334] "flowCore_$P17Rmax"  "flowCore_$P17Rmin"  "flowCore_$P18Rmax" 
+[337] "flowCore_$P18Rmin"  "flowCore_$P19Rmax"  "flowCore_$P19Rmin" 
+[340] "flowCore_$P1Rmax"   "flowCore_$P1Rmin"   "flowCore_$P20Rmax" 
+[343] "flowCore_$P20Rmin"  "flowCore_$P21Rmax"  "flowCore_$P21Rmin" 
+[346] "flowCore_$P22Rmax"  "flowCore_$P22Rmin"  "flowCore_$P23Rmax" 
+[349] "flowCore_$P23Rmin"  "flowCore_$P24Rmax"  "flowCore_$P24Rmin" 
+[352] "flowCore_$P25Rmax"  "flowCore_$P25Rmin"  "flowCore_$P26Rmax" 
+[355] "flowCore_$P26Rmin"  "flowCore_$P27Rmax"  "flowCore_$P27Rmin" 
+[358] "flowCore_$P28Rmax"  "flowCore_$P28Rmin"  "flowCore_$P29Rmax" 
+[361] "flowCore_$P29Rmin"  "flowCore_$P2Rmax"   "flowCore_$P2Rmin"  
+[364] "flowCore_$P30Rmax"  "flowCore_$P30Rmin"  "flowCore_$P31Rmax" 
+[367] "flowCore_$P31Rmin"  "flowCore_$P32Rmax"  "flowCore_$P32Rmin" 
+[370] "flowCore_$P33Rmax"  "flowCore_$P33Rmin"  "flowCore_$P34Rmax" 
+[373] "flowCore_$P34Rmin"  "flowCore_$P35Rmax"  "flowCore_$P35Rmin" 
+[376] "flowCore_$P36Rmax"  "flowCore_$P36Rmin"  "flowCore_$P37Rmax" 
+[379] "flowCore_$P37Rmin"  "flowCore_$P38Rmax"  "flowCore_$P38Rmin" 
+[382] "flowCore_$P39Rmax"  "flowCore_$P39Rmin"  "flowCore_$P3Rmax"  
+[385] "flowCore_$P3Rmin"   "flowCore_$P40Rmax"  "flowCore_$P40Rmin" 
+[388] "flowCore_$P41Rmax"  "flowCore_$P41Rmin"  "flowCore_$P42Rmax" 
+[391] "flowCore_$P42Rmin"  "flowCore_$P43Rmax"  "flowCore_$P43Rmin" 
+[394] "flowCore_$P4Rmax"   "flowCore_$P4Rmin"   "flowCore_$P5Rmax"  
+[397] "flowCore_$P5Rmin"   "flowCore_$P6Rmax"   "flowCore_$P6Rmin"  
+[400] "flowCore_$P7Rmax"   "flowCore_$P7Rmin"   "flowCore_$P8Rmax"  
+[403] "flowCore_$P8Rmin"   "flowCore_$P9Rmax"   "flowCore_$P9Rmin"  
+[406] "FSC ASF"            "GROUPNAME"          "GUID"              
+[409] "LASER1ASF"          "LASER1DELAY"        "LASER1NAME"        
+[412] "LASER2ASF"          "LASER2DELAY"        "LASER2NAME"        
+[415] "LASER3ASF"          "LASER3DELAY"        "LASER3NAME"        
+[418] "LASER4ASF"          "LASER4DELAY"        "LASER4NAME"        
+[421] "LASER5ASF"          "LASER5DELAY"        "LASER5NAME"        
+[424] "ORIGINALGUID"       "P10DISPLAY"         "P11DISPLAY"        
+[427] "P12DISPLAY"         "P13DISPLAY"         "P14DISPLAY"        
+[430] "P15DISPLAY"         "P16DISPLAY"         "P17DISPLAY"        
+[433] "P18DISPLAY"         "P19DISPLAY"         "P1DISPLAY"         
+[436] "P20DISPLAY"         "P21DISPLAY"         "P22DISPLAY"        
+[439] "P23DISPLAY"         "P24DISPLAY"         "P25DISPLAY"        
+[442] "P26DISPLAY"         "P27DISPLAY"         "P28DISPLAY"        
+[445] "P29DISPLAY"         "P2DISPLAY"          "P30DISPLAY"        
+[448] "P31DISPLAY"         "P32DISPLAY"         "P33DISPLAY"        
+[451] "P34DISPLAY"         "P35DISPLAY"         "P36DISPLAY"        
+[454] "P37DISPLAY"         "P38DISPLAY"         "P39DISPLAY"        
+[457] "P3DISPLAY"          "P40DISPLAY"         "P41DISPLAY"        
+[460] "P42DISPLAY"         "P43DISPLAY"         "P4DISPLAY"         
+[463] "P5DISPLAY"          "P6DISPLAY"          "P7DISPLAY"         
+[466] "P8DISPLAY"          "P9DISPLAY"          "THRESHOLD"         
+[469] "transformation"     "TUBENAME"           "USERSETTINGNAME"   
+[472] "WINDOW EXTENSION"  
+
+
+
+
glue("file1: description list contains {length(dl1)} keywords")
+
+
file1: description list contains 476 keywords
+
+
glue("file2: description list contains {length(dl2)} keywords")
+
+
file2: description list contains 472 keywords
+
+
+
+

Metadata

+

Eight metadata values changed:

+
+
init1 <- dl1[1:19] 
+init2 <- dl2[1:19] 
+x1 <- dl1[1:19] %>% enframe() %>% unnest(value)
+x2 <- dl2[1:19] %>% enframe() %>% unnest(value)
+df <- inner_join(x1, x2, by="name")
+df %>% filter(value.x != value.y) %>% mykable()
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namevalue.xvalue.y
$BEGINDATA3331218357
$BTIM13:55:29.8521:30:10.27
$CYTSNV0333U1368
$DATE04-Aug-202526-Jul-2025
$ENDDATA5771135556
$ETIM13:55:57.0221:31:01.86
$FILCellCounts4L_AB_05-ND050-05.fcsCtrl.fcs
$INSTUMBCCytekbio
+ + +
+
+
+
+
+

Observables

+

Information about observables:

+
+
#dl1[20:384] %>% names()  # Each observable has 6 descriptions, except time has only 5
+parse_observables <- function(description_list) {
+    df <- description_list %>% 
+        enframe("keyword") %>%
+        separate_wider_regex(keyword, c("\\$P", i="[0-9]+", letters="[A-Z]+"), cols_remove = FALSE) %>% 
+        unnest(value) %>%
+        pivot_wider(names_from=letters, values_from=value, id_cols=i) %>%
+        mutate(i = as.integer(i)) %>% 
+        arrange(i)
+    df
+}
+df1 <- parse_observables(dl1[20:384])
+df2 <- parse_observables(dl2[20:308])
+df1
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
iBENRTYPEV
1320,0Time272140TimeNA
2320,0UV1-A4194304Raw_Fluorescence1008
3320,0UV2-A4194304Raw_Fluorescence286
4320,0UV3-A4194304Raw_Fluorescence677
5320,0UV4-A4194304Raw_Fluorescence1022
6320,0UV5-A4194304Raw_Fluorescence616
7320,0UV6-A4194304Raw_Fluorescence506
8320,0UV7-A4194304Raw_Fluorescence661
9320,0UV8-A4194304Raw_Fluorescence514
10320,0UV9-A4194304Raw_Fluorescence710
11320,0UV10-A4194304Raw_Fluorescence377
12320,0UV11-A4194304Raw_Fluorescence469
13320,0UV12-A4194304Raw_Fluorescence434
14320,0UV13-A4194304Raw_Fluorescence564
15320,0UV14-A4194304Raw_Fluorescence975
16320,0UV15-A4194304Raw_Fluorescence737
17320,0UV16-A4194304Raw_Fluorescence1069
18320,0SSC-H4194304Side_Scatter334
19320,0SSC-A4194304Side_Scatter334
20320,0V1-A4194304Raw_Fluorescence352
21320,0V2-A4194304Raw_Fluorescence412
22320,0V3-A4194304Raw_Fluorescence304
23320,0V4-A4194304Raw_Fluorescence217
24320,0V5-A4194304Raw_Fluorescence257
25320,0V6-A4194304Raw_Fluorescence218
26320,0V7-A4194304Raw_Fluorescence303
27320,0V8-A4194304Raw_Fluorescence461
28320,0V9-A4194304Raw_Fluorescence320
29320,0V10-A4194304Raw_Fluorescence359
30320,0V11-A4194304Raw_Fluorescence271
31320,0V12-A4194304Raw_Fluorescence234
32320,0V13-A4194304Raw_Fluorescence236
33320,0V14-A4194304Raw_Fluorescence318
34320,0V15-A4194304Raw_Fluorescence602
35320,0V16-A4194304Raw_Fluorescence372
36320,0FSC-H4194304Forward_Scatter55
37320,0FSC-A4194304Forward_Scatter55
38320,0SSC-B-H4194304Side_Scatter241
39320,0SSC-B-A4194304Side_Scatter241
40320,0B1-A4194304Raw_Fluorescence1013
41320,0B2-A4194304Raw_Fluorescence483
42320,0B3-A4194304Raw_Fluorescence471
43320,0B4-A4194304Raw_Fluorescence473
44320,0B5-A4194304Raw_Fluorescence467
45320,0B6-A4194304Raw_Fluorescence284
46320,0B7-A4194304Raw_Fluorescence531
47320,0B8-A4194304Raw_Fluorescence432
48320,0B9-A4194304Raw_Fluorescence675
49320,0B10-A4194304Raw_Fluorescence490
50320,0B11-A4194304Raw_Fluorescence286
51320,0B12-A4194304Raw_Fluorescence407
52320,0B13-A4194304Raw_Fluorescence700
53320,0B14-A4194304Raw_Fluorescence693
54320,0R1-A4194304Raw_Fluorescence158
55320,0R2-A4194304Raw_Fluorescence245
56320,0R3-A4194304Raw_Fluorescence338
57320,0R4-A4194304Raw_Fluorescence238
58320,0R5-A4194304Raw_Fluorescence191
59320,0R6-A4194304Raw_Fluorescence274
60320,0R7-A4194304Raw_Fluorescence524
61320,0R8-A4194304Raw_Fluorescence243
+
+
+
+

How many detectors of each color do we have?

+
+
tmp <- df1 %>% select(N, TYPE) %>% filter(N != "Time")
+tmp %>% mutate(color = str_extract(N, "^[A-Z]+") %>% 
+    replace_values("R" ~ "Red", 
+    "UV" ~ "Ultra violet",
+    "V" ~ "Violet",
+    "B" ~"Blue"
+    )) %>%
+        count(TYPE, color)
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TYPEcolorn
Forward_ScatterFSC2
Raw_FluorescenceBlue14
Raw_FluorescenceRed8
Raw_FluorescenceUltra violet16
Raw_FluorescenceViolet16
Side_ScatterSSC4
+
+
+
+

In the second file the detectors are named completely differently.

+
+
df2 %>% count(TYPE)
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
TYPEn
Forward_Scatter3
Side_Scatter6
Time1
Unmixed_Fluorescence33
+
+
+
+

The second file has in addition the “S” value for each observable, except for observables listed below.

+
+
colnames(df1)
+
+
[1] "i"    "B"    "E"    "N"    "R"    "TYPE" "V"   
+
+
colnames(df2)
+
+
[1] "i"    "B"    "E"    "N"    "R"    "TYPE" "V"    "S"   
+
+
+

Which observables have missing values for some letter.

+
+
df1 %>%
+    filter(if_any(-i, is.na))   # Show rows that have at least one NA value
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
iBENRTYPEV
1320,0Time272140TimeNA
+
+
+
df2 %>% 
+    filter(if_any(-i, is.na))   # Show rows that have at least one NA value
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
iBENRTYPEVS
1320,0Time516839TimeNANA
2320,0SSC-W4194304Side_Scatter350NA
3320,0SSC-H4194304Side_Scatter350NA
4320,0SSC-A4194304Side_Scatter350NA
5320,0FSC-W4194304Forward_Scatter64NA
6320,0FSC-H4194304Forward_Scatter64NA
7320,0FSC-A4194304Forward_Scatter64NA
8320,0SSC-B-W4194304Side_Scatter266NA
9320,0SSC-B-H4194304Side_Scatter266NA
10320,0SSC-B-A4194304Side_Scatter266NA
43320,0AF-A4194304Unmixed_Fluorescence0NA
+
+
+
+
+
+

Middle metadata

+
+
middle1 <- dl1[385:398] %>% discard_at("$SPILLOVER")
+middle1
+
+
$`$PAR`
+[1] "61"
+
+$`$PROJ`
+[1] "CellCounts4L_AB_05"
+
+$`$TIMESTEP`
+[1] "0.0001"
+
+$`$TOT`
+[1] "100"
+
+$`$VOL`
+[1] "30.31"
+
+$`APPLY COMPENSATION`
+[1] "FALSE"
+
+$CHARSET
+[1] "utf-8"
+
+$CREATOR
+[1] "SpectroFlo 3.3.0"
+
+$FCSversion
+[1] "3"
+
+$FILENAME
+[1] "data/CellCounts4L_AB_05_ND050_05.fcs"
+
+$`FSC ASF`
+[1] "1.21"
+
+$GROUPNAME
+[1] "ND050"
+
+$GUID
+[1] "CellCounts4L_AB_05-ND050-05.fcs"
+
+
+
+
middle2_all <- dl2[309:408] %>% discard_at("$SPILLOVER")
+middle2 <- middle2_all %>% discard_at(~str_starts(., "flowCore_"))
+middle2
+
+
$`$PAR`
+[1] "43"
+
+$`$PROJ`
+[1] "2025_07_26_AB_02"
+
+$`$TIMESTEP`
+[1] "0.0001"
+
+$`$TOT`
+[1] "100"
+
+$`$VOL`
+[1] "60.66"
+
+$`APPLY COMPENSATION`
+[1] "FALSE"
+
+$CHARSET
+[1] "utf-8"
+
+$CREATOR
+[1] "SpectroFlo 3.3.0"
+
+$FCSversion
+[1] "3"
+
+$FILENAME
+[1] "data/AdditionalFCSFiles/2025_07_26_AB_02_NY068_02_Ctrl.fcs"
+
+$`FSC ASF`
+[1] "1.18"
+
+$GROUPNAME
+[1] "NY068_02"
+
+$GUID
+[1] "2025_07_26_AB_02_NY068_02_Ctrl.fcs"
+
+
+

File2 has lots of keywords that start with string flowCore_. Don’t know what these are.

+
+
middle2_all %>% keep_at(~str_starts(., "flowCore_"))
+
+
$`flowCore_$P10Rmax`
+[1] "4194303"
+
+$`flowCore_$P10Rmin`
+[1] "0"
+
+$`flowCore_$P11Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P11Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P12Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P12Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P13Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P13Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P14Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P14Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P15Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P15Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P16Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P16Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P17Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P17Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P18Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P18Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P19Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P19Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P1Rmax`
+[1] "506.501251220703"
+
+$`flowCore_$P1Rmin`
+[1] "0"
+
+$`flowCore_$P20Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P20Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P21Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P21Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P22Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P22Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P23Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P23Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P24Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P24Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P25Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P25Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P26Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P26Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P27Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P27Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P28Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P28Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P29Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P29Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P2Rmax`
+[1] "4194303"
+
+$`flowCore_$P2Rmin`
+[1] "0"
+
+$`flowCore_$P30Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P30Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P31Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P31Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P32Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P32Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P33Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P33Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P34Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P34Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P35Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P35Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P36Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P36Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P37Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P37Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P38Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P38Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P39Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P39Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P3Rmax`
+[1] "4194303"
+
+$`flowCore_$P3Rmin`
+[1] "0"
+
+$`flowCore_$P40Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P40Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P41Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P41Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P42Rmax`
+[1] "4192505.75"
+
+$`flowCore_$P42Rmin`
+[1] "-111.00008392334"
+
+$`flowCore_$P43Rmax`
+[1] "4194303"
+
+$`flowCore_$P43Rmin`
+[1] "-111"
+
+$`flowCore_$P4Rmax`
+[1] "4194303"
+
+$`flowCore_$P4Rmin`
+[1] "0"
+
+$`flowCore_$P5Rmax`
+[1] "4194303"
+
+$`flowCore_$P5Rmin`
+[1] "0"
+
+$`flowCore_$P6Rmax`
+[1] "4194303"
+
+$`flowCore_$P6Rmin`
+[1] "0"
+
+$`flowCore_$P7Rmax`
+[1] "4194303"
+
+$`flowCore_$P7Rmin`
+[1] "0"
+
+$`flowCore_$P8Rmax`
+[1] "4194303"
+
+$`flowCore_$P8Rmin`
+[1] "0"
+
+$`flowCore_$P9Rmax`
+[1] "4194303"
+
+$`flowCore_$P9Rmin`
+[1] "0"
+
+
+
+
+

Laser metadata

+
+
laser1 <- dl1 %>% keep_at(~ str_starts(., "LASER"))
+laser2 <- dl2 %>% keep_at(~ str_starts(., "LASER"))
+glue("file1: {length(laser1)} laser keywords")
+
+
file1: 12 laser keywords
+
+
glue("file1: {length(laser1)} laser keywords")
+
+
file1: 12 laser keywords
+
+
+
+
+

Display

+
+
display1 <- dl1 %>% keep_at(~ str_ends(., "DISPLAY"))
+display2 <- dl2 %>% keep_at(~ str_ends(., "DISPLAY"))
+bind_rows(
+    tibble(file="file1", display=as.character(display1)),
+    tibble(file="file2", display=as.character(display2))
+) %>% table()
+
+
       display
+file    LIN LOG
+  file1   6  55
+  file2   9  34
+
+
+
+
+

Last few keywords

+
+
last1 <- dl1[473:476]
+last2 <- dl2[468:472]
+full_join(
+    enframe(last1) %>% unnest(value),
+    enframe(last2) %>% unnest(value),
+    by="name"
+)
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namevalue.xvalue.y
THRESHOLD(FSC,50000)(FSC,600000)
TUBENAME05Ctrl
USERSETTINGNAMEDTR_CellCountsDR_2025_AB_Nuclear
WINDOW EXTENSION33
transformationNAcustom
+
+
+
+

The transformation keyword has been added in the second file.

+
+
+
+
+

Problem 2

+
+

Today’s files were for spectral .fcs files from a Cytek Aurora within a subfolder in data you will also find a conventional flow cytometry file (2025-10_22…). Similarly, explore and see if you find any major differences (beyond the different detector or fluorophore names which will vary based on antibody panel used, etc)

+
+
+
filename3 <- "data/AdditionalFCSFiles/2025-10_22_Contrad.fcs"
+
+
+
flow_frame3 <- read.FCS(filename=filename3, transformation = FALSE, truncate_max_range = FALSE)
+flow_frame3
+
+
flowFrame object '5855c3b6-7adc-45da-8921-191c97c559f5'
+with 1852 cells and 33 observables:
+       name   desc     range  minRange  maxRange
+$P1    Time     NA    262144       0.0    262143
+$P2   FSC-A     NA    262144       0.0    262143
+$P3   FSC-H     NA    262144       0.0    262143
+$P4   FSC-W     NA    262144       0.0    262143
+$P5   SSC-A     NA    262144     -44.8    262143
+...     ...    ...       ...       ...       ...
+$P29 Y615-H     NA    262144      0.00    262143
+$P30 Y710-A     NA    262144   -111.00    262143
+$P31 Y710-H     NA    262144      0.00    262143
+$P32 Y780-A     NA    262144    -87.33    262143
+$P33 Y780-H     NA    262144      0.00    262143
+330 keywords are stored in the 'description' slot
+
+
+
+

exprs

+
+
e3 <- exprs(flow_frame3)
+
+
+
glue("file3: expr has {ncol(e3)} observables and {nrow(e3)} cells\n")
+
+
file3: expr has 33 observables and 1852 cells
+
+
+
+
+

Parameters

+
+

varMetadata

+
+
parameters(flow_frame3)@varMetadata
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
labelDescription
nameName of Parameter
descDescription of Parameter
rangeRange of Parameter
minRangeMinimum Parameter Value after Transforamtion
maxRangeMaximum Parameter Value after Transformation
+
+
+
+
+
+

data

+
+
x <- as_tibble(parameters(flow_frame3)@data, rownames="id") %>% select(-desc)
+mykable(x)
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
idnamerangeminRangemaxRange
$P1Time2621440.00262143
$P2FSC-A2621440.00262143
$P3FSC-H2621440.00262143
$P4FSC-W2621440.00262143
$P5SSC-A262144-44.80262143
$P6SSC-H2621440.00262143
$P7SSC-W2621440.00262143
$P8R670-A262144-111.00262143
$P9R670-H2621440.00262143
$P10R730-A262144-53.95262143
$P11R730-H2621440.00262143
$P12R780-A262144-77.35262143
$P13R780-H2621440.00262143
$P14B530-A262144-67.20262143
$P15B530-H2621440.00262143
$P16B710-A262144-111.00262143
$P17B710-H2621440.00262143
$P18V450-A262144-64.35262143
$P19V450-H2621440.00262143
$P20V525-A262144-70.85262143
$P21V525-H2621440.00262143
$P22V610-A262144-111.00262143
$P23V610-H2621440.00262143
$P24V670-A262144-111.00262143
$P25V670-H2621440.00262143
$P26Y590-A262144-111.00262143
$P27Y590-H2621440.00262143
$P28Y615-A262144-111.00262143
$P29Y615-H2621440.00262143
$P30Y710-A262144-111.00262143
$P31Y710-H2621440.00262143
$P32Y780-A262144-87.33262143
$P33Y780-H2621440.00262143
+ + +
+
+
+
+
+

dimLabels and classVersion

+
+
flow_frame3@parameters@dimLabels
+
+
[1] "rowNames"    "columnNames"
+
+
flow_frame3@parameters@.__classVersion__
+
+
AnnotatedDataFrame 
+           "1.1.0" 
+
+
+
+
+
+

Description

+
+
dl3 <- keyword(flow_frame3)
+names(dl3) %>% head(n=40)
+
+
 [1] "FCSversion"         "$BEGINANALYSIS"     "$ENDANALYSIS"      
+ [4] "$BEGINSTEXT"        "$ENDSTEXT"          "$BEGINDATA"        
+ [7] "$ENDDATA"           "$FIL"               "$SYS"              
+[10] "$TOT"               "$PAR"               "$MODE"             
+[13] "$BYTEORD"           "$DATATYPE"          "$NEXTDATA"         
+[16] "CREATOR"            "TUBE NAME"          "$SRC"              
+[19] "EXPERIMENT NAME"    "GUID"               "$DATE"             
+[22] "$BTIM"              "$ETIM"              "SETTINGS"          
+[25] "WINDOW EXTENSION"   "EXPORT USER NAME"   "EXPORT TIME"       
+[28] "FSC ASF"            "AUTOBS"             "$INST"             
+[31] "$TIMESTEP"          "SPILL"              "APPLY COMPENSATION"
+[34] "THRESHOLD"          "$P1N"               "$P1R"              
+[37] "$P1B"               "$P1E"               "$P1G"              
+[40] "P1BS"              
+
+
names(dl3) %>% tail(n=5)
+
+
[1] "P33BS"             "P33MS"             "CST BEADS EXPIRED"
+[4] "FILENAME"          "ORIGINALGUID"     
+
+
+
+
glue("file3: description list contains {length(dl3)} keywords")
+
+
file3: description list contains 330 keywords
+
+
+
+

Initial metadata

+
+
init3 <- dl3[1:34]
+init3
+
+
$FCSversion
+[1] "3"
+
+$`$BEGINANALYSIS`
+[1] "0"
+
+$`$ENDANALYSIS`
+[1] "0"
+
+$`$BEGINSTEXT`
+[1] "0"
+
+$`$ENDSTEXT`
+[1] "0"
+
+$`$BEGINDATA`
+[1] "4378"
+
+$`$ENDDATA`
+[1] "248841             "
+
+$`$FIL`
+[1] "44633.fcs"
+
+$`$SYS`
+[1] "Windows 7 6.1"
+
+$`$TOT`
+[1] "1852               "
+
+$`$PAR`
+[1] "33"
+
+$`$MODE`
+[1] "L"
+
+$`$BYTEORD`
+[1] "4,3,2,1"
+
+$`$DATATYPE`
+[1] "F"
+
+$`$NEXTDATA`
+[1] "0"
+
+$CREATOR
+[1] "BD FACSDiva Software Version 8.0.2"
+
+$`TUBE NAME`
+[1] "WE_22_DR_00"
+
+$`$SRC`
+[1] "2025-10"
+
+$`EXPERIMENT NAME`
+[1] "QC_2025-10"
+
+$GUID
+[1] "5855c3b6-7adc-45da-8921-191c97c559f5"
+
+$`$DATE`
+[1] "22-OCT-2025"
+
+$`$BTIM`
+[1] "08:44:52"
+
+$`$ETIM`
+[1] "09:16:22"
+
+$SETTINGS
+[1] "Cytometer"
+
+$`WINDOW EXTENSION`
+[1] "0.00"
+
+$`EXPORT USER NAME`
+[1] "Administrator"
+
+$`EXPORT TIME`
+[1] "22-OCT-2025-08:44:51"
+
+$`FSC ASF`
+[1] "0.77"
+
+$AUTOBS
+[1] "TRUE"
+
+$`$INST`
+[1] " "
+
+$`$TIMESTEP`
+[1] "0.01"
+
+$SPILL
+      R670-A R730-A R780-A B530-A B710-A V450-A V525-A V610-A V670-A Y590-A
+ [1,]      1      0      0      0      0      0      0      0      0      0
+ [2,]      0      1      0      0      0      0      0      0      0      0
+ [3,]      0      0      1      0      0      0      0      0      0      0
+ [4,]      0      0      0      1      0      0      0      0      0      0
+ [5,]      0      0      0      0      1      0      0      0      0      0
+ [6,]      0      0      0      0      0      1      0      0      0      0
+ [7,]      0      0      0      0      0      0      1      0      0      0
+ [8,]      0      0      0      0      0      0      0      1      0      0
+ [9,]      0      0      0      0      0      0      0      0      1      0
+[10,]      0      0      0      0      0      0      0      0      0      1
+[11,]      0      0      0      0      0      0      0      0      0      0
+[12,]      0      0      0      0      0      0      0      0      0      0
+[13,]      0      0      0      0      0      0      0      0      0      0
+      Y615-A Y710-A Y780-A
+ [1,]      0      0      0
+ [2,]      0      0      0
+ [3,]      0      0      0
+ [4,]      0      0      0
+ [5,]      0      0      0
+ [6,]      0      0      0
+ [7,]      0      0      0
+ [8,]      0      0      0
+ [9,]      0      0      0
+[10,]      0      0      0
+[11,]      1      0      0
+[12,]      0      1      0
+[13,]      0      0      1
+
+$`APPLY COMPENSATION`
+[1] "TRUE"
+
+$THRESHOLD
+[1] "FSC,10000"
+
+
+
+
+

Observables

+
+
observable_list3 <- dl3[35:327] 
+
+

Those keywords that start with dollar sign.

+
+
x <- parse_observables(observable_list3 %>% keep_at(~ str_starts(., "\\$")))
+x
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
iNRBEGV
1Time262144320,00.01NA
2FSC-A262144320,01.0600
3FSC-H262144320,01.0600
4FSC-W262144320,01.0600
5SSC-A262144320,01.0280
6SSC-H262144320,01.0280
7SSC-W262144320,01.0280
8R670-A262144320,01.0511
9R670-H262144320,01.0511
10R730-A262144320,01.0515
11R730-H262144320,01.0515
12R780-A262144320,01.0459
13R780-H262144320,01.0459
14B530-A262144320,01.0498
15B530-H262144320,01.0498
16B710-A262144320,01.0525
17B710-H262144320,01.0525
18V450-A262144320,01.0473
19V450-H262144320,01.0473
20V525-A262144320,01.0422
21V525-H262144320,01.0422
22V610-A262144320,01.0542
23V610-H262144320,01.0542
24V670-A262144320,01.0461
25V670-H262144320,01.0461
26Y590-A262144320,01.0683
27Y590-H262144320,01.0683
28Y615-A262144320,01.0662
29Y615-H262144320,01.0662
30Y710-A262144320,01.0597
31Y710-H262144320,01.0597
32Y780-A262144320,01.0527
33Y780-H262144320,01.0527
+
+
+
+

Instead of TYPE we have G.

+

Those keywords that don’t start with a dollar sign.

+
+
observable_list3 %>% keep_at(~ ! str_starts(., "\\$")) %>% head()
+
+
$P1BS
+[1] "0"
+
+$P1MS
+[1] "0"
+
+$P2DISPLAY
+[1] "LIN"
+
+$P2BS
+[1] "0"
+
+$P2MS
+[1] "0"
+
+$P3DISPLAY
+[1] "LIN"
+
+
+

The DISPLAY keywords were in different place than in the first two files. Keywords of the form P33BS and P33MS did not appear in the first two files.

+
+
+

Laser metadata

+

No information about lasers.

+
+
+

Last few keywords

+
+
last3 <- dl3[328:330]
+last3
+
+
$`CST BEADS EXPIRED`
+[1] "False"
+
+$FILENAME
+[1] "data/AdditionalFCSFiles/2025-10_22_Contrad.fcs"
+
+$ORIGINALGUID
+[1] "5855c3b6-7adc-45da-8921-191c97c559f5"
+
+
+

Compensation is applied only to the third file.

+
+
c(dl1$`APPLY COMPENSATION`, dl2$`APPLY COMPENSATION`, dl3$`APPLY COMPENSATION`)
+
+
[1] "FALSE" "FALSE" "TRUE" 
+
+
+
+
+
+

All metadata

+
+
all1 <- c(init1, middle1, last1) %>% enframe(value = "file1") %>% unnest(file1)
+all2 <- c(init2, middle2, last2) %>% enframe(value = "file2") %>% unnest(file2)
+all3 <- c(init3, last3) %>% discard_at("SPILL") %>% enframe(value = "file3") %>% unnest(file3)
+
+
+
all <- all1 %>%
+    full_join(all2, by="name") %>%
+    full_join(all3, by="name")
+
+
+
mykable(all)
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namefile1file2file3
$BEGINANALYSIS000
$BEGINDATA33312183574378
$BEGINSTEXT000
$BTIM13:55:29.8521:30:10.2708:44:52
$BYTEORD4,3,2,14,3,2,14,3,2,1
$CYTAuroraAuroraNA
$CYTOLIB_VERSION2.22.02.22.0NA
$CYTSNV0333U1368NA
$DATATYPEFFF
$DATE04-Aug-202526-Jul-202522-OCT-2025
$ENDANALYSIS000
$ENDDATA5771135556248841
$ENDSTEXT000
$ETIM13:55:57.0221:31:01.8609:16:22
$FILCellCounts4L_AB_05-ND050-05.fcsCtrl.fcs44633.fcs
$INSTUMBCCytekbio
$MODELLL
$NEXTDATA000
$OPDavid RachDavid RachNA
$PAR614333
$PROJCellCounts4L_AB_052025_07_26_AB_02NA
$TIMESTEP0.00010.00010.01
$TOT1001001852
$VOL30.3160.66NA
APPLY COMPENSATIONFALSEFALSETRUE
CHARSETutf-8utf-8NA
CREATORSpectroFlo 3.3.0SpectroFlo 3.3.0BD FACSDiva Software Version 8.0.2
FCSversion333
FILENAMEdata/CellCounts4L_AB_05_ND050_05.fcsdata/AdditionalFCSFiles/2025_07_26_AB_02_NY068_02_Ctrl.fcsdata/AdditionalFCSFiles/2025-10_22_Contrad.fcs
FSC ASF1.211.180.77
GROUPNAMEND050NY068_02NA
GUIDCellCounts4L_AB_05-ND050-05.fcs2025_07_26_AB_02_NY068_02_Ctrl.fcs5855c3b6-7adc-45da-8921-191c97c559f5
THRESHOLD(FSC,50000)(FSC,600000)FSC,10000
TUBENAME05CtrlNA
USERSETTINGNAMEDTR_CellCountsDR_2025_AB_NuclearNA
WINDOW EXTENSION330.00
transformationNAcustomNA
$SYSNANAWindows 7 6.1
TUBE NAMENANAWE_22_DR_00
$SRCNANA2025-10
EXPERIMENT NAMENANAQC_2025-10
SETTINGSNANACytometer
EXPORT USER NAMENANAAdministrator
EXPORT TIMENANA22-OCT-2025-08:44:51
AUTOBSNANATRUE
CST BEADS EXPIREDNANAFalse
ORIGINALGUIDNANA5855c3b6-7adc-45da-8921-191c97c559f5
+ + +
+
+
+

Sample volume in nanoliters is not given for the last file.

+
+
all %>% filter(name == "$VOL")
+
+
+ + + + + + + + + + + + + + + + + +
namefile1file2file3
$VOL30.3160.66NA
+
+
+
+

Last file has much larger number of cells:

+
+
all %>% filter(name == "$TOT")
+
+
+ + + + + + + + + + + + + + + + + +
namefile1file2file3
$TOT1001001852
+
+
+
+

These differ as well. Not sure what they mean.

+
+
all %>% filter(name %in% c("$TIMESTEP", "FSC ASF", "THRESHOLD"))
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namefile1file2file3
$TIMESTEP0.00010.00010.01
FSC ASF1.211.180.77
THRESHOLD(FSC,50000)(FSC,600000)FSC,10000
+
+
+
+
+
+
+

Problem 3

+
+

If you have access to commercial software, take one of the .fcs files and try to see if you can see similar internal information from within the software. For those without commercial access, try the equivalent process using Floreada.io.

+
+

I used Floreada.io.

+

The number of observables and cells can be found on the bottom of the screen:

+

+

By right clicking the filename a menu appears:

+

+

Not much details:

+

+

A list of all keywords:

+

+

By selecting the Export events choice the actual intensities can be saved to a spreadsheet file or opened in a spreadsheet program.

+
+ +
+ + +

}8YkHjQ`PQ-d;57uUev)a+mCsRNhT)TRkG@?xszvDwH%(jtNo$ zOpXxP5lk}PVR>%$mL*7?NFaE8GjGqi_>qdgqq@n)>9BUGU>t@t@KzUH=y3lk=Wq*d zXyf{(E~45kR~I&_N;G`z*&Pf7wC*9igs>D`bC}Jo+MH;hQ>&z#g&-HaX0fxEw6jSS z&y9|($5_h>nfnXb_*!FlQ*3A0%s?martzC=DR|2g5{1{grr|mZz)%mt-F_vwT^l*z zh;K_Bp$N$G5^F*s1_o<>6ok}%GOB-IODQ~)lSN^~o}axGnfmqk(Wm)79eiDLw47$M zsQkA&@=lBnCR{Yi6vcLq-F(3##6Em+E2u(C)3qd%#hl8Wt-Eg*s$?s|;d77ScwYj` zM#?Ki1|x7Krbn0%S@djad?=7be#D;q`U7X>+d<2G_kJN9_W(m&l=Cl_eHgT9tm)tP zzYT7(7Ps0UnWVE`+{XDoi>q^BbeJ$F>U%+~ z30O){dPE<&y_z*uipEb%Gky*GkK^%q^@%ZNlJV6p)SyqbLQxIR9yDP4Gp`i3lq=jU zg*eu*cL&q$N^GN={LSe+f`4}>3A1Cs`|eBf5Gm^QxAhfV^g4LjtM7lOv+?`a1YY)q zhiU7AG6qRwvJZmKSA8N2cJJuM!IlVz&+a2`SEqAyr6xpHT-)!5+}ECnjBWOb*h`KU@iDC=Qb)nPma^^lBXyhd#S)yqFp<+Y?V1m9!gvziV zRDb%?da2uTT&Sl1js>$g7kqW?r6D#9J&IRWWN}e-gT_jFkRYX_E7H=3ESv)|dw*jR zlh-TiQk8H58PLGszqiOqn@GPsysU9&rhE*=dm)O=NZapg$rlx=IcQ2F|GxH5>z}-( z$O8q6^6saNC=Ui4Rr$cumZP-28e(%Jr{WGx%M?+jn$VQ!F^LXHRGQ|Y;H+EjCU5GN zK%uR|cNg(!t0|wNy+^&VWFjX}W@AkH1nU!4C0mtx&E8o__~zxeS|&ntB}#Yu9fbxP zyKs1shbuP@l?KrtwswL_aeby;9G(Fa$lamFZP_~EbnazKUTm?Klm52Le{z@LAp#_O zO8RUDk}(b+IlZRE%3MFbVtk7uL!UbhlQn|c1xE;&4$uGvk5YQKZLZ9-Ji$pc|IK3j zZ^(BrPWw)HK~sO)Tk$$$WcH2nWG?;Exh9$am21+`U=sfV!}=nM=CPSb|c(0-GDmRECGh~9J$wd>M$dN29@#;sXETjIM3F8G;{ylXj&U&jXiwf z(+64-FN zH_Yg{hP76mDGlCy%XKZ>=HPz3KVJXg*3cbJw_?e?yy5=L4_%TB*+f(2=U+y2FWS%8 z_zoKN#4>s%y3l?)`%;4-JqRoLr_(zU_B!6B)jS*IFT2*vEHMs=5C|?5?2%3Y$r8U6 zg!W<5!wABTHveKjcpg~q91_bHzFJ?cO%Kh?#CFBli^Jfd_WgBo;No8fy6NZy$6V|q zWDCxjdxi&`kF02{^FOUQkFECV&`OdcX7WD`$@eTGOQcG04jlyz?=)a`u1I&7+m#bgp&=OgwM zyF)`)U6lD^x+O!VF}P zKNQ5&jBB5~{d796zv?*l01T%Cxze^q##L>f7@8gp<~xexpR+cbG(HZwyjchk-6$is zCOk+*WJ(U*jN;(tob;V?js(&w@A~1xe(Mlo>U`#vX7qJU{k6?C$FUU^(@-t}UUI*X z9WphxB4xi`B->^Q4`048j?qm&%a|ZU0JCXDh*iOeZ5Gg{u)JBpu>^ok!)ZGO27*-- zQ`}NN?vXXuQc~0^CDqj;g3Mlw|1@pNH<~u(3On}KwbOfyQA<8XChYrbSbske?s47` z>E_q+RS~rzHnbuHXU`y6B}aK|wFTEIF=Fx+^t(d)b1M{teSsI{pdA_&XpcamNEF_i za9^1>yUJDrAQPP|{@gxV?MblpA=UKC^OVD7eFdNKX91zk$;X-J7-$J=sUcO9)b{9G z3KLv2mC6;nq!3a;UIe3H>-(8_Vp%tb#Pp@0uO9ocf?z;#Ba}pKC!(Zyx|V&1Q2$`q zd?UcRnEJRVTtR=L6I|7&P{B~>RiN(bO&Re4_m2PvM)a9rx>h{>VB z2X%72^2)>517J-x%!SoTN;~F#D+}E*0VVo0N@RviO@vM(S8kV$AX=XE8tTELh@mT! zta^h|fZgFX+frb!B)eH$5iM6p8}SSJo1W#$ZN-E)SOy#uh!4__qlkfvC`$lf)*-b2 z$a0ls{q2!VKk@%ufS`28(oNp=OPy0C`((A2nk0|rk27fSJRP>Og&OLJ^LOE#Wgp<| zzZY%MvX|!4hjV?a9F^--#DWLdx0l#|4!ltxJ+$2R?~-gJSv#gjGe>ePL~gq4Ro4S! zGvhGql+A0!VW8WdATU$=R)RfuGOEgd^XHEHh-|zAoTieku>I!WYSLePVOkxv0O@FR6&AT0GZOK!Abl?!P3J;&Uv=GNbltW_+_m zI-2+fs`5DAY3=~&t0aaI+E=BIxJ`R*vA7h}vSG{t2VAB1IgF8dxNGpYfDSj)w`_DO zDq--Rm=RSo^PAUkMr4PwUvY-+Qo*G%J}FyvvpKLZxFnfoWw}O%;HoM(f&r)of+_eC zZgvzmIA0&*u1tv_K7u_#I1sy1AT1gn=iZiTXrliz=vH=rEQ6)8zhnaY0F~;oASHE& z*G*?riM^PPr0|u@&~=Q9*}%9_9{5ku4v~7?QR~5}_B6J~vaZ#VcO3uD+n~Mf&!`SE zL_n&Ek)&TNc+4MBMhMBkIdCOUfVC>bh;Bv}}vU?0can{*`f`f%U0GyG+Wq6o{X(Qa%VF&hrv z=5+#K<^#BL6>GIL*tNJqmK>NIZ$ZafMTm(N5xCB&cpa!^B3tip$uo84KCp#}U<2{V z70=m!<)yr*E2;O6v$Y_W;5voAfdZr>NLO&jUCa6eK6pDgq;Uz0*I7n`zeTu} z25ZUzNDhBksoe4$dSGR5%G>22el_Nrp2VzHkJeM@p;TbjzfD(%@4o=))>&DQzF4oC<5-mOK{OXztHkX&)vVpP@_laDj37l1<#flROn zRGUFYP0-YI6p_C7OQiVKQcZZzk=*Ug&aQ+9xZB|fGNbX63g8~eG(8bn)F4MMVdjAE zYv-8f^5x6u^2Yp38KRgPNZ`?+yJH}e845Pp*kM`7)H|Fff&q@ztg3LX5J(l2;khxT z2rxF9GUh5@Q;~f=Wf&d3!7>bt(2|s!pj$nvkCYJt5}7~dG+l{@lIxD&$E}yf^R42d z`_al-x|e_bvV7BW2z*GAsX)OLBn$ll2_vM# z;z==wZg$yqxr1-antwi`Nhj&~{(Fn@mxt7ROZfpvJf%buycm=(XhRjk>3|aRJJvGn z1P4Slb@sV*F{o4sDWhKM1Z(X(F^QI(Fz2;t(ckJ8b|xi#V&g}drXa!jEb>$GuYsW zeemWvE+i`Gonzmp`E`H4-Gu4d+~!wD+1C6_pP_|kG4$#lNR-NF24-&klhJrJb1`g2 zIwueDlyS|pogQ}yCp_%IENf+lbre{C-W`OWgb)Ftro)J|TGS53@%=^$IM&{3y8orb zT-m!J-M5f)t6IZ{L`7NS`I8%@bFbRI(WQ zXXrwC6X-~yfPG<3Inj1{|IF<7*>PN%Qecvl0=7|k1P!{4IsP>V8sF@CdcK4fBIe`3 z*a|wj|%rC zru{w_dh?g02ZA`c#V62*=8F0-eZ~WDz`!fJn^o~s^aMIU+#mF{pF_?hIBA(vNF-j# z(4l&o_O*^4RtCt5227wZI~M0m=af}A31I3)LcTY4g*g{w-Y{qI91j{%VJ8EE?e76% zfBhAPD(_Ud+ZS-^P$VLN135F_bH^y=dW#qwh*_NN|7z8R#uu$zQWE$ki+Cdvn}Idd zOwXatm{v8!>@OA{UwvxeT)ZYmaVAuBxZoEP#TUhW41HB3Z2lM!3?yjLn&KOQ_g zd+ebuwiZ=rpQglhWg`TMnWH|2hlL5{za#tK{h<^=*IZ+;0@h-tn%z0pdCRWa!^l)k&1z?}fk`(F+s(*YP(8J_7PE{PUGi$DaK?A2sT zYjV60kas)M&?E~8($i-`gy|^vlx9OO)Xj%m`m0A_*+V!K-@!EyTp#?Q=@0Db!?ClM z*;KJ%GYe6|RP92ZLX{Q_)5-AroPBJwZsbO4PN;W4E_ju4&F+3MO9W`btl&ylD}lh) zsM+o0%iXgD-d2QxAVB$tI9A9qv>1KfizE2=1|s`;)HkDl8O0C!Mm)eU*?R=oM9or4iI{| zl+%wtXgOaF==#XvM4ll>~7dVkqYFDgc*VE*2764|A*Z_l!=;W?dV>%J=>G& z{6I7fI%~Mza?b9gBo$2aXmLFUib6F06;^jvHtq{Rv_d}QN4{`V8HMYrDsBtrvu0SW zsrd<^=W0>r!g%MX>nAfDQ3E-<2uM?e%ABH7jn5w?s_UQrz^oNAa*LYORP4QawIWaW zwCAE4zB-Z*>|>0BoyQ?8WJ59IigZylWV~6zK!<1|9Jk3N=xo!-iR78FtOTDZ2xUNv zd=s+oAD|!QfFU)E^1L&7#H9_)^&aoxF*W}I&5sB9O6}y_$i507lck98->qD7% z#hd=Kzx6#7nM@3=t%k(ye_lYMe2L+tO}EqaZS38u^RFH@sQGXDRoYmVj>pxXE_I$RKZ1d?!LlCu9PIoP zRz$yV%A(K*Dy0nqANvJd2tL^OQ9nuJ$S?o{O0;gC%zg;b6Mz1jLOCvGa4ja{)n}K_ z*I146{o8rk$usq(pp)fif#!pCZLg@KTP}^ZX3fm(SlSDS&+cB^OH~kG0X2D7=jw;l z!u?E;ly?8ko!~k4pV$K_FI-ZL4=s>KGiiHzI2Lv30OH;D2&at?#9)Z$)8oq1UHfiW zqbbpIv*$OgW{Z|V(i3-lOOr$HDF)uW(_VD33k42i^a8U+p3ZILS#ybo2;YlQmmit{ z^*jEy4by%6=(kj|}JRBfVoW2nwb21jM#sEBAkS?r;QuO)j^KC z>i&pj-_ghaUqaK^5F^{qxY`v+?19(X&Tv0M(fKRXn+W98y&iA288zxk6^fn-Rsiu} zpgnbO!hfe$J(qS7FAGK&>pV>9cpey#45;jj^>OIk&tj~z@(ZfIu;84!f9-M2V9j?$ zW$Eadr$H*0kZXMwhMoN8npDv~-i5Dnnnl<;x`&_OP;x$?wlORm4<+ooMc^KPaXm@u z&9l75uD4ps*%C|;Qmxi2(m@3Ty$T8t*W*}5dVMKqTzuQwn)?k{qUiq4PEH8qAp}Ck z{r4>Kr)HUQ4!1`0(jzzst|zBTCCZ-n>m)kh+UKrAm2j@+EuhLwPv_o`Be}V)nU5C* z1!;EuU|dsr;&e1>qkJ(>T#!B{D9&LbEHX-%lk3s*peITms5C?V}|B?Q&rcEWB=2~+`+k({w z79yq-iJ2pR+{k0_X#Deb$$Ud{ZIW;^V|$)D>OE4I4^-VGH?YEJaG5Ca-*uUDTx zt&#vif^u1Im)*QXuOs_Rp7(t9k$Sj5uBjcUrq_;*jfpdQ?n>%#zi(x%E~9|4i&f+g zq2g|c{Q0}wt6<)h$bqIq>w7)Ogf9P=t-G3b2SpiX9lwu^W1TvV#c`FMH6^T-}6@;>qDOsDN4k8$X) zKhQ?vc46%FRC7}x*6+7JT5QaGy5BBuKH^^SX4uSLvR-kRkXF%hRJzg-h220aI+Ba- z-M&wJm>;S=^L}^it~|!R-A2C5P9tW)>%vZ@&C~^%4y#9WoeKP;k?2h2x z)@FvJ`N48Q)i5cPT4yyJ{uvTQ4)3AO#ZaCxOFMy*a*sZRi))s%kk#Ux+{b=C=H3bW zExQR#YjYh$M#M)+uL=sJ>u*hE0XX9c#if&)M#R=B1A_lSct*0ml&nVWtoWnlUZoKTjS3T_Rv?rD%p-KW#PFHkcIfQ-*u3>8O|Q zs`6vc_Ej=4{?I>W#>}B<=1t+RQt(@*4rLNb}_x zOa8GVBEQMDD-M@s1ljx43fYQuN12W9?+h!%E~g({^9UNazpuadj89YKFEZTb8USbE1LH#v3nc$8#*KHo#y+~py}JA=Hp?PeK8*ovHn(OsyQ~V zdEC3y$}5AwAT(lu&?~IN$|svrFAd&~J(0tLd4nhC(o>u8B4Na9lsfp@L?(LHgHB$wj!V=DbN)NHU)*zlP1n_vMhNVptXcCZEB6sgPB`!{yrTbKOoiS(sSn+XLE|=?;cK)BNYdp-uH7_u6zzee!8RfUV8@ z$FkF_Sk_2G|0&yh4Nzk=Awn6;{-Tm|+gg0Zt|YQP;a150c=%;0f^(11N|oTV3m_!R=pSpzSiVgr(NLP)2V<=&n^ zt^{2Dc9Q${ot?s@Pd;)M4`8sj{&+iQ%jyf(_wnoRsWV*Ga{YeZPL;DPaIfJgcV1z+ zijg6II^0sf8%uU@)Nx>%#aEL^xvo*UD^S-l#*m<(S2DW~fBd`Bi%X$+etR;)2?uTb zO27jtg_vn}fh6ttF;4IvoZue0Z`UNPS`!n@44#0-_bWxQQgbxV#B_}SlY4tlo`Ucz(;&X}_CK@G--wfDoB4|AD^<*@wg zkkx$YR4O7cBRO8e$k;@q)$KBu0_cSvY!BAw zw(^McEWC@u8IQ@6l$}XBU4Y<68St#>9i_LtC6MFYFacz=ha{;Ew%5d8)e(4=LP!tMk zwBIK7sOS~(*{zFEHPg9EwNF4OAZYTkco@~82BWLpds5Yu#@li`KYn=CratmH_{^Km zggUaq)rK{~xu_-=f2)VVA7g&vF(FM0Wc~Y^L6Yy2#8*~tgY0#fr%&HV1SX-qUZlK( ztY|gO$8C4t1Bp{yHp*-~_fyy{sED6;;^D|cu@x1OTBF_OpbVwIEn$HijTHA^fK?5v z9lPijUv4qm_bvRX^|s%s$h>lVh$#Aod6)U>Ol~B!-0E+E@a|#Wnnox&fzf-A8(ddC zm53jE@MYj?0hG`vlU5d_2|)H#?yN{L9g_8?hY=zbH2lXU0EHQg>!T%|za6ish}9}| z+kprw&+dRRAt{&)yPit{#+jtf6-tSYDUu29Fa- zQ#Y@kl!i2%A5a^C+A!B1n7rD@K@&b!+P}^K%cbVKo~R5T+#{;|(F6l2QDtgZ+G%|l z+y3e!0F&iFQ7-$u{py#-3aftZr}IZ+g{9vxhr2}wONFV3EtH_W32-Zb>$foK*X!6~ z%zm=aOd+J{z5Jz?qz`*%WjMmQ<*I*E4VrA+>OJer(rzBcia>;r8b3oqjM#R~yqzqdBCfQ$8+p1P z$qPHq~V9jImu@~$(@&6EvK`k>jbXVAR z70ppdpE=C+dns$jkYdMHZH?)c(BL$(`E_u-0XqvVKX#4z31ag8I(uf}Z2rZ%Ooeo* zqjoaSlIa2Ot7Jr+n#YTZw#x&|>pzgHNuDOyKy^WBx;sy=kW{IGAWjR9pniHe%1Sjh zju)Q*dOt7b_{+aV`jg z<4K8udzM1VtQC4R+j4I%f1KuLs93#)EAadq_T4XQbJyPVNHrNO=APWs;)>B}xXcUN zFmR)n0RjWEPq-*HJh;acgCcqlGqrs>eBC%Dy#cKUZdhW!Q$M=B@cIwMV zXzy_1>2=5_D;GLbb;b2`6Rt*b8QOvj2z6^W>e4viC|GqF$A|`+VBw+i#f0R^6JLa| zNZ>SktloQ9QpEiFn+t`&tl9$g_VqB_qD^NtjW>iuW_N{vOIh`nmR9 z*pqPSq)=QT(v5VHmdHHxs@n5X#vNO}=X-ZBHTg{7zpN_QNt51)KU}_)D0?8^+~(6ONC=p%v_9#X3OyrnP8ojUjre(IS{?jO}sr8Yw#uJsXUrtl;+I?(+hdk)q0^p z1o4=P%Foq7z>Bp`tm#2W- zdzx-{dMWcM)kEhtU&0f7k57etSNZ6BM$^oMMaxDga-NA7k>d9-x=c3S*>AomJjU32 z{iA$=u&24Tm=iFK%5-QC%5I?4JWVMNAS5tUT$;jrkHY*rIe?C{Qw2ow7I0rPm_fy- zJL4Yj-)ox`XnVG8@(#!BN10|S@a#Qr(5VLTo1V6(E=nBzfbL_%pFyiaOaFkx??964 z?PX!EdowFCtCJOA_r+6fH9l^KqQSS1SA?iy0fqAR%NLd~ew1qsDWnM3Fy@*SOSq_e zug$iSW&H<`a67;a*ma|(M7PU~3b_|NWzw`sbjmWNn}HoZA9S>G4Dx<+7a+Oc*);+s z8A90-QUAp!$1k8+LNvJN>70yMD|tk964}HFnZoR~d{()LR{WZA4pkBA;)d|n+Ws450rM4(f=FKIns<*w8rNMd0f-aJ2_(rZ+xlIe6BBBMYfS9or+ z@br4Iw9STZUKe&<+^DI`L3eD-Yn|7x_xw)g{jM35Dbax$GWaq?f+d!Ul$12qDna%4 zK!J4~mtKXnIdBA=>cdm|MDN{aycXcxl~lMyDKupKtp$j8OUsC=CBFSo>55w>5E@-J zj@v0>`ibfk1CLFC%t*%@XFS(ThuhZLc-@o7^N)`3Z{= zPHopl&$$Omct<4RFC`BHbf-MP{?XI;S9T&d4|E<_kqLhqX*f>{DN4Bji*q=k;;Pi^ z%I7Ebl+onyysUSN4dKGw_LEt&6Fo32uKTG0bAO}SIuFAgWA;cmLZHnZkNJ){;QiR+r?R z`3+@_qQ^RV1sqgq@^JCZT&TzU?*^dTVL`oPZY)RCM^mtytscqz7-z5;KaBam%CY*4 zKHQ|`t}1wys8q#&HUis`+YD7-Hzi4rQ}&t^-Eq1?h!q(ZY~q;<++(jEU8$@H>A@f) zkqI&@85!8Ino}GvR`vG2I}G0YMRb&!6Nnq1%$**^UiTX)Ixg$4Fzrr~>gMakWcn8hjXy-cM; zLV`U}`FfRF9=io|e4~n;>w`Jc1(Kmbs64>9>CbLxjfL~^si)vw%Y3X|_X(x=c62Bl zMt?K#)av|MVqsZYns2)&!HE%quP(>gr)&X%0$@M{zA!sHT7ioRC*G4*o(d>tsc|hd zv%ef*ntD{&7m3}}HGef;ve^0|#fXpJaliCjc)bAL$qjn3o|7JMA zsL3!BMvp_5DQ}QHu2gWziADmQ5gqT*aqciQ5ZjJ`*8%sOd$-&C!gY<;|I`i|OYSWn z??>`bC#LBo60m_`zG2D+|gj<6w${pd;<0}zQS%O?`;fmtK0ho%W_U=FY1H^ z&-5^kg>uo$!36T9{%q{G-VWCADJQ(}Bm8mCxgRfp zZ(p(9r%KM%3v03oH-?x_enMUZ@PPE7L#}ccT(p=Q@#XLaW9f9j!j2ZiKY46dqpW^e zXFI5esEXdz`5+_PjyK$MqB+t8uWeQ^$iU!zuZV6n$#<=Nc;-(8?548xKERHU!Ht8h$>0} z@8E}jDeuRGBSCkETJ*L+ih5yWMab3%4U`%iVJ9YByi4s615Bwvt@EIS2nCn{IP3Ne zJY&oYKaO|DPvKgLC&!mHA$?H5|M^Zu(8h>md#m%3r|WHR3U^%pXL(f7-O*4vbc>Ou zNtm_0u&nnzp}A7?patao_&>elLr$W!E2`0lqcEW z^E}j3ydq*p*{e}?0ohD&3y}PDFxt}{iklPaE)7hFkTwRe`aNfY+7P7KiIZDC8)1CU zM0LQZkbmQoUxsE?WrOVnpn;C ztzX@C6q!W&HF&ZmecF?kl&i)%+Q;mWM}^=BW# z@GP%bCJx%C1lx#So2jgpij#kka`oowC0PURi+#)?x&AkvBM=9oxR6e3;2Jg*=)`5l zj(}>=9`vQOH=KX<(IJUF`YkTAQ-3Wf6JsR_v}@wA;1hLcikHnT3%%KDFK_=r|IxxZ`TbY9s`i%;13A zQ*^BsHmFCRJ!a-77ZZgdmE0GXVXKOvN>2FWP|w63HO8vh%>=U?B5yC6-E}$LO^ll8 zg2-jVa;biKHm*YpiD6Tvn(=LVWzIsTqxZF|`&k7EOb^%dCS6BZ6DYjQ#Od>N8I}Tf z0}u5=Z|=g(hkGvzmH1i4Xw!MF<3qjrGhDlisFU9x1B({*VxY3v^xGgf__KN8TAL~e z_g4VfzwA*Kn{nR}WHTnf8hbU$t=9}h@Xgwqq}^AdZ4@;UX`0mZz~I&Lgb05@Ig5PX zCk3b#-Sq}gksC2_7fP@H{m}5fXCc%LLlBs-2L!!fw zusi=NK$NM<*C>Z+&+Z7-^FyK zWF740s?9bYLZ7zHpO7G{fD~yv_fp1puUorPOJP^o(wY=Q(p@xrHH?^rccrpQJA!=W zzDVF|IQgcI21Fv2u7<;py@8m3~bGc!Re<;J~VzE8pfex3U>@p?z*=V zoRuMYvWio`KYKzMHTexPwe?!aTjGp8(m3SZGKrhC>znu*`1YQ2;(GKlO~kY)O=Jk) z)gs(=><=^UF-uPlYsJ65@S`Sm;Z}WtUooLATa7w%RpI4{s0H-f-XirKXdV#s*NZKh z&#)ZX9O)rP`WE;2cF2Ot69%}3H;Y}mcVae2Fh^<@y72_%W@FITlBhQkwAGEao9mmmTxfHcTjDHI?^w%q_{}x*Ba#^BT3Z^|}JtkYBs`PaV*F`9uzxt=yDk zkk~^OaY5;iUE=#feoZeHca`kAO<~gyOV#nO4WIeg#L#!FIQ9%!wOhARk6pwP)&~5Ii(-aXZ2PN9-8Rv&Xc(|Gt^v8kb zrve?QHEXzxV2l44dSi5RbVqh&N7lq8f1F+>rKyRxt3YwM55sE^DnKrJQarrlV1CGW zsC{bI;*@SopRYk!>|QfIiI)8@R<9s&r!Y&}Oef1DsIV(fad`GVi>#aA^PFD`K%_n1X2{pqtEjHjb zs9qK1DE##<$Ng1sM7sBWeM0Ye9$B+uNJAAfNnclcO;AY2*W`GQyqmKDMRZlkyeGC( zSJy04A1(-ldhb_s9qT;9)zGB+TKUT1W{~L=~MvM<`88w}qul1a9*ZbO|i# z@o~p(eCJRzWNR#ZX-TYE$-rGZZnuDAl)~QVVd-3HHkRJy+nC65&6qe3{1%Yx=bzzN z>|n&W-=oxVpLgNdyWr5=I18@glpyZk6Z|+I^2n2VW-Eav=NCElA*!(%(`s+m$P}; zaq;__QXjbm=mW82m8?YmdDuH^@-Nb=2rg-7!Txwba#aYs*PrIpbWkODbQg@SAC@tJn+O6Ssh9MZ_cTSw!|mzT-xcdelR<^>;dUmLH=pu z%x6?-r)oYW&v{(Yufip606M&JZvMdz!7z7|(b(|IUc^CyZa z5?J~?*JrBrtCAGnJHR+{k~&KAJDt<$ zlL9G>Nwi>fW;c$Ga$qOc%1|+L^PEVY>~Yl7D$4f|DTu+?5!qU0ID#$#SytoI-1Qp#vv?(d?S9uLQQk=sY#&cw1V9&hL@lZucq8_>KJIAuH1d|ket|LDGnxGK~E-R)L*j4a4lgHcb!bhtEP+gzL&ds4NrhN1}Hewf3T za+;!HuS&h*3sZ~;_m5oAM*N_g%edT|&Wei{oK9Q+HeByvQk{CJ7@HjRD-|^;iY3E@ zl3>;D!OL9QL#Jaq?9(}qp!61ja~`}ACdi5pbJAT$DTTTqICO|+uvYc6m@>(~w68@a zm`e!x%&vvPa{6DL*!h}-z1m;$<@PJ0NmTgzJGH#jh?a`hzPM!ZH2u$P#ltG0XttTqVvL>?Xco!(CCE#P@`YQC5{iK#h% z)Mc1VF&wTt2@ph}Esf(*v zj7l}u1Gmp1T=8a{h4B&hYxw$+0O;;cGb30P5vm&dlwlPD8QcT{`Fh@3H6y5aFx-{y zNQWJ=XVPI`a&tf2%ZveV7Bjbv`ZXeLu$ihaQF>l~B36FATR&oQid4G%I)cm{XA&;m za}sHCItS>;y+}Z|hBf3J32JUUsgyY+#w8U~yha9_RG}pVF2qZqs>qi+Y=|hn-GryL zKKWuINZ6gSrDRg|V_E93^h4#{My>|xD1O1J2jIztO&3QT-yO5h{$*ePUa)BUK|Q$4 z;q{=pJiS=~VwP9I9sgFu13t<6v{UG|yMO$auZ+$*FZD+=hO)WbZ8GrJQFT(K&$*vG z5?EnC>|u{)(IQVtPki7F#G!r=G^Tvtk7?;tAy(?rJvPx`Mn*zRpLzQbQkfg$YOL5C zO9B~7J1wLb@*=_TW~fCn$cLu~bFuWJwy-O0{Ml}w zboodMYhr#Ib(FlnUMyWl48B952?GnEfMH9*NXoT$vY4xcYRY)?<6y7~7WD8^1mS26 z9fuV@S0uCA%|Ug&yDknhMgd(V!!`1y(Nx~i+)>>v9%?U0zV8#?)WqLt^ThHX$)=lb zMH0oTj|(76W3n0zK1+ZoE9f6;!}ldf@?eK=*CkN2);@NTJXx~z5Oz=*@-BOG8R&Om zYT*oW#S8b6+Qi5opt5hb8}rimC4sYyaW8}8gI;04~l zFUW0IGYrk%-%&-m?{=16KD(3`{xmF&f1skByGf!P6LIojHJb_??VDh7As;4rJ8YZ? z(J-T+MjSGh4JQ#41X%;#b>tC&aHY=gUj4Rw<4N=By^r5q;fh%V!U8!Mq8o(2@*-8-T79)d+@HH%2mK>p=7xor#_28kTfZhiXv zj9`VK3WPb?iya8R{nO#R)!RkpQh1ddteX1w1|kh}p1`%n(;xa0km>ugFb#a?c^bHh zRD7wlD#X#9sUB);G3Z-xp#wO40p7ktXH5xS+@@kq>ZN z&2V*pG6o11%*|3ff}LLYS&B3&Jr8>y*;sJlxjhx|X$wl=k^Wx$)WuIioD^>ij?;Rb z3s%4{vK-mbHo5w+Cx106KWbnYfy0(rc-I+5^74$*7kVb!Ym8k(-Cb!q(u+iMa;7pJ z=5OoKu`c&sN~Ad##(uUoK%)9b3dG6t+(}Mv3JhFN$-_ujFQ$*82PH@!;D$PV4Jn&rjiLiF_+Q{Ypq7l9Jt^ByT-d3b4_p(`QAVB^Am?az+_&5L~kkBoY5+}JCzP& z8WoiFAA$bnO{Y$CmH@#)7Z=IbaoUWWj4^dsXu;iW6V^ej&Wc( zOM!5V(`A*!BU2y-d#Q{?q{fuPapAzM^1b+mkDU(Ixzc9`)A)-s<5rH;j^kL&+?0^G zLojh7yM<`+>=VvUyAIx+37+{d`jM=rV~N?cnME3SZ;{;91e4I?RId9N=+a$}x@kH0&-6f{6b=-CKhS7hbMYRYjvet~eiOWS|;Np0h^KkEqI$-gho zsNRM4MkpZI7%(u$AO7r&c?K3$9Er%Yf8kvDv$@I8juejoT>8yS)7xCds432#ff-GgSwN4)U?0zznBd#$UxUF7Bx}!^7SU zkVNXh7E~DJx6}5q=mtrJKHEuwXB*n$OxfmgJK^YZA_xcTSPr9jyOCHZI`F_Cr zlFb?Dz4@xX&U~`yR!V;`a%xyBHg&C1%l0l(f z!`tJQN}D{H=0QGBKGuQgc=EgHIT6(_UD%T1iYNuXu#bnt&vfLLTUT_VfkVHvCq_%) ze}4RqifT0V1CG5!m=(mRQ&5qLSui$bMD+vhknd;4*R(Zf||%>=Q;unEdVf?B~Z_ z6foXm=mWfWOn#X65`K{R`OUxc_Myjs#=+AS=in`J)*1^45eTnW>))$)R>W^rXA@aG z{B^R+F=n;V7)`HxyK5myH(PCRP{#F*?R;Fd!?@;&q1{f%P=qXxW?TG~3L}7sbv#(q zKYp_PCYit#gQXPf)_KHv5tz>$s?(J!3U!on&i&~utaFi#dT#B`>br?Gj6@IzRmgtLs*8fI z@t1O~7XRZijOVv!UpMdkT7es3&i`H&ct=kPyPYM7i<8Cb>yFSo8wijX3>7|r{+8?q zNsLsPyNHBO@}qHHZpALd77g8(b(ENyv z(6njH>%mZD|11sC_&Hj|yb81!qJzUjgG;WoO2#3tFX=dWM{K6O1x?FefIgOoTk&h5 zQfcEBToUuLWX9EEmr`lF2SfGW`x1Atp&!@Y`0`g&f89ydP0ht@ zNUG$%*{|aG&Us7fOTHrMW1r-Wm$PIYHqON2Eq!_2;|GbCR{*lZUIujsCtScO1XD;zgDf&QB4mfA?U0*I{Dl@k!pu zCrON*`)Il$$0zrl-Uyygf=l__!{EX^1j2xZ2upOFJ;H%i@oTQqxSD2%rL04OhbB)H z&!Z`_4tJ2CYj@7HgAKWZ61#&^(SbqXMz_RFoCK5YQ@o3V5AsVDr(cQAK2}Fp$Fve{oHFU3of9v zxHU4w z3ZJzHq$BYEKbi!7clozYfp%DhU4Fhi7^eaTlrl{wxAmK8WATfe<$s6T)kN zWxkzn+~ZL;b7P5O=Hpl@e(DKkZrJ|GVoDVsHQ5 z1PHMj@?^!~rp+Ynt*yBjmWJj#_n}3!nGEU`k50*rq7xo##}N?s=<$ zEvs&puFZDaq8ra$-6J_XRQox`a7CgsFCZ>@Q9l9&4bOAec{2AH4sDqe`-&JjiqTpx z1RuTqdUVaUJ>PQE0(W;SNAHrgthbF4o=B^yqt_JY;!yiLdnb-6u?j{b=QS6ihU0a8 z_miBU>kHm40S})|k6t;BJ0Ck`xy4ZTDI22$H;Y2}ee3H`>-Ib4=Y;3&3RPC#oo4qh zL7}~5PM9f<$fsK<2aS+r3}lGQ<%`r58wElo*PPmocQs0ZQr}sfYAeU&;= zI6nE=tj=O&_jJ{@Ze<`>yPwpyA|{qj7Ca_+)RR;XXc3o^}jdXgy99Kxo`oiP6R@ncpZ>{@e2$FH^D5%hAYa&X->rhu=X-+T4a zm~kR`dex#90(at&rnyKH0s?|2tCjat3{{IPTdn%`6&kTIF{UNdk*!$R*tR7kpTm28 zh~-N`$NA>)sePv!8yjyqx6Eyps$~U#N4b>RYt$NYqjl!h{;cM=SuqJDa{5QC@cyqquch*d1Z-M&pU07?-P5(xqNiE`ng}^S;3MYe23?J4cDD-Y7CTQ z%LTKV+1(3PWyS)xG>(QV(<}Em(-qQN*%M__Pxe@ZW0h(?u=;BD%my~n-K;qVMh?og*qsQK0+%Th z>VA6YhGPd(Cxli-SzTD3T+Vj`*h87;yXKjqqCf8BeyxA0NB$5STVi zs}-ZVvfuv>c0Zibx*1?K{2d)k=;*bEYp`-y_p}M;NKWF=Ylrprf_21bRyoT)SUj?uJ z=={G+EGCH8#@t|lwuEr42BAXs288g&m;VUi|LAxG;`~3S3rNb}qvn5>NlYyNo-mC5 zj{$}d6AN@@LK@w_ZD*wT{zvvMF~fwO9aYfwUGmG3ZEzSB_?_8y@Td78#eYs*5WLR+ z%=xt!SHR3d+Pd(Z8G`|2zej*P(p~TVo~QrFr#tHcnfHHO9|YNLQhqND*BQruGN3`I^t*lFbz;rXOdnxXOG}hs`G=(KI19T`d=C zhVQ+i>G0oo!jIu@Ec>#XgSC0Y8J}=}yCaBEQMB8Fha$uAHQVnNYkM#7r5DAq7i!U1 zKGmBpe$Go)P)N7Z6Lcdt4@a~c({KWOv%rY+hO(V0yK8rMc`Rk{S|{mJRSC{>H2+mx~_t<{G8ZiTcEp8Jt$$T z^dSdLCx8Lj8sa%F%5A}=y6+`GHLve0?~up7J(Jp#CTB0tU4AceNH$xA>IHHC-#dApKa1e}R$VkId~=8N?{A=0`l}ZTMUBO8Pdk#hE1opF3ISO!G$!*lokjoJWd~AfACpfEX|lG&e)SP@>7D+#tBybj zn%Or>zFl8W@cOA3!ieq5o41}+vAg<`8uO}$R5Snl=eCe@m%pyBC+R21r*o@fFo|LD zu?}e%JI-)FULZqNim$1{U2NZN`5L`#!Y6Cw^4qNT0h=17{Pkv}8%Gt_!W~>w1FF|Q z-z0dQdD6~P98sTKQ5_G5-(^e7yF4=~VfFS@> zSNzeGcXc2Rhn^ET7+7xOVZ62A$_WC+zyp3)4bvapk(fjz0vSF8}GXKMq(g^zwE& zUEOo-OoV!x_sEw2{>pzW<|6jzB{|Z}d+Id-)4px*xMHtF|7{LpXrB{}qq-0U7;e!v{6?Yx z@v@J94^yP|U=YpJA4vSVRv!zy!iWk!>dT9ZZ1ZdyE?|h-)016x`!r5~&;5)$4Dm-2 z{58shu5`3^(RK;ZpvNaHg~j%4^vp+!vY=t41x#3zKD8h+8!9lY^*F0s1p=EG7vSND zb*Yr2(Y+rY7Z(St7MU7=0bcAy5VPiVDl{JSaC;Ng(G|F)Cz7oeGmqmy>LaDcz-U>0-4Jzei!>n z(Yc2!*yn1huQjX#E6wXs>;6&urOa)6H_L~a3berzJT}X(=i}aM;ElMP9wVuCx}WgS zN47Fdeg;3Z9I%(Tnp<9(O1YB&_MVK7C23fPV&CmV=<-5xY)pkU;GqaPOpiMKoNu5C zF@%=?e2Y1@Q&jBZ>&sB7hV0rbtp99-wczZi#n2} zrKLG8li$*(E+5L#ss*~3MyW{l*176ni5aL^1wNiCJ0RMKv25egntudWejr@2VDnT^ zVSxaq`NVOp=%JA^ zO@$)2lOVT)7`x@u`sprpVZnjZc&f7XdO|?dwTCv(BrYc_(K!Q(pZj>L`?S_&4;wSW z!P3ach`PZfn9#Ijf+cppML70m!#bcl#!vPd1Wta4^1rA@>OfaqW9M*AP?UmOV?z`UB=^$PC|j|+ScfvFI@F!_GPX4{Z-KO1$1FfJ+_b-=$dP7%0Y$&h8-AP%GqFKl#W(b~FxxVB1jZ|uL6Xv(72!7v2Uo*7|DmCb<&Js3Q|^`Slm;KEpW6T?NT<81X8*O(1uZfgacS$ zY5O3AUUjwV^aQ|nxpFkEucynbmriz1PsT})exeO)B2!4;K8G!lSY3e`^ehsQReVBk zKUj5;zulPq7%Q5S^@tE+uwxb~L_wyEH_aGqR#NZha|iPAMq1r$5dn-Av@#Cq9>)nx z%`j#XkBJMw$NO%>K!4)hYJrFKj^X*PqX-JXq|nShapn z^y-IWQy4LhGgQ=a0~yrZ@!acA?{9mT`&LvTb;LN|1cc0TQr!wAo&@lvR$LuV?`et-YP%s$(fLds+V2 z@fAzU(h*>kumu#MBTzj#Z!}WszdT;n7Z}c6f4gW2V z2~j{fj2~8v)8cwTKgUFFsk5@P7k%dQ_VYWP(L9+cA3t7QSXfYRAO#v0{TMsF-Zc60 z(b{F#9Bq_gD00q*HNkh|aX_^#_n6dhSg{_|g^2OmsdMJelB`Lh3=+o1ST-Nu*N-9C zzW?jJn_jnp%c^Dd*IP@8Y^x>YKs`ig2J9w3ferj6+onS1#Wfd~DJh3FV#lK?WW@2M zasS2GQ^zSOfZmu-yhHv7kMvN0)T9m)YJ!oF)D@6scxeilo_nv1$FqeN&B` zS#@wkyb>~Ey_tbN=`_hi8qybR6lvVqN5xQQ!G_f(6o%dHkRa=joM)T|{+8C5fEi&r z-!o$^?h@Gowupn|)OA}Q4yVB{&kqQ@)nl;quo^GNa)DjD90M3wA8&8R$?LH{<~H+_ zyQ5A?PNrOr{74T68uYx!0Vj!^Nz>R9z!A0KHR^D0dF^JO9%QpT0{E)HUN!bAJMoC& zOj9s&H!+qk=c%Jroor`U&Cr|Sli0jHkM~+p?dr=Bh`Y}5_YcaTzkN@Fak9EbU^e8i zwt5A9X*)@m)F#XoXFlZ$VMNR)4-Zs#!E(nb!UgLkf}OA%E}QMvI5m@X?@An{OC8O) zhH%*i)G%s3FumqRCq;K7qq_J#T$-^SGHyzwK`v@A6+6F{J3c%Zd_aG1_fDr=&xVzG zGHm4qGikr$;d&?j@1!@<{j9fJ;uns)w5#}VTYArn7yl||#leE(P$b!nhuGz4J)b-m z@F8aW?a^0p7&I##WA;a`$*1?GXO$V%|3vP+3)_q_7WMe>(pna|1<^R1i1aCtIEIa9 zJ!z!&HML}lh36y3Ey83sOnL0Is+1?{%xwEE_l%`&tov2o->g*kOdhtr^v9CPEGh{b%VpGqal;p14MNk+UCax+vQF#h#C^RyxNpE!-ESb zkbBhrSftq8UF$V$Njd{cExgJp;}LFG!R@joleyrHOi zI-6>eCgp6H_iI#`$7alu23s!84-VYy*V-0(2xV-He%vAZ4hjPMnT`Pw?b(DCh$qc1 zQ83yydVd1A=IV|zQh)t`?a`YTF^eRAYsa%&G1iQ1p201P4Sd3FSpNesJ-aO|?Q~^K z$T_i*zKpV|P?pcSAKYjlN?Ud@k~W)O+BtVcbiu~r=~u(quNj#FV$=+y>+$uG8`904 zeGE=BvdyyEr#3IAzkXsOCtjw2KF~%+bG2?Qe;U*)z`iJy^J=Ckq_;wzsO`*&$~rGuR~Z% zuYVKh(FXG(B8GvgVR`oZpp^e6BqfsD@k)XC0=JkJIqF#ve)P?!UlRu=tQX=_4M1tV zSs~9jvYOSMWB-tDG4n`UtQs;R4B2Lxg^I3JKA^2Rk8*och7Oklu%+7O z{3sK3b#>mK_;v=q$ji4*AX!>930LvrX(fVRCBoar@o5*HB%WF)PKbDk$AcDCBP+cNx$bg^g zC=O0d6h{B8Nr`~9zzyjph_j$#&iivxjmk&t4S#5=2u9&z6nTddEnw4ujy_lcg6=#+ zs~OI`m!?=@^z!9P&;`t0;jX{d8%SfB^YmIH5|_dNWRCXZ~y6^m*#5`)xf*!HZ5h>6vk`1Mciz?4`>Tt1t;(#taCSaf0q zY-w3*Aw6k($CG>IJj{k_@4tV4y-1q8*xnz=aQBi0&clP|gIHJp`g@d=RqH-xYEIj| z`5fww>)-WbopyM4H<3t6ywb(Abl`dVAWC8f?z0J?_Jgw>XT&L^t&Y|kvXydQoanB} zF>n~XX`9=`9Bt2n;jnAh5g^Mqko67j_h5rAwXpvh=XJryq@t zc%%{kH3A)dKT#!&5ev` ze5dvmdpkh-m+v*di&&q_>_^+PTvGgs-q9UDFLGTOXg?@oUJlUAEppv=O#a_wpCM7z{5hE$B4eW+U=MP|e4OH{%H7LfAl3I;h{~zhb z)v_!UH#!bBw#}p;n$*D(-I!eDH!prR; z#uuh-t56Y(;O86Vft_4VdFJXR6pu$cb+gUiUqN#^#qN4Cl&js4CD3Oy8o-B%j`j?a zf~PBr4MdhLV7=}FE$FMOvR12V$~hDyaMtgF=Yix4A{_hWG0I<}B^V|_zYsO{%TF`A zKNRmQqT8WVT%aUq`=Pi&XqUobLR+hZ+Ix5H{jSMt2hRDq*o&?Ax8kaOs|TaK7|P~H z*PM4RQAXvITsX=bTt@Cc+&;_wnNXMQbj{I~T7rAOB%@-ov?>Sqo(X_R3s&L(!rbb3 z$l005(wDHh;8mh!iNoKUm~Gzh(7{?0Rf=$)Ooss}r)?DH`!kd`ft(KPE0^QFy}hGY z@HT*<4C&|tu#^-$UD3U%9i8=m;Wk)6MmH?%HMmhoPYP+T zv6Pu={_-(%)CT*_a`$Q*v&cz2eJ;vXq_(+m$&G0Y|JoxVPW+3qLQgNf<@B_)U?OmD zuH~c<)*-WA;XNjF18S<}a4UStz_M}cpJXGaipiP>5w8ArcCeR`8rgZ>OOqE|TE>d4 zt_$DYffulS{HS&ObkUTk!bpAqi)9+>lsuZ9hI6 zh;Vov)zV4q(h(t30!%m(LVJNsBX}O|@2Z!3U)7Ll;G?Cx&F4@JP`+6tqt@!FI5wH6 z)jC?#sPt92QnNjJxMB17s~O`d#eK7LH9}iJh_XpCLJ&F@O7SnC+?bfLzn#09T z+W5W1-0dJdR15Z)rOZz$zt+dF&})5sOhxf{Crq>)WtPXhDk;f`9zvW)rO>E%#E<$0 z2Am4x@`~!)o8U&&C#hua0ITgJ_Q_A|Heix1>fMt}jJQ+||*{C$PT(_I=Xv z0NZ3Q1A;~&ie2WV)mGf28|P7=Z#hh=Zaq?|KgY=IrEaW^*G{0eG@Ex_V7+B}$xQ}l zIxtH+w?;}m;;W6)-or5GJH%CY;SSxmoeAl2CL?kWw8_cIDPtWslKHn&t4~)JdMH{9p{iC_^5@i~5@jUA^R1F0 zZdS1ya_vj@@;c(3k9u)tcpiDG^M=oE^nz20=ENA&mpAw_XSy97SI3v} zF68wcT)Y;gvembt(157nivA0z{tA`|_d_XbAkvJRv%E99-E7AlT|{(#>pjUa5%$`Z zZq=^TP1)+n?DIml!{nZi;y?Ra;Y;b9}@%_x1v zA5ScwOV2Z&U)I3$s5&05s&G2o!IyFXy0p@n5Y;w772DkMZ`ErTI6X3RIUFv>>N6?? zYb8sq^wrLk=%Yt^*dY>$ot@u{A4orW(uSv8>9`-iyYm*zV?bfIt4%&RX*k^@6*%bh zvpI302{sbf;+uf5q8TUXlAmyJfql@GRjf+~4K8r#6o_oDSvH3<-omjNGVd0*@qh<; za_xVeciIfs$W#CxuugMX_DEt<(lv8FL0O*@{6blV(B@XVM<1tNBMBjnIC*)a+IN>* zUVLMK*j!!R!&)fFFn#$l<3fXhY*Ps{deu$eDs5h(jl!rg+|a3#YiL?Hvo%b+OXG73 zZppORa@XiyVm+96>TH+oe0@M;j08=6^mDl9-p*?(A_8aiThgY(qfIj#Spqig#Oz34 zWfJHwCOil~exJ;8Q`E52MLSnRhTaC_$4Ak^L6sIbwyJf_nWz$xOze`u2s?ha_t_0g zr3nkU9}EHyy0=rarF}G6P2W-2OR9ZH$A$!`5!j1h3M;x0E4$XP0-jMJ;2p4OqBCYK6nl=VbayAh>o==8q zlgM4{X_!CChIDK@*lS7Jy@>BHdzL(5nB}l#cCFvq)y7ps`D)~^{(9BfoQ^L3r&n{B zyk{-U-!4w3UjAZMT!q$1v~o=<%3ZDK+<=M~j#bAK>J|!@tv*9;s~O);#pd{}_0vqw zeN6^$%z&Mc<}}aFs27`vB1W?^j2x+8UMTxW$671`?U#$sBlBnNe+b=!uYTPoCBKx} zobSZ|phKm&^N?&UFBzA2?a41wzqI$zvn4&L)sFOn_|;0Y6_wk=&Re6Gy^3F)ueI80 zu6RDUp=bM3$FJp@O10ZzaxkF43;Z8{mnyVrk~7kW{O+o&o$YtKs9e!_82-A6ns&a- zuBzQfe6g=K>5)^Lg$h{?HzW-mi{h%^19CcQmle2}K*%U!$-_0e>F-Y@zc#&SKs-kZk{4bj>BsLVrC84`U zKdBH-Ek+AVI5Je&(u_2zSOXpw&c)N6N>3x*WhKjk2*ojCe!CR$sciXoLT%3tG3L}y zI`1uR+iUOI8J-}y-?5n6K=Fj!35=TY)(+6OuqCubiZSgSA$$~dg@;2REo>r4xXQdR z77U!GC=aYUpOQUkyOLWCXnr*ezlPLu8p|t2*^;96$jWTs1HZy;PtX;g(|sTC>7IGD zx#ui+=!b95eHmk}ycsu49mjb$l#}^N^NTy*$YRg2=`=+2;n?UfZ3RcbdQ+)3YK_wj z06QSJ))LZD*d8jy$LaiO?ENclADtZ_K3eKG#SGc4fU{Op7jXQY`g4MNC(5Nn&fsO7 zhAVk&26|0E-?6&&Yse>O$g3v{5Bt2rxj%j;QCK824-n(0QE*ob{74$7XpaT$-=otH zFJg^JM>)T+fXeblRiMomW+DTvh(%@l7;aXjs^V?8E6Le1t~Ql@rjPNV`2)ua7>JrF z)C)}%u<=|wpK`QZ;{?=neYbQ;E-G%!b$?()^J@}9qmSe~UI4U*hf8IYcz7}LhvoSyfY$9bakgAkfGXT!;H1CzfSL4?hHWFWdLI$1wE8c;V` za?rWehAyY% z+14nS{}Ine0Awb_@b2{YR@pBZrgqNuO}at`tkRxD4e8uwwq?t;3Ly8V7dR`xe6MSR zpNlEZVy`!3c1i8m`|vn%Z37DJ#8lZzr<b83(J>m}`z#Xnf!lXB239QO+;SLxF%9THqEIg=4xy$Z0lC(dn-^-?S|8}fOJOG_ z@UA`XxcVu;q2iWf1NS?|XJc!-i4%fX+sTJF?ik)qbOpE~Ehp+d?}^c`sT>YjzP~o> zn6Ki+&A9QslP}BW=QpnnvD)F_E@(DXf1L*6;#|SbX=?6jzSb0~OB9$|?=~b64qC|1 ztF@<7ew6oR%xWiAt4cj%wQI%l0#VLvu8Ltw242oh@qwA^3x@974(<++JMeFI$+6wc z@lh?d7(y`azHua@CZicTh0n91pyxYdHAoM4Q+sc| zGg}PXy|l@2UQS7(W#$$cpKggOZb*uy%a0~@+b_~fla=>eNpYq-`ARxr--b1OUib&5dIZ3i?aF0W_&vwlkRny| z<~vjVw0+`3JCYz$^hFpA``i znX=iigTGfRX8Z@;2m{X3U$1U$K_&qv61PP)IYXV1A96D&f=WT{r>rH0gJW<2SRrko zSkp3H!W{_plU2%NgrulwUOQL$0E#!Z{l;mPi{_Tx5Ii`^vy>%@qWA^&xF&j~MtuzJI=gwj`K@pL?S3TcUbQDf) z8ypz`Zcdea?Cgc$Y&BvQ-|x{&%&R=SW!X47n`APR8Q4zgRp1|MT$T0z^P?qEdybuD@PWi?t{XAvDAY zIO{_}j#zbO@X)l|_CsOuzcJtk)~yv5F3ZM0wv6_)(oE-x;yJp!pfu3fMq7)aTvFcZ zJWfvBlDE|3UniLQ65`JGjyvy>jc)y9iKA<7w%^?$^+xh&@x|47bsqKz68GsHXp-vo zizHd{Ew!3>8N&JTGA_(T1k|4&SqzMRE7vr{+m4Ur?PY-wuG%j|9V3|olFL%Ktb7*d zw-JeA4&JsU6l{o|8^LpV ze3swQyfJ&3gzor5EI&;`e|`d!l@e6*w0OxQiTF!R)q`+)3DCg`q9YGTrfhK-6bg9H zmt{oTzlMnn5vFU46EW$w&NS~$mRX~pGcXRzlew{LK z(Kgr^SvZk%>}erhJ>@)GUja4b{I}?!JW8lKIOPU7S5xsRjaP>T&mah1ssEOQC(IhJF#Pf zEaWC+gEWi{ljQ^Kr87CS^R&<)(k8j)tH~b5dsD3}RlW*CMn7T6T4-njF1l2gXvKOm zs6}7v9mB9{R#x`cLdL*zY}o!0d!E&GZuVn7MDcb#DoD)@G47HQ67){|I@b_w13EV~ zgzfRzkQ~;?XhC=Z3pC0A#N?KflMCS907QNdd6OmML26D90CO1_Iobj%Fo{(15Jtim zeDer%I^(L>Qt(W6m`xNlj`JABY3CnNmkX#gd%$K!HgqY*ERp|P*dEV zZ0cqapPgEu&2W_^m&EqEo_>(kkwnCd*J#>QYlz=A{7yB3q*PmPrYmVJZn9B|?m4p| z@9g#ccMI*gkNP4FynL!H!3j>phK%)Ih+Jk+TEf_lwGj4s#ENSpk>BgLGl!|pj)8i<9sstzmJryo&Foj?hDxHjV4|&h#Jv4bx$Ts|X{<->_ z6myvd>#rMbvq$mCFRad<#TLBgi&!G05#jS`BCLnf8S>|Sz94bv#zt3{Jdo*jo6OpB zMK*z94-O23UK<#%C^ivkVZH#IrASK=LYP-h;ri^^Gbg7qfNbVB0XqUSn46o69H*Y% zhwRW7zB-O8pRu)^W>diyI#b`dgTQF;=UHylcReT%LlU?QMWI^>ZN(TwpgfKgHMHW& z%RiFJQ!W;JFu(Wzhy+&U8sfjDJHF| z1B8>Y=rVG@ZnDnFHcIP6+0_2(Z+~t3n+Ib17Zc`-8g$ZeM_$+r?NVm4QwKo6M&RR~ z^tgN$G`xhK&{_P>8MD=&SW%?@;uEXOl+|J1-c1AX9Da=iXnHkxYA`Vv5>%=6MIy@G zuF7%T!eCjgtjh@9W|4hOuhLfWcMEZu)?sOm8jEQW^zevlj7&eUETlFKw=<9TWjXKP zTg>Y=qg2UGr5lCMmKk%Os5^ens6^A9&vX5W`YW7X!ic;Glf~8k38Fhq#~7Q;T)en@ zVX8e_TKNa2>*5K#;fz1T4PiPI>4g>^AjN3*m?xW8%1pb2Suog*-tBHc7d}1gdC^C# zb4LO*7d_Qv^`M!o{oeH~%LSunMCOa#+s5hvI3qL!?(Ip+yv;thrr#87UX1Q0UWa`x z|IYqochSYYc%CX}SO4(dCE-vR_1Cq`7kpoK<;mkrL+w=y!*{=$y(0oK=~GX0XgL7) zF;XJ{@Q2W^l$i{#ldj`4=Go`w_Y#NE6h=9?(5CK}Q5kdO)>GUy{)`OIAw7_ual3x^ zLv#muY6(g3fueItd0d{To?j3p?QsFGd4LYH_3-0F=TE^8!hf?5Fm#jNczm(9pOmL7 z0iy(c?Huy+Qr(7>bY$n*u=QB|^sJfMQX`mX=(7e#roIb1$hdwYQToM9O|_F+a#_h; zCYw(-n^z{_j=^S`4^odbczOqBYL~vL?>5B6SXtA2ak)12WrJ^aFF$ak8G`1%+I({K zN6}Vlo4eo%RU;Y`-Y?hW`nsEz97$9%#8o|)E~#QZTCRU8(Fct;$jcBA*Y`>!no2TL zYP^cwttBt+5H_WWW?*di(@GB+Dzwr^KO%flShQ#5*AM3QRp#@>Rn;x3xbuEx$^{Ix zLn`P&wP-ryATMZofIm>`g#NS#m+O5fX8gn_<$ymQ@0%@jEfH0l){zE8pJI*n>W}~C z9nH)>oP&kga?EzLdA^f1c7HJe@84$q>@bq2-2uGqo1H>mxOt^@+BcE=Y$? zw6*?vhTu4LUuO0WB3#qw%z$p`M>68DEiP6;h?jAY9LP|YIw0P6D=+#`So|=NX;>9? zaJ(?|B9@?TcV`v76d!Lx6rrzk;!>3d+4=J~Y3GQZe#K!S(S1`d^m;qQNHREqMdn@P zojW3-Mvo;bF0wqbY8-a&B%>%Fcvs{zkTe z?rydGb%{1M1q3fZd6?ckRk4zhLSXV}MC^IxC!t@dLIaiNuGx4?;hLcqhYF_F#v_VJ z3l>32n?Kz}l)js_79643S5-&QUKDx7Ryj+ZiDE6BiKXP`FsTf4R zzQL6+yWmomzw;|Jw`uES(xRblaMzmrz@hn+MR50-?i;R-IZf^E=e+~b7YO5*45%1% z)1FG5lB$R&pjlP@BBq#|_kPc?(f2jFp0Ku6KTw93;2-J?6iQxJ+Z($lA#2n?8@|!K zr1E7#6!nOhee?1+47)0ElfRl`|K*5JvJv5*ylJvZhMfER-0S&1d50HdeNgy3>#EqF z_bVbi_ua9WJx|XK9%TyLHw(216T>Hy-U^cTEG9g0GVhP)3{%a&bE;b-qVv9DhuBfR zN$6RI5Jv`??D}KO*UbBIXBFxMbN@L66z!7%rBI#OIo5X<_Z%x(aaEGX+sLDFqZ=mqr=q%mKmPpddSnSNqDu@y3A%M?q^xGQf)(;vRNF~TV^Jf+K zvGt=ML{(caaYrkx@7YJCG&WM!`unv;EEUR^nt!A{af~oNH$FZcUKadbQ?6u<+?|oa zossdDEO{dOQFqNZkNc{b^=F)?C^}h(Hp1wn=HldMR;1ZgTeI4toXy@3^xH9}QnIyI z1fIO{&jWb)%X+(c#H-5=4HY#eb|YIM2xen&J}EOU`6@=mBFm9tiU*VdW>yT1Sx z^FYhQ{P!+yn*2&DnXhIXE%t2rH*RTOVx`}F;soC#MTIN(AtLRa{+x9~Wl@{CD= zGchHxK|sbm`Kp2l)ey8}4DVx%1U5cy{|ga$veQVd3c0Ql^4y!5I;o?5?2#@MLYL2Z z#hpge)3Lu&J@6<&t=vz%T8KLyeRl; zqs;bG(pqX^vy&Rmz^om?S>E73XL(+ZRKfLKysE+cn}}ajT2f*fzJ}gSv{zI?eIy-v zR?uR^qZ4H>qw(3`T*TDHeh_@;2%UB44C%b-DFe%84XLtP)41f8OE*gAZfAbo&48Jw z4YaMEqELczk6=~3{jF6e+$B3hGnTJm=ZlT?>2+hW!{v3wv#(mXzM^`Dqyccrz*3bLZ!$E{$A5{Sy(7E5eN2(}%<&G)Kgy?I5n*HuHR?4VupxVCVGhf?%nuT*0@jF->{3Vr;$-Dd1Vh2%7Q zL4TgVQEo15<(y8M^N&!F>jBGwEXUUg&#ASZFO#4Zu3o!jHBs?8@^W08qFJNCL7iiR zF1h)3adf$9?wLtEI0^D#yD-HGHizg!)e?4Yy5q2XF0%A)l{kX4m4W{<-N4fcTUj&b z-w1UYs7zQRRSVo2DQ>8`7V25`)c#%(adb=3(#|BItX`46o`lIGcJ8!<+ar(bi4+{m z8@jBw`PfWF=7z#9G=5unY~MbpYtUoJ8pAfl*tx)*9Y%GP#x7$+Da_Nq2=j3v*!l{_G8G<23G$?BZMrVR3i?s~BBW4Bl`rS5TM zD6O^dNdNF)4oOUYW8$eoE>TJU^Ur|z?w?EHHaju*EkdrF6SksG9q==BKg6GYX;hBG z;Zk$&6tiPibJBNeW7@ub6q4Sx()m;N zudCN>BBRwCm&w?Ljk5$jnLmDen?1>;pD3=?EW_jbdqxr*Aol`bjIh_$JsZ+ z-o8_gWggG6?&H=i|8XSkJoLhjRsEOVo&36Hv(_l?r}-@fmlaKf(RsXBu~esI$#WD_ zCTnH{_FVUioN(Wu#iFm+C;vONg{sj+w^PsTVQEBt`Dt*C`+`leF;&*ad+;2g`5W&r z`S0~h;hFXm`sb^psrO`Wg1l!q$by%dqBx(MuJ5^eB11u+p}pqlM6SS3wsA#~+o!*f z2mqJL@5|#6LDKz9ll6vm<1dOO>!qy|m(jMv5h{_!?ghMCeabBCg1P~4@KTr}%c(1) ziKAWG;i`(s{(PEJm4*!;21X~Y@Ar12&LdGE)ovY=keb?JnIr; zejlZX*bIIS#3bvp{wf+c&)-#DT{3am+4)q>h++;wFu&$bQifbzbM)5M84t@ro8X_h zx2Op(368uswk)fW&D><+GJC5TZBbdy?qp(Xxyg|bp7*P*AyhmAyOycIwGh2TaE*&q z?~$jp39I8ZOk1G`B31%VEJ}sV29AHt(o?V=gjZnH_TF=IJyE;(<3o z{C3y4*6+R?mOf1k?qKZhdNdz!MMCSaPGPbmE&V+Qq@fwwXtX&;+$XaMNCpixLD;Yw{)m4 z)Bp31P}?%XGq2vtwqZxbM>?`!Iv#L0^^OjV-trsB{xGQ>iHgba>Nb(0TuA;JHk0wg zq%g;S#xPk{S1z37q1*3h5H{o~%7>T;{wfr*ejEB=<@CC2i*^MUR{=ZHvKj1 zs7SKs{8N0DCv>a9LUpQPH(9xpmoZ9N4@*#gT(X6povH!$)i0_#uY;z!VwbSA>Fg3o zxCfTzv?Etobf`Ys^7X15@t6_6{UIfKYW!sQ43WC`e})0Y;a`2t@XQTV@Oeo*U#SaC z9=hCHr}59BTTB`b@N67rF&|9wNqBkD_w(|MaQ`ZeU9%$FF6KjLB~T=V>JaanNsx}Y z910JJW>y#QtG_d2Wo07$fceB_d#j^!zsGjrp*i1)he}XljdF^) zryk`wWpLhq&g^&L+X~BAyG|0=(Y3`7eI5HanOw@al6Z4+w%BR>U(WmqNK4*O$u`MK z!uIby5fQy1PP?THyd|ny){W|<_G8~S3?fb%{Xg}tapQs^co*?j@JwollnkkYdCAAX zt}ajdyK^{ye^o&45cBpYG&zbX};9i9>!Yuv>>J@^;++ z_(w5j9BhwmFyQB_hEc(Ze~gkw);;+B!@BlSv(U7*ee&-4zh8Hgeb$x;l}M0rl_sqm zMd0)2T{?t3gzx2{$!8q5CGtp?{?CVvGK#tL6=RJ)nX>5g&wtFy<016lQ)zVF>7Hdo z3A}z2=i8})auWSxxXROOX)c~zq0RIn_FnnN0R4U*VbdPHDD$%?%4u-Lti+fPzJKZ@ zU%gK!?0JzQk@H`sGZbp4njncXks5hmZ0VS+=Mf5qPagU1`-H!``A9ZHsY^sbgpUz6 z5q|s7n-;gI7yZ%?do#Bzw-yw*bIFE{4M+2@37yBnKPP(~3!N+()et3kNzmU)ckKJi zvGLkjE$4CpBQutQ@q2brChnfnXQENK_=#_!Clk49?7Hr-GxLqwGI@~bNwPR+Ur28; z(dM^2K0y+5LFZh?6Dku2a-mtN$PtwOs@cJruu4${$ce}zwe=9RQ|SaB~W*5EBTN!9{X2-}*Ykt5PEw6`M-=LDWE4>;Y)!0uD>z_fU5a*1J9z1^q`q zKXh(Q4{Q%R5vDPU%Om%neR_XcZmu;G=S@!Y7uTfO8|G1dN>8!&Xz$%3IFv7#F!7L0 z>uSlsISAfXY?YtmtC||U@i0T2v~^}vgLI7U@6*OzX#Cli3*mj2*m0QFY+9FV5+e_r zI!79#tzNnTA6Ykk`>9)%N)?{CVNO)`lJqXNCC&C_ch-FQi3um0Zx=WaCU<@4SRUuM zCXTotwsbP(l$pR;{IM9Iy#0Mu2>7>eyybfse9RlK8b3FX^pKe69=NXCr)1CGAh>j- zr=0MiLF-l8h?G)laZ&r$k1uSs{Z>!UhBz^WJF@63+>2czP=7eb>ZsgfQ+1NTzdhuJ zt2^(JAkQXriJ~6)`LUL>&gyR+mS)t-huF;~)jonK<&Amw-l>oi#GJWd!s;i|{wf`@ zm^+n|(>)i72c`F-RpVI)n&aIy%@sFKZH`WiHk60x^LKryZ}o??>wEFLj7b_gi_O8X z`|_bO#%3JNLzS@wWURE=lHwabi87jMb_A@%qzAUEDOcvM*t%B4Ylcf6(M4;<5h^U) zioM|_d*(x*=2siHcNDQ?VM&cl=!|=Jf3PJd#U*uh$eX-CZ?|5M@xnf{>19hCmQgHc zPk7cQts8yQ$*EwG!(8!WWc5aekmQ?B``0V}T9aTIkm>O+;5T(+Li*ma6p7s|hQ@lkje3M#;RgEngm)OS7xZs*%$K{W2Aqtf>m+v+} zKKLUzhSi>AHhlIg|7At=m+&)%D%sq{lFBzBt>_D5afmjEF;1mVI-4P$TAh3!4ey2Y z<5kUU8ULCR0d4gfF_qb?v#o~Qbi6vwr!V8{NZ0oT$+cp=GYZ z{vwM&E62aPKO%fbZYODPFIn}iAbA$ri*9xJ$)$ejr=+S~)2SvYXo{pW^=JAi&6e%X z>#l-DvbWDN{iv&LcAdFsqow%+!BXje0HKaEEd8eDGefqP| zEp_%Hz90BBm*@9tQUR#wsy|7N^9Dyq>a{&jpUh_x9WcT!>ZRp8C$~}%_aXgm${@|z zgFfWdD@Ut*Y?`|EB*amAUljDNz1fVdhBD(YdfUl+H-JkzdtX*#e|aEq@oLoN)WyuY z);Hg+sCvESu`@Qc(3Z!p+@x3frAU)$?8HnIPW$VK#a-s6Q*oqs#z%R&Zhql80wK({@^=r;4GVn^RlW?nXMSH|NgHx=jOjR%=OViO36fF-?X3ZD5pt1TYaSFgNNVkn!&hNYBcfnRaYZPPmP=BUckI*3fJATEz!a1xi%4V zN`_BbQdg`XfUzU$4&PM^zeLPUCt`PTxDH`7{(apIx$y1V!YjTf%j)gME?v{Fo%*X( zC%hjkH1W$uLZ-Oq>2!cu^_Q?0!Y|NK-TAsQTxjCe`O=fcv$fjpqteIy{;&?Mb8Q#q zub5<)kn%CcYR2XKT8fetlJtKy+?Z#QqU!$8)%po*)m;m!y`RLwSZP?b31^j3((!-# z{&B)#!lX%n&?dO?$GNaYYsM_OI9GB=xn89Try9m}Z!Dm}6TqBxScb5}OstDlh0P`XJi$~EO6pK-WC zU0bI(c=Zy`y>zJ_K#Sy#C5XA5m=c;^U64F~1|Ns^(B!$YwP%J=i6hSbK2@EJ@en&GL z{7Lvx@^3E7ZFt!pCT4}-z`Ze8;1esGHWO;+`mSm}Xh_kpThVDFDZZ!@fD_`kp3gmN zO0p8zyrqRO^Ey58E6;VKNsKC*vk?a z32oQmVxE$c;^y;ibJEnxl72KkPMN)8 zn@Tx<>!g0te=#ZQh^jVkDYmR=e_(B%iQ z4#i~x{kF|_Cy4p(lX2d->1C0?afh9llkt}=6Dra2=fC{A0Mdam^ap^5?;)VykE@~! z-YJGO(3}cuzmzok@L|#`fC{Wkm{+ZDZd!;D3e*LA6Gxgy)5b}g{ z(|wb^{4?DTO*S@+Ai5HXF66~V}>;c%OM}`0BIjU4oVD5^YYceCfPEl07WUU#8u-IAQ z#~QSUS5swVp7FNC0$A9-A#LRJtx7=$>Se{SsN@UMT_;TN zxt~4JmKkHw_e;7lI%e!|G<>^tRA|K0A?fT-q&;=jobu_J44jkc?0=t#?~V_bvI2Id zA3* z#jU^hfI?CJh+Tpo_Tb>%413jp!*5$pEGXveJnlT-^BM@j58A!YJ^Ll(>@0V$_F^!v z;!cv0eDiyKOH0(wKz-n^ZY3Q4dj@Z!SnGy|Q7eI`afD1w$NVID6=upRD^L7)w_y`` zO<(H+eJELSzR<)+f@&4A)NCbrHL_eCIXwE5SHwJumABR{|684|GBTam&T1sRQJ_cICSs4r>3Sx zzVL=rIiil~#LB(Sd-=zGJv~$MQci?yElX9#-TnQv9|{UNs)$}S)DH24N!$s|X~B6d z#c$eBt^R0fp0$|L4 zQn)ekF~))mrZ?i2d@la=)S$S4*3_)u&iwgr0*xAV@;9~rX(!H)3X|ykDe*7ZfI=0^ zDFFQ9@&=&5wteVUa#$LiwPhj$%8rA?Q99*&B$dD_vAB%yA;$8Q&AHrQ+YR?u<+c!) z#!k|cP^`{!^CHv8pC!2~kG#&jo-#mmwUglZ$YIRSR^tt&rKKhM8E^x@(5lsEzdMq# zj*T>FKjGP1-0l-ooNS)(hDF?ao)s|axu$(DgT0Gg=MUgAHEW}Soy z@~j$8#q7(kg~t5w9tf07-I7m?&>OK8rx}vVM7ccs`sxxcF0SOZ;Mp64d#_17l5r{d zTy|E*B)7kupmbSz`1z!cuI~86_fU8Y)W}%snXAuNK1*&Vma#@RV^g|FuOz|R^N_p~ zD69OQo}Q((9r!3+Xu}IOFinqkB!3SN{66siuk(Kd55;$rp~<=oA0_QyR8;ixIgLI& zVSXu`SYo2Yoh!i&ID8+BRUeQQmGZ-1Ir2`d3S7T<-p6bSSSZr3|8KtH{~DueBg>^?)^ZSjlsDQJ%_C@eg81IC8m-gqSP<{FR>d|MrF2qxo{Rp_SOOiE3i zgl;%Z=$GyEI{wWVHGAYAB2WRpZWT;V_jy(FbeN=p>dD z42Z!x@%E|s2^*`Ovd+G~7vq5(RmVsB&bOXEeF|hq4hmA|QTMHQ%sDsTFYoveeQ()S z{mJT5JnS@|iK$W*p$yoB_DA8Hmq;bCP**3+xYoN}9mK_(V7NnTZHyC`l9!+-S*%cz z)dGC?48#`cZ?4iQ9{eJzRxY;CIM>h`#WL>lHsCfqi3 z3QDm{VxzXK9`##Ku#eypY2N0THr44}8M1C-*djO!JUmET!}E33cB*)P37Eh%-F7Fb z$dsiYJ*tJ_2I-6*vD$176v`QjwT*?)TR31*z6j4jmlpE)wlxeO1(UF&CkPR0H0b;{ zOeJ^zcEb;$h@i@f8GC2SG>r6N?~DgeH;^CK{0JGF?*kez7uaPw)le#aVpN0iiP~26 zRQbf0fa!i01~W1~xSO}NxUvx(F0egls8pc5?Ie)_!Zl!ssR$6Y`E zDxy!05MbSWBJ@!HU<|rb>DS}RE+*&auV-o<&OrmJ7`MyV7aywXhO2_~DtQyoa$BTx zt&Z|nJls`dI312#|ICAZKa637KC%M&w51HHCS@?R$jq(9q0NV=t#DVhgb74Xs^oUu z?s`>uVPRpjT)E%C+JoX@6sm#6>*C!X@x0DRD{ziV{>O4kBO{{+8|{x8;1I1wYjV2h zwio*Hb!vTKxILphg+O?>#nO!p{)KOI0@-s7%cx~ml0t5Yx&imkHI`>W8X9pr*I+Za zI;>(J0agm3n<2-w4HV7`Fm9~SOgv<>SSNn_G7!+YIXgRl7A21j(LP?;q^AgOi{p0K zU7H*_L}}?lwP)#x+I=|E>3@%ul5fD^BJ{ndeAaIFy>ddpSp8kAi}OgO_UD(-qnx>u zundevXG=HFpsrJ%7EBZhhGpUo&ZY?c1U2wPjDGeiSBtL#6-LHb;N`_0x37%VE<;oI zuiiqbR9WcIwJ;at_2V>?CrL>#~;@fgMRF#rv%Myeqb!! z;@gGgwIzyZMlxaj5E##fVbI=w0y?I5VH#hvFCQhKUwR{MceiREW&>Y zhfk?FF~%vcK+b8cXWS6sr3Ryd=b^wB_AM_9X_*y|p#P578q2x<5{GeSZ%Gpq!KmQ` zgDR5^nChdwT0HKoZx#fD9}MBnh%{_v+Lm`9c-V#M|4N8lxYOtNV9NU1c^@af4Dp;w zM@+?9BQj@3;Z~D@Pex8$wNwH2r+Cm>9P`ApoB$O+{;oj(*tANVvBEK@rT2?IP5C|N zt%Y5%08v+BIV?3lO9`K-;T?S2df+nR3bXGF%Ac-tuYpzR?(V+&qC~ueHrQq!7iERN zbsbCWb}I7QW8S|nJL>!Sb7vfge0b8|F#oiQdZ#^*Hb7D?{cqoW84aV8Pa&l)ke1EW$i<( zG8JRlS}n{u{)SD==pstJ?vHU^Rgb~=#K_unt}*Gr`;*Z;nPC*-@9A z)TGdtu@yx4Croaf!p3XX;yQ*+=DIu-%bUs#n99c*T4l|em-V{RW#rN%vqx#frbbuv zK}Ddqz8Gn$Kk%ypowJTSnRx#}d{L}Zi^IW}fQcy=2KCUqCNN)XHixmCHfHlMJX+gl zJGH*Q1omxG$QrG`H2sdJ70h0Z59EXT#P^Kak+EUmBSfQBRdHbU%ihhZ&i`s9MU-UP zbX!8g6=X7RZ^OKbn9blG2Zy03eG@cgNBVR2dQtDaANef=rC z2Q@`_D1qo$U>Y_&(Xj3)>G?^k+D)O~uSATD@-ri1BnJW9lg@!TacewEUME{OE1++v zq$mN-huF%z)G#)K=9$jE)Ue(19|x%_vL+>>Ox4ju_bXFIf zr|+0rp5Awu-g=iG^YY@e(HhU{y>1K;MpAo^GM*M-ST%3FqZL`ZI!2eEa}8+!v?Y;Y zkM$nv3e@OhE}KV$R?NX_5#f(-=iTzc#%D}p+p?)WYmJC71LPL91j58%_av=gI0|mi zYV1qwH1{emfGa^ zs(#mFrP?@;G6}boE8<@-On*I=Pd^W{yiMoaVD=LS>tr_{JF4WVR;LQCo+l&K^lI#^ zm*6YUQ`m|hrHZWnJvlZwx%IW;9mO!sqx%la!*Rz7RluEtDZnGM>yqIN0Un0jf{%M> zZ&Rjv7_>s{_`Jz%3P`4UUolrhUp~E&xrW;PoG8+&6#p#deXP2PVfx(^+jJHX4V$a-_yg1eDnLv zdcm$fz!Vm;Q+Lc$oFct%_U&~S*sbpF@E%VH@TP=-L?b+3!aY39YO&J4VSHqNcsuV_ zlJrd3e9plB(ZDJ`nFgziY$IY7T3T8lrvkSytm8)>am=>05Qv4+92*E*Y;$2SdA4J{ zx&Hufx;bF~wPsXu#mnM2hQKPD*BR5WJSA#>I67s!3+_8QGm^>O^ zOGGgzP2dp>3Xi4)^O11b8htk>%KJ10GB5Vk1T z!-40AbA)oBLA`AOsY>`QRmfN$kWs~s8uIV=(Z=DS)N?Si&GRbSn0M=rZu+_I$4B9_ zp$vm;FaJ?ZVi0@QXo;h((G-!ux!rUavz!tV38v7nrW8z)X1>;Z&SJQtbmB~ae1GBg zLMp@#5QgU60(Pd34^Kk#ZUte6#?WJ?Mn*GBgs1cMs;s$fqQ$lwnqNLrP6QL^7 zy=|v9;a$b@R2jC#$G$3_N-Q_QLcDy*MaY|V5Ov4j+Kab?bLI>=&}i7#JJ?yRj8Fb0 zR=!11P*89%LCya?=mN>TyYBo}4g6MFfn%po)u8ZO=2e6glvOac22s^*>Ia6cvHv_b zeB&(rCne4oE?~hqFIiqaYpRQN0+mjIs5%l>#y-~2(13v`d_PdBAEK0#STQj%O|v3L zi=SaAxY792HBcse`lh|%?W)LionJ6u8dgnNo^R^V)x2`TV`S&P{yv))&NBW8ytnsP zj7>}$kM*vgT$2AiaqBflH_!G*Hlrp6zrPo}WUSt`dSo0cb`)Z<)G%H$utjTLKa2`u z<0mX{e*)WUO|qb1+&k=r5W!|DVOoO_1{~o0rOS0!kRz?dM!AiH*bTTa@bI~ilasgc z?VCwjLC8RbPlj?-JvZCj3GbS9eWx{!+vcV-j(3DU6{PVuLnQ8W&K6v}dGV~bVAA8; z$@5Nq292)`*!(AOVCW&(ecs9 zvCXu@gsJups>aeKChss7;}hw}6fVXK1Du?n^IN&-+{u+tD_$KP(GK}Fnv>J32UJ{? zFy^Tl3`QV;h)J`;G56xL<|r0q)C=sCo_iU_6S=8=C?;4nW85|~4>+Yj%qGbc$)ZNpgXg~?n8;1zz7})s&_m3L5Z?2M^hyVlbdh^HApuW zHc0L?5`dk9N}4L4HDU62 z8AyCIPLnP~r-?$X-uV;GY3*X5jfL^>DVNBnVn|vHQIG^qw{mrIGv>$Dj04j)1C^fa z;^Ft5{ov=C)Y(4tS8%(aMmc`RFpQdHd`)@3UF0a3urv4+>fP%nJ#fOKTPvbYm&wxx zi_?G&c`@pV?KaIl(pT{!|D!QBg(LFe`ZvUEjw_>OWo6QLyX=I2>lOf5ivz_>8f65q9jVp)w;@BNzqI7D?K(wr@ zE-%X@A^BJD5yDfm*`wAM!f7*gfs(IcgV8Ah_g|HNT9tz~!5={@WUg_%07_Y#Oea~C z)eVQK=S;&6_$2pcU{Jfi)W#6(nM3FDhcJjIFTaM^PwM?WV=xaODb+B32S&wx>Uag_ zCXxA8NCv~(i5s3n0F=(+vVQtgu)YdHo(U7qaaZ^!!{iK_qhwsT-zz2-Xie>Ry&TET z9E}{OwOe$C1rh2T^uvwzB~n6W)KXmMdo3SL$p?_5LX2YT&WeGPX|CT%mo3 z94~ErLwP!y%cwn(kD-+laKspkvRN3tX4shlXJ_yzwI$%zS(Hc1Hyw|s^i5^Jr%J@A z9(9Eu@>qmQoR9tLg)?+L*~fQFjNHyOy}By@*>w5Y`zgdSAGT^Lbc3r*YF@-z7%Tl( z=k91tuk@^(y8%X~z-4zWb`&D)iZ$rJ^G}!OT307bccfq%xg<*VJ7(Jf(hcwxYK!^K z7GSYIQHsAgdH)5BG$KJu>}V8=ZVn(gRccLAY5l^)9Tt?d3wio!tJqYa8``;0PQ1VAT zzAa{Cf&mOO_OWo)sMe|}B<&o-j=J_AAag+InKH<2J^cQ4EHN$`Z!&IswEVCBb+qQcx2Llko`zyqJE{>eIisStVWiXMZ z;|*?W;AKKUtgnn*U$6X8{w2?SKTFJM975%Y@GHovH(3&+c#=qFo3E%OidkyY=9HFl z@+(g<iY5vg>_u87co9 z5N43a#hKW56_9~RtTc&eR?u%&wKFKGbWI9}7li3^q*0Cjb1dY<$1yOAly*?xp{T8}lF{7I^;l9sF8 zcU%L=0-v-l=QlCA?=~ep^0PmzMx%iNR!CTKdg_l16V(>hMw+kws@ui+=n8Zhck@+H zE8gg-=NyKfCe@x9^fakxw6BgH_WE=cj@Hz36pHNY*?->EeaY}UDEi#BF26LE3`gh zMMQHfZYB8Y#HlkIh2+jTm1jz9{*7tA_tx2rtxPHdE{8;UFAXE5*24Re-Q_P(wV42g@a_`>{~l`P6Zx%s7tsf{9|C z4Qn+^8OcES)S;Fu&0<-(*|S}Jd>E_k>gviqoFPubzxrBg0&4_VH#=0-O00AwClC}) z4#!>-j&tD8aqc%N)J9qYc?cqO=a7{PXmms;J*p(ue74zKrKbGF0T8t`sGM>K}Ljw5~3NjnEv!3UX*M!S4`1Z;Iybpzu z45ZXnmSZRif1L+`KvfY!!#5!W&H++F*@>|rb?0aTs_j%Jepz$Izu*3SklE!l;6aNJ z*nl~P)ez_XYN?9Pp%@L_xon;w?|dXPC1o6fkZKz1xmI{Pw$sw%A_~)#J8B>aJ_3`=TI^Z@DEJZ*?F-!S5NcAKZNSWJKe!?b* zW4~eB@r9XgB`qLgda=rI0ILG>>FKy{rpB`9im)_rIfKOY{n6jZHXoYu>}>PTFHduR zeuT%V2M7l8z!p>Bf~H*^B>lv<;OOX83+_@o0#)eG-8)}>5U&^sEzn^WKy`{>j*_2} zlE$X_k4t$i?e_sh0BY1JEJQ{Q!dG$L^Sd9xvBY2Dna|4i?>kqsYKl35_dAmLU*(-? zP*YbF$74Zi1*TX#f*>-Wtw!3iNGzi)tpWuRaA>gxkx-TfB9=`ANdgQ?!3wR=0)+-} zD5*pUQ&K8RF~A^8gG`H|2_sMv*`%Os#YhWD{}<3szxSK(LnfKYym{}Q`|dgCf6n{e zk%(@AoYQI5bfDfk3?&@tQY$9n^--M-Ej>Ihrn(7O*P#UBRgigpHJBDghi2%m{_|bx z7%&UR184r~`1fMMA$b9`TNf*Kk@fc{f}k&x%LioH3%@u!Go4F9Z7%@o1kgfb#+_CFf&iKGj*hdep>Bp`96qpj(TjokoFUiZ$ZXFP|yM4Z+aEK39 z1gSZJzcDQ4veo8q4|5i7U*5`gDz2=)Wru`H4SoG<(?Un~<90(v0AIRzXIwc|33X0! zhVi%m`Er3^l0Y@4>6B|p0eLs4IXwx#r5AMgq256avpV^`0+FrcrQf65^uh12Z1AE) z?@^WSZyrhjo56t@A+-tVI9BS!g|?LI z1io3BMe&TKYIH8G9^!-jVXPaedxR*MC=SJ&U;4->@1SRnmnr5tF)i#7OwXk^lvhA ztH(;tb#PT!-+!1Gpnhf>+I2PD?#2xklQ{tmlYRCq@{0mS@`cOXH^1?mN2_5qsmg6+ zEJ;2@_<>qSz-%va4Z~&Gshe1%ij)2j_&qRA>cq;KGFvng@rjZ6HP8Ioy1EH%0^1$0 z;^|N-?D3eYti9qecS|mq>V{Gp=O2nN_>*%za%%bH+O{I;=N>pmsZC1ph^ZU&Up zV6;K8BwabXi1D!E5Qvqo;agdqBO6nyYHDI+RrL3E#N5UPKar2jlUkmRo3}m*F$&Ba z9@a|tA-=rk?&NVF4GsjVMrRiPh?+7;am>lPeDs}6JqlL&z8W?^`ZFG)C-5D{CMFLj zS&XGntbGsiYTxLdbfQ#j?iTr@amJq<_vh-ri%>?_3j_klZ=9aN6(fXBF9$9-5)I3F z;nX&FzAw^c$T>ox5TAv|I;^vTtc|kWLTdU`H)vVpWU|L~x3xuKJ%8uGe`@)AQ38K< zq;lcrpZ)qj+Qpu`&Zo5j)HFLDT78+*U^L3Hi%!x|`Po(Wa)iuqQwh(+N#lzLxrTTDC+CM&litYda literal 0 HcmV?d00001 diff --git a/docs/course/04_IntroToTidyverse/index.html b/docs/course/04_IntroToTidyverse/index.html new file mode 100644 index 0000000..ddd5b7d --- /dev/null +++ b/docs/course/04_IntroToTidyverse/index.html @@ -0,0 +1,2617 @@ + + + + + + + + + + + +04 - Introduction to Tidyverse – Cytometry in R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +