# Collision removal functionality

Giulia Pais1*

1San Raffaele Telethon Institute for Gene Therapy - SR-Tiget, Via Olgettina 60, 20132 Milano - Italia

*giuliapais1@gmail.com, calabria.andrea@hsr.it

#### 19 May 2021

#### Package

ISAnalytics 1.2.0

# 1 Introduction

## 1.1 How to install ISAnalytics

To install the package run the following code:

    ## For release version
    if (!requireNamespace("BiocManager", quietly = TRUE)) {
          install.packages("BiocManager")
      }
    BiocManager::install("ISAnalytics")

    ## For devel version
    if (!requireNamespace("BiocManager", quietly = TRUE)) {
          install.packages("BiocManager")
      }
    # The following initializes usage of Bioc devel
    BiocManager::install(version = "devel")
    BiocManager::install("ISAnalytics")

To install from GitHub:

    # For release version
    if (!require(devtools)) {
        install.packages("devtools")
    }
    devtools::install_github("calabrialab/ISAnalytics",
        ref = "RELEASE_3_12",
        dependencies = TRUE,
        build_vignettes = TRUE
    )

    ## Safer option for vignette building issue
    devtools::install_github("calabrialab/ISAnalytics",
        ref = "RELEASE_3_12"
    )

    # For devel version
    if (!require(devtools)) {
        install.packages("devtools")
    }
    devtools::install_github("calabrialab/ISAnalytics",
        ref = "master",
        dependencies = TRUE,
        build_vignettes = TRUE
    )

    ## Safer option for vignette building issue
    devtools::install_github("calabrialab/ISAnalytics",
        ref = "master"
    )

    library(ISAnalytics)

## 1.2 Setting options

`ISAnalytics` has a verbose option that allows some functions to print additional information to the console while they’re executing. To disable this feature do:

    # DISABLE
    options("ISAnalytics.verbose" = FALSE)

    # ENABLE
    options("ISAnalytics.verbose" = TRUE)

Some functions also produce report in a user-friendly HTML format, to set this feature:

    # DISABLE HTML REPORTS
    options("ISAnalytics.widgets" = FALSE)

    # ENABLE HTML REPORTS
    options("ISAnalytics.widgets" = TRUE)

## 1.3 What is a collision and why should you care?

We’re not going into too much detail here, but we’re going to explain in a very simple way what is a “collision” and how the function in this package deal with them.

We say that an integration (aka a unique combination of chromosome, integration locus and strand) is a collision if this combination is shared between different independent samples: an independent sample is a unique combination of `ProjectID` and `SubjectID` (where subjects usually represent patients). The reason behind this is that it’s highly improbable to observe the very same integration in two different subjects and this phenomenon might be an indicator of some kind of contamination in the sequencing phase or in PCR phase, for this reason we might want to exclude such contamination from our analysis.
`ISAnalytics` provides a function that processes the imported data for the removal or reassignment of these “problematic” integrations, `remove_collisions`.

The processing is done on the sequence count matrix (after import) and matrices of other quantification types are re-aligned accordingly.

## 1.4 The logic behind the function

The `remove_collisions` function follows several logical steps to decide whether an integration is a collision and if it is it decides whether to re-assign it or remove it entirely based on different criterias.

### 1.4.1 Identifying the collisions

As we said before, a collision is a triplet made of `chr`, `integration locus` and `strand`, which is shared between different independent samples, aka a pair made of `ProjectID` and `SubjectID`. The function uses the information stored in the association file to assess which independent samples are present and counts the number of independent samples for each integration: those who have a count > 1 are considered collisions.

### 1.4.2 Re-assign vs remove

Once the collisions are identified, the function follows 3 steps where it tries to re-assign the combination to a single independent sample. The criterias are:

1. Compare dates: if it’s possible to have an absolute ordering on dates, the integration is re-assigned to the sample that has the earliest date. If two samples share the same date it’s impossible to decide, so the next criteria is tested
2. Compare replicate number: if a sample has the same integration in more than one replicate, it’s more probable the integration is not an artifact. If it’s possible to have an absolute ordering, the collision is re-assigned to the sample whose grouping is largest
3. Compare the sequence count value: if the previous criteria wasn’t sufficient to make a decision, for each group of independent samples it’s evaluated the sum of the sequence count value - for each group there is a cumulative value of the sequence count and this is compared to the value of other groups. If there is a single group which has a ratio n times bigger than other groups, this one is chosen for re-assignment. The factor n is passed as a parameter in the function ( `reads_ratio`), the default value is 10.

