# Converting PharmacoSet Drug Response Data into gDR object

#### Jermiah Joseph

jermiah.joseph@uhn.ca

#### Bartosz Czech

bartosz.w.czech@gmail.com

    library(PharmacoGx)
    library(gDRimport)

# Overview

The `gDRimport` package is a part of the gDR suite. It helps to prepare raw drug response data for downstream processing. It mainly contains helper functions for importing/loading/validating dose response data provided from different scanner sources. In collaboration with the BHKLab, `gDRimport` also provides functions that can convert a `PharmacoGx::PharamcoSet` object into a gDR object. With this functionality, users familiar with the gDR suite of packages and methods can utilize the publically available, curated datasets from the PharmacoGx database. The main step in this process is to extract the drug dose-response data from the PharmacoSets and transform them into a `data.table` that can be used as input for the `gDRcore::runDrugResponseProcessingPipeline`.

# Loading a PharmacoSet (PSet)

Whereas a user might already have a pharmacoset loaded in their R session, if they wish to obtain a different pharmacoset or use the same script in the future we provide a helper function to do so. It helps to have a user directory in which to store all pharmacosets, and by passing this directory into the function as a parameter, the function will also check to see if the PSet exists in the user-defined directory. This is to ensure that the PSet is not being re-downloaded if it already has.

    pset <- getPSet("Tavor_2020")
    pset

# Converting PharmacoSet to data.table for gDR pipeline

`PharamcoSets` hold data pertaining to the cell lines (@sample slot), drugs (@treatment slot), and dose response experiments (@treatmentResponse slot). The dose response data is stored in a `treatmentResponseExperiment` object and the function `gDRimport::convert_pset_to_df` extracts this information to build a `data.table` that can be used as input to the gDR pipeline.

    # Store treatment response data in df_
    dt <- convert_pset_to_df(pharmacoset = pset)
    str(dt)
    #> Classes 'data.table' and 'data.frame':   34516 obs. of  7 variables:
    #>  $ Barcode              : chr  "PCM-0103090_1_130695_2018-08-28" "PCM-0103090_1_130695_2018-08-28" "PCM-0103090_1_130695_2018-08-28" "PCM-0103090_1_130695_2018-08-28" ...
    #>  $ ReadoutValue         : num  75.7 63.1 75.9 87.2 78.8 ...
    #>  $ Concentration        : num  0.0021 0.0052 0.01 0.0299 0.0798 ...
    #>  $ Clid                 : chr  "130695" "130695" "130695" "130695" ...
    #>  $ DrugName             : chr  "Ivosidenib" "Ivosidenib" "Ivosidenib" "Ivosidenib" ...
    #>  $ Duration             : num  48 48 48 48 48 48 48 48 48 48 ...
    #>  $ ReferenceDivisionTime: logi  NA NA NA NA NA NA ...
    #>  - attr(*, ".internal.selfref")=<externalptr>

# Subsetting to extract relevant information

Most canonical `PharmacoSets` have data pertaining to many cell lines and their response to many drugs (drug-combination data is available in some but its conversion to gDR is not currently supported). As such, in the interest of time and resources, it may be useful to subset the data before providing it as input for the gDR pipeline.

    # example subset using only 1 cell line
    subset_cl <- dt$Clid[1]
    x <- dt[Clid == subset_cl]
    x
    #>                              Barcode ReadoutValue Concentration   Clid
    #>                               <char>        <num>         <num> <char>
    #>   1: PCM-0103090_1_130695_2018-08-28       75.733        0.0021 130695
    #>   2: PCM-0103090_1_130695_2018-08-28       63.094        0.0052 130695
    #>   3: PCM-0103090_1_130695_2018-08-28       75.935        0.0100 130695
    #>   4: PCM-0103090_1_130695_2018-08-28       87.159        0.0299 130695
    #>   5: PCM-0103090_1_130695_2018-08-28       78.766        0.0798 130695
    #>  ---
    #> 589: PCM-0064526_5_130695_2018-08-28       71.707        1.4960 130695
    #> 590: PCM-0064526_5_130695_2018-08-28       60.488        3.9900 130695
    #> 591: PCM-0064526_5_130695_2018-08-28       25.366        9.9750 130695
    #> 592: PCM-0064526_5_130695_2018-08-28        5.976       24.9400 130695
    #> 593: PCM-0064526_5_130695_2018-08-28      100.000        0.0000 130695
    #>         DrugName Duration ReferenceDivisionTime
    #>           <char>    <num>                <lgcl>
    #>   1:  Ivosidenib       48                    NA
    #>   2:  Ivosidenib       48                    NA
    #>   3:  Ivosidenib       48                    NA
    #>   4:  Ivosidenib       48                    NA
    #>   5:  Ivosidenib       48                    NA
    #>  ---
    #> 589: Azacitidine       48                    NA
    #> 590: Azacitidine       48                    NA
    #> 591: Azacitidine       48                    NA
    #> 592: Azacitidine       48                    NA
    #> 593:     vehicle       48                    NA

# Running drug response pipeline with data