If none of the criterias were sufficient to make a decision, the integration is simply removed from the matrix.

# 2 Typical workflow

To know more about import functions take a look at the vignette “How to use import functions”.

## 2.1 Import the association file

Import your association file:

    withr::with_options(list(ISAnalytics.widgets = FALSE), {
        path_AF <- system.file("extdata", "ex_association_file.tsv",
            package = "ISAnalytics"
        )

        root_correct <- system.file("extdata", "fs.zip",
            package = "ISAnalytics"
        )
        root_correct <- unzip_file_system(root_correct, "fs")
        association_file <- import_association_file(path_AF, root_correct,
                                                    dates_format = "dmy")
    })
    #> *** Association file import summary ***
    #> ℹ For detailed report please set option 'ISAnalytics.widgets' to TRUE
    #> * Parsing problems detected: TRUE
    #> * Date parsing problems: TRUE
    #> * Column problems detected: TRUE
    #> * NAs found in important columns: TRUE
    #> * File system alignment: no problems detected
    #> *** Association file import summary ***
    #> ℹ For detailed report please set option 'ISAnalytics.widgets' to TRUE
    #> * Parsing problems detected: TRUE
    #> * Date parsing problems: TRUE
    #> * Column problems detected: TRUE
    #> * NAs found in important columns: TRUE
    #> * File system alignment: no problems detected

Important notes on the association file:

- You have to be sure your association file is properly filled out. The function requires you to specify a date column (by default “SequencingDate”), you have to ensure this column doesn’t contain NA values or incorrect values.
- You have to ensure that your association file contains ALL the information regarding CompleteAmplificationIDs present in the matrices you’re analyzing - an error is thrown otherwise
- If you have the verbose option set to true and your association file holds additional information on other samples which for any reason are not present in the matrix you’re analyzing, you’ll be notified with a console message.

## 2.2 Import the matrices for your analysis

    # This imports both sequence count and fragment estimate matrices
    withr::with_options(list(ISAnalytics.widgets = FALSE), {
        matrices <- import_parallel_Vispa2Matrices_auto(
            association_file = association_file, root = NULL,
            quantification_type = c("fragmentEstimate", "seqCount"),
            matrix_type = "annotated", workers = 2, patterns = NULL,
            matching_opt = "ANY", multi_quant_matrix = FALSE
        )
    })
    #> [1] "--- REPORT: FILES IMPORTED ---"
    #> # A tibble: 8 x 5
    #>   ProjectID   concatenatePoolIDSeqRun Quantification_type
    #>   <chr>       <chr>                   <chr>
    #> 1 CLOEXP      POOL6-1                 fragmentEstimate
    #> 2 PROJECT1100 ABX-LR-PL5-POOL14-1     fragmentEstimate
    #> 3 PROJECT1100 ABX-LR-PL6-POOL15-1     fragmentEstimate
    #> 4 PROJECT1101 ABY-LR-PL4-POOL54-2     fragmentEstimate
    #> 5 CLOEXP      POOL6-1                 seqCount
    #> 6 PROJECT1100 ABX-LR-PL5-POOL14-1     seqCount
    #> 7 PROJECT1100 ABX-LR-PL6-POOL15-1     seqCount
    #> 8 PROJECT1101 ABY-LR-PL4-POOL54-2     seqCount
    #>   Files_chosen
    #>   <fs::path>
    #> 1 /tmp/Rtmp1iQb16/fs/VA/CLOEXP/quantification/POOL6-1/VA-CLOEXP-POOL6-1_fragmentEstimate_matrix.no0.annotated.tsv.xz
    #> 2 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL5-POOL14-1/PROJECT1100_ABX-LR-PL5-POOL14-1_fragmentEstimate_ma…
    #> 3 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL6-POOL15-1/PROJECT1100_ABX-LR-PL6-POOL15-1_fragmentEstimate_ma…
    #> 4 /tmp/Rtmp1iQb16/fs/PROJECT1101/quantification/ABY-LR-PL4-POOL54-2/PROJECT1101_ABY-LR-PL4-POOL54-2_fragmentEstimate_ma…
    #> 5 /tmp/Rtmp1iQb16/fs/VA/CLOEXP/quantification/POOL6-1/VA-CLOEXP-POOL6-1_seqCount_matrix.no0.annotated.tsv.xz
    #> 6 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL5-POOL14-1/PROJECT1100_ABX-LR-PL5-POOL14-1_seqCount_matrix.no0…
    #> 7 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL6-POOL15-1/PROJECT1100_ABX-LR-PL6-POOL15-1_seqCount_matrix.no0…
    #> 8 /tmp/Rtmp1iQb16/fs/PROJECT1101/quantification/ABY-LR-PL4-POOL54-2/PROJECT1101_ABY-LR-PL4-POOL54-2_seqCount_matrix.no0…
    #>   Imported
    #>   <lgl>
    #> 1 TRUE
    #> 2 TRUE
    #> 3 TRUE
    #> 4 TRUE
    #> 5 TRUE
    #> 6 TRUE
    #> 7 TRUE
    #> 8 TRUE
    #> [1] "--- SUMMARY OF FILES CHOSEN FOR IMPORT ---"
    #> # A tibble: 8 x 4
    #>   ProjectID   concatenatePoolIDSeqRun Quantification_type
    #>   <chr>       <chr>                   <chr>
    #> 1 CLOEXP      POOL6-1                 fragmentEstimate
    #> 2 CLOEXP      POOL6-1                 seqCount
    #> 3 PROJECT1100 ABX-LR-PL5-POOL14-1     fragmentEstimate
    #> 4 PROJECT1100 ABX-LR-PL5-POOL14-1     seqCount
    #> 5 PROJECT1100 ABX-LR-PL6-POOL15-1     fragmentEstimate
    #> 6 PROJECT1100 ABX-LR-PL6-POOL15-1     seqCount
    #> 7 PROJECT1101 ABY-LR-PL4-POOL54-2     fragmentEstimate
    #> 8 PROJECT1101 ABY-LR-PL4-POOL54-2     seqCount
    #>   Files_chosen
    #>   <fs::path>
    #> 1 /tmp/Rtmp1iQb16/fs/VA/CLOEXP/quantification/POOL6-1/VA-CLOEXP-POOL6-1_fragmentEstimate_matrix.no0.annotated.tsv.xz
    #> 2 /tmp/Rtmp1iQb16/fs/VA/CLOEXP/quantification/POOL6-1/VA-CLOEXP-POOL6-1_seqCount_matrix.no0.annotated.tsv.xz
    #> 3 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL5-POOL14-1/PROJECT1100_ABX-LR-PL5-POOL14-1_fragmentEstimate_ma…
    #> 4 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL5-POOL14-1/PROJECT1100_ABX-LR-PL5-POOL14-1_seqCount_matrix.no0…
    #> 5 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL6-POOL15-1/PROJECT1100_ABX-LR-PL6-POOL15-1_fragmentEstimate_ma…
    #> 6 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL6-POOL15-1/PROJECT1100_ABX-LR-PL6-POOL15-1_seqCount_matrix.no0…
    #> 7 /tmp/Rtmp1iQb16/fs/PROJECT1101/quantification/ABY-LR-PL4-POOL54-2/PROJECT1101_ABY-LR-PL4-POOL54-2_fragmentEstimate_ma…
    #> 8 /tmp/Rtmp1iQb16/fs/PROJECT1101/quantification/ABY-LR-PL4-POOL54-2/PROJECT1101_ABY-LR-PL4-POOL54-2_seqCount_matrix.no0…
    #> [1] "--- INTEGRATION MATRICES FOUND REPORT ---"
    #> # A tibble: 8 x 5
    #>   ProjectID   concatenatePoolIDSeqRun Anomalies Quantification_type
    #>   <chr>       <chr>                   <lgl>     <chr>
    #> 1 CLOEXP      POOL6-1                 FALSE     fragmentEstimate
    #> 2 CLOEXP      POOL6-1                 FALSE     seqCount
    #> 3 PROJECT1100 ABX-LR-PL5-POOL14-1     FALSE     fragmentEstimate
    #> 4 PROJECT1100 ABX-LR-PL5-POOL14-1     FALSE     seqCount
    #> 5 PROJECT1100 ABX-LR-PL6-POOL15-1     FALSE     fragmentEstimate
    #> 6 PROJECT1100 ABX-LR-PL6-POOL15-1     FALSE     seqCount
    #> 7 PROJECT1101 ABY-LR-PL4-POOL54-2     FALSE     fragmentEstimate
    #> 8 PROJECT1101 ABY-LR-PL4-POOL54-2     FALSE     seqCount
    #>   Files_found
    #>   <fs::path>
    #> 1 /tmp/Rtmp1iQb16/fs/VA/CLOEXP/quantification/POOL6-1/VA-CLOEXP-POOL6-1_fragmentEstimate_matrix.no0.annotated.tsv.xz
    #> 2 /tmp/Rtmp1iQb16/fs/VA/CLOEXP/quantification/POOL6-1/VA-CLOEXP-POOL6-1_seqCount_matrix.no0.annotated.tsv.xz
    #> 3 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL5-POOL14-1/PROJECT1100_ABX-LR-PL5-POOL14-1_fragmentEstimate_ma…
    #> 4 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL5-POOL14-1/PROJECT1100_ABX-LR-PL5-POOL14-1_seqCount_matrix.no0…
    #> 5 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL6-POOL15-1/PROJECT1100_ABX-LR-PL6-POOL15-1_fragmentEstimate_ma…
    #> 6 /tmp/Rtmp1iQb16/fs/PROJECT1100/quantification/ABX-LR-PL6-POOL15-1/PROJECT1100_ABX-LR-PL6-POOL15-1_seqCount_matrix.no0…
    #> 7 /tmp/Rtmp1iQb16/fs/PROJECT1101/quantification/ABY-LR-PL4-POOL54-2/PROJECT1101_ABY-LR-PL4-POOL54-2_fragmentEstimate_ma…
    #> 8 /tmp/Rtmp1iQb16/fs/PROJECT1101/quantification/ABY-LR-PL4-POOL54-2/PROJECT1101_ABY-LR-PL4-POOL54-2_seqCount_matrix.no0…