The subsetted data can now be used as input for the `gDRcore::runDrugResponseProcessingPipeline()`. The output of this function is a `MultiAssayExperiment` object which can be accessed with `gDRutils::convert_se_assay_to_dt()`

    # RUN DRUG RESPONSE PROCESSING PIPELINE
    se <- gDRcore::runDrugResponseProcessingPipeline(x)
    se

    # Convert Summarized Experiments to data.table
    # Available SEs : "RawTreatred", "Controls", "Normalized", "Averaged", "Metrics"

    str(gDRutils::convert_se_assay_to_dt(se[[1]], "Averaged"))
    str(gDRutils::convert_se_assay_to_dt(se[[1]], "Metrics"))

# SessionInfo

    sessionInfo()
    #> R version 4.5.1 (2025-06-13 ucrt)
    #> Platform: x86_64-w64-mingw32/x64
    #> Running under: Windows Server 2022 x64 (build 20348)
    #>
    #> Matrix products: default
    #>   LAPACK version 3.12.1
    #>
    #> locale:
    #> [1] LC_COLLATE=C
    #> [2] LC_CTYPE=English_United States.utf8
    #> [3] LC_MONETARY=English_United States.utf8
    #> [4] LC_NUMERIC=C
    #> [5] LC_TIME=English_United States.utf8
    #>
    #> time zone: America/New_York
    #> tzcode source: internal
    #>
    #> attached base packages:
    #> [1] stats4    stats     graphics  grDevices utils     datasets  methods
    #> [8] base
    #>
    #> other attached packages:
    #>  [1] MultiAssayExperiment_1.35.6 gDRimport_1.7.4
    #>  [3] PharmacoGx_3.13.2           CoreGx_2.13.0
    #>  [5] SummarizedExperiment_1.39.1 Biobase_2.69.0
    #>  [7] GenomicRanges_1.61.1        Seqinfo_0.99.2
    #>  [9] IRanges_2.43.0              S4Vectors_0.47.0
    #> [11] MatrixGenerics_1.21.0       matrixStats_1.5.0
    #> [13] BiocGenerics_0.55.1         generics_0.1.4
    #>
    #> loaded via a namespace (and not attached):
    #>  [1] bitops_1.0-9         testthat_3.2.3       rlang_1.1.6
    #>  [4] magrittr_2.0.3       shinydashboard_0.7.3 compiler_4.5.1
    #>  [7] vctrs_0.6.5          reshape2_1.4.4       relations_0.6-15
    #> [10] stringr_1.5.1        pkgconfig_2.0.3      crayon_1.5.3
    #> [13] fastmap_1.2.0        backports_1.5.0      XVector_0.49.0
    #> [16] caTools_1.18.3       promises_1.3.3       rmarkdown_2.29
    #> [19] coop_0.6-3           xfun_0.52            cachem_1.1.0
    #> [22] jsonlite_2.0.0       SnowballC_0.7.1      later_1.4.2
    #> [25] DelayedArray_0.35.2  BiocParallel_1.43.4  parallel_4.5.1
    #> [28] sets_1.0-25          cluster_2.1.8.1      R6_2.6.1
    #> [31] bslib_0.9.0          stringi_1.8.7        RColorBrewer_1.1-3
    #> [34] qs_0.27.3            limma_3.65.2         boot_1.3-31
    #> [37] brio_1.1.5           jquerylib_0.1.4      assertthat_0.2.1
    #> [40] Rcpp_1.1.0           knitr_1.50           downloader_0.4.1
    #> [43] BiocBaseUtils_1.11.2 httpuv_1.6.16        Matrix_1.7-3
    #> [46] igraph_2.1.4         tidyselect_1.2.1     dichromat_2.0-0.1
    #> [49] abind_1.4-8          yaml_2.3.10          stringfish_0.17.0
    #> [52] gplots_3.2.0         codetools_0.2-20     lattice_0.22-7
    #> [55] tibble_3.3.0         plyr_1.8.9           shiny_1.11.1
    #> [58] BumpyMatrix_1.17.0   evaluate_1.0.4       RcppParallel_5.1.10
    #> [61] bench_1.1.4          pillar_1.11.0        lsa_0.73.3
    #> [64] KernSmooth_2.23-26   checkmate_2.3.2      DT_0.33
    #> [67] shinyjs_2.1.0        piano_2.25.0         ggplot2_3.5.2
    #> [70] scales_1.4.0         RApiSerialize_0.1.4  gtools_3.9.5
    #> [73] xtable_1.8-4         marray_1.87.0        glue_1.8.0
    #> [76] slam_0.1-55          tools_4.5.1          data.table_1.17.8
    #> [79] gDRutils_1.7.13      fgsea_1.35.6         visNetwork_2.1.2
    #> [82] fastmatch_1.1-6      cowplot_1.2.0        grid_4.5.1
    #> [85] cli_3.6.5            S4Arrays_1.9.1       dplyr_1.1.4
    #> [88] gtable_0.3.6         sass_0.4.10          digest_0.6.37
    #> [91] SparseArray_1.9.1    htmlwidgets_1.6.4    farver_2.1.2
    #> [94] htmltools_0.5.8.1    lifecycle_1.0.4      statmod_1.5.0
    #> [97] mime_0.13