As stated in the introduction, it is fundamental that the sequence count matrix is present for the collision removal process to take place.

## 2.3 Process the collisions

You can process the collisions in 3 different ways.

### 2.3.1 Pass the entire named list to the function

    # Pass the whole named list
    withr::with_options(list(ISAnalytics.widgets = FALSE), {
        matrices_processed <- remove_collisions(
            x = matrices,
            association_file = association_file,
            date_col = "SequencingDate",
            reads_ratio = 10
        )
    })
    #> Found additional data relative to some projects that are not included in the imported matrices. Here is a summary
    #> # A tibble: 1 x 3
    #>   ProjectID   PoolID
    #>   <chr>       <chr>
    #> 1 PROJECT1101 ABY-LR-PL4-POOL54
    #>   CompleteAmplificationID
    #>   <chr>
    #> 1 PROJECT1101_ABY-LR-PL4-POOL54_LTR51LC51_VA2020-mix14_VA2020-mix14_lenti_737.pCCLsin.PPT.SFFV.eGFP.Wpre_PL4_NONE_2_NON…
    #> Identifying collisions...
    #> Processing collisions...
    #>
      |
      |                                                                                                              |   0%
      |
      |============================                                                                                  |  25%
      |
      |=======================================================                                                       |  50%
      |
      |==================================================================================                            |  75%
      |
      |==============================================================================================================| 100%
    #>
    #> [1] "--- SUMMARY ---"
    #> # A tibble: 4 x 7
    #>   SubjectID    count_integrations_before sumSeqReads_before count_integrations_after sumSeqReads_after
    #>   <chr>                            <int>              <dbl>                    <int>             <dbl>
    #> 1 VA2020-mix10                      2092           10099664                     1714           5052150
    #> 2 VA2020-mix11                      1332           15955128                      994           7980886
    #> 3 VA2020-mix12                       896            8172644                      614           4088054
    #> 4 VA2020-mix13                      1584           10035460                     1258           5019402
    #>   delta_integrations delta_seqReads
    #>                <int>          <dbl>
    #> 1                378        5047514
    #> 2                338        7974242
    #> 3                282        4084590
    #> 4                326        5016058
    #> Realigning matrices...
    #> Finished!

If you have the “widgets” option active, a report file is produced at the end that shows the before and after for each subject (and some other details). This report is an HTML widget, so you can save it or export it for future reference if you need it.
In this case, collision removal is done on the sequence count matrix and other matrices are re-aligned automatically.

### 2.3.2 Give only the sequence count matrix as input

    # Pass the sequence count matrix only
    withr::with_options(list(ISAnalytics.widgets = FALSE), {
        matrices_processed_single <- remove_collisions(
            x = matrices$seqCount,
            association_file =
                association_file,
            date_col = "SequencingDate",
            reads_ratio = 10
        )
    })
    #> Found additional data relative to some projects that are not included in the imported matrices. Here is a summary
    #> # A tibble: 1 x 3
    #>   ProjectID   PoolID
    #>   <chr>       <chr>
    #> 1 PROJECT1101 ABY-LR-PL4-POOL54
    #>   CompleteAmplificationID
    #>   <chr>
    #> 1 PROJECT1101_ABY-LR-PL4-POOL54_LTR51LC51_VA2020-mix14_VA2020-mix14_lenti_737.pCCLsin.PPT.SFFV.eGFP.Wpre_PL4_NONE_2_NON…
    #> Identifying collisions...
    #> Processing collisions...
    #>
      |
      |                                                                                                              |   0%
      |
      |============================                                                                                  |  25%
      |
      |=======================================================                                                       |  50%
      |
      |==================================================================================                            |  75%
      |
      |==============================================================================================================| 100%
    #>
    #> [1] "--- SUMMARY ---"
    #> # A tibble: 4 x 7
    #>   SubjectID    count_integrations_before sumSeqReads_before count_integrations_after sumSeqReads_after
    #>   <chr>                            <int>              <dbl>                    <int>             <dbl>
    #> 1 VA2020-mix10                      2092           10099664                     1714           5052150
    #> 2 VA2020-mix11                      1332           15955128                      994           7980886
    #> 3 VA2020-mix12                       896            8172644                      614           4088054
    #> 4 VA2020-mix13                      1584           10035460                     1258           5019402
    #>   delta_integrations delta_seqReads
    #>                <int>          <dbl>
    #> 1                378        5047514
    #> 2                338        7974242
    #> 3                282        4084590
    #> 4                326        5016058
    #> Finished! You provided a single sequence count as matrix, to re-align other related matrices see ?realign_after_collisions

If you have the “verbose” option active, a console message will remind you to align other matrices if you have them at a later time.

### 2.3.3 Support for multi-quantification matrices

If you’d like to avoid the re-alignment phase, you can call collision removal on a multi-quantification matrix obtained via the function `comparison_matrix`:

    # Obtain multi-quantification matrix
    multi <- comparison_matrix(matrices)
    multi
    #> # A tibble: 5,904 x 8
    #>    chr   integration_locus strand GeneName  GeneStrand CompleteAmplificationID                 fragmentEstimate seqCount
    #>    <chr>             <int> <chr>  <chr>     <chr>      <fct>                                              <dbl>    <dbl>
    #>  1 10            102326217 +      HIF1AN    +          CLOEXP_POOL6_LTR10LC10_VA2020-mix10_VA…             1.00        1
    #>  2 10             20775144 +      MIR4675   +          CLOEXP_POOL6_LTR10LC10_VA2020-mix10_VA…             1.00        1
    #>  3 10             24622789 +      KIAA1217  +          CLOEXP_POOL6_LTR10LC10_VA2020-mix10_VA…             1.00        1
    #>  4 10             30105047 +      SVIL      -          CLOEXP_POOL6_LTR10LC10_VA2020-mix10_VA…             1.00        1
    #>  5 10             32656933 -      EPC1      -          CLOEXP_POOL6_LTR10LC10_VA2020-mix10_VA…             1.00        1
    #>  6 10             66717706 +      LOC10192… -          CLOEXP_POOL6_LTR10LC10_VA2020-mix10_VA…             1.00        1
    #>  7 10             76391232 -      ADK       +          CLOEXP_POOL6_LTR10LC10_VA2020-mix10_VA…             1.00        1
    #>  8 10             85334019 -      LOC10537… -          CLOEXP_POOL6_LTR10LC10_VA2020-mix10_VA…             2.00        6
    #>  9 11            107591208 +      SLN       -          CLOEXP_POOL6_LTR10LC10_VA2020-mix10_VA…             1.00        1
    #> 10 11            111744171 +      FDXACB1   -          CLOEXP_POOL6_LTR10LC10_VA2020-mix10_VA…             1.00        1
    #> # … with 5,894 more rows
    withr::with_options(list(ISAnalytics.widgets = FALSE), {
        matrices_processed_multi <- remove_collisions(
            x = multi,
            association_file =
                association_file,
            date_col = "SequencingDate",
            reads_ratio = 10,
            seq_count_col = "seqCount"
        )
    })
    #> Found additional data relative to some projects that are not included in the imported matrices. Here is a summary
    #> # A tibble: 1 x 3
    #>   ProjectID   PoolID
    #>   <chr>       <chr>
    #> 1 PROJECT1101 ABY-LR-PL4-POOL54
    #>   CompleteAmplificationID
    #>   <chr>
    #> 1 PROJECT1101_ABY-LR-PL4-POOL54_LTR51LC51_VA2020-mix14_VA2020-mix14_lenti_737.pCCLsin.PPT.SFFV.eGFP.Wpre_PL4_NONE_2_NON…
    #> Identifying collisions...
    #> Processing collisions...
    #>
      |
      |                                                                                                              |   0%
      |
      |============================                                                                                  |  25%
      |
      |=======================================================                                                       |  50%
      |
      |==================================================================================                            |  75%
      |
      |==============================================================================================================| 100%
    #>
    #> [1] "--- SUMMARY ---"
    #> # A tibble: 4 x 7
    #>   SubjectID    count_integrations_before sumSeqReads_before count_integrations_after sumSeqReads_after
    #>   <chr>                            <int>              <dbl>                    <int>             <dbl>
    #> 1 VA2020-mix10                      2092           10099664                     1714           5052150
    #> 2 VA2020-mix11                      1332           15955128                      994           7980886
    #> 3 VA2020-mix12                       896            8172644                      614           4088054
    #> 4 VA2020-mix13                      1584           10035460                     1258           5019402
    #>   delta_integrations delta_seqReads
    #>                <int>          <dbl>
    #> 1                378        5047514
    #> 2                338        7974242
    #> 3                282        4084590
    #> 4                326        5016058
    #> Finished!

As you can see, `comparison_matrix` produces a single integration matrix from the named list of single quantification matrices. This is the recommended approach if you don’t have specific needs as it negates the necessity of realigning matrices altogether.

## 2.4 Re-align other matrices

If you have opted for the second way, to realign other matrices you have to call the function `realign_after_collisions`, passing as input the processed sequence count matrix and the named list of other matrices to realign.
NOTE: the names in the list must be quantification types.

    seq_count_proc <- matrices_processed_single
    other_matrices <- matrices[!names(matrices) %in% "seqCount"]
    # Select only matrices that are not relative to sequence count
    other_realigned <- realign_after_collisions(seq_count_proc, other_matrices)

# 3 Reproducibility

The ISAnalytics package (calabrialab, 2021) was made possible thanks to:

- R (R Core Team, 2021)
- BiocStyle (Oleś, 2021)
- knitcitations (Boettiger, 2021)
- knitr (Xie, 2021)
- rmarkdown (Allaire, Xie, McPherson, Luraschi, et al., 2021)
- sessioninfo (Csárdi, core, Wickham, Chang, et al., 2018)
- testthat (Wickham, 2011)

This package was developed using biocthis.

`R` session information.

    #> ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
    #>  setting  value
    #>  version  R version 4.1.0 (2021-05-18)
    #>  os       Ubuntu 20.04.2 LTS
    #>  system   x86_64, linux-gnu
    #>  ui       X11
    #>  language (EN)
    #>  collate  C
    #>  ctype    en_US.UTF-8
    #>  tz       America/New_York
    #>  date     2021-05-19
    #>
    #> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
    #>  package       * version date       lib source
    #>  assertthat      0.2.1   2019-03-21 [2] CRAN (R 4.1.0)
    #>  BiocManager     1.30.15 2021-05-11 [2] CRAN (R 4.1.0)
    #>  BiocParallel    1.26.0  2021-05-19 [2] Bioconductor
    #>  BiocStyle     * 2.20.0  2021-05-19 [2] Bioconductor
    #>  bookdown        0.22    2021-04-22 [2] CRAN (R 4.1.0)
    #>  bslib           0.2.5.1 2021-05-18 [2] CRAN (R 4.1.0)
    #>  cellranger      1.1.0   2016-07-27 [2] CRAN (R 4.1.0)
    #>  cli             2.5.0   2021-04-26 [2] CRAN (R 4.1.0)
    #>  colorspace      2.0-1   2021-05-04 [2] CRAN (R 4.1.0)
    #>  crayon          1.4.1   2021-02-08 [2] CRAN (R 4.1.0)
    #>  data.table      1.14.0  2021-02-21 [2] CRAN (R 4.1.0)
    #>  DBI             1.1.1   2021-01-15 [2] CRAN (R 4.1.0)
    #>  digest          0.6.27  2020-10-24 [2] CRAN (R 4.1.0)
    #>  dplyr           1.0.6   2021-05-05 [2] CRAN (R 4.1.0)
    #>  ellipsis        0.3.2   2021-04-29 [2] CRAN (R 4.1.0)
    #>  evaluate        0.14    2019-05-28 [2] CRAN (R 4.1.0)
    #>  fansi           0.4.2   2021-01-15 [2] CRAN (R 4.1.0)
    #>  fs              1.5.0   2020-07-31 [2] CRAN (R 4.1.0)
    #>  generics        0.1.0   2020-10-31 [2] CRAN (R 4.1.0)
    #>  ggplot2         3.3.3   2020-12-30 [2] CRAN (R 4.1.0)
    #>  ggrepel         0.9.1   2021-01-15 [2] CRAN (R 4.1.0)
    #>  glue            1.4.2   2020-08-27 [2] CRAN (R 4.1.0)
    #>  gtable          0.3.0   2019-03-25 [2] CRAN (R 4.1.0)
    #>  highr           0.9     2021-04-16 [2] CRAN (R 4.1.0)
    #>  hms             1.1.0   2021-05-17 [2] CRAN (R 4.1.0)
    #>  htmltools       0.5.1.1 2021-01-22 [2] CRAN (R 4.1.0)
    #>  htmlwidgets     1.5.3   2020-12-10 [2] CRAN (R 4.1.0)
    #>  httr            1.4.2   2020-07-20 [2] CRAN (R 4.1.0)
    #>  ISAnalytics   * 1.2.0   2021-05-19 [1] Bioconductor
    #>  jquerylib       0.1.4   2021-04-26 [2] CRAN (R 4.1.0)
    #>  jsonlite        1.7.2   2020-12-09 [2] CRAN (R 4.1.0)
    #>  knitcitations * 1.0.12  2021-01-10 [2] CRAN (R 4.1.0)
    #>  knitr           1.33    2021-04-24 [2] CRAN (R 4.1.0)
    #>  lattice         0.20-44 2021-05-02 [2] CRAN (R 4.1.0)
    #>  lazyeval        0.2.2   2019-03-15 [2] CRAN (R 4.1.0)
    #>  lifecycle       1.0.0   2021-02-15 [2] CRAN (R 4.1.0)
    #>  lubridate       1.7.10  2021-02-26 [2] CRAN (R 4.1.0)
    #>  magrittr      * 2.0.1   2020-11-17 [2] CRAN (R 4.1.0)
    #>  mnormt          2.0.2   2020-09-01 [2] CRAN (R 4.1.0)
    #>  munsell         0.5.0   2018-06-12 [2] CRAN (R 4.1.0)
    #>  nlme            3.1-152 2021-02-04 [2] CRAN (R 4.1.0)
    #>  pillar          1.6.1   2021-05-16 [2] CRAN (R 4.1.0)
    #>  pkgconfig       2.0.3   2019-09-22 [2] CRAN (R 4.1.0)
    #>  plotly          4.9.3   2021-01-10 [2] CRAN (R 4.1.0)
    #>  plyr            1.8.6   2020-03-03 [2] CRAN (R 4.1.0)
    #>  ps              1.6.0   2021-02-28 [2] CRAN (R 4.1.0)
    #>  psych           2.1.3   2021-03-27 [2] CRAN (R 4.1.0)
    #>  purrr           0.3.4   2020-04-17 [2] CRAN (R 4.1.0)
    #>  R6              2.5.0   2020-10-28 [2] CRAN (R 4.1.0)
    #>  Rcapture        1.4-3   2019-12-16 [2] CRAN (R 4.1.0)
    #>  Rcpp            1.0.6   2021-01-15 [2] CRAN (R 4.1.0)
    #>  reactable       0.2.3   2020-10-04 [2] CRAN (R 4.1.0)
    #>  readr           1.4.0   2020-10-05 [2] CRAN (R 4.1.0)
    #>  readxl          1.3.1   2019-03-13 [2] CRAN (R 4.1.0)
    #>  RefManageR      1.3.0   2020-11-13 [2] CRAN (R 4.1.0)
    #>  rlang           0.4.11  2021-04-30 [2] CRAN (R 4.1.0)
    #>  rmarkdown       2.8     2021-05-07 [2] CRAN (R 4.1.0)
    #>  rstudioapi      0.13    2020-11-12 [2] CRAN (R 4.1.0)
    #>  sass            0.4.0   2021-05-12 [2] CRAN (R 4.1.0)
    #>  scales          1.1.1   2020-05-11 [2] CRAN (R 4.1.0)
    #>  sessioninfo   * 1.1.1   2018-11-05 [2] CRAN (R 4.1.0)
    #>  stringi         1.6.2   2021-05-17 [2] CRAN (R 4.1.0)
    #>  stringr         1.4.0   2019-02-10 [2] CRAN (R 4.1.0)
    #>  tibble          3.1.2   2021-05-16 [2] CRAN (R 4.1.0)
    #>  tidyr           1.1.3   2021-03-03 [2] CRAN (R 4.1.0)
    #>  tidyselect      1.1.1   2021-04-30 [2] CRAN (R 4.1.0)
    #>  tmvnsim         1.0-2   2016-12-15 [2] CRAN (R 4.1.0)
    #>  upsetjs         1.9.0   2021-02-15 [2] CRAN (R 4.1.0)
    #>  utf8            1.2.1   2021-03-12 [2] CRAN (R 4.1.0)
    #>  vctrs           0.3.8   2021-04-29 [2] CRAN (R 4.1.0)
    #>  viridisLite     0.4.0   2021-04-13 [2] CRAN (R 4.1.0)
    #>  withr           2.4.2   2021-04-18 [2] CRAN (R 4.1.0)
    #>  xfun            0.23    2021-05-15 [2] CRAN (R 4.1.0)
    #>  xml2            1.3.2   2020-04-23 [2] CRAN (R 4.1.0)
    #>  yaml            2.2.1   2020-02-01 [2] CRAN (R 4.1.0)
    #>  zip             2.1.1   2020-08-27 [2] CRAN (R 4.1.0)
    #>
    #> [1] /tmp/Rtmpxb65TG/Rinst5bff6471148ea
    #> [2] /home/biocbuild/bbs-3.13-bioc/R/library

# 4 Bibliography

This vignette was generated using BiocStyle (Oleś, 2021) with knitr (Xie, 2021) and rmarkdown (Allaire, Xie, McPherson, Luraschi, et al., 2021) running behind the scenes.

Citations made with knitcitations (Boettiger, 2021).

[1] J. Allaire, Y. Xie, J. McPherson, J. Luraschi, et al. rmarkdown: Dynamic Documents for R. R package version 2.8. 2021. <URL: https://github.com/rstudio/rmarkdown>.

[2] C. Boettiger. knitcitations: Citations for ‘Knitr’ Markdown Files. R package version 1.0.12. 2021. <URL: https://CRAN.R-project.org/package=knitcitations>.

[3] G. Csárdi, R. core, H. Wickham, W. Chang, et al. sessioninfo: R Session Information. R package version 1.1.1. 2018. <URL: https://CRAN.R-project.org/package=sessioninfo>.

[4] A. Oleś. BiocStyle: Standard styles for vignettes and other Bioconductor documents. R package version 2.20.0. 2021. <URL: https://github.com/Bioconductor/BiocStyle>.

[5] R Core Team. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. Vienna, Austria, 2021. <URL: https://www.R-project.org/>.

[6] H. Wickham. “testthat: Get Started with Testing”. In: The R Journal 3 (2011), pp. 5-10. <URL: https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Wickham.pdf>.

[7] Y. Xie. knitr: A General-Purpose Package for Dynamic Report Generation in R. R package version 1.33. 2021. <URL: https://yihui.org/knitr/>.

[8] calabrialab. Analyze gene therapy vector insertion sites data identified from genomics next generation sequencing reads for clonal tracking studies. https://github.com/calabrialab/ISAnalytics - R package version 1.2.0. 2021. DOI: 10.18129/B9.bioc.ISAnalytics. <URL: http://www.bioconductor.org/packages/ISAnalytics>.