From 2ad6ca8ce886fa67f98d4c0ebd5c450eaa36c46e Mon Sep 17 00:00:00 2001 From: js2264 Date: Mon, 30 Oct 2023 10:48:02 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20bioc=5Fdevel=20from=20@=20js22?= =?UTF-8?q?64/OHCA@6b0db5d50c23fe38409ccce43325b1a049a134fb=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data-representation.html | 827 +++++------------- index.html | 102 +-- interactions-centric.html | 214 ++--- .../figure-html/unnamed-chunk-10-1.png | Bin 0 -> 70823 bytes .../figure-html/unnamed-chunk-10-2.png | Bin 0 -> 64265 bytes .../figure-html/unnamed-chunk-11-1.png | Bin 70823 -> 25559 bytes .../figure-html/unnamed-chunk-11-2.png | Bin 64265 -> 22115 bytes .../figure-html/unnamed-chunk-12-1.png | Bin 25559 -> 0 bytes .../figure-html/unnamed-chunk-12-2.png | Bin 22115 -> 0 bytes ...-chunk-14-1.png => unnamed-chunk-13-1.png} | Bin .../figure-html/unnamed-chunk-15-1.png | Bin 0 -> 42175 bytes .../figure-html/unnamed-chunk-16-1.png | Bin 42175 -> 82211 bytes .../figure-html/unnamed-chunk-17-1.png | Bin 82211 -> 59550 bytes .../figure-html/unnamed-chunk-18-1.png | Bin 59550 -> 0 bytes interoperability.html | 163 ++-- matrix-centric.html | 45 +- .../figure-html/unnamed-chunk-10-1.png | Bin 604793 -> 604877 bytes .../figure-html/unnamed-chunk-13-1.png | Bin 69601 -> 69692 bytes .../figure-html/unnamed-chunk-16-1.png | Bin 777914 -> 777550 bytes parsing.html | 236 ++--- principles.html | 103 +-- search.json | 50 +- sitemap.xml | 28 +- topological-features.html | 224 ++--- visualization.html | 7 +- .../figure-html/unnamed-chunk-10-1.png | Bin 363160 -> 363254 bytes .../figure-html/unnamed-chunk-11-1.png | Bin 384417 -> 384503 bytes .../figure-html/unnamed-chunk-14-1.png | Bin 363537 -> 363621 bytes .../figure-html/unnamed-chunk-17-1.png | Bin 48420 -> 48519 bytes .../figure-html/unnamed-chunk-4-1.png | Bin 350926 -> 351012 bytes .../figure-html/unnamed-chunk-5-1.png | Bin 197876 -> 197963 bytes .../figure-html/unnamed-chunk-7-1.png | Bin 393128 -> 393222 bytes .../figure-html/unnamed-chunk-8-1.png | Bin 1159931 -> 1160024 bytes .../figure-html/unnamed-chunk-8-2.png | Bin 988955 -> 989043 bytes .../figure-html/unnamed-chunk-9-1.png | Bin 269200 -> 269281 bytes 35 files changed, 628 insertions(+), 1371 deletions(-) create mode 100644 interactions-centric_files/figure-html/unnamed-chunk-10-1.png create mode 100644 interactions-centric_files/figure-html/unnamed-chunk-10-2.png delete mode 100644 interactions-centric_files/figure-html/unnamed-chunk-12-1.png delete mode 100644 interactions-centric_files/figure-html/unnamed-chunk-12-2.png rename interactions-centric_files/figure-html/{unnamed-chunk-14-1.png => unnamed-chunk-13-1.png} (100%) create mode 100644 interactions-centric_files/figure-html/unnamed-chunk-15-1.png delete mode 100644 interactions-centric_files/figure-html/unnamed-chunk-18-1.png diff --git a/data-representation.html b/data-representation.html index a8610ac..098d060 100644 --- a/data-representation.html +++ b/data-representation.html @@ -734,7 +734,7 @@

-

Compared to previous section, the result of each function described below depends on the entire set of ranges in the input GRanges object.

+

Compared to previous section, the result of each function described below depends on the entire set of ranges in the input GRanges object.

2.2.3.5 GInteractions overlap methods

“Overlaps” for genomic interactions could be computed in different contexts:

    @@ -1597,7 +1559,7 @@

    coolf
     ##                                                   EH7702 
    -##  "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752"
    +## "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752"

    Similarly, example files are available for other file formats:

    @@ -1610,41 +1572,11 @@

    # ---- HiC-Pro generates a tab-separated `regions.bed` file
     readLines(hicproregionsf, 25)
    -##   [1] "I\t0\t1000"      "I\t1000\t2000"   "I\t2000\t3000"   "I\t3000\t4000"  
    -##   [5] "I\t4000\t5000"   "I\t5000\t6000"   "I\t6000\t7000"   "I\t7000\t8000"  
    -##   [9] "I\t8000\t9000"   "I\t9000\t10000"  "I\t10000\t11000" "I\t11000\t12000"
    -##  [13] "I\t12000\t13000" "I\t13000\t14000" "I\t14000\t15000" "I\t15000\t16000"
    -##  [17] "I\t16000\t17000" "I\t17000\t18000" "I\t18000\t19000" "I\t19000\t20000"
    -##  [21] "I\t20000\t21000" "I\t21000\t22000" "I\t22000\t23000" "I\t23000\t24000"
    -##  [25] "I\t24000\t25000"
    +##   [1] "I\t0\t1000"      "I\t1000\t2000"   "I\t2000\t3000"   "I\t3000\t4000"   "I\t4000\t5000"   "I\t5000\t6000"   "I\t6000\t7000"   "I\t7000\t8000"   "I\t8000\t9000"   "I\t9000\t10000"  "I\t10000\t11000" "I\t11000\t12000" "I\t12000\t13000" "I\t13000\t14000" "I\t14000\t15000" "I\t15000\t16000" "I\t16000\t17000" "I\t17000\t18000" "I\t18000\t19000" "I\t19000\t20000" "I\t20000\t21000" "I\t21000\t22000" "I\t22000\t23000" "I\t23000\t24000" "I\t24000\t25000"
     
     # ---- Pairs are also tab-separated 
     readLines(pairsf, 25)
    -##   [1] "## pairs format v1.0"                                                             
    -##   [2] "#sorted: chr1-pos1-chr2-pos2"                                                     
    -##   [3] "#columns: readID chr1 pos1 chr2 pos2 strand1 strand2 frag1 frag2"                 
    -##   [4] "#chromsize: I 230218"                                                             
    -##   [5] "#chromsize: II 813184"                                                            
    -##   [6] "#chromsize: III 316620"                                                           
    -##   [7] "#chromsize: IV 1531933"                                                           
    -##   [8] "#chromsize: V 576874"                                                             
    -##   [9] "#chromsize: VI 270161"                                                            
    -##  [10] "#chromsize: VII 1090940"                                                          
    -##  [11] "#chromsize: VIII 562643"                                                          
    -##  [12] "#chromsize: IX 439888"                                                            
    -##  [13] "#chromsize: X 745751"                                                             
    -##  [14] "#chromsize: XI 666816"                                                            
    -##  [15] "#chromsize: XII 1078177"                                                          
    -##  [16] "#chromsize: XIII 924431"                                                          
    -##  [17] "#chromsize: XIV 784333"                                                           
    -##  [18] "#chromsize: XV 1091291"                                                           
    -##  [19] "#chromsize: XVI 948066"                                                           
    -##  [20] "#chromsize: Mito 85779"                                                           
    -##  [21] "NS500150:527:HHGYNBGXF:3:21611:19085:3986\tII\t105\tII\t48548\t+\t-\t1358\t1681"  
    -##  [22] "NS500150:527:HHGYNBGXF:4:13604:19734:2406\tII\t113\tII\t45003\t-\t+\t1358\t1658"  
    -##  [23] "NS500150:527:HHGYNBGXF:2:11108:25178:11036\tII\t119\tII\t687251\t-\t+\t1358\t5550"
    -##  [24] "NS500150:527:HHGYNBGXF:1:22301:8468:1586\tII\t160\tII\t26124\t+\t-\t1358\t1510"   
    -##  [25] "NS500150:527:HHGYNBGXF:4:23606:24037:2076\tII\t169\tII\t39052\t+\t+\t1358\t1613"
    +## [1] "## pairs format v1.0" "#sorted: chr1-pos1-chr2-pos2" "#columns: readID chr1 pos1 chr2 pos2 strand1 strand2 frag1 frag2" "#chromsize: I 230218" "#chromsize: II 813184" "#chromsize: III 316620" "#chromsize: IV 1531933" "#chromsize: V 576874" "#chromsize: VI 270161" "#chromsize: VII 1090940" "#chromsize: VIII 562643" "#chromsize: IX 439888" "#chromsize: X 745751" "#chromsize: XI 666816" "#chromsize: XII 1078177" "#chromsize: XIII 924431" "#chromsize: XIV 784333" "#chromsize: XV 1091291" "#chromsize: XVI 948066" "#chromsize: Mito 85779" "NS500150:527:HHGYNBGXF:3:21611:19085:3986\tII\t105\tII\t48548\t+\t-\t1358\t1681" "NS500150:527:HHGYNBGXF:4:13604:19734:2406\tII\t113\tII\t45003\t-\t+\t1358\t1658" "NS500150:527:HHGYNBGXF:2:11108:25178:11036\tII\t119\tII\t687251\t-\t+\t1358\t5550" "NS500150:527:HHGYNBGXF:1:22301:8468:1586\tII\t160\tII\t26124\t+\t-\t1358\t1510" "NS500150:527:HHGYNBGXF:4:23606:24037:2076\tII\t169\tII\t39052\t+\t+\t1358\t1613"

2.3.2 ContactFile fundamentals

@@ -1667,7 +1599,7 @@

# ----- This creates a connection to a `.(m)cool` file (path stored in `coolf`) CoolFile(coolf) ## CoolFile object -## .mcool file: /github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752 +## .mcool file: /github/home/.cache/R/ExperimentHub/1a92248c093f_7752 ## resolution: 1000 ## pairs file: ## metadata(0): @@ -1675,7 +1607,7 @@

# ----- This creates a connection to a `.hic` file (path stored in `hicf`) HicFile(hicf) ## HicFile object -## .hic file: /github/home/.cache/R/ExperimentHub/1a9a270f71fe_7836 +## .hic file: /github/home/.cache/R/ExperimentHub/1a92259b7f1f_7836 ## resolution: 1000 ## pairs file: ## metadata(0): @@ -1684,8 +1616,8 @@

HicproFile(hicpromatrixf, hicproregionsf) ## HicproFile object ## HiC-Pro files: -## $ matrix: /github/home/.cache/R/ExperimentHub/1a9a6531ab2c_7837 -## $ regions: /github/home/.cache/R/ExperimentHub/1a9a3c1fca84_7838 +## $ matrix: /github/home/.cache/R/ExperimentHub/1a925372027_7837 +## $ regions: /github/home/.cache/R/ExperimentHub/1a92600d50bf_7838 ## resolution: 1000 ## pairs file: ## metadata(0): @@ -1693,7 +1625,7 @@

# ----- This creates a connection to a pairs file PairsFile(pairsf) ## PairsFile object -## resource: /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753 +## resource: /github/home/.cache/R/ExperimentHub/1a92835ced9_7753

2.3.3 ContactFile slots

@@ -1709,7 +1641,7 @@

cf <- CoolFile(coolf)
 cf
 ##  CoolFile object
-##  .mcool file: /github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752 
+##  .mcool file: /github/home/.cache/R/ExperimentHub/1a92248c093f_7752 
 ##  resolution: 1000 
 ##  pairs file: 
 ##  metadata(0):
@@ -1807,7 +1739,7 @@ 

hic ## `HiCExperiment` object with 8,757,906 contacts over 12,079 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "whole genome" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 1000 @@ -1836,20 +1768,10 @@

  • metadata is a list to further describe the experiment.
  • -
    -
    -
    - -
    -
    -HiCExperiment slots -
    -
    -

    These pieces of information are called slots. They can be directly accessed using getter functions, bearing the same name than the slot.

    fileName(hic)
    -##  [1] "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752"
    +##  [1] "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752"
     
     focus(hic)
     ##  NULL
    @@ -1862,32 +1784,19 @@ 

    interactions(hic) ## GInteractions object with 2945692 interactions and 4 metadata columns: -## seqnames1 ranges1 seqnames2 ranges2 | bin_id1 -## <Rle> <IRanges> <Rle> <IRanges> | <numeric> -## [1] I 1-1000 --- I 1-1000 | 0 -## [2] I 1-1000 --- I 1001-2000 | 0 -## [3] I 1-1000 --- I 2001-3000 | 0 -## [4] I 1-1000 --- I 3001-4000 | 0 -## [5] I 1-1000 --- I 4001-5000 | 0 -## ... ... ... ... ... ... . ... -## [2945688] XVI 940001-941000 --- XVI 942001-943000 | 12070 -## [2945689] XVI 940001-941000 --- XVI 943001-944000 | 12070 -## [2945690] XVI 941001-942000 --- XVI 941001-942000 | 12071 -## [2945691] XVI 941001-942000 --- XVI 942001-943000 | 12071 -## [2945692] XVI 941001-942000 --- XVI 943001-944000 | 12071 -## bin_id2 count balanced -## <numeric> <numeric> <numeric> -## [1] 0 15 0.0663491 -## [2] 1 21 0.1273505 -## [3] 2 21 0.0738691 -## [4] 3 38 0.0827051 -## [5] 4 17 0.0591984 -## ... ... ... ... -## [2945688] 12072 11 0.0575550 -## [2945689] 12073 1 NaN -## [2945690] 12071 74 0.0504615 -## [2945691] 12072 39 0.1624599 -## [2945692] 12073 1 NaN +## seqnames1 ranges1 seqnames2 ranges2 | bin_id1 bin_id2 count balanced +## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <numeric> <numeric> +## [1] I 1-1000 --- I 1-1000 | 0 0 15 0.0663491 +## [2] I 1-1000 --- I 1001-2000 | 0 1 21 0.1273505 +## [3] I 1-1000 --- I 2001-3000 | 0 2 21 0.0738691 +## [4] I 1-1000 --- I 3001-4000 | 0 3 38 0.0827051 +## [5] I 1-1000 --- I 4001-5000 | 0 4 17 0.0591984 +## ... ... ... ... ... ... . ... ... ... ... +## [2945688] XVI 940001-941000 --- XVI 942001-943000 | 12070 12072 11 0.0575550 +## [2945689] XVI 940001-941000 --- XVI 943001-944000 | 12070 12073 1 NaN +## [2945690] XVI 941001-942000 --- XVI 941001-942000 | 12071 12071 74 0.0504615 +## [2945691] XVI 941001-942000 --- XVI 942001-943000 | 12071 12072 39 0.1624599 +## [2945692] XVI 941001-942000 --- XVI 943001-944000 | 12071 12073 1 NaN ## ------- ## regions: 12079 ranges and 4 metadata columns ## seqinfo: 16 sequences from an unspecified genome @@ -1906,18 +1815,6 @@

    metadata(hic) ## list()

    -
    -
    -
    -
    -
    - -
    -
    -Notes -
    -
    -

    import also works for other types of ContactFile (HicFile, HicproFile, PairsFile), e.g. 

    • For HicFile and HicproFile, import seamlessly returns a HiCExperiment as well:
    • @@ -1928,7 +1825,7 @@

      hic ## `HiCExperiment` object with 13,681,280 contacts over 12,165 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a270f71fe_7836" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92259b7f1f_7836" ## focus: "whole genome" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 1000 @@ -1947,43 +1844,28 @@

      pairs <- import(pf) pairs ## GInteractions object with 471364 interactions and 3 metadata columns: -## seqnames1 ranges1 seqnames2 ranges2 | frag1 frag2 -## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> -## [1] II 105 --- II 48548 | 1358 1681 -## [2] II 113 --- II 45003 | 1358 1658 -## [3] II 119 --- II 687251 | 1358 5550 -## [4] II 160 --- II 26124 | 1358 1510 -## [5] II 169 --- II 39052 | 1358 1613 -## ... ... ... ... ... ... . ... ... -## [471360] II 808605 --- II 809683 | 6316 6320 -## [471361] II 808609 --- II 809917 | 6316 6324 -## [471362] II 808617 --- II 809506 | 6316 6319 -## [471363] II 809447 --- II 809685 | 6319 6321 -## [471364] II 809472 --- II 809675 | 6319 6320 -## distance -## <integer> -## [1] 48443 -## [2] 44890 -## [3] 687132 -## [4] 25964 -## [5] 38883 -## ... ... -## [471360] 1078 -## [471361] 1308 -## [471362] 889 -## [471363] 238 -## [471364] 203 +## seqnames1 ranges1 seqnames2 ranges2 | frag1 frag2 distance +## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <integer> +## [1] II 105 --- II 48548 | 1358 1681 48443 +## [2] II 113 --- II 45003 | 1358 1658 44890 +## [3] II 119 --- II 687251 | 1358 5550 687132 +## [4] II 160 --- II 26124 | 1358 1510 25964 +## [5] II 169 --- II 39052 | 1358 1613 38883 +## ... ... ... ... ... ... . ... ... ... +## [471360] II 808605 --- II 809683 | 6316 6320 1078 +## [471361] II 808609 --- II 809917 | 6316 6324 1308 +## [471362] II 808617 --- II 809506 | 6316 6319 889 +## [471363] II 809447 --- II 809685 | 6319 6321 238 +## [471364] II 809472 --- II 809675 | 6319 6320 203 ## ------- ## regions: 549331 ranges and 0 metadata columns ## seqinfo: 1 sequence from an unspecified genome; no seqlengths

    - -

    2.4.1.2 Customizing the import

    To reduce the import to only parse the data that is relevant to the study, two arguments can be passed to import, along with a ContactFile.

    -
    +
    @@ -2009,102 +1891,61 @@

    regions(hic) # ---- `regions()` work on `HiCExperiment` the same way than on `GInteractions` ## GRanges object with 407 ranges and 4 metadata columns: -## seqnames ranges strand | bin_id weight chr -## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> -## II_1_2000 II 1-2000 * | 116 NaN II -## II_2001_4000 II 2001-4000 * | 117 NaN II -## II_4001_6000 II 4001-6000 * | 118 NaN II -## II_6001_8000 II 6001-8000 * | 119 NaN II -## II_8001_10000 II 8001-10000 * | 120 0.0461112 II -## ... ... ... ... . ... ... ... -## II_804001_806000 II 804001-806000 * | 518 0.0493107 II -## II_806001_808000 II 806001-808000 * | 519 0.0611355 II -## II_808001_810000 II 808001-810000 * | 520 NaN II -## II_810001_812000 II 810001-812000 * | 521 NaN II -## II_812001_813184 II 812001-813184 * | 522 NaN II -## center -## <integer> -## II_1_2000 1000 -## II_2001_4000 3000 -## II_4001_6000 5000 -## II_6001_8000 7000 -## II_8001_10000 9000 -## ... ... -## II_804001_806000 805000 -## II_806001_808000 807000 -## II_808001_810000 809000 -## II_810001_812000 811000 -## II_812001_813184 812592 +## seqnames ranges strand | bin_id weight chr center +## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer> +## II_1_2000 II 1-2000 * | 116 NaN II 1000 +## II_2001_4000 II 2001-4000 * | 117 NaN II 3000 +## II_4001_6000 II 4001-6000 * | 118 NaN II 5000 +## II_6001_8000 II 6001-8000 * | 119 NaN II 7000 +## II_8001_10000 II 8001-10000 * | 120 0.0461112 II 9000 +## ... ... ... ... . ... ... ... ... +## II_804001_806000 II 804001-806000 * | 518 0.0493107 II 805000 +## II_806001_808000 II 806001-808000 * | 519 0.0611355 II 807000 +## II_808001_810000 II 808001-810000 * | 520 NaN II 809000 +## II_810001_812000 II 810001-812000 * | 521 NaN II 811000 +## II_812001_813184 II 812001-813184 * | 522 NaN II 812592 ## ------- ## seqinfo: 16 sequences from an unspecified genome table(seqnames(regions(hic))) ## -## I II III IV V VI VII VIII IX X XI XII XIII XIV XV -## 0 407 0 0 0 0 0 0 0 0 0 0 0 0 0 -## XVI -## 0 +## I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI +## 0 407 0 0 0 0 0 0 0 0 0 0 0 0 0 0 anchors(hic) # ---- `anchors()` work on `HiCExperiment` the same way than on `GInteractions` ## $first ## GRanges object with 34063 ranges and 4 metadata columns: -## seqnames ranges strand | bin_id weight chr -## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> -## [1] II 1-2000 * | 116 NaN II -## [2] II 1-2000 * | 116 NaN II -## [3] II 1-2000 * | 116 NaN II -## [4] II 1-2000 * | 116 NaN II -## [5] II 1-2000 * | 116 NaN II -## ... ... ... ... . ... ... ... -## [34059] II 804001-806000 * | 518 0.0493107 II -## [34060] II 806001-808000 * | 519 0.0611355 II -## [34061] II 806001-808000 * | 519 0.0611355 II -## [34062] II 806001-808000 * | 519 0.0611355 II -## [34063] II 808001-810000 * | 520 NaN II -## center -## <integer> -## [1] 1000 -## [2] 1000 -## [3] 1000 -## [4] 1000 -## [5] 1000 -## ... ... -## [34059] 805000 -## [34060] 807000 -## [34061] 807000 -## [34062] 807000 -## [34063] 809000 +## seqnames ranges strand | bin_id weight chr center +## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer> +## [1] II 1-2000 * | 116 NaN II 1000 +## [2] II 1-2000 * | 116 NaN II 1000 +## [3] II 1-2000 * | 116 NaN II 1000 +## [4] II 1-2000 * | 116 NaN II 1000 +## [5] II 1-2000 * | 116 NaN II 1000 +## ... ... ... ... . ... ... ... ... +## [34059] II 804001-806000 * | 518 0.0493107 II 805000 +## [34060] II 806001-808000 * | 519 0.0611355 II 807000 +## [34061] II 806001-808000 * | 519 0.0611355 II 807000 +## [34062] II 806001-808000 * | 519 0.0611355 II 807000 +## [34063] II 808001-810000 * | 520 NaN II 809000 ## ------- ## seqinfo: 16 sequences from an unspecified genome ## ## $second ## GRanges object with 34063 ranges and 4 metadata columns: -## seqnames ranges strand | bin_id weight chr -## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> -## [1] II 1-2000 * | 116 NaN II -## [2] II 4001-6000 * | 118 NaN II -## [3] II 6001-8000 * | 119 NaN II -## [4] II 8001-10000 * | 120 0.0461112 II -## [5] II 10001-12000 * | 121 0.0334807 II -## ... ... ... ... . ... ... ... -## [34059] II 810001-812000 * | 521 NaN II -## [34060] II 806001-808000 * | 519 0.0611355 II -## [34061] II 808001-810000 * | 520 NaN II -## [34062] II 810001-812000 * | 521 NaN II -## [34063] II 808001-810000 * | 520 NaN II -## center -## <integer> -## [1] 1000 -## [2] 5000 -## [3] 7000 -## [4] 9000 -## [5] 11000 -## ... ... -## [34059] 811000 -## [34060] 807000 -## [34061] 809000 -## [34062] 811000 -## [34063] 809000 +## seqnames ranges strand | bin_id weight chr center +## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer> +## [1] II 1-2000 * | 116 NaN II 1000 +## [2] II 4001-6000 * | 118 NaN II 5000 +## [3] II 6001-8000 * | 119 NaN II 7000 +## [4] II 8001-10000 * | 120 0.0461112 II 9000 +## [5] II 10001-12000 * | 121 0.0334807 II 11000 +## ... ... ... ... . ... ... ... ... +## [34059] II 810001-812000 * | 521 NaN II 811000 +## [34060] II 806001-808000 * | 519 0.0611355 II 807000 +## [34061] II 808001-810000 * | 520 NaN II 809000 +## [34062] II 810001-812000 * | 521 NaN II 811000 +## [34063] II 808001-810000 * | 520 NaN II 809000 ## ------- ## seqinfo: 16 sequences from an unspecified genome

    @@ -2116,32 +1957,19 @@

    regions(hic) ## GRanges object with 21 ranges and 4 metadata columns: -## seqnames ranges strand | bin_id weight chr -## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> -## II_39001_40000 II 39001-40000 * | 270 0.0220798 II -## II_40001_41000 II 40001-41000 * | 271 0.0246775 II -## II_41001_42000 II 41001-42000 * | 272 0.0269232 II -## II_42001_43000 II 42001-43000 * | 273 0.0341849 II -## II_43001_44000 II 43001-44000 * | 274 0.0265386 II -## ... ... ... ... . ... ... ... -## II_55001_56000 II 55001-56000 * | 286 0.0213532 II -## II_56001_57000 II 56001-57000 * | 287 0.0569839 II -## II_57001_58000 II 57001-58000 * | 288 0.0338612 II -## II_58001_59000 II 58001-59000 * | 289 0.0294531 II -## II_59001_60000 II 59001-60000 * | 290 0.0306662 II -## center -## <integer> -## II_39001_40000 39500 -## II_40001_41000 40500 -## II_41001_42000 41500 -## II_42001_43000 42500 -## II_43001_44000 43500 -## ... ... -## II_55001_56000 55500 -## II_56001_57000 56500 -## II_57001_58000 57500 -## II_58001_59000 58500 -## II_59001_60000 59500 +## seqnames ranges strand | bin_id weight chr center +## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer> +## II_39001_40000 II 39001-40000 * | 270 0.0220798 II 39500 +## II_40001_41000 II 40001-41000 * | 271 0.0246775 II 40500 +## II_41001_42000 II 41001-42000 * | 272 0.0269232 II 41500 +## II_42001_43000 II 42001-43000 * | 273 0.0341849 II 42500 +## II_43001_44000 II 43001-44000 * | 274 0.0265386 II 43500 +## ... ... ... ... . ... ... ... ... +## II_55001_56000 II 55001-56000 * | 286 0.0213532 II 55500 +## II_56001_57000 II 56001-57000 * | 287 0.0569839 II 56500 +## II_57001_58000 II 57001-58000 * | 288 0.0338612 II 57500 +## II_58001_59000 II 58001-59000 * | 289 0.0294531 II 58500 +## II_59001_60000 II 59001-60000 * | 290 0.0306662 II 59500 ## ------- ## seqinfo: 16 sequences from an unspecified genome @@ -2190,95 +2018,56 @@

    regions(hic2) ## GRanges object with 477 ranges and 4 metadata columns: -## seqnames ranges strand | bin_id weight -## <Rle> <IRanges> <Rle> | <numeric> <numeric> -## II_1_4000 II 1-4000 * | 58 NaN -## II_4001_8000 II 4001-8000 * | 59 NaN -## II_8001_12000 II 8001-12000 * | 60 0.0274474 -## II_12001_16000 II 12001-16000 * | 61 0.0342116 -## II_16001_20000 II 16001-20000 * | 62 0.0195128 -## ... ... ... ... . ... ... -## XV_1072001_1076000 XV 1072001-1076000 * | 2783 0.041763 -## XV_1076001_1080000 XV 1076001-1080000 * | 2784 NaN -## XV_1080001_1084000 XV 1080001-1084000 * | 2785 NaN -## XV_1084001_1088000 XV 1084001-1088000 * | 2786 NaN -## XV_1088001_1091291 XV 1088001-1091291 * | 2787 NaN -## chr center -## <Rle> <integer> -## II_1_4000 II 2000 -## II_4001_8000 II 6000 -## II_8001_12000 II 10000 -## II_12001_16000 II 14000 -## II_16001_20000 II 18000 -## ... ... ... -## XV_1072001_1076000 XV 1074000 -## XV_1076001_1080000 XV 1078000 -## XV_1080001_1084000 XV 1082000 -## XV_1084001_1088000 XV 1086000 -## XV_1088001_1091291 XV 1089646 +## seqnames ranges strand | bin_id weight chr center +## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer> +## II_1_4000 II 1-4000 * | 58 NaN II 2000 +## II_4001_8000 II 4001-8000 * | 59 NaN II 6000 +## II_8001_12000 II 8001-12000 * | 60 0.0274474 II 10000 +## II_12001_16000 II 12001-16000 * | 61 0.0342116 II 14000 +## II_16001_20000 II 16001-20000 * | 62 0.0195128 II 18000 +## ... ... ... ... . ... ... ... ... +## XV_1072001_1076000 XV 1072001-1076000 * | 2783 0.041763 XV 1074000 +## XV_1076001_1080000 XV 1076001-1080000 * | 2784 NaN XV 1078000 +## XV_1080001_1084000 XV 1080001-1084000 * | 2785 NaN XV 1082000 +## XV_1084001_1088000 XV 1084001-1088000 * | 2786 NaN XV 1086000 +## XV_1088001_1091291 XV 1088001-1091291 * | 2787 NaN XV 1089646 ## ------- ## seqinfo: 16 sequences from an unspecified genome anchors(hic2) ## $first ## GRanges object with 18032 ranges and 4 metadata columns: -## seqnames ranges strand | bin_id weight chr -## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> -## [1] II 1-4000 * | 58 NaN II -## [2] II 1-4000 * | 58 NaN II -## [3] II 1-4000 * | 58 NaN II -## [4] II 1-4000 * | 58 NaN II -## [5] II 1-4000 * | 58 NaN II -## ... ... ... ... . ... ... ... -## [18028] II 808001-812000 * | 260 NaN II -## [18029] II 808001-812000 * | 260 NaN II -## [18030] II 808001-812000 * | 260 NaN II -## [18031] II 808001-812000 * | 260 NaN II -## [18032] II 808001-812000 * | 260 NaN II -## center -## <integer> -## [1] 2000 -## [2] 2000 -## [3] 2000 -## [4] 2000 -## [5] 2000 -## ... ... -## [18028] 810000 -## [18029] 810000 -## [18030] 810000 -## [18031] 810000 -## [18032] 810000 +## seqnames ranges strand | bin_id weight chr center +## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer> +## [1] II 1-4000 * | 58 NaN II 2000 +## [2] II 1-4000 * | 58 NaN II 2000 +## [3] II 1-4000 * | 58 NaN II 2000 +## [4] II 1-4000 * | 58 NaN II 2000 +## [5] II 1-4000 * | 58 NaN II 2000 +## ... ... ... ... . ... ... ... ... +## [18028] II 808001-812000 * | 260 NaN II 810000 +## [18029] II 808001-812000 * | 260 NaN II 810000 +## [18030] II 808001-812000 * | 260 NaN II 810000 +## [18031] II 808001-812000 * | 260 NaN II 810000 +## [18032] II 808001-812000 * | 260 NaN II 810000 ## ------- ## seqinfo: 16 sequences from an unspecified genome ## ## $second ## GRanges object with 18032 ranges and 4 metadata columns: -## seqnames ranges strand | bin_id weight chr -## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> -## [1] XV 48001-52000 * | 2527 0.0185354 XV -## [2] XV 348001-352000 * | 2602 0.0233750 XV -## [3] XV 468001-472000 * | 2632 0.0153615 XV -## [4] XV 472001-476000 * | 2633 0.0189624 XV -## [5] XV 584001-588000 * | 2661 0.0167715 XV -## ... ... ... ... . ... ... ... -## [18028] XV 980001-984000 * | 2760 0.0187827 XV -## [18029] XV 984001-988000 * | 2761 0.0250094 XV -## [18030] XV 992001-996000 * | 2763 0.0185599 XV -## [18031] XV 1004001-1008000 * | 2766 0.0196942 XV -## [18032] XV 1064001-1068000 * | 2781 0.0208220 XV -## center -## <integer> -## [1] 50000 -## [2] 350000 -## [3] 470000 -## [4] 474000 -## [5] 586000 -## ... ... -## [18028] 982000 -## [18029] 986000 -## [18030] 994000 -## [18031] 1006000 -## [18032] 1066000 +## seqnames ranges strand | bin_id weight chr center +## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer> +## [1] XV 48001-52000 * | 2527 0.0185354 XV 50000 +## [2] XV 348001-352000 * | 2602 0.0233750 XV 350000 +## [3] XV 468001-472000 * | 2632 0.0153615 XV 470000 +## [4] XV 472001-476000 * | 2633 0.0189624 XV 474000 +## [5] XV 584001-588000 * | 2661 0.0167715 XV 586000 +## ... ... ... ... . ... ... ... ... +## [18028] XV 980001-984000 * | 2760 0.0187827 XV 982000 +## [18029] XV 984001-988000 * | 2761 0.0250094 XV 986000 +## [18030] XV 992001-996000 * | 2763 0.0185599 XV 994000 +## [18031] XV 1004001-1008000 * | 2766 0.0196942 XV 1006000 +## [18032] XV 1064001-1068000 * | 2781 0.0208220 XV 1066000 ## ------- ## seqinfo: 16 sequences from an unspecified genome

    @@ -2290,32 +2079,19 @@

    regions(hic3) ## GRanges object with 32 ranges and 4 metadata columns: -## seqnames ranges strand | bin_id weight chr -## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> -## III_8001_10000 III 8001-10000 * | 527 NaN III -## III_10001_12000 III 10001-12000 * | 528 NaN III -## III_12001_14000 III 12001-14000 * | 529 NaN III -## III_14001_16000 III 14001-16000 * | 530 0.0356351 III -## III_16001_18000 III 16001-18000 * | 531 0.0230693 III -## ... ... ... ... . ... ... ... -## XV_30001_32000 XV 30001-32000 * | 5039 0.0482465 XV -## XV_32001_34000 XV 32001-34000 * | 5040 0.0241580 XV -## XV_34001_36000 XV 34001-36000 * | 5041 0.0273166 XV -## XV_36001_38000 XV 36001-38000 * | 5042 0.0542235 XV -## XV_38001_40000 XV 38001-40000 * | 5043 0.0206849 XV -## center -## <integer> -## III_8001_10000 9000 -## III_10001_12000 11000 -## III_12001_14000 13000 -## III_14001_16000 15000 -## III_16001_18000 17000 -## ... ... -## XV_30001_32000 31000 -## XV_32001_34000 33000 -## XV_34001_36000 35000 -## XV_36001_38000 37000 -## XV_38001_40000 39000 +## seqnames ranges strand | bin_id weight chr center +## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer> +## III_8001_10000 III 8001-10000 * | 527 NaN III 9000 +## III_10001_12000 III 10001-12000 * | 528 NaN III 11000 +## III_12001_14000 III 12001-14000 * | 529 NaN III 13000 +## III_14001_16000 III 14001-16000 * | 530 0.0356351 III 15000 +## III_16001_18000 III 16001-18000 * | 531 0.0230693 III 17000 +## ... ... ... ... . ... ... ... ... +## XV_30001_32000 XV 30001-32000 * | 5039 0.0482465 XV 31000 +## XV_32001_34000 XV 32001-34000 * | 5040 0.0241580 XV 33000 +## XV_34001_36000 XV 34001-36000 * | 5041 0.0273166 XV 35000 +## XV_36001_38000 XV 36001-38000 * | 5042 0.0542235 XV 37000 +## XV_38001_40000 XV 38001-40000 * | 5043 0.0206849 XV 39000 ## ------- ## seqinfo: 16 sequences from an unspecified genome @@ -2370,14 +2146,14 @@

    yeast_hic
     ##  `HiCExperiment` object with 8,757,906 contacts over 763 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "whole genome" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 16000 
     ##  interactions: 267709 
     ##  scores(2): count balanced 
     ##  topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) 
    -##  pairsFile: /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753 
    +##  pairsFile: /github/home/.cache/R/ExperimentHub/1a92835ced9_7753 
     ##  metadata(3): ID org date

    @@ -2386,141 +2162,77 @@

    interactions(yeast_hic)
     ##  GInteractions object with 267709 interactions and 4 metadata columns:
    -##             seqnames1       ranges1     seqnames2       ranges2 |   bin_id1
    -##                 <Rle>     <IRanges>         <Rle>     <IRanges> | <numeric>
    -##         [1]         I       1-16000 ---         I       1-16000 |         0
    -##         [2]         I       1-16000 ---         I   16001-32000 |         0
    -##         [3]         I       1-16000 ---         I   32001-48000 |         0
    -##         [4]         I       1-16000 ---         I   48001-64000 |         0
    -##         [5]         I       1-16000 ---         I   64001-80000 |         0
    -##         ...       ...           ... ...       ...           ... .       ...
    -##    [267705]       XVI 896001-912000 ---       XVI 912001-928000 |       759
    -##    [267706]       XVI 896001-912000 ---       XVI 928001-944000 |       759
    -##    [267707]       XVI 912001-928000 ---       XVI 912001-928000 |       760
    -##    [267708]       XVI 912001-928000 ---       XVI 928001-944000 |       760
    -##    [267709]       XVI 928001-944000 ---       XVI 928001-944000 |       761
    -##               bin_id2     count  balanced
    -##             <numeric> <numeric> <numeric>
    -##         [1]         0      2836 1.0943959
    -##         [2]         1      2212 0.9592069
    -##         [3]         2      1183 0.4385242
    -##         [4]         3       831 0.2231192
    -##         [5]         4       310 0.0821255
    -##         ...       ...       ...       ...
    -##    [267705]       760      3565  1.236371
    -##    [267706]       761      1359  0.385016
    -##    [267707]       760      3534  2.103988
    -##    [267708]       761      3055  1.485794
    -##    [267709]       761      4308  1.711565
    +##             seqnames1       ranges1     seqnames2       ranges2 |   bin_id1   bin_id2     count  balanced
    +##                 <Rle>     <IRanges>         <Rle>     <IRanges> | <numeric> <numeric> <numeric> <numeric>
    +##         [1]         I       1-16000 ---         I       1-16000 |         0         0      2836 1.0943959
    +##         [2]         I       1-16000 ---         I   16001-32000 |         0         1      2212 0.9592069
    +##         [3]         I       1-16000 ---         I   32001-48000 |         0         2      1183 0.4385242
    +##         [4]         I       1-16000 ---         I   48001-64000 |         0         3       831 0.2231192
    +##         [5]         I       1-16000 ---         I   64001-80000 |         0         4       310 0.0821255
    +##         ...       ...           ... ...       ...           ... .       ...       ...       ...       ...
    +##    [267705]       XVI 896001-912000 ---       XVI 912001-928000 |       759       760      3565  1.236371
    +##    [267706]       XVI 896001-912000 ---       XVI 928001-944000 |       759       761      1359  0.385016
    +##    [267707]       XVI 912001-928000 ---       XVI 912001-928000 |       760       760      3534  2.103988
    +##    [267708]       XVI 912001-928000 ---       XVI 928001-944000 |       760       761      3055  1.485794
    +##    [267709]       XVI 928001-944000 ---       XVI 928001-944000 |       761       761      4308  1.711565
     ##    -------
     ##    regions: 763 ranges and 4 metadata columns
     ##    seqinfo: 16 sequences from an unspecified genome
    -
    -
    -
    - -
    -
    -Note -
    -
    -

    Because genomic interactions are actually stored as GInteractions, regions and anchors work on HiCExperiment objects just as they work with GInteractions!

    -
    -
    regions(yeast_hic)
     ##  GRanges object with 763 ranges and 4 metadata columns:
    -##                      seqnames        ranges strand |    bin_id     weight
    -##                         <Rle>     <IRanges>  <Rle> | <numeric>  <numeric>
    -##            I_1_16000        I       1-16000      * |         0  0.0196442
    -##        I_16001_32000        I   16001-32000      * |         1  0.0220746
    -##        I_32001_48000        I   32001-48000      * |         2  0.0188701
    -##        I_48001_64000        I   48001-64000      * |         3  0.0136679
    -##        I_64001_80000        I   64001-80000      * |         4  0.0134860
    -##                  ...      ...           ...    ... .       ...        ...
    -##    XVI_880001_896000      XVI 880001-896000      * |       758 0.00910873
    -##    XVI_896001_912000      XVI 896001-912000      * |       759 0.01421350
    -##    XVI_912001_928000      XVI 912001-928000      * |       760 0.02439992
    -##    XVI_928001_944000      XVI 928001-944000      * |       761 0.01993237
    -##    XVI_944001_948066      XVI 944001-948066      * |       762        NaN
    -##                        chr    center
    -##                      <Rle> <integer>
    -##            I_1_16000     I      8000
    -##        I_16001_32000     I     24000
    -##        I_32001_48000     I     40000
    -##        I_48001_64000     I     56000
    -##        I_64001_80000     I     72000
    -##                  ...   ...       ...
    -##    XVI_880001_896000   XVI    888000
    -##    XVI_896001_912000   XVI    904000
    -##    XVI_912001_928000   XVI    920000
    -##    XVI_928001_944000   XVI    936000
    -##    XVI_944001_948066   XVI    946033
    +##                      seqnames        ranges strand |    bin_id     weight   chr    center
    +##                         <Rle>     <IRanges>  <Rle> | <numeric>  <numeric> <Rle> <integer>
    +##            I_1_16000        I       1-16000      * |         0  0.0196442     I      8000
    +##        I_16001_32000        I   16001-32000      * |         1  0.0220746     I     24000
    +##        I_32001_48000        I   32001-48000      * |         2  0.0188701     I     40000
    +##        I_48001_64000        I   48001-64000      * |         3  0.0136679     I     56000
    +##        I_64001_80000        I   64001-80000      * |         4  0.0134860     I     72000
    +##                  ...      ...           ...    ... .       ...        ...   ...       ...
    +##    XVI_880001_896000      XVI 880001-896000      * |       758 0.00910873   XVI    888000
    +##    XVI_896001_912000      XVI 896001-912000      * |       759 0.01421350   XVI    904000
    +##    XVI_912001_928000      XVI 912001-928000      * |       760 0.02439992   XVI    920000
    +##    XVI_928001_944000      XVI 928001-944000      * |       761 0.01993237   XVI    936000
    +##    XVI_944001_948066      XVI 944001-948066      * |       762        NaN   XVI    946033
     ##    -------
     ##    seqinfo: 16 sequences from an unspecified genome
     
     anchors(yeast_hic)
     ##  $first
     ##  GRanges object with 267709 ranges and 4 metadata columns:
    -##             seqnames        ranges strand |    bin_id    weight   chr
    -##                <Rle>     <IRanges>  <Rle> | <numeric> <numeric> <Rle>
    -##         [1]        I       1-16000      * |         0 0.0196442     I
    -##         [2]        I       1-16000      * |         0 0.0196442     I
    -##         [3]        I       1-16000      * |         0 0.0196442     I
    -##         [4]        I       1-16000      * |         0 0.0196442     I
    -##         [5]        I       1-16000      * |         0 0.0196442     I
    -##         ...      ...           ...    ... .       ...       ...   ...
    -##    [267705]      XVI 896001-912000      * |       759 0.0142135   XVI
    -##    [267706]      XVI 896001-912000      * |       759 0.0142135   XVI
    -##    [267707]      XVI 912001-928000      * |       760 0.0243999   XVI
    -##    [267708]      XVI 912001-928000      * |       760 0.0243999   XVI
    -##    [267709]      XVI 928001-944000      * |       761 0.0199324   XVI
    -##                center
    -##             <integer>
    -##         [1]      8000
    -##         [2]      8000
    -##         [3]      8000
    -##         [4]      8000
    -##         [5]      8000
    -##         ...       ...
    -##    [267705]    904000
    -##    [267706]    904000
    -##    [267707]    920000
    -##    [267708]    920000
    -##    [267709]    936000
    +##             seqnames        ranges strand |    bin_id    weight   chr    center
    +##                <Rle>     <IRanges>  <Rle> | <numeric> <numeric> <Rle> <integer>
    +##         [1]        I       1-16000      * |         0 0.0196442     I      8000
    +##         [2]        I       1-16000      * |         0 0.0196442     I      8000
    +##         [3]        I       1-16000      * |         0 0.0196442     I      8000
    +##         [4]        I       1-16000      * |         0 0.0196442     I      8000
    +##         [5]        I       1-16000      * |         0 0.0196442     I      8000
    +##         ...      ...           ...    ... .       ...       ...   ...       ...
    +##    [267705]      XVI 896001-912000      * |       759 0.0142135   XVI    904000
    +##    [267706]      XVI 896001-912000      * |       759 0.0142135   XVI    904000
    +##    [267707]      XVI 912001-928000      * |       760 0.0243999   XVI    920000
    +##    [267708]      XVI 912001-928000      * |       760 0.0243999   XVI    920000
    +##    [267709]      XVI 928001-944000      * |       761 0.0199324   XVI    936000
     ##    -------
     ##    seqinfo: 16 sequences from an unspecified genome
     ##  
     ##  $second
     ##  GRanges object with 267709 ranges and 4 metadata columns:
    -##             seqnames        ranges strand |    bin_id    weight   chr
    -##                <Rle>     <IRanges>  <Rle> | <numeric> <numeric> <Rle>
    -##         [1]        I       1-16000      * |         0 0.0196442     I
    -##         [2]        I   16001-32000      * |         1 0.0220746     I
    -##         [3]        I   32001-48000      * |         2 0.0188701     I
    -##         [4]        I   48001-64000      * |         3 0.0136679     I
    -##         [5]        I   64001-80000      * |         4 0.0134860     I
    -##         ...      ...           ...    ... .       ...       ...   ...
    -##    [267705]      XVI 912001-928000      * |       760 0.0243999   XVI
    -##    [267706]      XVI 928001-944000      * |       761 0.0199324   XVI
    -##    [267707]      XVI 912001-928000      * |       760 0.0243999   XVI
    -##    [267708]      XVI 928001-944000      * |       761 0.0199324   XVI
    -##    [267709]      XVI 928001-944000      * |       761 0.0199324   XVI
    -##                center
    -##             <integer>
    -##         [1]      8000
    -##         [2]     24000
    -##         [3]     40000
    -##         [4]     56000
    -##         [5]     72000
    -##         ...       ...
    -##    [267705]    920000
    -##    [267706]    936000
    -##    [267707]    920000
    -##    [267708]    936000
    -##    [267709]    936000
    +##             seqnames        ranges strand |    bin_id    weight   chr    center
    +##                <Rle>     <IRanges>  <Rle> | <numeric> <numeric> <Rle> <integer>
    +##         [1]        I       1-16000      * |         0 0.0196442     I      8000
    +##         [2]        I   16001-32000      * |         1 0.0220746     I     24000
    +##         [3]        I   32001-48000      * |         2 0.0188701     I     40000
    +##         [4]        I   48001-64000      * |         3 0.0136679     I     56000
    +##         [5]        I   64001-80000      * |         4 0.0134860     I     72000
    +##         ...      ...           ...    ... .       ...       ...   ...       ...
    +##    [267705]      XVI 912001-928000      * |       760 0.0243999   XVI    920000
    +##    [267706]      XVI 928001-944000      * |       761 0.0199324   XVI    936000
    +##    [267707]      XVI 912001-928000      * |       760 0.0243999   XVI    920000
    +##    [267708]      XVI 928001-944000      * |       761 0.0199324   XVI    936000
    +##    [267709]      XVI 928001-944000      * |       761 0.0199324   XVI    936000
     ##    -------
     ##    seqinfo: 16 sequences from an unspecified genome
    @@ -2603,46 +2315,23 @@

    head(scores(yeast_hic, "balanced")) ## [1] 1.09439586 0.95920688 0.43852417 0.22311917 0.08212549 0.03345221 -
    -
    -
    - -
    -
    -Tip -
    -
    -

    Calling interactions(hic) returns a GInteractions with scores already stored in extra columns. This short-hand allows one to dynamically check scores directly from the interactions output.

    interactions(yeast_hic)
     ##  GInteractions object with 267709 interactions and 4 metadata columns:
    -##             seqnames1       ranges1     seqnames2       ranges2 |   bin_id1
    -##                 <Rle>     <IRanges>         <Rle>     <IRanges> | <numeric>
    -##         [1]         I       1-16000 ---         I       1-16000 |         0
    -##         [2]         I       1-16000 ---         I   16001-32000 |         0
    -##         [3]         I       1-16000 ---         I   32001-48000 |         0
    -##         [4]         I       1-16000 ---         I   48001-64000 |         0
    -##         [5]         I       1-16000 ---         I   64001-80000 |         0
    -##         ...       ...           ... ...       ...           ... .       ...
    -##    [267705]       XVI 896001-912000 ---       XVI 912001-928000 |       759
    -##    [267706]       XVI 896001-912000 ---       XVI 928001-944000 |       759
    -##    [267707]       XVI 912001-928000 ---       XVI 912001-928000 |       760
    -##    [267708]       XVI 912001-928000 ---       XVI 928001-944000 |       760
    -##    [267709]       XVI 928001-944000 ---       XVI 928001-944000 |       761
    -##               bin_id2     count  balanced
    -##             <numeric> <numeric> <numeric>
    -##         [1]         0      2836 1.0943959
    -##         [2]         1      2212 0.9592069
    -##         [3]         2      1183 0.4385242
    -##         [4]         3       831 0.2231192
    -##         [5]         4       310 0.0821255
    -##         ...       ...       ...       ...
    -##    [267705]       760      3565  1.236371
    -##    [267706]       761      1359  0.385016
    -##    [267707]       760      3534  2.103988
    -##    [267708]       761      3055  1.485794
    -##    [267709]       761      4308  1.711565
    +##             seqnames1       ranges1     seqnames2       ranges2 |   bin_id1   bin_id2     count  balanced
    +##                 <Rle>     <IRanges>         <Rle>     <IRanges> | <numeric> <numeric> <numeric> <numeric>
    +##         [1]         I       1-16000 ---         I       1-16000 |         0         0      2836 1.0943959
    +##         [2]         I       1-16000 ---         I   16001-32000 |         0         1      2212 0.9592069
    +##         [3]         I       1-16000 ---         I   32001-48000 |         0         2      1183 0.4385242
    +##         [4]         I       1-16000 ---         I   48001-64000 |         0         3       831 0.2231192
    +##         [5]         I       1-16000 ---         I   64001-80000 |         0         4       310 0.0821255
    +##         ...       ...           ... ...       ...           ... .       ...       ...       ...       ...
    +##    [267705]       XVI 896001-912000 ---       XVI 912001-928000 |       759       760      3565  1.236371
    +##    [267706]       XVI 896001-912000 ---       XVI 928001-944000 |       759       761      1359  0.385016
    +##    [267707]       XVI 912001-928000 ---       XVI 912001-928000 |       760       760      3534  2.103988
    +##    [267708]       XVI 912001-928000 ---       XVI 928001-944000 |       760       761      3055  1.485794
    +##    [267709]       XVI 928001-944000 ---       XVI 928001-944000 |       761       761      4308  1.711565
     ##    -------
     ##    regions: 763 ranges and 4 metadata columns
     ##    seqinfo: 16 sequences from an unspecified genome
    @@ -2650,8 +2339,6 @@ 

    head(interactions(yeast_hic)$count) ## [1] 2836 2212 1183 831 310 159

    -
    -

    2.4.2.4 topologicalFeatures

    In Hi-C studies, “topological features” refer to genomic structures identified (usually from a Hi-C map, but not necessarily). For instance, one may want to study known structural loops anchored at CTCF sites, or interactions around or over centromeres, or simply specific genomic “viewpoints”.

    @@ -2694,82 +2381,36 @@

    pairsFile(yeast_hic) ## EH7703 -## "/github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753" +## "/github/home/.cache/R/ExperimentHub/1a92835ced9_7753" readLines(pairsFile(yeast_hic), 25) -## [1] "## pairs format v1.0" -## [2] "#sorted: chr1-pos1-chr2-pos2" -## [3] "#columns: readID chr1 pos1 chr2 pos2 strand1 strand2 frag1 frag2" -## [4] "#chromsize: I 230218" -## [5] "#chromsize: II 813184" -## [6] "#chromsize: III 316620" -## [7] "#chromsize: IV 1531933" -## [8] "#chromsize: V 576874" -## [9] "#chromsize: VI 270161" -## [10] "#chromsize: VII 1090940" -## [11] "#chromsize: VIII 562643" -## [12] "#chromsize: IX 439888" -## [13] "#chromsize: X 745751" -## [14] "#chromsize: XI 666816" -## [15] "#chromsize: XII 1078177" -## [16] "#chromsize: XIII 924431" -## [17] "#chromsize: XIV 784333" -## [18] "#chromsize: XV 1091291" -## [19] "#chromsize: XVI 948066" -## [20] "#chromsize: Mito 85779" -## [21] "NS500150:527:HHGYNBGXF:3:21611:19085:3986\tII\t105\tII\t48548\t+\t-\t1358\t1681" -## [22] "NS500150:527:HHGYNBGXF:4:13604:19734:2406\tII\t113\tII\t45003\t-\t+\t1358\t1658" -## [23] "NS500150:527:HHGYNBGXF:2:11108:25178:11036\tII\t119\tII\t687251\t-\t+\t1358\t5550" -## [24] "NS500150:527:HHGYNBGXF:1:22301:8468:1586\tII\t160\tII\t26124\t+\t-\t1358\t1510" -## [25] "NS500150:527:HHGYNBGXF:4:23606:24037:2076\tII\t169\tII\t39052\t+\t+\t1358\t1613" +## [1] "## pairs format v1.0" "#sorted: chr1-pos1-chr2-pos2" "#columns: readID chr1 pos1 chr2 pos2 strand1 strand2 frag1 frag2" "#chromsize: I 230218" "#chromsize: II 813184" "#chromsize: III 316620" "#chromsize: IV 1531933" "#chromsize: V 576874" "#chromsize: VI 270161" "#chromsize: VII 1090940" "#chromsize: VIII 562643" "#chromsize: IX 439888" "#chromsize: X 745751" "#chromsize: XI 666816" "#chromsize: XII 1078177" "#chromsize: XIII 924431" "#chromsize: XIV 784333" "#chromsize: XV 1091291" "#chromsize: XVI 948066" "#chromsize: Mito 85779" "NS500150:527:HHGYNBGXF:3:21611:19085:3986\tII\t105\tII\t48548\t+\t-\t1358\t1681" "NS500150:527:HHGYNBGXF:4:13604:19734:2406\tII\t113\tII\t45003\t-\t+\t1358\t1658" "NS500150:527:HHGYNBGXF:2:11108:25178:11036\tII\t119\tII\t687251\t-\t+\t1358\t5550" "NS500150:527:HHGYNBGXF:1:22301:8468:1586\tII\t160\tII\t26124\t+\t-\t1358\t1510" "NS500150:527:HHGYNBGXF:4:23606:24037:2076\tII\t169\tII\t39052\t+\t+\t1358\t1613" -
    -
    -
    - -
    -
    -Importing a PairsFile -
    -
    -
    +

    +2.4.2.6 Importing a PairsFile +

    The .pairs file linked to a HiCExperiment object can itself be imported in a GInteractions object:

    import(pairsFile(yeast_hic), format = 'pairs')
     ##  GInteractions object with 471364 interactions and 3 metadata columns:
    -##             seqnames1   ranges1     seqnames2   ranges2 |     frag1     frag2
    -##                 <Rle> <IRanges>         <Rle> <IRanges> | <numeric> <numeric>
    -##         [1]        II       105 ---        II     48548 |      1358      1681
    -##         [2]        II       113 ---        II     45003 |      1358      1658
    -##         [3]        II       119 ---        II    687251 |      1358      5550
    -##         [4]        II       160 ---        II     26124 |      1358      1510
    -##         [5]        II       169 ---        II     39052 |      1358      1613
    -##         ...       ...       ... ...       ...       ... .       ...       ...
    -##    [471360]        II    808605 ---        II    809683 |      6316      6320
    -##    [471361]        II    808609 ---        II    809917 |      6316      6324
    -##    [471362]        II    808617 ---        II    809506 |      6316      6319
    -##    [471363]        II    809447 ---        II    809685 |      6319      6321
    -##    [471364]        II    809472 ---        II    809675 |      6319      6320
    -##              distance
    -##             <integer>
    -##         [1]     48443
    -##         [2]     44890
    -##         [3]    687132
    -##         [4]     25964
    -##         [5]     38883
    -##         ...       ...
    -##    [471360]      1078
    -##    [471361]      1308
    -##    [471362]       889
    -##    [471363]       238
    -##    [471364]       203
    +##             seqnames1   ranges1     seqnames2   ranges2 |     frag1     frag2  distance
    +##                 <Rle> <IRanges>         <Rle> <IRanges> | <numeric> <numeric> <integer>
    +##         [1]        II       105 ---        II     48548 |      1358      1681     48443
    +##         [2]        II       113 ---        II     45003 |      1358      1658     44890
    +##         [3]        II       119 ---        II    687251 |      1358      5550    687132
    +##         [4]        II       160 ---        II     26124 |      1358      1510     25964
    +##         [5]        II       169 ---        II     39052 |      1358      1613     38883
    +##         ...       ...       ... ...       ...       ... .       ...       ...       ...
    +##    [471360]        II    808605 ---        II    809683 |      6316      6320      1078
    +##    [471361]        II    808609 ---        II    809917 |      6316      6324      1308
    +##    [471362]        II    808617 ---        II    809506 |      6316      6319       889
    +##    [471363]        II    809447 ---        II    809685 |      6319      6321       238
    +##    [471364]        II    809472 ---        II    809675 |      6319      6320       203
     ##    -------
     ##    regions: 549331 ranges and 0 metadata columns
     ##    seqinfo: 1 sequence from an unspecified genome; no seqlengths

    Note that these GInteractions are not binned, contrary to interactions extracted from a HiCExperiment. Anchors of the interactions listed in the GInteractions imported from a disk-stored .pairs file are all of width 1.

    - -

    2.5 Visual summary of the HiCExperiment data structure

    The HiCExperiment data structure provided by the HiCExperiment package inherits methods from core GInteractions and BiocFile classes to provide a flexible representation of Hi-C data in R. It allows random access-based queries to seamlessly import parts or all the data contained in disk-stored Hi-C contact matrices in a variety of formats.

    diff --git a/index.html b/index.html index f0600b7..9d2e3c9 100644 --- a/index.html +++ b/index.html @@ -283,7 +283,7 @@

    Orchestrating Hi-C analysis with Bioconductor

    Welcome

    This is the landing page of the “Orchestrating Hi-C analysis with Bioconductor” book. The primary aim of this book is to introduce the R user to Hi-C analysis. This book starts with key concepts important for the analysis of chromatin conformation capture and then presents Bioconductor tools that can be leveraged to process, analyze, explore and visualize Hi-C data.

    -

    Authors: Jacques Serizay [aut, cre]
    Version: 1.1.0
    Modified: 2023-04-14
    Compiled: 2023-10-19
    Environment: R version 4.3.1 (2023-06-16), Bioconductor 3.18
    License: MIT + file LICENSE
    Copyright: J. Serizay

    +

    Authors: Jacques Serizay [aut, cre]
    Version: 1.1.0
    Modified: 2023-04-14
    Compiled: 2023-10-30
    Environment: R version 4.3.1 (2023-06-16), Bioconductor 3.18
    License: MIT + file LICENSE
    Copyright: J. Serizay

    Table of contents

    This book is divided in three parts:

    Part I: Introduction to Hi-C analysis

    @@ -442,7 +442,7 @@

    Orchestrating Hi-C analysis with Bioconductor

    Session info

    sessioninfo::session_info()
    -##  ─ Session info ────────────────────────────────────────────────────────────
    +##  ─ Session info ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
     ##   setting  value
     ##   version  R version 4.3.1 (2023-06-16)
     ##   os       Ubuntu 22.04.3 LTS
    @@ -452,26 +452,26 @@ 

    Orchestrating Hi-C analysis with Bioconductor

    ## collate en_US.UTF-8 ## ctype en_US.UTF-8 ## tz Etc/UTC -## date 2023-10-19 +## date 2023-10-30 ## pandoc 3.1.1 @ /usr/local/bin/ (via rmarkdown) ## -## ─ Packages ──────────────────────────────────────────────────────────────── +## ─ Packages ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ## package * version date (UTC) lib source ## abind 1.4-5 2016-07-21 [1] CRAN (R 4.3.1) -## AnnotationDbi 1.63.2 2023-07-02 [1] Bioconductor -## AnnotationHub * 3.9.2 2023-08-24 [1] Bioconductor -## basilisk 1.13.4 2023-10-04 [1] Bioconductor -## basilisk.utils 1.13.3 2023-09-04 [1] Bioconductor +## AnnotationDbi 1.64.0 2023-10-24 [1] Bioconductor +## AnnotationHub * 3.10.0 2023-10-24 [1] Bioconductor +## basilisk 1.14.0 2023-10-24 [1] Bioconductor +## basilisk.utils 1.14.0 2023-10-24 [1] Bioconductor ## beeswarm 0.4.0 2021-06-01 [1] CRAN (R 4.3.1) -## Biobase 2.61.0 2023-04-25 [1] Bioconductor -## BiocFileCache * 2.9.1 2023-07-12 [1] Bioconductor -## BiocGenerics * 0.47.0 2023-04-25 [1] Bioconductor -## BiocIO 1.11.0 2023-04-25 [1] Bioconductor +## Biobase 2.62.0 2023-10-24 [1] Bioconductor +## BiocFileCache * 2.10.1 2023-10-26 [1] Bioconductor +## BiocGenerics * 0.48.0 2023-10-24 [1] Bioconductor +## BiocIO 1.12.0 2023-10-24 [1] Bioconductor ## BiocManager 1.30.22 2023-08-08 [1] CRAN (R 4.3.1) -## BiocParallel 1.35.4 2023-08-17 [1] Bioconductor -## BiocStyle 2.29.2 2023-09-14 [1] Bioconductor +## BiocParallel 1.36.0 2023-10-24 [1] Bioconductor +## BiocStyle 2.30.0 2023-10-24 [1] Bioconductor ## BiocVersion 3.18.0 2023-04-25 [1] Bioconductor -## Biostrings 2.69.2 2023-07-02 [1] Bioconductor +## Biostrings 2.70.1 2023-10-25 [1] Bioconductor ## bit 4.0.5 2022-11-15 [1] CRAN (R 4.3.1) ## bit64 4.0.5 2020-08-30 [1] CRAN (R 4.3.1) ## bitops 1.0-7 2021-04-24 [1] CRAN (R 4.3.1) @@ -486,59 +486,59 @@

    Orchestrating Hi-C analysis with Bioconductor

    ## curl 5.1.0 2023-10-02 [1] CRAN (R 4.3.1) ## data.table 1.14.8 2023-02-17 [1] CRAN (R 4.3.1) ## DBI 1.1.3 2022-06-18 [1] CRAN (R 4.3.1) -## dbplyr * 2.3.4 2023-09-26 [1] CRAN (R 4.3.1) -## DelayedArray 0.27.10 2023-07-28 [1] Bioconductor +## dbplyr * 2.4.0 2023-10-26 [1] CRAN (R 4.3.1) +## DelayedArray 0.28.0 2023-10-24 [1] Bioconductor ## digest 0.6.33 2023-07-07 [1] CRAN (R 4.3.1) -## dir.expiry 1.9.0 2023-04-25 [1] Bioconductor -## DNAZooData * 1.1.0 2023-04-27 [1] Bioconductor +## dir.expiry 1.10.0 2023-10-24 [1] Bioconductor +## DNAZooData * 1.2.0 2023-10-26 [1] Bioconductor ## dplyr 1.1.3 2023-09-03 [1] CRAN (R 4.3.1) ## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.3.1) ## evaluate 0.22 2023-09-29 [1] CRAN (R 4.3.1) -## ExperimentHub * 2.9.1 2023-07-12 [1] Bioconductor +## ExperimentHub * 2.10.0 2023-10-24 [1] Bioconductor ## fansi 1.0.5 2023-10-08 [1] CRAN (R 4.3.1) ## fastmap 1.1.1 2023-02-24 [1] CRAN (R 4.3.1) ## filelock 1.0.2 2018-10-05 [1] CRAN (R 4.3.1) -## fourDNData * 1.1.0 2023-04-27 [1] Bioconductor +## fourDNData * 1.2.0 2023-10-26 [1] Bioconductor ## generics 0.1.3 2022-07-05 [1] CRAN (R 4.3.1) -## GenomeInfoDb 1.37.6 2023-10-02 [1] Bioconductor -## GenomeInfoDbData 1.2.11 2023-10-19 [1] Bioconductor -## GenomicRanges 1.53.2 2023-10-08 [1] Bioconductor +## GenomeInfoDb 1.38.0 2023-10-24 [1] Bioconductor +## GenomeInfoDbData 1.2.11 2023-10-30 [1] Bioconductor +## GenomicRanges 1.54.0 2023-10-24 [1] Bioconductor ## ggbeeswarm 0.7.2 2023-04-29 [1] CRAN (R 4.3.1) ## ggplot2 3.4.4 2023-10-12 [1] CRAN (R 4.3.1) ## ggrastr 1.0.2 2023-06-01 [1] CRAN (R 4.3.1) ## glue 1.6.2 2022-02-24 [1] CRAN (R 4.3.1) -## graph 1.79.4 2023-10-09 [1] Bioconductor +## graph 1.80.0 2023-10-24 [1] Bioconductor ## gtable 0.3.4 2023-08-21 [1] CRAN (R 4.3.1) -## HiCExperiment * 1.1.2 2023-09-04 [1] Bioconductor -## HiContacts * 1.3.2 2023-09-04 [1] Bioconductor -## HiContactsData * 1.3.0 2023-04-27 [1] Bioconductor -## HiCool * 1.1.0 2023-05-19 [1] Bioconductor +## HiCExperiment * 1.2.0 2023-10-24 [1] Bioconductor +## HiContacts * 1.4.0 2023-10-24 [1] Bioconductor +## HiContactsData * 1.4.0 2023-10-26 [1] Bioconductor +## HiCool * 1.2.0 2023-10-24 [1] Bioconductor ## hms 1.1.3 2023-03-21 [1] CRAN (R 4.3.1) ## htmltools 0.5.6.1 2023-10-06 [1] CRAN (R 4.3.1) ## htmlwidgets 1.6.2 2023-03-17 [1] CRAN (R 4.3.1) -## httpuv 1.6.11 2023-05-11 [1] CRAN (R 4.3.1) +## httpuv 1.6.12 2023-10-23 [1] CRAN (R 4.3.1) ## httr 1.4.7 2023-08-15 [1] CRAN (R 4.3.1) -## InteractionSet 1.29.1 2023-06-14 [1] Bioconductor -## interactiveDisplayBase 1.39.0 2023-04-25 [1] Bioconductor -## IRanges 2.35.3 2023-10-12 [1] Bioconductor +## InteractionSet 1.30.0 2023-10-24 [1] Bioconductor +## interactiveDisplayBase 1.40.0 2023-10-24 [1] Bioconductor +## IRanges 2.36.0 2023-10-24 [1] Bioconductor ## jsonlite 1.8.7 2023-06-29 [1] CRAN (R 4.3.1) -## KEGGREST 1.41.4 2023-09-25 [1] Bioconductor +## KEGGREST 1.42.0 2023-10-24 [1] Bioconductor ## knitr 1.44 2023-09-11 [1] CRAN (R 4.3.1) ## later 1.3.1 2023-05-02 [1] CRAN (R 4.3.1) -## lattice 0.21-9 2023-10-01 [1] CRAN (R 4.3.1) +## lattice 0.22-5 2023-10-24 [1] CRAN (R 4.3.1) ## lazyeval 0.2.2 2019-03-15 [1] CRAN (R 4.3.1) ## lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.3.1) ## magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.3.1) ## Matrix 1.6-1.1 2023-09-18 [1] CRAN (R 4.3.1) -## MatrixGenerics 1.13.1 2023-07-25 [1] Bioconductor +## MatrixGenerics 1.14.0 2023-10-24 [1] Bioconductor ## matrixStats 1.0.0 2023-06-02 [1] CRAN (R 4.3.1) ## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.3.1) ## mime 0.12 2021-09-28 [1] CRAN (R 4.3.1) ## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.3.1) -## OHCA * 1.1.0 2023-10-19 [1] local +## OHCA * 1.1.0 2023-10-30 [1] local ## pillar 1.9.0 2023-03-22 [1] CRAN (R 4.3.1) ## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.3.1) -## plotly 4.10.2 2023-06-03 [1] CRAN (R 4.3.1) +## plotly 4.10.3 2023-10-21 [1] CRAN (R 4.3.1) ## png 0.1-8 2022-11-29 [1] CRAN (R 4.3.1) ## promises 1.2.1 2023-08-10 [1] CRAN (R 4.3.1) ## purrr 1.0.2 2023-08-10 [1] CRAN (R 4.3.1) @@ -547,33 +547,33 @@

    Orchestrating Hi-C analysis with Bioconductor

    ## Rcpp 1.0.11 2023-07-06 [1] CRAN (R 4.3.1) ## RCurl 1.98-1.12 2023-03-27 [1] CRAN (R 4.3.1) ## readr 2.1.4 2023-02-10 [1] CRAN (R 4.3.1) -## rebook 1.11.1 2023-05-25 [1] Bioconductor +## rebook 1.12.0 2023-10-24 [1] Bioconductor ## reticulate 1.34.0 2023-10-12 [1] CRAN (R 4.3.1) -## rhdf5 2.45.1 2023-07-10 [1] Bioconductor -## rhdf5filters 1.13.5 2023-07-19 [1] Bioconductor -## Rhdf5lib 1.23.2 2023-09-10 [1] Bioconductor +## rhdf5 2.46.0 2023-10-24 [1] Bioconductor +## rhdf5filters 1.14.0 2023-10-24 [1] Bioconductor +## Rhdf5lib 1.24.0 2023-10-24 [1] Bioconductor ## rjson 0.2.21 2022-01-09 [1] CRAN (R 4.3.1) ## rlang 1.1.1 2023-04-28 [1] CRAN (R 4.3.1) ## rmarkdown 2.25 2023-09-18 [1] CRAN (R 4.3.1) ## rmdformats 1.0.4 2022-05-17 [1] CRAN (R 4.3.1) ## RSpectra 0.16-1 2022-04-24 [1] CRAN (R 4.3.1) -## RSQLite 2.3.1 2023-04-03 [1] CRAN (R 4.3.1) +## RSQLite 2.3.2 2023-10-28 [1] CRAN (R 4.3.1) ## rstudioapi 0.15.0 2023-07-07 [1] CRAN (R 4.3.1) -## S4Arrays 1.1.6 2023-08-30 [1] Bioconductor -## S4Vectors 0.39.3 2023-10-11 [1] Bioconductor +## S4Arrays 1.2.0 2023-10-24 [1] Bioconductor +## S4Vectors 0.40.1 2023-10-26 [1] Bioconductor ## scales 1.2.1 2022-08-20 [1] CRAN (R 4.3.1) ## sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.3.1) ## shiny 1.7.5.1 2023-10-14 [1] CRAN (R 4.3.1) -## SparseArray 1.1.12 2023-08-31 [1] Bioconductor +## SparseArray 1.2.0 2023-10-24 [1] Bioconductor ## strawr 0.0.91 2023-03-29 [1] CRAN (R 4.3.1) ## stringi 1.7.12 2023-01-11 [1] CRAN (R 4.3.1) ## stringr 1.5.0 2022-12-02 [1] CRAN (R 4.3.1) -## SummarizedExperiment 1.31.1 2023-05-01 [1] Bioconductor +## SummarizedExperiment 1.32.0 2023-10-24 [1] Bioconductor ## tibble 3.2.1 2023-03-20 [1] CRAN (R 4.3.1) ## tidyr 1.3.0 2023-01-24 [1] CRAN (R 4.3.1) ## tidyselect 1.2.0 2022-10-10 [1] CRAN (R 4.3.1) ## tzdb 0.4.0 2023-05-12 [1] CRAN (R 4.3.1) -## utf8 1.2.3 2023-01-31 [1] CRAN (R 4.3.1) +## utf8 1.2.4 2023-10-22 [1] CRAN (R 4.3.1) ## vctrs 0.6.4 2023-10-12 [1] CRAN (R 4.3.1) ## vipor 0.4.5 2017-03-22 [1] CRAN (R 4.3.1) ## viridisLite 0.4.2 2023-05-02 [1] CRAN (R 4.3.1) @@ -581,14 +581,14 @@

    Orchestrating Hi-C analysis with Bioconductor

    ## xfun 0.40 2023-08-09 [1] CRAN (R 4.3.1) ## XML 3.99-0.14 2023-03-19 [1] CRAN (R 4.3.1) ## xtable 1.8-4 2019-04-21 [1] CRAN (R 4.3.1) -## XVector 0.41.1 2023-05-03 [1] Bioconductor +## XVector 0.42.0 2023-10-24 [1] Bioconductor ## yaml 2.3.7 2023-01-23 [1] CRAN (R 4.3.1) -## zlibbioc 1.47.0 2023-04-25 [1] Bioconductor +## zlibbioc 1.48.0 2023-10-24 [1] Bioconductor ## ## [1] /usr/local/lib/R/site-library ## [2] /usr/local/lib/R/library ## -## ───────────────────────────────────────────────────────────────────────────
    +## ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
    diff --git a/interactions-centric.html b/interactions-centric.html index 3520889..080a5a6 100644 --- a/interactions-centric.html +++ b/interactions-centric.html @@ -372,7 +372,7 @@

    hic
     ##  `HiCExperiment` object with 471,364 contacts over 407 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "II" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 2000 
    @@ -400,59 +400,34 @@ 

    pf
     ##  PairsFile object
    -##  resource: /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753
    +## resource: /github/home/.cache/R/ExperimentHub/1a92835ced9_7753

    -
    -
    -
    - -
    -
    -Reminder! -
    -
    -
    -

    PairsFile connections can be imported directly into a GInteractions object with import():

    +

    If needed, PairsFile connections can be imported directly into a GInteractions object with import().

    import(pf)
     ##  GInteractions object with 471364 interactions and 3 metadata columns:
    -##             seqnames1   ranges1     seqnames2   ranges2 |     frag1     frag2
    -##                 <Rle> <IRanges>         <Rle> <IRanges> | <numeric> <numeric>
    -##         [1]        II       105 ---        II     48548 |      1358      1681
    -##         [2]        II       113 ---        II     45003 |      1358      1658
    -##         [3]        II       119 ---        II    687251 |      1358      5550
    -##         [4]        II       160 ---        II     26124 |      1358      1510
    -##         [5]        II       169 ---        II     39052 |      1358      1613
    -##         ...       ...       ... ...       ...       ... .       ...       ...
    -##    [471360]        II    808605 ---        II    809683 |      6316      6320
    -##    [471361]        II    808609 ---        II    809917 |      6316      6324
    -##    [471362]        II    808617 ---        II    809506 |      6316      6319
    -##    [471363]        II    809447 ---        II    809685 |      6319      6321
    -##    [471364]        II    809472 ---        II    809675 |      6319      6320
    -##              distance
    -##             <integer>
    -##         [1]     48443
    -##         [2]     44890
    -##         [3]    687132
    -##         [4]     25964
    -##         [5]     38883
    -##         ...       ...
    -##    [471360]      1078
    -##    [471361]      1308
    -##    [471362]       889
    -##    [471363]       238
    -##    [471364]       203
    +##             seqnames1   ranges1     seqnames2   ranges2 |     frag1     frag2  distance
    +##                 <Rle> <IRanges>         <Rle> <IRanges> | <numeric> <numeric> <integer>
    +##         [1]        II       105 ---        II     48548 |      1358      1681     48443
    +##         [2]        II       113 ---        II     45003 |      1358      1658     44890
    +##         [3]        II       119 ---        II    687251 |      1358      5550    687132
    +##         [4]        II       160 ---        II     26124 |      1358      1510     25964
    +##         [5]        II       169 ---        II     39052 |      1358      1613     38883
    +##         ...       ...       ... ...       ...       ... .       ...       ...       ...
    +##    [471360]        II    808605 ---        II    809683 |      6316      6320      1078
    +##    [471361]        II    808609 ---        II    809917 |      6316      6324      1308
    +##    [471362]        II    808617 ---        II    809506 |      6316      6319       889
    +##    [471363]        II    809447 ---        II    809685 |      6319      6321       238
    +##    [471364]        II    809472 ---        II    809675 |      6319      6320       203
     ##    -------
     ##    regions: 549331 ranges and 0 metadata columns
     ##    seqinfo: 1 sequence from an unspecified genome; no seqlengths
    -
    -

    We can compute a P(s) per chromosome from this .pairs file using the distanceLaw function.

    library(HiContacts)
     ps <- distanceLaw(pf, by_chr = TRUE) 
    -##  Importing pairs file /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753 in memory. This may take a while...
    +##  Importing pairs file /github/home/.cache/R/ExperimentHub/1a92835ced9_7753 in memory. This may take a while...
     ps
     ##  # A tibble: 115 × 6
     ##    chr   binned_distance          p     norm_p norm_p_unity slope
    @@ -465,28 +440,9 @@ 

    ## 6 II 23 0.0000870 0.0000290 62.1 1.53 ## # ℹ 109 more rows

    -
    -
    -
    - -
    -
    -Note -
    -
    -
    -

    Because this is a toy dataset, contacts are only provided for the chromosome II.

    -
    -
    table(ps$chr)
    -##  
    -##   II 
    -##  115
    -
    -
    -

    The plotPs() and plotPsSlope() functions are convenient ggplot2-based functions with pre-configured settings optimized for P(s) visualization.

    -
    library(ggplot2)
    +
    library(ggplot2)
     plotPs(ps, aes(x = binned_distance, y = norm_p, color = chr))
     ##  Warning: Removed 67 rows containing missing values (`geom_line()`).
    @@ -495,7 +451,7 @@

    -
    plotPsSlope(ps, aes(x = binned_distance, y = slope, color = chr))
    +
    plotPsSlope(ps, aes(x = binned_distance, y = slope, color = chr))
     ##  Warning: Removed 67 rows containing missing values (`geom_line()`).
    @@ -507,13 +463,13 @@

    6.1.2 P(s) for multiple .pairs files

    Let’s first import a second example dataset. We’ll import pairs identified in a eco1 yeast mutant.

    -
    -
    eco1_pairsf <- HiContactsData('yeast_eco1', 'pairs.gz')
    +
    +
    eco1_pairsf <- HiContactsData('yeast_eco1', 'pairs.gz')
     eco1_pf <- PairsFile(eco1_pairsf)
    -
    -
    eco1_ps <- distanceLaw(eco1_pf, by_chr = TRUE) 
    -##  Importing pairs file /github/home/.cache/R/ExperimentHub/21fb251da216_7755 in memory. This may take a while...
    +
    +
    eco1_ps <- distanceLaw(eco1_pf, by_chr = TRUE) 
    +##  Importing pairs file /github/home/.cache/R/ExperimentHub/21f275852cbd_7755 in memory. This may take a while...
     eco1_ps
     ##  # A tibble: 115 × 6
     ##    chr   binned_distance          p     norm_p norm_p_unity slope
    @@ -527,8 +483,8 @@ 

    ## # ℹ 109 more rows

    A little data wrangling can help plotting the distance laws for 2 different samples in the same plot.

    -
    -
    library(dplyr)
    +
    +
    library(dplyr)
     merged_ps <- rbind(
         ps |> mutate(sample = 'WT'), 
         eco1_ps |> mutate(sample = 'eco1')
    @@ -538,16 +494,16 @@ 

    ## Warning: Removed 134 rows containing missing values (`geom_line()`).

    -

    +

    -
    plotPsSlope(merged_ps, aes(x = binned_distance, y = slope, color = sample, linetype = chr)) + 
    +
    plotPsSlope(merged_ps, aes(x = binned_distance, y = slope, color = sample, linetype = chr)) + 
         scale_color_manual(values = c('#c6c6c6', '#ca0000'))
     ##  Warning: Removed 135 rows containing missing values (`geom_line()`).
    -

    +

    @@ -555,44 +511,31 @@

    6.1.3 P(s) from HiCExperiment objects

    Alternatively, distance laws can be computed from binned matrices directly by providing HiCExperiment objects. For deeply sequenced datasets, this can be significantly faster than when using original .pairs files, but the smoothness of the resulting curves will be greatly impacted, notably at short distances.

    -
    -
    ps_from_hic <- distanceLaw(hic, by_chr = TRUE) 
    +
    +
    ps_from_hic <- distanceLaw(hic, by_chr = TRUE) 
     ##  pairsFile not specified. The P(s) curve will be an approximation.
     plotPs(ps_from_hic, aes(x = binned_distance, y = norm_p))
     ##  Warning: Removed 9 rows containing missing values (`geom_line()`).
    -

    +

    -
    plotPsSlope(ps_from_hic, aes(x = binned_distance, y = slope))
    +
    plotPsSlope(ps_from_hic, aes(x = binned_distance, y = slope))
     ##  Warning: Removed 8 rows containing missing values (`geom_line()`).
    -

    +

    6.2 Cis/trans ratios

    -

    The ratio between cis interactions and trans interactions is often used to assess the overall quality of a Hi-C dataset. It can be computed per chromosome using the cisTransRatio() function.

    -
    -
    -
    - -
    -
    -Tip! -
    -
    -
    -

    You will need to provide a genome-wide HiCExperiment to estimate cis/trans ratios!

    -
    -
    -
    -
    full_hic <- import(cf, resolution = 2000)
    +

    The ratio between cis interactions and trans interactions is often used to assess the overall quality of a Hi-C dataset. It can be computed per chromosome using the cisTransRatio() function. You will need to provide a genome-wide HiCExperiment to estimate cis/trans ratios!

    +
    +
    full_hic <- import(cf, resolution = 2000)
     ct <- cisTransRatio(full_hic) 
     ct
     ##  # A tibble: 16 × 6
    @@ -608,8 +551,8 @@ 

    ## # ℹ 10 more rows

    It can be plotted using ggplot2-based visualization functions.

    -
    -
    ggplot(ct, aes(x = chr, y = cis_pct)) + 
    +
    +
    ggplot(ct, aes(x = chr, y = cis_pct)) + 
         geom_col(position = position_stack()) + 
         theme_bw() + 
         guides(x=guide_axis(angle = 90)) + 
    @@ -617,66 +560,41 @@ 

    labs(x = 'Chromosomes', y = '% of cis contacts')

    -

    +

    -
    -
    -
    - -
    -
    -Watch out -
    -
    -

    Cis/trans contact ratios will greatly vary depending on the cell cycle phase the sample is in! For instance, chromosomes during the mitosis phase of the cell cycle have very little trans contacts, due to their structural organization and individualization.

    -
    -

    6.3 Virtual 4C profiles

    Interaction profile of a genomic locus of interest with its surrounding environment or the rest of the genome is frequently generated. In some cases, this can help in identifying and/or comparing regulatory or structural interactions.

    For instance, we can compute the genome-wide virtual 4C profile of interactions anchored at the centromere in chromosome II (located at ~ 238kb).

    -
    -
    library(GenomicRanges)
    +
    +
    library(GenomicRanges)
     v4C <- virtual4C(full_hic, viewpoint = GRanges("II:230001-240000"))
     v4C
     ##  GRanges object with 6045 ranges and 4 metadata columns:
    -##           seqnames        ranges strand |       score        viewpoint
    -##              <Rle>     <IRanges>  <Rle> |   <numeric>      <character>
    -##       [1]        I        1-2000      * |  0.00000000 II:230001-240000
    -##       [2]        I     2001-4000      * |  0.00000000 II:230001-240000
    -##       [3]        I     4001-6000      * |  0.00129049 II:230001-240000
    -##       [4]        I     6001-8000      * |  0.00000000 II:230001-240000
    -##       [5]        I    8001-10000      * |  0.00000000 II:230001-240000
    -##       ...      ...           ...    ... .         ...              ...
    -##    [6041]      XVI 940001-942000      * | 0.000775721 II:230001-240000
    -##    [6042]      XVI 942001-944000      * | 0.000000000 II:230001-240000
    -##    [6043]      XVI 944001-946000      * | 0.000000000 II:230001-240000
    -##    [6044]      XVI 946001-948000      * | 0.000000000 II:230001-240000
    -##    [6045]      XVI 948001-948066      * | 0.000000000 II:230001-240000
    -##              center in_viewpoint
    -##           <numeric>    <logical>
    -##       [1]    1000.5        FALSE
    -##       [2]    3000.5        FALSE
    -##       [3]    5000.5        FALSE
    -##       [4]    7000.5        FALSE
    -##       [5]    9000.5        FALSE
    -##       ...       ...          ...
    -##    [6041]    941000        FALSE
    -##    [6042]    943000        FALSE
    -##    [6043]    945000        FALSE
    -##    [6044]    947000        FALSE
    -##    [6045]    948034        FALSE
    +##           seqnames        ranges strand |       score        viewpoint    center in_viewpoint
    +##              <Rle>     <IRanges>  <Rle> |   <numeric>      <character> <numeric>    <logical>
    +##       [1]        I        1-2000      * |  0.00000000 II:230001-240000    1000.5        FALSE
    +##       [2]        I     2001-4000      * |  0.00000000 II:230001-240000    3000.5        FALSE
    +##       [3]        I     4001-6000      * |  0.00129049 II:230001-240000    5000.5        FALSE
    +##       [4]        I     6001-8000      * |  0.00000000 II:230001-240000    7000.5        FALSE
    +##       [5]        I    8001-10000      * |  0.00000000 II:230001-240000    9000.5        FALSE
    +##       ...      ...           ...    ... .         ...              ...       ...          ...
    +##    [6041]      XVI 940001-942000      * | 0.000775721 II:230001-240000    941000        FALSE
    +##    [6042]      XVI 942001-944000      * | 0.000000000 II:230001-240000    943000        FALSE
    +##    [6043]      XVI 944001-946000      * | 0.000000000 II:230001-240000    945000        FALSE
    +##    [6044]      XVI 946001-948000      * | 0.000000000 II:230001-240000    947000        FALSE
    +##    [6045]      XVI 948001-948066      * | 0.000000000 II:230001-240000    948034        FALSE
     ##    -------
     ##    seqinfo: 16 sequences from an unspecified genome; no seqlengths

    ggplot2 can be used to visualize the 4C-like profile over multiple chromosomes.

    -
    -
    df <- as_tibble(v4C)
    +
    +
    df <- as_tibble(v4C)
     ggplot(df, aes(x = center, y = score)) + 
         geom_area(position = "identity", alpha = 0.5) + 
         theme_bw() + 
    @@ -685,7 +603,7 @@ 

    facet_wrap(~seqnames, scales = 'free_y')

    -

    +

    @@ -696,22 +614,22 @@

    6.4 Scalograms

    Scalograms were introduced in Lioy et al. (2018) to investigate distance-dependent contact frequencies for individual genomic bins along chromosomes.
    To generate a scalogram, one needs to provide a HiCExperiment object with a valid associated pairsFile.

    -
    -
    pairsFile(hic) <- pairsf
    +
    +
    pairsFile(hic) <- pairsf
     scalo <- scalogram(hic) 
    -##  Importing pairs file /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753 in memory. This may take a while...
    +##  Importing pairs file /github/home/.cache/R/ExperimentHub/1a92835ced9_7753 in memory. This may take a while...
     plotScalogram(scalo |> filter(chr == 'II'), ylim = c(1e3, 1e5))
    -

    +

    Several scalograms can be plotted together to compare distance-dependent contact frequencies along a given chromosome in different samples.

    -
    -
    eco1_hic <- import(
    +
    +
    eco1_hic <- import(
         CoolFile(HiContactsData('yeast_eco1', 'mcool')), 
         focus = 'II', 
         resolution = 2000
    @@ -723,7 +641,7 @@ 

    ## loading from cache pairsFile(eco1_hic) <- eco1_pairsf eco1_scalo <- scalogram(eco1_hic) -## Importing pairs file /github/home/.cache/R/ExperimentHub/21fb251da216_7755 in memory. This may take a while... +## Importing pairs file /github/home/.cache/R/ExperimentHub/21f275852cbd_7755 in memory. This may take a while... merged_scalo <- rbind( scalo |> mutate(sample = 'WT'), eco1_scalo |> mutate(sample = 'eco1') @@ -732,7 +650,7 @@

    facet_grid(~sample)

    -

    +

    diff --git a/interactions-centric_files/figure-html/unnamed-chunk-10-1.png b/interactions-centric_files/figure-html/unnamed-chunk-10-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc8478771d842f3b8e3e76b2126fbd5746fdcf3 GIT binary patch literal 70823 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

    References

    Session info

    -
    ##  ─ Session info ────────────────────────────────────────────────────────────
    +
    ##  ─ Session info ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
     ##   setting  value
     ##   version  R version 4.3.1 (2023-06-16)
     ##   os       Ubuntu 22.04.3 LTS
    @@ -717,23 +680,23 @@ 

    ## collate en_US.UTF-8 ## ctype en_US.UTF-8 ## tz Etc/UTC -## date 2023-10-19 +## date 2023-10-30 ## pandoc 3.1.1 @ /usr/local/bin/ (via rmarkdown) ## -## ─ Packages ──────────────────────────────────────────────────────────────── +## ─ Packages ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ## package * version date (UTC) lib source ## abind 1.4-5 2016-07-21 [1] CRAN (R 4.3.1) ## aggregation 1.0.1 2018-01-25 [1] CRAN (R 4.3.1) -## AnnotationDbi 1.63.2 2023-07-02 [1] Bioconductor -## AnnotationHub * 3.9.2 2023-08-24 [1] Bioconductor -## Biobase * 2.61.0 2023-04-25 [1] Bioconductor -## BiocFileCache * 2.9.1 2023-07-12 [1] Bioconductor -## BiocGenerics * 0.47.0 2023-04-25 [1] Bioconductor -## BiocIO 1.11.0 2023-04-25 [1] Bioconductor +## AnnotationDbi 1.64.0 2023-10-24 [1] Bioconductor +## AnnotationHub * 3.10.0 2023-10-24 [1] Bioconductor +## Biobase * 2.62.0 2023-10-24 [1] Bioconductor +## BiocFileCache * 2.10.1 2023-10-26 [1] Bioconductor +## BiocGenerics * 0.48.0 2023-10-24 [1] Bioconductor +## BiocIO 1.12.0 2023-10-24 [1] Bioconductor ## BiocManager 1.30.22 2023-08-08 [1] CRAN (R 4.3.1) -## BiocParallel 1.35.4 2023-08-17 [1] Bioconductor +## BiocParallel 1.36.0 2023-10-24 [1] Bioconductor ## BiocVersion 3.18.0 2023-04-25 [1] Bioconductor -## Biostrings 2.69.2 2023-07-02 [1] Bioconductor +## Biostrings 2.70.1 2023-10-25 [1] Bioconductor ## bit 4.0.5 2022-11-15 [1] CRAN (R 4.3.1) ## bit64 4.0.5 2020-08-30 [1] CRAN (R 4.3.1) ## bitops 1.0-7 2021-04-24 [1] CRAN (R 4.3.1) @@ -747,56 +710,56 @@

    ## curl 5.1.0 2023-10-02 [1] CRAN (R 4.3.1) ## data.table 1.14.8 2023-02-17 [1] CRAN (R 4.3.1) ## DBI 1.1.3 2022-06-18 [1] CRAN (R 4.3.1) -## dbplyr * 2.3.4 2023-09-26 [1] CRAN (R 4.3.1) -## DelayedArray 0.27.10 2023-07-28 [1] Bioconductor +## dbplyr * 2.4.0 2023-10-26 [1] CRAN (R 4.3.1) +## DelayedArray 0.28.0 2023-10-24 [1] Bioconductor ## digest 0.6.33 2023-07-07 [1] CRAN (R 4.3.1) ## dplyr * 1.1.3 2023-09-03 [1] CRAN (R 4.3.1) -## edgeR 3.99.3 2023-10-16 [1] Bioconductor +## edgeR 4.0.0 2023-10-24 [1] Bioconductor ## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.3.1) ## evaluate 0.22 2023-09-29 [1] CRAN (R 4.3.1) -## ExperimentHub * 2.9.1 2023-07-12 [1] Bioconductor +## ExperimentHub * 2.10.0 2023-10-24 [1] Bioconductor ## fansi 1.0.5 2023-10-08 [1] CRAN (R 4.3.1) ## fastmap 1.1.1 2023-02-24 [1] CRAN (R 4.3.1) ## filelock 1.0.2 2018-10-05 [1] CRAN (R 4.3.1) ## generics 0.1.3 2022-07-05 [1] CRAN (R 4.3.1) -## GenomeInfoDb * 1.37.6 2023-10-02 [1] Bioconductor -## GenomeInfoDbData 1.2.11 2023-10-19 [1] Bioconductor -## GenomicAlignments 1.37.0 2023-04-25 [1] Bioconductor -## GenomicRanges * 1.53.2 2023-10-08 [1] Bioconductor +## GenomeInfoDb * 1.38.0 2023-10-24 [1] Bioconductor +## GenomeInfoDbData 1.2.11 2023-10-30 [1] Bioconductor +## GenomicAlignments 1.38.0 2023-10-24 [1] Bioconductor +## GenomicRanges * 1.54.0 2023-10-24 [1] Bioconductor ## ggplot2 * 3.4.4 2023-10-12 [1] CRAN (R 4.3.1) ## glue 1.6.2 2022-02-24 [1] CRAN (R 4.3.1) ## gridExtra 2.3 2017-09-09 [1] CRAN (R 4.3.1) ## gtable 0.3.4 2023-08-21 [1] CRAN (R 4.3.1) ## gtools 3.9.4 2022-11-27 [1] CRAN (R 4.3.1) -## HiCcompare 1.23.1 2023-06-04 [1] Bioconductor -## HiCExperiment * 1.1.2 2023-09-04 [1] Bioconductor -## HiContactsData * 1.3.0 2023-04-27 [1] Bioconductor -## hicrep * 1.12.2 2023-10-19 [1] Github (TaoYang-dev/hicrep@e485dfa) +## HiCcompare 1.24.0 2023-10-24 [1] Bioconductor +## HiCExperiment * 1.2.0 2023-10-24 [1] Bioconductor +## HiContactsData * 1.4.0 2023-10-26 [1] Bioconductor +## hicrep * 1.12.2 2023-10-30 [1] Github (TaoYang-dev/hicrep@e485dfa) ## htmltools 0.5.6.1 2023-10-06 [1] CRAN (R 4.3.1) ## htmlwidgets 1.6.2 2023-03-17 [1] CRAN (R 4.3.1) -## httpuv 1.6.11 2023-05-11 [1] CRAN (R 4.3.1) +## httpuv 1.6.12 2023-10-23 [1] CRAN (R 4.3.1) ## httr 1.4.7 2023-08-15 [1] CRAN (R 4.3.1) -## InteractionSet * 1.29.1 2023-06-14 [1] Bioconductor -## interactiveDisplayBase 1.39.0 2023-04-25 [1] Bioconductor -## IRanges * 2.35.3 2023-10-12 [1] Bioconductor +## InteractionSet * 1.30.0 2023-10-24 [1] Bioconductor +## interactiveDisplayBase 1.40.0 2023-10-24 [1] Bioconductor +## IRanges * 2.36.0 2023-10-24 [1] Bioconductor ## jsonlite 1.8.7 2023-06-29 [1] CRAN (R 4.3.1) -## KEGGREST 1.41.4 2023-09-25 [1] Bioconductor +## KEGGREST 1.42.0 2023-10-24 [1] Bioconductor ## KernSmooth 2.23-22 2023-07-10 [1] CRAN (R 4.3.1) ## knitr 1.44 2023-09-11 [1] CRAN (R 4.3.1) ## later 1.3.1 2023-05-02 [1] CRAN (R 4.3.1) -## lattice 0.21-9 2023-10-01 [1] CRAN (R 4.3.1) +## lattice 0.22-5 2023-10-24 [1] CRAN (R 4.3.1) ## lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.3.1) -## limma 3.57.10 2023-10-11 [1] Bioconductor +## limma 3.58.0 2023-10-24 [1] Bioconductor ## locfit 1.5-9.8 2023-06-11 [1] CRAN (R 4.3.1) ## magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.3.1) ## MASS 7.3-60 2023-05-04 [2] CRAN (R 4.3.1) ## Matrix 1.6-1.1 2023-09-18 [1] CRAN (R 4.3.1) -## MatrixGenerics * 1.13.1 2023-07-25 [1] Bioconductor +## MatrixGenerics * 1.14.0 2023-10-24 [1] Bioconductor ## matrixStats * 1.0.0 2023-06-02 [1] CRAN (R 4.3.1) ## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.3.1) ## mgcv 1.9-0 2023-07-11 [1] CRAN (R 4.3.1) ## mime 0.12 2021-09-28 [1] CRAN (R 4.3.1) -## multiHiCcompare * 1.19.1 2023-07-02 [1] Bioconductor +## multiHiCcompare * 1.20.0 2023-10-24 [1] Bioconductor ## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.3.1) ## nlme 3.1-163 2023-08-09 [1] CRAN (R 4.3.1) ## pbapply 1.7-2 2023-06-27 [1] CRAN (R 4.3.1) @@ -815,47 +778,47 @@

    ## RCurl 1.98-1.12 2023-03-27 [1] CRAN (R 4.3.1) ## reshape2 1.4.4 2020-04-09 [1] CRAN (R 4.3.1) ## restfulr 0.0.15 2022-06-16 [1] CRAN (R 4.3.1) -## rhdf5 2.45.1 2023-07-10 [1] Bioconductor -## rhdf5filters 1.13.5 2023-07-19 [1] Bioconductor -## Rhdf5lib 1.23.2 2023-09-10 [1] Bioconductor +## rhdf5 2.46.0 2023-10-24 [1] Bioconductor +## rhdf5filters 1.14.0 2023-10-24 [1] Bioconductor +## Rhdf5lib 1.24.0 2023-10-24 [1] Bioconductor ## rjson 0.2.21 2022-01-09 [1] CRAN (R 4.3.1) ## rlang 1.1.1 2023-04-28 [1] CRAN (R 4.3.1) ## rmarkdown 2.25 2023-09-18 [1] CRAN (R 4.3.1) -## Rsamtools 2.17.0 2023-04-25 [1] Bioconductor -## RSQLite 2.3.1 2023-04-03 [1] CRAN (R 4.3.1) +## Rsamtools 2.18.0 2023-10-24 [1] Bioconductor +## RSQLite 2.3.2 2023-10-28 [1] CRAN (R 4.3.1) ## rstudioapi 0.15.0 2023-07-07 [1] CRAN (R 4.3.1) -## rtracklayer 1.61.1 2023-08-15 [1] Bioconductor -## S4Arrays 1.1.6 2023-08-30 [1] Bioconductor -## S4Vectors * 0.39.3 2023-10-11 [1] Bioconductor +## rtracklayer 1.62.0 2023-10-24 [1] Bioconductor +## S4Arrays 1.2.0 2023-10-24 [1] Bioconductor +## S4Vectors * 0.40.1 2023-10-26 [1] Bioconductor ## scales 1.2.1 2022-08-20 [1] CRAN (R 4.3.1) ## sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.3.1) ## shiny 1.7.5.1 2023-10-14 [1] CRAN (R 4.3.1) -## SparseArray 1.1.12 2023-08-31 [1] Bioconductor +## SparseArray 1.2.0 2023-10-24 [1] Bioconductor ## statmod 1.5.0 2023-01-06 [1] CRAN (R 4.3.1) ## strawr 0.0.91 2023-03-29 [1] CRAN (R 4.3.1) ## stringi 1.7.12 2023-01-11 [1] CRAN (R 4.3.1) ## stringr 1.5.0 2022-12-02 [1] CRAN (R 4.3.1) -## SummarizedExperiment * 1.31.1 2023-05-01 [1] Bioconductor +## SummarizedExperiment * 1.32.0 2023-10-24 [1] Bioconductor ## tibble 3.2.1 2023-03-20 [1] CRAN (R 4.3.1) ## tidyr * 1.3.0 2023-01-24 [1] CRAN (R 4.3.1) ## tidyselect 1.2.0 2022-10-10 [1] CRAN (R 4.3.1) ## TopDom * 0.10.1 2021-05-06 [1] CRAN (R 4.3.1) ## tzdb 0.4.0 2023-05-12 [1] CRAN (R 4.3.1) -## utf8 1.2.3 2023-01-31 [1] CRAN (R 4.3.1) +## utf8 1.2.4 2023-10-22 [1] CRAN (R 4.3.1) ## vctrs 0.6.4 2023-10-12 [1] CRAN (R 4.3.1) ## vroom 1.6.4 2023-10-02 [1] CRAN (R 4.3.1) ## withr 2.5.1 2023-09-26 [1] CRAN (R 4.3.1) ## xfun 0.40 2023-08-09 [1] CRAN (R 4.3.1) ## XML 3.99-0.14 2023-03-19 [1] CRAN (R 4.3.1) ## xtable 1.8-4 2019-04-21 [1] CRAN (R 4.3.1) -## XVector 0.41.1 2023-05-03 [1] Bioconductor +## XVector 0.42.0 2023-10-24 [1] Bioconductor ## yaml 2.3.7 2023-01-23 [1] CRAN (R 4.3.1) -## zlibbioc 1.47.0 2023-04-25 [1] Bioconductor +## zlibbioc 1.48.0 2023-10-24 [1] Bioconductor ## ## [1] /usr/local/lib/R/site-library ## [2] /usr/local/lib/R/library ## -## ───────────────────────────────────────────────────────────────────────────

    +## ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
    diff --git a/matrix-centric.html b/matrix-centric.html index 32d5c7c..893a434 100644 --- a/matrix-centric.html +++ b/matrix-centric.html @@ -381,7 +381,7 @@

    hic
     ##  `HiCExperiment` object with 471,364 contacts over 407 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "II" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 2000 
    @@ -399,13 +399,13 @@ 

    5.1.1 Balancing a raw interaction count map

    Hi-C sequencing coverage is systematically affected by multiple confounding factors, e.g.  density of restriction sites, GC%, genome mappability, etc.. Overall, it generally ends up not homogenous throughout the entire genome and this leads to artifacts in un-normalized count matrices.

    -

    To correct for sequencing coverage heterogeneity of raw count maps, Hi-C data can be normalized using matrix balancing approaches (Cournac et al. (2012), Imakaev et al. (2012)). This is generally done directly on the disk-stored matrices using out-of-memory strategies (e.g. with cooler balance <.cool>). However, if contact matrix files are imported into a HiCExperiment object but no balanced scores are available, in-memory balancing can be performed using the normalize function.

    +

    To correct for sequencing coverage heterogeneity of raw count maps, Hi-C data can be normalized using matrix balancing approaches (Cournac et al. (2012), Imakaev et al. (2012)). This is generally done directly on the disk-stored matrices using out-of-memory strategies (e.g. with cooler balance <.cool>). However, if contact matrix files are imported into a HiCExperiment object but no balanced scores are available, in-memory balancing can be performed using the normalize function. This adds an extra ICE element in scores list (while the interactions themselves are unmodified).

    normalized_hic <- normalize(hic)
     normalized_hic
     ##  `HiCExperiment` object with 471,364 contacts over 407 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "II" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 2000 
    @@ -415,19 +415,6 @@ 

    ## pairsFile: N/A ## metadata(0):

    -
    -
    -
    - -
    -
    -Note -
    -
    -
    -

    The only change done to the HiCExperiment object by the normalize function is the addition of a single extra ICE in scores list. The interactions themselves are unmodified.

    -
    -

    It is possible to plot the different scores of the resulting object to visualize the newly computed scores. In this example, ICE scores should be nearly identical to balanced scores, which were originally imported from the disk-stored contact matrix.

    @@ -449,13 +436,13 @@

    5.1.2 Computing observed/expected (O/E) map

    The most prominent feature of a balanced Hi-C matrix is the strong main diagonal. This main diagonal is observed because interactions between immediate adjacent genomic loci are more prone to happen than interactions spanning longer genomic distances. This “expected” behavior is due to the polymer nature of the chromosomes being studied, and can be locally estimated using the distance-dependent interaction frequency (a.k.a. the “distance law”, or P(s)). It can be used to compute an expected matrix on interactions.

    When it is desirable to “mask” this polymer behavior to emphasize topological structures formed by chromosomes, one can divide a given balanced matrix by its expected matrix, i.e. calculate the observed/expected (O/E) map. This is sometimes called “detrending”, as it effectively removes the average polymer behavior from the balanced matrix.

    -

    The detrend function performs this operation on a given HiCExperiment object.

    +

    The detrend function performs this operation on a given HiCExperiment object. It adds two extra elements in scores list: expected and detrended metrics (while the interactions themselves are unmodified).

    detrended_hic <- detrend(hic)
     detrended_hic
     ##  `HiCExperiment` object with 471,364 contacts over 407 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "II" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 2000 
    @@ -465,24 +452,6 @@ 

    ## pairsFile: N/A ## metadata(0):

    -
    -
    -
    - -
    -
    -Note -
    -
    -
    -

    The only change done to the HiCExperiment object by the detrend function is the addition of two extra scores:

    -
      -
    1. expected
    2. -
    3. detrended
    4. -
    -

    The interactions themselves are unmodified.

    -
    -

    Topological features will be visually more prominent in the O/E detrended Hi-C map.

    @@ -528,7 +497,7 @@

    autocorr_hic ## `HiCExperiment` object with 471,364 contacts over 407 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "II" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 2000 @@ -600,7 +569,7 @@

    hic2 ## `HiCExperiment` object with 168,785 contacts over 150 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "II:400,000-700,000" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 2000 diff --git a/matrix-centric_files/figure-html/unnamed-chunk-10-1.png b/matrix-centric_files/figure-html/unnamed-chunk-10-1.png index 7039b43726a90da90299e93de850a4739c40b49f..e1c7347090638a084b5cb435ed89826fc3eca649 100644 GIT binary patch delta 26618 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�{SeU+7yGn%_@pv`{c#@OrE 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 delta 26534 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 diff --git a/matrix-centric_files/figure-html/unnamed-chunk-13-1.png b/matrix-centric_files/figure-html/unnamed-chunk-13-1.png index 8671b5c390d221325a1fd5ca87d00598ec38ece8..101686ac0364e0dd6231dce38c374e34598fab3b 100644 GIT binary patch delta 16105 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 delta 16035 zcma)jcRba9|MzJKsmuuBYlH}8hK!6tBqMv2y=7;9C@N%yICfS^hwMF4LT2_}W$)~L zzmED|*Y|hd*LC0b`J>K*6L9%mOl?Z>x|Ut{g{U^ad<^Hy zQ_t1o`m*%*h_B+jY|NVHT-`Mk`rLH!-b#2V2G; zY0b41XnYSUlPyw5FZGc>@6cKaws1JhFM)><;pHf2i(M8Z3YO9k))z(y)An`EaWQ;r zXNN7G8AT8u#^t||eng5Y6}}-s2%is+wiAE(;QoF(eJr&4#P6qTsOS^e7qs!0hAAWW zd2RVK@Le{FWkOtpzqCEOK=`vjP2d-Qg@W=_)(*?k_gd(u|DP)P*l> z5_lBNReweqv{WsP8dLJo3_P&+pVN6-ljhgRl^4({RosEfNN_x3=oxP6O zQy9NFu|jcX)z;B}>-h@1?Uk_0w)@A!1QEX{RKqu%8dQe+Y?O(E-n*KalVZkBrneIn zJQK)2k7W4D6||idJa}^QXIS@f967z#pvdN0D$?X}8U~ajfz0SJxP4!v5wJW^T`H1{Gp-h~CLto|RhdX-(07SvyxEQiHqx!MDe#L+&z;qEcY(YClcM!sOni zMYDkP7t0!2Q-_q}WQzg!@~at~Ro$l)GxP7dPi&cL6=dz-If2r<^8efl4Ik@`G+P-RM9h-sjD*>JUKbUk8tRyX*2CrFbH?KS#?6e46H;F^FX*mE#9n&u z#d(R1FS{gqb2r>(G;(&GZ^DLO#Oqt;9=ole%l^%;<;pm=#{`7EN| z`&U)}-d0!(H`MPnfu|y<$)mD&BvT-*L0?v|)KWELAlvk6;Q2t3e!rk%2B{}Q@VT`f zNppMkV#rpPR_MP`AEQOjT`u(BS9dnYYwjZ_0Fl6Smd{OTa`Y!j!>&;VkMZ7^`_5#u| zREx~UJB6cdCglqFwoZtE0q2yHw7=A>vU7Mh@2ePYz5U9#*4dbJxr0(iEy+7|aH<~n ziF)pGyMEJ*Y#xlBrsj>JS{rBHbF1nm=Chp;3`66)sCZVzsar5iNHe&78R)b`@7fop zo+>Y82zVF6_|`n8>_I{$hCYm%|GAyIY|rYsyo}(Y(u8*c*$zl)SkxeYVuXhXisbR{XWq0Z{2RZYiW7PZE-&L2S#-U(?8#DyzWT5M zd38xk`t9BLohh+Hb2GEY(`|1kNT^Y$y-#hv$@$&;?OILppJUJ7jiK7kYuzR-_fvag znH@nC)BeL{=*Am#de;K4?RfKax8AFuz2WhM5c@{w0X zkn7MXy3btK61G1^*3}~9+)uELkCX06wt$=&G6)wYmo9K1)ABJ_)aem2l)%lX8<~G! zd+OLI>V8V zsDct`m*~gFeHIJNw&kWN}&@bC)xzN9e!+>1${>0A9tgl{d+W(fC}XDBPLca>MqQxNCqu5L7k zJoeFiM2IHRv>kTaW%h(OPqvI{93f3hE}3d*WW8p~SNS!*yk&ji@okK2y>`J}K=enyRuXBv0ql zK>1;Wz?$KKzJ*kImXzn?xiMnN_p(*nECG6SCq(YzbRBlRw_QC*kU&%03#56zERIz$ zK0Da_RZj1?ZJmC>q6JO1Bgs^hYT=9ed=fX*^r>Y$5l2Rs#X-#qw*rYb(LAQX;YfIg zy1r+DWe?{Vb6Q&3K#?s)R!5QT$g^k9phWCk*do8tA$vKtBbC+#$B(LLTI~@oZE4u& z=Y+A*(I2#nTI%ax5G7}4BlEpERR`t&gJ926E`#bCKG$$vg>-5Xv3in2%+_<>7 zD19&V5IQRAc1Ql(w^JD^Z;^y0rQgNrc#3JcO_!ISU$4?*n+w?{2(KWOIDY(iFs(>T zZ0y|9(uhSkM!SfLit5yJOd1pWrF#$xd*A(wZF5}xHL|QnrTBvOnuVA1tAjKt zcJkT&hj)7{w3_{WZIY)aZ&#WJ1$2sz78Gm+U(n#S6&tOPOnAMV@Qpd>tnZ`A9O^Ej z7LVQZMC8)@N!^Co2-W%12^+arpL0&bEsTx`QC0Fj#{v7XGdgbOcmUJw-rm3 zY~v*rx8s+7M$isn>l{?p`Yy%0r(SmWEjBY72|x5WARX3F=qmrl%f%_NYPvr+G(p3N zF-txlcl|yU@l=G_dztWu?CQgkxi3@aX4yvU|q7Vbc=INS~zjAh%n$ zt5PsY;R{)018sUZ#}o&$+vTTSD>jBO?yvhfDAIpC{*p+at)PG>aQQ9XShGEgqVMxb zb@C#mK>7*9TGuj#9OXzSGy10NT~-#e?<0!j6jnL5$nMV0{0};6Y8$l_`d46!Iiu!Y zRcmW&6JET2RaiJyb`;rLsr&l%78h5xZRK`4hS|x} z%b}NDvkL5Y&sLd=oLHD-`_$rRj#=cipuFIcS3AC~Rbak&D{#^yVnf4mK%1kCBsjHJ zBhEg?#;&slgQNd6Y5h0~6TH49vN_xKGyv6>f!&7h-R#Pp76si2U%!4mOU=Kvvs1Wk z=9!6jczTA=i5-%_G#F2uWoZL6Gv~+T+ z!z?B%Gczwgzw^E8+VuC_+}wwspXnAq8msXmkd~JA4V|B#FE790bKvRenVFesJ5<`$ z*%<+6Xl`x*9~aBLfP89VPcZ=jLO>uQQsKV2nB)HK+c&eA#g4ZjYRx-4J8+pC+J%o? z(o<7=dwUdH31w>*~gbgtV>((H*^Ak_tT_bxm7aTU{NCu<&lY z%kcM}9u{An;zyt0hXVuJnUm$NtCP*Kbv7m@CSKbUQSh1Py_k>$qVc&o_lY(7(204)g@!(w_!jvTmyq_x<467Z=E@lnM86h_MmY5= z%ZrP*HrJNs=5`yos^Wy4EIQvQwO%$lx-f6fCnsr3iErPobDHZG@!a9Pb`4fG5IV@i zrToKRjR+SG4$j%LRZ|K)KhvW0atjM>tgNJt|0eJv=eoMvM~>bHR?Kts+`s$ik;H)C zB;ktxdGUW``~R62VcYXGCmC|Ob}qXLKC|4kl@^oyM)LWsTen1`lv?721q{EwJSVWZ zysQCR%fpxP;X^7b8wZC%)H|WJ!_{@+){sT7*09{0utWDe400ZCEsw?WTPtU%V)!+y zyhOU5B_}73AUZ>X$KVa!JGgx1D|L+%{MD`Ci`#?G$&>D=>Za^UF^IF* z-_KOD-p}sJRF6fYq5d$MdAE`pSQ0&Q3;aYqcN`V=bP*pX^y{A1zC2TFD=SBQWBElvrrM!6BEWzR;H!`(A}W03aB6Ao)Z)hC`!6~u!BPV zg_4!JsoGT~E+`~)nv7V&YisQJYiVO+<5FCN5XBXD5Qsf!qXL_YLvX5ea*gome;(}b z($mw2vnYBkrd)(YVP?Kn99&c+u<9N~L_$gF3f&HxrP!uS0^j?r@16|AN#}oR+g9*- zY&~*b{ShMO?Bq05>NIz_iyUTSm>s5CA{!@kNv-b;5`4&WYQ|}57iujiD9}O>S>i&2 z+5murD;ggkKy3m9Q}bID!(Twxbh7gL@%8K^@>i9LynNH!M6Xh_@5y0|w}(reEa5ak z?ZP%O`Tm@kz&UxcxVZRBZS7FGE02&+X?prI*&mzpeLS!tReKX$V`F2Hk&&{pvTqd= zEA4(fgJv)8OLHB;-e_HIt=(oDZ+vw0^w=2vJt@2rhpBV)M(eX(Km)9BR8&-Gp5l5h z9`Q&=#(Bwdy`x8K#UXHnhKXO!$Sb|_$15d-9O8BF4phVN%mie@WPZYd%trPzD=UY4 zdo`k%byGfkc$xgpYk$XS1*hA%c&a2RX%u-%C|cj#jKN?E3Jbf_TwPtazXnmKq@?tb ztxZJfCy2N^!;QDSksPqr)7L+ojJ1tHqc2B(8*w0m`hX>X`#Rj45<`o?{sU97GdG{{ zK6ZlNX3)&se0zU$0C_$P^01 zY~PDRw4H5;Aul+5Eot<4}J-~0W+7QkHz@q>0!Le0z^1IckRxbTYkLA%%YHDgcrbtUU za_Cid&HeFX;F2}~QH6ztWiCt1d)tSt6J@J_er3)JJ|}QtwM-2R#upb40Q6rKay@w1 zIw8l;&!50+-u^9;y`rL`V8?du$@bWDI$o+~{exc=h0Hwh2@Pz1Ts#u>?n@P>Mn+`k z&!_Qq&vs=#KTB=$@Zrig_H2ZVoZSA7cExpeHntl#Zs;NVPK8vf#ZuPR7>PGBii(MX z4$N30N`6HH`dDaKn3B4>x{l7p3m57Osraols=W4#_4OO^{0KE~*VfkFiQ?R!&CJ$1 z@R!S+1`NlD?!39PjB3+u1ArM4H#awzlJZSUn`n*|$bA1kx||ge5sAO-WN)tpptC9n z=*~o<04NT{2S+Qi!3Ypgg_Vp~;caT_*4EbE@@GQppz*OWB^{k6kKmUt$^4}PDY%B= zyw3OKDagyS1_(J$6Df2oE-t=#^M+S}f`XzI%~RLiy#cLPG2zC;0N@5XIy%lv!xc_* zYAh@WOOD3g@|a{yIvhbm1B2e2U%!6g(MNIVXT5v(moIEGAoT{E0@wx&U`9s94D?{F zTbJ4n0pTU^T<0)F&QPxgwWo75ZaB|tq({De`!*%T5Ke8%?GSEmZfF@7FJ3fhj=8U= z=QUP?Q=%j4wYTNmnxMv{rIwB8DJZEve!K;hcCgb^MIym()mu$=&1FwQQW9iHrTv5) zH8nLLxwAI@#f-(9HhsB%ME0wb3j8fGF)>i#Gcz-_b#+BM6+DWm%&!nK3a`W6@CjG#4*E zJ4X}q>XrTOhV>%OMtP;Mi;Ih`?UKNVM_y_wlbG0Hq`Dq)U@ZVC2iNHG@*|1*4f3xq zDWTL`&#dWW8L2&fTwGAV=c1@hA@A(WPyciD(^ISFM6VrxqF)EQO9c8Ryb8#Am%4IB z{>P7@B}}v;h})NW1lEu>K zW;4^%(}C~z(CdZWUN&tFvu{O zeB;K~&bwS39LC5BfMhH1hrx?n*RMwtB}Z0w@KzW#kl^Ct7E(Fr=jZ0W>N8s0NEC7k zu;E&u6!j>UOEU;Kefsp;`Z{`Kdhp%Jo$Rcv*K%oq0H&7Q0;(Yw1tmHV(19#P;ojaT z9-h2s&rX@}aC5g04wet)y*-bwuBnL*3nSi~1{tX5Hgjomb-=cYhL*O4JS{bqNP_IN z-=oaJ;5GCUBl|b64-Ph~@|^Nx%rHVr&Sju^ac5VG?qfJd>9w zI|@+Imqjb)Wo2Pe>WnOC9qqj_H>H4ZyWA*p=rXmqXk%<#TWHW;1MR<^gYyBik8NZy zetEDuw~G|!WF>~+R)(sOkkC0Q-s$$VJL~J~>e+h6li!;XM6{F6D|8gu484*|)Aw9I zzdv&4iEIeE{>S)uuNssjF})FNKn(@U)A*Ucq8b~&eM5RhZimoLsO5e9_;{&eGe5ZW z-MjjRhK9kxJwW8+#HZtdf$FtZc&NUz}0D`EoMGmU0t@r37aJ@}ap1T{@ zc&vcSdu;zQp5!8+3c6K%AJM+u@AFqlW}7W=`lje>moHy#;`wRKSArZ?b}KSCH!tW_ zxTU41dmZj?-n@B}&STl9s!FVge)F0k0jL+`5O`97yC(K{G&Ozba=4RF=W-iwWqsXP zyRWa0SR!99wXW+I#X~bQGwsNNX|GE~X&8cZ*e`%$VA?6j?GR`p8*6KE+{OVVC4vrN z`CW1us+H^A+CDx$@aA1qtSl_giAacvKP}=D5EzQ)yW5dS#Kp%~?Jky`z&*FNG&0iD z6IG%)G)ru!SfHHoGBD7=$q5eN3^cyo%_T0PH_P;MK=IDoR_$*9AUIvtDzTrK>3CbU z2l@lLilXQ?6A#ZS>^E%u@lSIXPN5truNXjbAR=pLcWrF%wCPz&?$n_|z&hv+2BJ}~ zUn`TC$KO-59cjEnPfWAmC1*iNm|LiWN&e(tSLPqfwri! zn^|&ezTlPOQwL9RJUq~iLLPEliuR-9!$v5tHX`ulN?_>EwlrgjvoM*fHBQ*41YHB1NyckLO ztZuK}U-|%#9y|rHgRLJy)B6q)sW28)YO`qn%Y2$!`+cXW?!8O zw@4y;&@ymGB9E7=dwZh?KzMSjz8MM(?;|B5630VdefT6YvTI{uV8nHbMncBPiEr~~ zXJ_Zf!-pUNxHLY(BICko`~IBHtNugHUqoY_87esEN^}Km2CpLr9+{b5`C4nk?n`z8 zbx06(PZfeNClo#bhIiCJ!wJGC!&7EuM&}Et@B_E+ z)PY^qw>Jfaap}?}c&?s_bisOxii!d&cXn~<>FGI4Jlv+6eEmV3eUjWJ^LGE(Uz)Hl zSy@?4_&quPuV21=2|IP{#Hn)Fn5M?h8d@ViTEz~njE%b%jW3hz51Y~s&`8uZ=AIDp zxKsp{TO~gdie06iVEp!y`-92 zH+yzDx9hK;A3j`}+%>?Hx^Da}qVQbF5RWY0_IM!Isk2m_vzNZ-zDrJK5EC1zt9u@c zroM0iiH?rOJ4uKdI!pTo7v-JsrJ+HVIh^Lkp8%`({yiHV9i46r&&igAM@)K%o}QbV8~6_oH$gjr_VSlXE-xiDv=^_zF{a$3OG} z?g6|+q8<#lzV9ycy`MaYimwAq>C#Gd<6tmbF;z~@+y$z0Aur%a0%WTR}ui) zdCqVMneZg!l{Bxz_bA{<2ZEguu$^!+)tGa2gUt)vBYiN0)aj;{XGTe zsQO(Xm`h@T#adZe0b1$x>!+-^cr~~~z#`~L{G&(8fT9DXvbDF*Eh{Ti`wV-tsM<>} z`Rs~L@l_C=<>h-I+C*W+Y;3Y*n7Da)J1xwNj8xUsK)MJTe8C%gK2=d(9(+-dgoZ{0 zHunco7s5kemZQqnwYBo&>C>lJt0y|z%-Xubai$%Ifc#Mk$%BUvfnEkgM_=%hASNQZ zr>dH7_v03<(PG5BGk#n}XebdzrkKT{E$JpPF>$6E=KY5cYs<^Uk5>#VEG*>ZU&=5U zFk5BomKCO_f32^FrY6}WH4d-?g`JOd&AQ_Bk>_aWC@H=9ZkAu^(hdAkOVnX;Vq#)^ z{1^CgAUH9)WooeAaOCK~JBYZf(i@utz}K{?p{u*!XPVexlp7+tBeRw3!6|gZck%ab zj}e&6w5K(`<{&t82D-~Pe^M519-gX$9m{}ZUu{{YS88?k4v2&MRJ@B?mX4;D*6hN9 zCwN>S_)LVJR$p2eALoWP0t_tj^=lzvVc_xr8`pG+B>=I3z?!tgQBqO40T_cafLEbo zW2Yu3K?~G1H(P^l7`y;PU(bD^ps?kXw30QAeVOU6UlWaBqF{!-Yzxd_y&R^H76myu zHZHEjs}E~Hr5$d!B5)p_`TD|>^Y>GGRB zuPXcYP0nAcM&9-m%3JJA6O2W8i!m}XrXYR<6fM!$e(bEzojrRN{0zXIglmRh>A2ik ze5Yq-=-rpz2<;7NYHHHETooZ zfYK6xzXvu%L4$*;w*51*aYGSg54bw>o%HAa;WgG(;)R3H!Q=YN$icw@lpg|Tb~(wF)9LD$a9 zOf_+FacgU99i72E)cvp%S5 zB(H|%C@7u|1N#GdPSK+=32p5GKzSbF);Pf*OG{kg4L|L-!99y!bDJ~j zPFg!COA{lbM`is5mQh7TMgIN`A0K`Oa3VV`-8crOSh1~3+21~uVO=mdldJKIoueqMJK~$1|-8uX+8V5<+4cm+j9A} zx_bV!w42)wxNPVfaYVTfK0N`J1noWe{LF?3O1$UhZ&zLfD#OzWU>LHDlQ=lU5}*h# z5)nPHu-KV-oA}Jn54l#7qnwdy?)EL>aulcTX#xUmkU0qndiU<#^YRkykd=^-c=Tu) zE-(DmE0d<^uvf1D$|Fnz9=5~@f>kA8JA4KYuZ`{e;vQ(zeefs2T8WR1wKOy&B_mq{ zXGP)#I4dC`AsHFwjbmrdp0yn;{ckFN zoh`CUohJtUI62t>m^2_hG<4vzBP9+j9Ts0+5QCDUq@)B4>p(7HIsXQT1kgmlNPE~U zidG>Q$TMvXs5OwN2eS-PBy7|MZ+}|~`^XoH1CVq{8Xq5r02kx}{P^nSqO`P2+H55L zM%pJ{opHiF6g){pfY=hhG9BlCs>rvInN71!8LIGShy^($W%Y z68ad_hnlKt@4&#)NEI^v#osp+8#i`!`T6>O^aP-gWDYkrH9b67?q3)L+0`(NPYRJbJ1rRh3E`UM@rdu^bm4?0j8VPEe`|pdn4`QXS6%0GXH}vDj zs~924XJ@WmyCw+z7VemlfdRojZxr0!PO)ZF+?@??T|@>;|-_aG~tli zaATLv6y$OX&h78PSOdNS$UB+>TmXzZkm~sKATE7FXJ;*JLSYx|OUezUX#&rpga{Xp z#$v=3kxL|ehcN}YxeUHoZayh&H-3`d2(}0qZ&z2BX=_3}1X@spMn+8Aw$9BrZnZ$S zwiWQ~vS@$rEc}*L?s-ZlgtUBi<6nS>4OV)(gKaOraTjmqh^50$AJYbN;bTTdLrY5* zeEbXe`18MqL$(+nA@=sK8jPTW8f}6T3R%05hzOw353rJYvh^tfYeCzA7fs7!awa^t zw76J?=@r&~x)0j<{{2WOYqi6_`8OJ8N)t02+Ed{$^qrT6ifZ=9kMM+qmc8aDm&gN0 z9{&geEdhD0Nh=iG7lRex=fY~8$k<=UlEVL#`4(g7f8(Be`}=dVv!EVLS`$QUhs&Y4 z0+d0#2qBFRk->kZi0=It09L{H@DGNYb6Z>aQMdZ*S1$v!9>A8SCZvg&@s@_RcHXYj zl1?MwA7ntWadGpDi&^&_fs6^eEEboPSoePPDI2M+ohazh3k(PV_=y#CFflWm27n#^ z@gs^u+r-8OmK=-JT)bGE7AO3a4)&Ec95^PZ{6zd>EYQ00A{!OXqMBMU?A6PqO-48-vg=vgyG3n4h?&1l$Eb26-4Ck3DW>(DtKR}-b zX9Nx)yjfNjl7)|tKUhe^e%yQUX|j`s*Y9yIA#G#hG${r+60YBUP~rl9|IRyM(hhrr z@c3^tM*n{8pKP>khV1W{bFkZeR4<~bNj@O?Zo-YeS%evS+YXn|(HnY;RsM+}p$|X= z$t6S%(D$bcJC=fL04$kPGxw)7?s1gJ1*~F($Mk7v&s;($QPX{YzcdRxClMfX$;nTW z-_Zy=Uln#)=$}|vur@H@w(9-(?j5V2#Ha3&LhD!r+-g-eFyNsfr<%v~*%}(=S#+@# z_CuU`IpAA!^CjQG3U?O(d;1db+CaH*GcrEKkkinBZw)?y`b9RBBlDkzAI}cZ#=ub1 z-VXDZu^_p8Lw$XHM@L7Y;+Zd9YL33fczFqO~vS08yx%ZPG3h9yzh+t-1T0B?=&>eUOP z9@ptp)6AZh{5ieQsO;Em#k zkQ0_bBmn$%yo1ZEJ6M2|5XJ%sk*sIJog`BY_qhwRKu0(|_3o8a61#^uZ| zi!^1*ix->7J@?mpLTE)u7Tds{Y-)l`Suf>#`9{AbP-QU1mQqKLjpEcWt{w3&ltMkS{=v0sxzm@&nl3 z?A)C25)sV5{atTq(VZYOKBn;KO11ysnf!#(W_VlyEF*2 zozl`Bkn7+tD9FgXc=>Yv!wHl(#mV18bK+6<|G_?hKn|uRMBFz%N<$w9h-3)+Jp;AS z&sWIG!4b6mXm867h7O>41=bpfiB*9`A418Ko|Kdn7>tW5J^gzu66J_oCLjnr&#w06 z%NJI%0B>(^piclQfT>W_%4Fw>iF1I*0eObWCZNV(;(z_} zt$rXcib*o9p3%P?D1~IGI&KMp?NX$PXMJ@SFD=TUu;@rXgU}q1C{u z^$i8WxCq_{bZTf=pFVwp3j~-==Q zdQ~C^xucIQVt9xb`3WA4(!%rqZ)91%abHahywJ*2T^Gd~U*Z2L>NU z<^QQyxXph~VE>-U7;SxreE2XAaLXlh8s%;3{TsPTv;PChy;Ee}nCEaFg(Bp^4io(E zxo9ASs{cE{%wuOaVBujb2S`1ve)Iedhsl@V_sBDcH%84=lva(UB~$w!6Cd>whNBPJ%4fG}ufS z5@KNEu#tMM6OmxZj&b3j^vHfARhzmEGOunE5SU5RtVDtyhTv1LAC6CF= zTPZVJJ*QCd&re|sZ2Gm=&J2r$jD-bT-Zo5*w#M+ybs`xmyb4i~kwAxQzkK-^dE$4{ z6q62vQ)$XGAg}uvOm1$0`fKA|SX|@`Zvamznjuoo*wz+1jgT7&bV7>Z`)dyEleZ|q zqq~XsC;HkTBO{xho5Pw$yb9p_55S~?)kH)DnZyf;H%aFG4GrcEuPz}?UOpC()`!q^d{?KoK0((pFB?lNHL8CQ2 zJj!pSxGog*%r7i#E{(L3=~jAZW~iRR#m$QZXJ8Icf>qQo+*(n=Bm#N9M!juGT?WfiS)`Gk3UQ=>D%*=rp|%*sx74 zFt7vv$8P_SXcQi<>4K5AT7zq=eJw4)M9In-CtLihAGY%<;Q7CJ@jx5O4cOGpO-3AV z&Zj47kMO_rGAU_z$6G}h(-2}{7zg$a2O!U+S*y~cBqzsCRu-Q=6*)YxGKOnp=BPpr zMd_tDqw=KxrsCYO;8B_c1_TD;(}N?eB}quhE%m@r_sLREHl0fc@ZO{(Zz5$?RWeFS z2rRnV+O9qt6~_*9#3BUhz>dxOq(1$U{W2)1WPhN)f7ad`)wX^W_egb@W&=w! zGBJTDAQ2`~W;-(g+h8Ecmk6YR1Rl>y>LCD$iFdwgr0Zjfusf-_WA;LmJdR1QFr|oWUTf;sjxG_}6^TTl&CoaUh29*=I>VFRoX>7gW5@WCVqq>D zte0qLmLUHj6$=j!cL46;>w8k7KIta%6u5;NM(e(&=FHfb9n3#LkONk4n2gbX;q)Wb z)zz;hL5F}^1n>}Z{l)axU!xG7!SoH0zZ7`>V8~eq-NoyJ@hkW-d>&-`+Gio#4x$qi zy?!0kO`X5LKfn{&RNSK|2F*mq75H-)w(d>Zdi$@O_cjxt$hXb%S8c~046P)0R z)fQoBmsdDA);Bh=(+OHyR4%WNp&S`?^EHlYr8*B{T`DoJa;S8ee$LFaw72KhhPzq= zqZkY>StgRn_$jKOXB%KjKR%ce@&+GQrqRG4_E#AC;f0qy}Z zVyAtBgH49*AwdfIJ;n!bD5QJy<|i;fLt|rMVAv8YV~+k}yA+ta*&IQ*BIWSup*hOk zy$d22;pgFTzxnC7_#Di`V(&Al53H}LCNyJIBj7(YK^RCVPJ{e&b!{y|F758!yRZVh z3Ou`A7V9y5mKSMgY7KG<3Y_lUYlB{`wQ%@92fwDF*qRRh_OcxD?IEff9v%iY2wWVb zB%;hp*5nnF4$Qb&i(BV%Kq7BG;w<>Y`0iX6huKa==_L72F`c1+wf<*2T_)6HWJ z;4Sdzv7Y-RcV&a11Y1{Ne4Dd}gmb9i`N=|G{E0ChuyP>-l38LAO4;YuD1Pv!N8~? zSOa`i&6e2}CbqWFwY<`&Au5qednM~nsgLZh19y)`T4B`7Q1k|jL_wY{uiQMmZvta# zkr5G6w{OG9H@ADLat1^quvrjTi_kEZd+oacDU*@GD>H@BBX0B+Vd1jELbWtyJ4T2; z?kXspUkp81x`N_hiE*~5EFy_qJoS2TocJNfhm%~-rnMW z>8)HenzF1(8)it1jEsPnKKPY=vUB|J6<549?7CC}-SF6vf|Z^_PYE$wUp$dxFD zhzba(Gm$_DQnk-Of(4I|+Cwg&yQo=#~ zwXy=%RaoN$NER6LZaVl^>$FhSik}}W33sL0hba+8MuZW*6@lKjC=lZ3@BZ}Z4U8N@ ztX1K%L`(lu3^L0icFg^0%6}MUSig+sh6}2#fweTqnC0lYlW@VC5dmojvutGtgD{QB zEFXPON$ERGFj7!cqi#_A>52zC)ed}HwcaP#1+5dY(gXyHZ&a51#xl0J;Y0 diff --git a/matrix-centric_files/figure-html/unnamed-chunk-16-1.png b/matrix-centric_files/figure-html/unnamed-chunk-16-1.png index b4a86b1e74824d5f4f434d5b62b33f40b60844ce..2973d81e404fa3914fcd9a1e7548ed499616af26 100644 GIT binary patch delta 24269 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�OP-Ks36 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 delta 24636 zcmZsD1yoh*_w7NXM359Eq(NF51SvsUx=T=`TRJufD4`-mIZ zec_SEm8~)$UY+>fw}fwB?!3uCDC;Nc-Tk9Unsrer%j`{{wj%Ln?07pTdW*pZi()t8 zyeU}iOxv01pX178_9V5A>^=IqIzv^!KD&Y+9qM@lnnbA%I?Z*5KAXs__4t#F$mYDJ zPiapF%U;xHZ*kq8D@e6lnHjg}U30J+WSz|wbh~TAD6QS>Cxr5{S)vWu}Un5 za+{q?utrI-&M9%AS#DpEw#Gvx)%ttXeq$NcDK{r>CT$L@*-tlbcz)1(OeTjoakg)S z+ZNJr2XurPr{Upx4|~0RCGKg%+@~qYs%0oImbS&RB&>5hMxgdRz|e`a+!fv8%IkMb z9Sqqr9=jAt75Iw+?=){jTeXjjO&1mI^c~;kDiU(}-n^)p`=*D;wPkWHorcJ1q26V*NkPBez`j0Re_YEY zXMC+_F~3P(n1A}itOzs=wBPEYzJv=n&eG{Lv=Gk)J-ujqHxafNU&*5v-+atoL zvG;dx2>fk4+xYsBme#02Ul=Ju!mUmXZj9tQxh_8Bl^Svt?DN=VaN{C*={{@Ao;6hO zw`Fybh8?(FdPs^8+pMBt;h7Y$T=$o@KG_Bb`=(H|9!z>nVd z1g+m?CsyW56r+bc`o<2aKXi)OflA8HL z9J|AHDixU7JHr$6=c1z>-;CZS>2wJRu}R-N?s{uVR-i6mm~!6RV-*240e)Xlknwru(IaMO_Q<%96 z?Kl5%WoPKX;Lv_y8_UD6L~4Q(r0b71Yf-C_DewF?*9SgzzKSpIZw>J49Jz%A&Xf{1 z+luS)DS4C{c##J6U5mwug}J60dBtlNBI+TkcXQk8UH77 zRN8|sfNu_ErA?jONs}t|#F%%K70ldRKcyKSwsp#ly4RRLScz?Y9kZfff)#ID6DQeq z>)}Rfb3vW=(z$@h=X~T(M`(@A?D`U~07jPfT1XWB$h#yHw+dBH`b>uA?;D7?2^)t_ za#9FNH$lOEK904Wb>Rb1m6E!l@eil*A*_v)<&OvHz1bW-J*9u&JXUd0=k~sQ-sE{k zrnxb+@Lc~iKb*0WJ=@4oDa7`(xrxs6wafab&eTyZ{ z`TCo;Uj3is$7pHjk{a;LFhrTOs4XOHG0`Nn@SJY$eX4xX#f(b#AV%GO zf$lHQEB6kqXDp2X+25xXpd^v~tdq${w#X4Wr~1uprD^K;x!l4XJ9+k+vkBKUx;%=K zqNCUMZCBgNEJkXq9b=iUwbVQkA*aE#>77Mao#>fZo2GmaKrFd4P5SI9+FPv&!s%b} z&R7HmpfD`DgzFW{tN1nz%mm*|hCHvdZe(y;!LQl7R)MH(@d_y>G_btWVBHJa zVzuH6cv{SaPmCtz;CI!Z&jdx#=MnX1#pIi>nsG*UPN=Vt(@m@azdszNv$AVarjs!h zca?s*6O>2s`QG9BRx84K%kB8EjPc#rRkL#eY^=8(2XPvXeiU^CNwB&s}UY))D9 zQ*36Up)Ab5C6exebwH#W0Tq z(7D^Hw@~^@IT*>)y8?CRa`+r-Io)|xyl5d~9%ub8@3_w)mkKtB`U+P+ePVQvo>qOx zqk+~)uXOr7NBx{`elk}-&A)n2VnmC8uw*Tx?ld;HlM?k_XX=s!Rb4tKJ=3CQqPEug zxU|QYr8yPH4Q15?EMAx4yU{0`<#~DO{X4sEBq;13O0(PB<=G3GT0ef6`&d;C51@$_ z|LB+tZ_hWLLoA-kvvXuGmPTd%jry{P>es=QdEF_@tdZXr*NIIiD40_byHI2AJZOe8 zq|Xy5j*1K1ieW8(_v+VmRWo{~1?&2Bb%QQqDIwlVEINAW*(9mX9NFpqA^zynG1|{H z)pI3dL{UO=@*mabnd2-RNr%c6$Xr&ZR4DyEKdyMDQH7Mph2Zq6x7$yg+l&kkhe*FK zE90Ap+Sz%gkXKhXWAKodhX>{1?Y&w&ma9fTM?5+)K5l4aq>^$sTf0C}Q86$ukmCB% zd%|11NJqb&jWe|YZU5*>L#Z{tg;}5fk3GyUoqq&MGaB=-Q11-1i``oWhAU&M=Kluz zc)>f@36aO&4})hLtodguS9-U;;4|utcf2t#?>XyMLYJ?LqtFK;+WC=OE%(b)B=f0 zlwrz~H__7fiyQ2cXN>ATluF@F_hheWIsJ%^+eC_uO&xdgYN{42;@r}P#~wUsx^}os zW<>Q_auX$|qEewbjQUfSPa;ra_rkrk(A}^4WGG>n+K$3ID<_A#CLubq!0=87_q}_* z`xEnS%gd;}v@S1~POc5kxaH+#46-gf<*B*PPab@IE!ZkD);WoIe4SO9*gD(xb_)0u zdZh$m$Sa)R-KF^T>sP~=_i}+l!|LDrRuOCs4HPw;u&m4KF{wn9^eGz3_IvYvg{MGQLAt}m0UCH}^&$*0e;#g!+J?Kb7Hs4@-S3Du7dY!|tM`<_uY)DtD-l2jLV+Zf#h8}+pKxwYjY>+FdM zs&dC@w^9mx9;o2Zq@Ix;YCZNuDmWYUME-AV!`R z{hrWD&%P6@GhwNk@^YBaOb4a9^s5iI$2vWa;ms*ErlHp*6t|VUA}1ORi<6}QPMlV8 zcSb0+8ZmDO!#i1qPThy^rgE~GRh@BAwv*5ArnHGjdE%E!kQBb`tdUDVTitV{Qo!8< zvLBNF%HwJlIU~2-o5D=K1#D6D&{%{_h$8<7?YjhH!|)G&s*^9R9-FP-XX{foD>xWS}A#0C{I zb%fs{LL2=&B+?N@grkoaPQ*wJ6S@qC0ihO)-Mk`6k!9CS zl1WLc5`p5kTl%5Nymo!~!g;qdM#mX)`QLvDkZX`ks&8RFYsaYlcyF5mX?XSd%RGs* zs=~ZBY0ey@oymaVJ@mYggb>R_ePn*4gJpiSCU4X*J8OS+^zqBwq?aM6bkPOgSULk@ z`R{w?CR8yViQ6(OVRIPG3JOA(u0%#_Mt_*yW(&!~7G=DGGoY&FocKVIPd`CEV?j+@ z9$PXvNlsd`S+bedMCQrm;FuT<&F2g(8MAqDbk~xSb1Sv=v@;g&d)GxeA0!|oS={_T zN-Cy{7HS@*d}n7zKANfS zc%vo|6OSlvetupl;f`seKU(I4o0Eap{TjYEH=~9to#tk~y&S7>K$f~vy2Z~a8(-j2 zSf894XDY^X2ETkcWE5d~V{vK);pZxrp%4_?yqzE`dd~cZOEW4tAt9k9oQ#5fXMexg zlUSd>6knn@b{t_a6=C^7zreWThu^GzyZVwut6!zCq&=1=UN=^V-N3ed()HJ2X8F9b}0+d070e zjiN1^r~op2m}j?IafandF{`>gCKRG)AeUmp?)Bj;>B>^Q<&K~+(a)S#$A_kG#XK6S z<&5k0&s4Lo{QYG~uQJP*J$M&Y;^{{%L+385LtYk(Z~}K$a8g z0~$(IeYZ&~fiJM?#zCsC+YF*o$YAFa;(gjWp=O+5jrI#=n26SOx#&G@3FF{Bn-Fbd ze&Oihoy-0)LSCC#x@C0sT8K*Y)-me$z%|o#B?sS2QZyPU8YbmOeV6_B#)sam8k((JSR?sD0s;Mq-d{goq3G?BHQnzvlds3Tt~hJBF&KSionV zfKIk3!S%OJ(Q?iGh8cD4I?+*5LQ-tyq^oXWq6?bY!7pCsg?xVNh-@tS_yr%G$b=R% zauXM*kSh9+`jotgv$jmcd>7g_5R+e4I{CVNDCetYhn}1gyNnOcfc0$^wG7(JxAW)O zr8P4d^*KmGX)qLS(>5CM|BX?1xcOs{AXVxkX=p!>3-LqrB=-Xbe`)g(t(cK*bu4TA z#VPCQ#(>Wj-ETremq(D#777aOaU2GiS8velOd{u}`Ys5fswSdWP9&#Pzc(0 z{Pc&}&<`SSMdTMmOSltPY;2M33vd^Ur&1Nr1UegiBsZrmtp zmEZ@8#W@oWb84&7zKhh;+7I%wtD23~TpoU9o}Dd{@>V1kJjO&`T`L-kjWG*UER*Uq zsWUiH_$Av%Zqa;>(Ks^1wW)9kRU;sVxqjkW)7JU$sg2&gQybgIHdf7>hgFpx1qA+* zs0Xa8*2eNI0+Ei_&6jO9sCRgQ=(Nu4) zmpxiP|0Yk4?(^qZL_`=}H8$qSL~RC7iMo7|t%8Qfl^lUHGeW{pIT^o?5ANfZ@|Kh1 zp(1qhc`UOGYf+6EdfT;QKhz&G*vwm6KV}}(cIMG*Z^6A)TvpK58K*yz#bg-gNO?_x zWx)o~v^KMU=vk!6sx>_NVXA&^e(hPg(%`6aWb{FNg5zG1FY-D1V?G;e5Q?uwh7LE} z#{Fl<75gxuOa4n%!FlDO`Ko)3&R}0Hk#c6c zVPfWXb{P+p*%I}Mc7d*KE^JmLmopsx0f?G;e!@BOSoKjEg z9TZ6_P25E2EGgPop;_#ft$1W-#1Yw=MmR8WM}-$sIFi;c;<&iPl{h5b~jVE zX`N^Yw>eScn7Ma%z4li3WI0kqR8EezoY`IW(>{Ie=o|9AD_yii)62z2LmDXC((yMA{Txr52z775o_*S%XD83{>npk7G zL5N~_LWRn*e=aTg?j0hq zW($)Mo3lJasD0Y)y4?99^?PckPy|)fTPl|t*-U8v&fqW>nK>TY=(`c4q?K=1U6l$M zex1u2c|=d%u>Hw3+1<(EZqma5y~n7_L1D_FI?p&VRwqS1?9XW!KR?0M!XlhYjmd;z! zKT7;3uRSlKPm6oeJU2UiZWZx*u8{g`P#GkTkoqpwwpW*!dBrxf#yezL)j-&3ul9^=DeKf5j&I4p}cx zxprPa(434a zN_l3ne5<;8WPr1xYD0uKcNgdUna`g_uI4)ys;Z87$pVGHGBQil>$>q?MR`vCC(#~X zPV-B;J07TyJ~TvI-g+92nifvJKAzj&kL*flx%0X3DimvRc)lHk7cUjlx^dWyU$zok znu#wZN#MVJ_iEYBT?PTw+AX>Dt(v!^66`N|0#y}f1<(gH>kf*@_5Cm;w6Jb@36g6L z(L{aC!qF6-j+Ju%={PaYfNDOQ;p7v-Ihm5$yd@DXiAm+5o+z_vBJF$kkKfN%vB-5s zjYKML&v~wv6?baO4bPZK{@;x{+zwZ!vZW6l^O@U=)gL}kDyVA~I=?z^{I=TP+H~>E zv0D0TVm`jl4?C3O%KdjoqK0gnBuZ2>C)e9GBHfd=$Y*u==Oz1X!b^FkM`r#6tpHVU}8jq=&t6?Kd9`t{<^Aaj5D~Nu6|p}sMD8M#hkZ175UhrXQrv=ln3qY?HTu9u5`Q9 zxNjOuOE({HHcXxN)*xogDyb(x_!~~Pem?EI84(k^w3R0-yje|@aWB2D9+x~jxASdv!PAYv z#}O|RI|_aZqj0&}3?sd-tQvNexuzVuc3SrS63VGqN5NqH7;n(d z)Y#pPGA1XT@8)ars5|n>pJe8FFDD*1Zlk8Rp6=c~DKBbn54@g3pr}a4`?7q-&g5)V zo1n=PFTZ|+o@f6nvh0c)ZSY%6dN#e8I@_V#=+r#-b?S8FnAYKni^_NemXPjI&q+ZU zO{mS;w0%o?(c2^!<*6W6+!h>1Y?(poPdL&WR+Y8*j%`Qi{*I?M5ABJB4gA&fd;c)T zqMFwyF;N5eV#b4fwcabQ512?uzcYFqlNI?v%k%QVs)6YwHo`d4+!fBZHSdVsW4ENgzR|MSl=-d-6etTW`ak14}y zA~XfkIT0-XZC9$9?Xh$mdmPv{2!wiu)S)bT8zrD^2tnrFkSSXQ9!hU%g#mI>k?#P7*IDR;sbWLqOQ`^$ROG{7v&fDS3>mQiod_&NBzAarVykvzl%(5uJq%Xn`JxgUF;^U&bxW+ z=&I$Uc$WIyC@Hyt8z(hmX#P6)HE`^S%S5FqQL0xA1Dh%1D>SrN2#sr`HYA^fWj&#} zNlxm)flbppJ5v`=^}X3)2~iI33s0O+_@e)Hw5#80 zFY6*$ssEhVKc6waREXaFKR?ZdHW*-Wan=`4Pd%2{b}`?hgydw0@yg!xwy`nq(K4%U zM%G0Z)Bia}Li~V=_-Pr)w%@;h4;g#gP1XAby~V)2F1neXkRx+ai~i`pe$kZtHU|gN zIXLJB)+cIXqDIhdZ5Z^O*u^J<|JOwsn-PUd9}wKQcpUfynx?V}1pW6}FJ|}WsH7ck zFIkwI6G{yh8N{ciKExiWa{7mco^6%xR7RIvaJdl<~hDS$@tDMb25W6I3T92ks&f${kJ8@ti6yp)uQF^7hf$Vj!cb@GwH zao4TFoF$zXXon40z$>V1Z{$;iltn46ey`J|ZM5c1x$eeIr} zBdeP7Xp*cD_4gLM-*HV(*_Q_9P#ln4sXdW{8y2uduhXvokW_fBk?L zO8eJ9EO6yq)`m;A7du6OX+z_GsK@||hK_D_XZhFJ*;)4;#}5H#0WQ;N%GX~`)VO!2 zhzxn8q^Hx&Y#O0}ypPp+?{_8(rg< z3>F^l{8F(oFrROW8hiaKLU@`KLXWEiy7vMn*|-27);%lGe_Qw=79QW>q- zX&!%EU#O)N6s$G{OWMNAHX~^4UTWQBa_yqS`e$fY8@a zSLZaTAJ38}MomsmLd@NBo|m(<%#FMVw%L|&2!{R5DX#dRXyA|*>Xy*)@Tg~~vYXV` zLYakKBpP&fa!M3(0!?NH%l%sVpgB;G=z(29Wo0GAzbx{jV#<##`iFM0v7L>LfdQfa z{5R%8J{joYi>o)^tKJS$^ZaMQMBOVKrZDfAHeC)}0GG+<*32EeeH99+i?sV4 zv6&siXLPrPVxVU%| zuq`O~;lqcp0@ZiPI1Oon-rYmIwGZ-pEn%MJB4r-DCf{8j)A1nDzQ;ozIcM76oUM0BOh=R3oUF=8{ zup7l5OA&N1h9$AJwVm{s!<$gHq#sjfjTLcQgR}Y6Xs(V)3!OKfa#qWUbc3JS}RGOpDf(}q=Xn5yUSK~e?m$iF**eQ>r>v-tun z15;B;?2&3$w(S1yZm6_QF?|535jVJ-Iy=|l7g}0cq#|o-Y9b=KFYxMVCpi}vSE5o} zbo6}|*Jsb(iMW5XH(2UU!*YbhDlBA2fk}~a*HypHYxg+@E+7<`6VOx7mo?8i?G`&m zt~T~$+y@vH1b9wV8qCvRHZAh^_lE!h^b~~O=Hz@x7kOc>4u3LDOicV9K@Eri$flSg z+f74+4p>Ydr1Vb62}IKQVK;(e*DsU1O_X}@nnG~nqFV4;yn)_jaj`>+&CQWtM_7l@ zRza(DUI^ptdjI}C0w5kP{T|2yd3VhnAFtl`GE-tJ->DH2){Z3ppHT0B7{v7TX3D}f zkmX=$XEKOMr#-^8I_dIqu`bLw=jV4j?8A?XiLmll={isr^;k z+uJbkNzU^`4vgl30-Y&{7+9~A6rY!Gmki~Qr(Rq;DK-h#rYyQcw}UR zPzv1ar%w!;UJeiI8bxXsEC_8tUSz~{rQRFs?|%mCq^GBcb?uhzRDE3zl9Tfwlbgsi zFi_BWV}vs|M>|-G@gZ(6+FZmBldg zofS0j8TUVo?H39v%FwB>n!$b!0CIb~_1654>hg~!4Y!DhN_~&_EU52n3!Pa}dFVH= z=@w~wdw5*E$s>(a3<7r&esjE1P`qL*&d;wkR8s4*^hTPlcXKW{I2i5D??w%UoQEl+ zg?hY3{4-USZf;-xXnBkx(~W5QIu$vttAp0%`nMI7lt{u`G(ISChqTKb!xx>ae0F~K zRwp%~52T2=t1F;iy0k-qgNLVen`B{Op=rqK*9ScVgCWFo=PF$vuWz{aVW~dLWt1s zL0D-Le^{YjYqC#00mW+fME>m7M(s{iyZ(g7=;&Pz4rQcDlKKGB5A_rVxhRq#sW{it z3BExEc8#^@Ou~2s?TH6p7?re!%WdNQFeoUJ_b0t0)bj_dkN4IK#(WJ7##Y>mSEd34 ziE974=%n3wCFC?4q|1&xR8YuQiHwdW{_X@4@q97aLG0)^JplINBGdRtmEUQ#A?MU5 zQ*_@yk6Zp__SdXcI+74&#A0cpp6W=EHg1Yrz?sEdHGBm|Y-T>c#a7Pj z?XMclRm*Ii&F{c~T71uIN63BSouuZ2(FUJGXDcg6n8&UI(6f1DZqE2@096J&S!aHB zw(q?RZlcnMW7b-Y&V$~9TcKS*cr;mK&uEVp;!U9NT$|aB5I?)!@u{=BTij*w72;?i zSuj9uQt;)Toy6NCz2EWddVM92zr(&?dE91WurOKYjVZ2HUAw@<#8gsJa=gDu&1czj z;obmdos#apv>qECezrQe-WEykY8(f#rhS`)|CWJhs0$Vi1A}x$TuqG#Dv)e>x!{bt z9on+i1-9vDIy|UYg>uK4Cgg(QYih2IRdf#w49NWy78XXuaT--y_5wJ;EK*qjI@ZHP zo&|_0kQtZ+goGIdhQ3U?yLP>@OE$l;WuFcf>LDk8zrUpRt9<+&-*gW~RehaZTvk0P zSEymD_Y+JzQtutFS4`Ohw)utuD!crd{#x8{<^|xMhWPG{055qDu@@a3o!{X?e6pZJJp>h$la;}uF+jxN1`Z7k4V8C7YD;Xk31nZzc|(m- zZZU^{dqX7>$F4``^H5otG3a*#M*f-b4?G^7f!6fx>9w`O^MQ$pd)(Z;G{7+s-2M5T zK!zZoNaJlqk(x;BqZ&Z7`KVCOz!Ni2NFHadCI|vvYIXT3Q&z#LmLG>UF=^jzExb zkpQ0>`t^&KiD?mD&0UJjv-ksqLV{yygZrDDoE#$Lwx;`9Pu!ZFr%h`Nw3d#}5H1-f zkV;V&7At^IKzd$(cm;I;G9@J?1t7*~^Ks(^=5|bN|NTzAI%zXEJNy1zb_hzqjtxFJ zglD?sfWg7q=k6e@FCF2VCP$a+zv@w5!NmoJ`)pH=#80a9^JiDm9dQZ^WPbPI5f3l# zZo`U&2>RQkq?MT&Q-avYz2J{ElF5Mg$f}X$gEz*nBY$I4(azk=Ob1dUCT5)33#bRo zu3X>u&$MK=y60Rgo>9(FoBo5nvagaWa@lQwwf{golfG?O4vWzRpofG*f-z zcnf6I-1M~SlKBrOB;pv|V2NqPQ%^wR+sAq6y}E5q)`8-H`uPr6R!W__Xk{C;U<(a^ zRnJaOzlD`wT-4Uq{xC&4gtU0sjXAry#R2y{#gJ52C+gk?CDG))d-vJzbT)X$e!TK8 zFoBg<+nbmU^W*oP-YC#1wg=+?O3I1`LkCjA#m4rlm?=_@ot-@_EDSo89v%muOuxan z#2!#Z^c&)E|3n()Kc+=T^cL58qqnCg6i~a7Qke<{7M8sGFY$r+-Kn32G}@tN#K6LG zp=8dwOm=cG7g1hhFeYJ$ZdP)!Wcvd&%lk*Wt6&ENcY_3h61+Bu6eRv#(+AkMdTVDsp2we4}K~zi(pxgyD1IB{_ zjoM2J3HhRCR z@+fej7cXDRK6vo->C^hHb~d;$5$`?r?@sD@{f}fcG>~5~PjktOn@v9S>l z9B7x@@17YT0mOaw%eez90LVeX!C>ET8CCc9_Wp%My}|qRm7nH=;o)I`SMQDSDurww zKE53w0^wv__&7MdX;DVZ^s)}HGnkRTsXG9=z;2P2kukThI6gj36LO*x5OCW-#;Yj5 z;}CxViK42h`NZ0~+I3aiH0~I@8i-K+F?|)*w$ZjHrNE?%v~3(GUHt&-R~~nvqoe!! z__Rh)7pvaB4)P}Y#|NcE9&jl@ml+8@5)lzG5Q+dAWa4+29UD6U+U}J}oQiaypxQaE z?$Y1ld6%UwMrP(?gwthbqicR^3IdP?cgE32ufk~HpFyqDGlk9jSgaFVmdlJ z{PBc`Hon}CFk90DXAf#WOEzF2Iu?FeX{ocjJM}%UX9@}mFi%fRObo2P+HF1Q?b{2H z?(Xg`D=Rz0Xv+V>z`Xtnl z6A^UYv3}J&{b)<{92m;c(NR)jB96neA?tFfUO4{g=_$lK;1w@&b^>+p)2BNoCQ}d% z^cRZR3sdiu-}yN(Xms65N7G#`>z`8B9)T$cOr`1PWND;>-azWaYgSE-JWbGRNU>y9iB>3oZX^;3>Y@zs? zRN7f;pT2V~_&^OdLmvTw;gFTv$F)c$P+shQ?Za~1u>W~ot}1%h~HW(G=lB@j_h&qFYg0FFc-HTomQ zn^gXC3}$uv@tT3%DS?6Lt9Abx=O;!)p; z`_Z`Nx3B~!H%6-uw2k3XHD|@$m88+}%w|%v!eJgqz;L1fO^J55WOpa% z-j){gzAX7B7b_H)UQ{pz5gs0H$O%q{uc6^PKMj~`zINpb7(JE)`2zqau?pt9oj|Dp zR+j6HD;)y}oZ&XD|2D`H3Fwg8yF*h`;-aFpU9FI70K=akE}&u==;|IE9-e|5Dy8=1 z2?Oms$nAk|&@rgnj#6u88n(8(p>2 zF7)lSe;OVg8cXZz_rStlqQbZ+XD8@(!=Gm6e?*%gzPkhIl7Xm`|JQmCsxMKuaL|lM@E`$Jfd>Ou^nvkDHl2?r1}>cfw!?SKnz021E8vBo z7caA*S7o$l6#oqK;EGPuM-rDvCx_Tl8j>XdCkg#!8j zZ3i5HQ57ikdCAGis?UygmO*wMz#ytE5Hg@wJIqb|g(0RlkQb(@FKTORV`4~5vnn2B zCPIq`Y6x<6XpvC{dmIoD0IXwmSU0oe8FLlS?kP|9{xaU?@W@e^TM#!5t7dBgIX({w( z{En7$Hjs%L^a~{UkEFH3zj3FryEh=-h92)K#U8yol%McPB3o&ME~|64Ma zf4OV{9UxPg-B&@LPlt&;01a4GxXzWofh9JZ_eC7ahK`A^E0nCJq5sPS2b%Jwyd0Tm zKpO6lbu~9XX$d2R9sq2dsf>!N>_4!=3p`?C3H(2F7%_e>nF4G|Uso51o#SM!Cm|sr zDJf}Z5^ia3 zN=f{SH@EJMf(rrH04MJP|5Y1~b|GC|M4=4a+-f?!EG(f*p6>4ZFG%@m1Qzqm{%I=4 zon!vHy$SJY@$vCMrQrL|6r-Y|Kw*4>yr1$rE&{}e=Q4@=@x-Xc&FG7*9+1pn&Vq=D z2&gEwwuSaZpc?^Cfu02JwU{~i_|$F`IDRwAX~o(?b{%TZZf8Rsg*==D&g$4LCCe1O zyE%o7eX)b=Yl;HJ`SVFB>>Yn$?pH}36&wnwizeyT)PI&nJOB>!?AZ>$2`vBp`}e`G zgUb8e$q-sN3W|#0If1V$X5D|=+xr;G4csFl%EW}}|N3?38qB|f8&jak3SV=89P#)& z3)Jn@$@=;K%Y;Rcv)Yes{r!A!t50|8J#Z0Sz?0-CM&>ZVf%pvdhm=hl5c4Jp5NJ+l zJ`4@HgW+)W6KJZ}?h3!lVh1#0@NbEFfb9T{q2AtJ-lrX(kS|{_dp^-E1~>gc7y5O)CT(dW+a%S`gbN52jL1S;~vxSPT zZo-{DJ1|8-k)L)WXP-f|R!n*+B1K*T_B8zbyUn4*V3rSrM@2`Y*^Yhbe1t8btE&sP z@hD8?gZzOK={|+{4uQ2g(-chYcaWi)VJg#s`)})6_lzR${GuLuvKUoA%R6cU$i{J* zz4~lp{1B|Ba(;dkf#Kd>EF#uiVQ;4V2C*cc3XFtdLiTtCvxIl$s;o^ov z(b}HjZNW!x={WfH4LvmW$6nI@%uS3_5ANt0S zqfoj*3qfIN+PYBr%Y7hsTgQ>{TBt8<+J!wPt2LYTK=0rFT!79_f`FYqVC|>zpFeHD zWp7%7O8^ZEuT??s;nuyoAQXXxf{c#oYi^bn7Z*=d`T{Sk1PlyTO7fdFod5u_WK;X@ z5c&fb)SOxc;X8PsNXyQyl6IgJGdI8nGVy|x`=1NA6A{|uHLqd@_-9N9 zb~@-rTTH5dFIfC)^2L0@w#t7lw*yx$Pjhei*LP??esOZ_{s~GDoA$zR{mTYS%H@CN zB2ud_G%sKj6h+_l@}X3B_Ku%nFk=Aq@1k}<6|9CE55c7cwk)rnz%R{TR1@}C}GnXFc{!Abucr4pg__oWvk~E zG+gx1)_IMMjp6VE*|*%Cox$qp)2eZtK`znGuZ?_0ZA{jQ0BwMVd6nTLPz7*#jLO^E zsZu22qY=d+`5JW)Zty|LOo2lGqc?- z4#RYCcT2U`ZocZu;^K8mN?R+dL(Tn2Pt0M;|9b`K0kNSqC(jTCn1_Cwl{M@Q0KM1F zg#gpE9Qrr`>}qy)_R^(G*E#h0K)M36yet8C^aF?ufpy9YYec^eg9auIe)j|f_JBuV z^gyGnt*s4ImZ=L=Ie4h}GAHIl{4*0`%=2H@z6RZ5Lw)_b;NVR}p`l~y>ghqJOW_}D z40M`NFIU4!RD8Tett2F8uoNK`Rnb3CwlFjE_m_(Jz3l14B_!nE9J2bf>~ax*+ue?v zllM^2_OE6PA^<51r}7~y3+3qQIzY-o5(YNH;P9J`_!`jSKsmvay#-h|Ki?0C27m&& zo>PI_;qvt#H08n*@O^U;TxU0fK6*cW`r)jpqeBVy7%mqDw77bq1!-yd`}Z&T>knQc zM;u^+*u%1bZ2+^wkRa|#N*!RSqz>ZW>BjkY`}uZqx}k5f`k~tnDriRnH^c%c4N<=n z4}h8n4_@5ywTBh}NTds;gNJAI`RVJwd%?>t;8>-Br{}#{R{`Y`P95fDaIy&zLPGGh z_xAUZBa!xtkUn=56BC1^0|i^n2t*F1KfZqb3N(-|QtsT97o1SA8Q8u%p_>0Gq#rGz zOg6oo>O6MDM4`wpU;K{={{Iyjv`Jd;*`4ky|K@P1*{>y783ZPl%pX7Ig+UT=(186y5C8dW6kFRh6!t^PK>Qu2nH`uJ?q z^p@qz+1rB)IL|RPM#C~mFY8g>ptlUb`h@TLwfaqPn0Db88A-yhg+$N(l}i8TArjOh zB-rHBXJ?gDQ>TkRiAuC+xBO0H-??n)ZBQGERqeZc)Eu?2d7*=bCW`XU=!+J!u(Fb` z&gw?~9-i1AFUN>M$prf!01T{9A79`5Qc@nGlQxF1sEz(4*RMZ){P;7#D_lP~Ubkc0 zLC0SYm%)}-P$;da5QmNdkW9ww;d66yaJ!nuQEq>~rc@h*5ST1H;LO451xuMi(~2k* ztY>;Ux_;|jD8rPL2qlzo0Ic7c?LU7)tCWI*;@G<6Pd<%57V3_s($Tw=6ezqc(~gAFe`Z;7+BN!i0n#m$K&lXTrz~ShZ^=IE;)H@y$3=Go(3w!$>NCE zwvFFVaZfP~)-6<{Dy=U*3Wa(k@s-L0g}NWSBMkrYN5i;SOtkw)l<=>{#;;Od=C*8t_$*sGsP_Anxo^N!59)WdR(f`{>+6 zzu&*g4ua+$5M(K-CJ?d5UYvi32pa$EJ>cB;UtHCzus1SMxonJoD+BAFBcX#fIfNtB zrv}e(bN`=Ou05RUbl)#!w5k~lZK;%5g(5NT_e-k`g)VZ-JsGze_sc^3G)Ra@C<&1z zOBiFXd z6a8v_7hEpgvFGK>d#7r-q7K@-xRk-=LhgsDE-U-u`SXO@K57JASXh|JYVFfd@FskH zW8>m9k-S5pL65&}G)$7!8{RKkWxHO#hV_K+IeqFBnaChPSw$AId{9wM%*;y6?*h(O zc_uFoIY>^JiOiXNr9%%FAs!einF`37)ZC*p6%-iVdMj{IU>m7dj z;lt6e^oio)Dd;GNJ0Q+to`8Dcxm7RE6otp51(v&FJ%q=L>L-t)8X{^S#O(y^;FAPP zQBMRg1`ZdlK}v^o#?LAS0mq?`M8(AkP&uIl-~`9K?omU-qn{Slai(#XFLM}pi3ir@DyXT zFf+@A-E2lKrRfvYw;YtW1)ew_x}B~U7^u250~NojstVheU*|Z82m0>@9v-Kyuy*4F zWq!`OGd~}Qr2?eIjPBuG2HV)AgP_-WZB$HcGZ(gnnpy=?b#k#FA)ROaaC_6A&twUbeLjOiU2X#sNV=8#zJGeulfk zM@KPuJosstg&T=x+R}3DeVHeQU2J~t%g1+cg=ggh-S0xbel8mA*$^#q2rFlI_X(f-%Z|`Ug}5V^B?V&E(<};1n^m5d7({1LX%b1%Du?roAEW<1 z@HiiMA#9lo#iT~q=;TQhDFln=19xIrODW)Xh-@JtemEy^cJ%teol`S2->hHXH^so& zp73}8e!18$=QOt`Yn_{m=iSK{bxlGbMwBlKL`$34uIjVrgf9RE{i0FcsQff6_32AJ zH|qV%e~+pA1K@#=po1a88=H8F#0@z_?jwgk2S`e1(h2-q(DBAcy18-R~;+CouL z5&iLf3_s3hNvP?gc$Jl}JJXQIeJYI5kz~+0SLY4Yfj$5QI$f2*nSwCKRTLSH)q4 zM)~aLD6}^;#0<|uZ>@q-gN1$hG7oJ4*`k^0X?Z23-ZJl8qrBT| z`(bG;Wn+K;?jY;!{V83n8uB?rI0TnyP-QbS?U2NrUXeko0>VgYcqc9{&OvZ+0B*$y z>>CNhYU#!K(}H$Ig>_ia_UK#Apm4>m8*jn{NSpHpJ4g~U*e@u zxR`KXlvP!2D*R$=`w-4~^ym@(*z&m;x-YacpP?2S)6>A zU$}4q6AX)So?`(@lAp%Clt$I(-bbb-TWf2>cuDD+8Qpnm*`KH5Mr~hg;M#y$3MF{s zwn3k+yF5xw9F)-W@3D571d|Ev10|!YnpjCyI0O3~M-zr$1EoKD`gEwISyTV$Q64Jw zdqu@KXnpypQ5bmC??mC_0MtSn^LjA7-c>tLx#l^;w`tZS>F3!#^ zTJtHkAu2!qesyJWP|G^k&^BhfkdT9H=Xf_!0Z|dzO;s>r@X^%Nt=y6Qz~@E8(g&0{ zd{gE`EQ}LHB_+8I`=v(Jednv%2_zGj25;l&)25l{y28cglF)!5LZf?-#xWvURRaDN z%yBWl`N*&k5+zhFrK<-#9Q?F>`*x5(OB0hEOPwbJaB2yILkAA5T}leMtD&WpkvB3l z#7pIbu%5N&utbuS)&2N9G%^9&KnAXS-*!JgKa#=8m4{4geS=x**q4TQ8`_v#J!Tcg z61wCes*9^@R^Y3MsxzplBV%KY@^;HEE#%b5si<7%rB_E^FtxCVrtHAR4IlynAPJTJ z^2^&PMpIK$eSN)w31XR>ZO`@n@yEk=Uc+q#v$K9oKgh>ErX3I-P%EJ54u34-nT(Vr^}W zgb@USEFvolbqBgkOpLy-FMG8QXmC_6ll`ADXDZ&3&;oh)C4^da1S5e3h%)qbm~%O&~8u}vG6z5gl(w@^atF& z9P-u{TCk(V5db0#N{^}p1OyCkvDQ)z)nZI$y7gfhKC+k5IgaVsC?NSg7CD?+L>uK@ zj7m9xZeShv_GS!U|B}0ZwLYRr?6{oUbuHvIFQ%HJJpph+O1?!-97~&j-TG&x^dl=J z#SSD9SYc*HGINCvct*HuolR@aAa?}NqRqpgw;XTBbaSsG!Fv{j8mnoqq$JW*S1by| z!j+Ykk-EU204nd7m%kqz%+1Y>jEpSlJPVly4HiG2k>7gsXfwLk+#G|4=Q5em{J?7^ zg&`=S2o)DUZ*48f%Cd)k3cT|860yb5&`={5Cl-KXupt4Da*SL`6X8E%U6}3JgpLNa zj(*Dnk*$J)0wM0*s;cF;Zk>Y6j@gG9x0Z$!1oU;^XT@lNqlP6%R!j20r!Np+jzjSR z2C1l6K}$R8TPXAz;7Ls|f4}yzI20MF-+R0M!fQ zYV#i;QhbjT38Y;_K62c5bKQK)4cLE5I}R74oe_jE6@(6*oe9Y8Lh>V@3}tyEIr)d` z$_pWp8%t~%a1R_Dp#SfRto?RF1lTRsRrf4(`7c}K90@At8l*cQ(7fNlaCY7kQwJXO zp;6?&1LA2}cMudog@!i;(PssM2SRCBO_)MdmDb?nDslsG3Tl*u5g z`yRjH*x-p%czyv{M?k*ybBx|wf5u=5_jS=(!0eDR?ix!V>EY(!Fwoy$d$0^%09ZE& zpMjp9ho7GfQXR-n46(q4VQ~EZ?&H;~SCIyRvImpfcWmWf`l0&YA-#pA<$4IN#N~EWpRNGo=BKTvTC9zQs)9oHIYY2hT4;1%YasIy?YR2EcUJ z50~an@BZ2*tSUHWJC@3o@viQLdq9;av9icO-#T{3at`=5O7BQ}H-W;Rh+u3lh3kwTB%b}&yXa`03WJDze z^hNkIP~0mk)9UPpnbpIJyTUOZy&U2NycyV%i_lH6)<>7_Pd+BK2gb~uQhD7t-j7hM z;M>C9FvMq;KQJ*d(IA%JAOR@81qS<#Mk#4&Vz?FctHsvv+V?b&psK26m_2vlw{;X12n2@|6#5=r zJK}og47xhH=QS2S@x|sTz}(`_QSfNy;T)sqCICMeh*XNdkI!Nu|5|r$RCR)4^Pp5y zw{Y*siW7%V7W7dSQPlX5COmtkygU$oG7z+o;#qUlt{nZ8q0++txe1OUwd$puhAcnO zDYo*D4i1ZxwLIbRw{PD@en94?ci9`LR|r8oe*6QPBzD>ZBIxt4oueqkymUm2f?c(}xFMuk8AtG3xlT(KYKzp%PbMhKcO}e~Qf%RFgEpe9kfw7 zBZS&!$9r(+abQHSMT>$Eu*I;j0|3mJD(f3puR6G|+D3+nS;L+urXf}v@gQyAddHR}=3fybvFD#ZTDw9E+P)U8ITb$KV z^hW~&1Gk>a`m1lMf{BXk>;sYlE8~Yq)S-lJ-hgv1_oD0U5#($YpSsBi2$0#<*fKlO zdz6@i43=*>4w19Jzm*+HiiKVG3UW{Sjyytmr@6W4#0`kq5XUsX`|dkg*(*}@jg3DR zo7)$^YHS2}_))``dufAW@mf@urZkoQp&`Z?@mhg9a#uFY`p#SGz)!(8TV zRfaJol~U3<`p6CYFdu z+x1J0j>77U_&oa^qa9(jeT(m;iTY>H&MhwzD%M`3uVlC*KmE2&cshiv4wI>0BSQ=k zA3h>t17}=Z#3dv)Y}oK|b{0XA(GPjQ>DNF84KP8R}$p zHGx9`);M-Tr(y!e{7i4Ec9yyeFR9L>Kp=q#K;QZfVg^2gkBEAN;~9uP;1wQ^w4_dH z{*j87R*V-Z1yNoq1n73xnF)0gh)%vXHZkeG?-|y!R`_e~n2}SxcBJ?*B&33mbX+OJ zSxFo>Ff}vl7bi8TP|a|XWG(X)nC|6^8XX-)_Gnjv9*)F}PfTdJw%s|R)=FU6;VxZ( zph9`OlIcAFz+`P@#ZXT-5aW-jdzwJXzC+&k*Fwqd&d2cc^I@TUW~kfPHUj`qDE|3^4dDR%$#TMCH*S6^I|KcO%*YwbUkVG8jdy!Zd(tpuvpzkjv=_iqL8Ag^Fq YSo hic ## `HiCExperiment` object with 10,801 contacts over 11 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "II:10,000-50,000" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 4000 @@ -366,32 +366,19 @@

    interactions(hic)
     ##  GInteractions object with 45 interactions and 4 metadata columns:
    -##         seqnames1     ranges1     seqnames2     ranges2 |   bin_id1   bin_id2
    -##             <Rle>   <IRanges>         <Rle>   <IRanges> | <numeric> <numeric>
    -##     [1]        II 12001-16000 ---        II 12001-16000 |        61        61
    -##     [2]        II 12001-16000 ---        II 16001-20000 |        61        62
    -##     [3]        II 12001-16000 ---        II 20001-24000 |        61        63
    -##     [4]        II 12001-16000 ---        II 24001-28000 |        61        64
    -##     [5]        II 12001-16000 ---        II 28001-32000 |        61        65
    -##     ...       ...         ... ...       ...         ... .       ...       ...
    -##    [41]        II 36001-40000 ---        II 40001-44000 |        67        68
    -##    [42]        II 36001-40000 ---        II 44001-48000 |        67        69
    -##    [43]        II 40001-44000 ---        II 40001-44000 |        68        68
    -##    [44]        II 40001-44000 ---        II 44001-48000 |        68        69
    -##    [45]        II 44001-48000 ---        II 44001-48000 |        69        69
    -##             count  balanced
    -##         <numeric> <numeric>
    -##     [1]       213  0.249303
    -##     [2]       673  0.449271
    -##     [3]       325  0.210001
    -##     [4]       137  0.125732
    -##     [5]        77  0.106917
    -##     ...       ...       ...
    -##    [41]       941  0.358860
    -##    [42]       275  0.114972
    -##    [43]       675  0.253868
    -##    [44]       497  0.204920
    -##    [45]       295  0.133344
    +##         seqnames1     ranges1     seqnames2     ranges2 |   bin_id1   bin_id2     count  balanced
    +##             <Rle>   <IRanges>         <Rle>   <IRanges> | <numeric> <numeric> <numeric> <numeric>
    +##     [1]        II 12001-16000 ---        II 12001-16000 |        61        61       213  0.249303
    +##     [2]        II 12001-16000 ---        II 16001-20000 |        61        62       673  0.449271
    +##     [3]        II 12001-16000 ---        II 20001-24000 |        61        63       325  0.210001
    +##     [4]        II 12001-16000 ---        II 24001-28000 |        61        64       137  0.125732
    +##     [5]        II 12001-16000 ---        II 28001-32000 |        61        65        77  0.106917
    +##     ...       ...         ... ...       ...         ... .       ...       ...       ...       ...
    +##    [41]        II 36001-40000 ---        II 40001-44000 |        67        68       941  0.358860
    +##    [42]        II 36001-40000 ---        II 44001-48000 |        67        69       275  0.114972
    +##    [43]        II 40001-44000 ---        II 40001-44000 |        68        68       675  0.253868
    +##    [44]        II 40001-44000 ---        II 44001-48000 |        68        69       497  0.204920
    +##    [45]        II 44001-48000 ---        II 44001-48000 |        69        69       295  0.133344
     ##    -------
     ##    regions: 11 ranges and 4 metadata columns
     ##    seqinfo: 16 sequences from an unspecified genome
    @@ -425,7 +412,7 @@

    cf <- CoolFile(coolf) cf ## CoolFile object -## .mcool file: /github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752 +## .mcool file: /github/home/.cache/R/ExperimentHub/1a92248c093f_7752 ## resolution: 1000 ## pairs file: ## metadata(0): @@ -435,7 +422,7 @@

    hic ## `HiCExperiment` object with 306,212 contacts over 257 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "II:300,001-813,184" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 2000 @@ -492,7 +479,7 @@

    import(cf, focus = 'II:300001-800000', resolution = 2000)
     ##  `HiCExperiment` object with 301,018 contacts over 250 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "II:300,001-800,000" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 2000 
    @@ -509,7 +496,7 @@ 

    import(cf, focus = 'II:300001-400000|II:600001-700000', resolution = 2000)
     ##  `HiCExperiment` object with 402 contacts over 100 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "II:300001-400000|II:600001-700000" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 2000 
    @@ -526,7 +513,7 @@ 

    import(cf, focus = 'II', resolution = 2000)
     ##  `HiCExperiment` object with 471,364 contacts over 407 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "II" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 2000 
    @@ -543,7 +530,7 @@ 

    import(cf, focus = 'II|III', resolution = 2000)
     ##  `HiCExperiment` object with 9,092 contacts over 566 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "II|III" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 2000 
    @@ -560,7 +547,7 @@ 

    import(cf, focus = 'II:300001-800000|V:1-500000', resolution = 2000)
     ##  `HiCExperiment` object with 7,147 contacts over 500 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "II:300001-800000|V:1-500000" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 2000 
    @@ -592,7 +579,7 @@ 

    hic ## `HiCExperiment` object with 306,212 contacts over 257 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "II:300,001-813,184" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 2000 @@ -607,7 +594,7 @@

    import(cf, focus = 'III', resolution = 2000) ## `HiCExperiment` object with 151,990 contacts over 159 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "III" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 2000 @@ -622,7 +609,7 @@

    refocus(hic, 'III') ## `HiCExperiment` object with 151,990 contacts over 159 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "III" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 2000 @@ -647,83 +634,45 @@

    telomere <- GRanges("II:700001-813184")
     subsetByOverlaps(hic, telomere) |> interactions()
     ##  GInteractions object with 1540 interactions and 4 metadata columns:
    -##           seqnames1       ranges1     seqnames2       ranges2 |   bin_id1
    -##               <Rle>     <IRanges>         <Rle>     <IRanges> | <numeric>
    -##       [1]        II 700001-702000 ---        II 700001-702000 |       466
    -##       [2]        II 700001-702000 ---        II 702001-704000 |       466
    -##       [3]        II 700001-702000 ---        II 704001-706000 |       466
    -##       [4]        II 700001-702000 ---        II 706001-708000 |       466
    -##       [5]        II 700001-702000 ---        II 708001-710000 |       466
    -##       ...       ...           ... ...       ...           ... .       ...
    -##    [1536]        II 804001-806000 ---        II 810001-812000 |       518
    -##    [1537]        II 806001-808000 ---        II 806001-808000 |       519
    -##    [1538]        II 806001-808000 ---        II 808001-810000 |       519
    -##    [1539]        II 806001-808000 ---        II 810001-812000 |       519
    -##    [1540]        II 808001-810000 ---        II 808001-810000 |       520
    -##             bin_id2     count  balanced
    -##           <numeric> <numeric> <numeric>
    -##       [1]       466        30 0.0283618
    -##       [2]       467       145 0.0709380
    -##       [3]       468       124 0.0704979
    -##       [4]       469        59 0.0510221
    -##       [5]       470        59 0.0384004
    -##       ...       ...       ...       ...
    -##    [1536]       521         1       NaN
    -##    [1537]       519        15 0.0560633
    -##    [1538]       520        25       NaN
    -##    [1539]       521         1       NaN
    -##    [1540]       520        10       NaN
    +##           seqnames1       ranges1     seqnames2       ranges2 |   bin_id1   bin_id2     count  balanced
    +##               <Rle>     <IRanges>         <Rle>     <IRanges> | <numeric> <numeric> <numeric> <numeric>
    +##       [1]        II 700001-702000 ---        II 700001-702000 |       466       466        30 0.0283618
    +##       [2]        II 700001-702000 ---        II 702001-704000 |       466       467       145 0.0709380
    +##       [3]        II 700001-702000 ---        II 704001-706000 |       466       468       124 0.0704979
    +##       [4]        II 700001-702000 ---        II 706001-708000 |       466       469        59 0.0510221
    +##       [5]        II 700001-702000 ---        II 708001-710000 |       466       470        59 0.0384004
    +##       ...       ...           ... ...       ...           ... .       ...       ...       ...       ...
    +##    [1536]        II 804001-806000 ---        II 810001-812000 |       518       521         1       NaN
    +##    [1537]        II 806001-808000 ---        II 806001-808000 |       519       519        15 0.0560633
    +##    [1538]        II 806001-808000 ---        II 808001-810000 |       519       520        25       NaN
    +##    [1539]        II 806001-808000 ---        II 810001-812000 |       519       521         1       NaN
    +##    [1540]        II 808001-810000 ---        II 808001-810000 |       520       520        10       NaN
     ##    -------
     ##    regions: 57 ranges and 4 metadata columns
     ##    seqinfo: 16 sequences from an unspecified genome

    -
    -
    -
    - -
    -
    -type argument -
    -
    -

    By default, subsetByOverlaps(hic, telomere) will only recover interactions constrained within telomere, i.e. interactions for which both ends are in telomere.

    Alternatively, type = "any" can be specified to get all interactions with at least one of their anchors within telomere.

    subsetByOverlaps(hic, telomere, type = "any") |> interactions()
     ##  GInteractions object with 6041 interactions and 4 metadata columns:
    -##           seqnames1       ranges1     seqnames2       ranges2 |   bin_id1
    -##               <Rle>     <IRanges>         <Rle>     <IRanges> | <numeric>
    -##       [1]        II 300001-302000 ---        II 702001-704000 |       266
    -##       [2]        II 300001-302000 ---        II 704001-706000 |       266
    -##       [3]        II 300001-302000 ---        II 768001-770000 |       266
    -##       [4]        II 300001-302000 ---        II 784001-786000 |       266
    -##       [5]        II 302001-304000 ---        II 740001-742000 |       267
    -##       ...       ...           ... ...       ...           ... .       ...
    -##    [6037]        II 804001-806000 ---        II 810001-812000 |       518
    -##    [6038]        II 806001-808000 ---        II 806001-808000 |       519
    -##    [6039]        II 806001-808000 ---        II 808001-810000 |       519
    -##    [6040]        II 806001-808000 ---        II 810001-812000 |       519
    -##    [6041]        II 808001-810000 ---        II 808001-810000 |       520
    -##             bin_id2     count    balanced
    -##           <numeric> <numeric>   <numeric>
    -##       [1]       467         1 0.000590999
    -##       [2]       468         1 0.000686799
    -##       [3]       500         1 0.000728215
    -##       [4]       508         1 0.000923092
    -##       [5]       486         1 0.000382222
    -##       ...       ...       ...         ...
    -##    [6037]       521         1         NaN
    -##    [6038]       519        15   0.0560633
    -##    [6039]       520        25         NaN
    -##    [6040]       521         1         NaN
    -##    [6041]       520        10         NaN
    +##           seqnames1       ranges1     seqnames2       ranges2 |   bin_id1   bin_id2     count    balanced
    +##               <Rle>     <IRanges>         <Rle>     <IRanges> | <numeric> <numeric> <numeric>   <numeric>
    +##       [1]        II 300001-302000 ---        II 702001-704000 |       266       467         1 0.000590999
    +##       [2]        II 300001-302000 ---        II 704001-706000 |       266       468         1 0.000686799
    +##       [3]        II 300001-302000 ---        II 768001-770000 |       266       500         1 0.000728215
    +##       [4]        II 300001-302000 ---        II 784001-786000 |       266       508         1 0.000923092
    +##       [5]        II 302001-304000 ---        II 740001-742000 |       267       486         1 0.000382222
    +##       ...       ...           ... ...       ...           ... .       ...       ...       ...         ...
    +##    [6037]        II 804001-806000 ---        II 810001-812000 |       518       521         1         NaN
    +##    [6038]        II 806001-808000 ---        II 806001-808000 |       519       519        15   0.0560633
    +##    [6039]        II 806001-808000 ---        II 808001-810000 |       519       520        25         NaN
    +##    [6040]        II 806001-808000 ---        II 810001-812000 |       519       521         1         NaN
    +##    [6041]        II 808001-810000 ---        II 808001-810000 |       520       520        10         NaN
     ##    -------
     ##    regions: 257 ranges and 4 metadata columns
     ##    seqinfo: 16 sequences from an unspecified genome
    -
    -

    3.1.2.2 <HiCExperiment>["..."]

    @@ -739,7 +688,7 @@

    # c("II", "III", "IV") --> import contacts within and between several chromosomes

    - -
    +
    • Subsetting to a specific on-diagonal genomic location using standard UCSC coordinates query:
    • @@ -757,7 +706,7 @@

      hic["II:800001-813184"]
       ##  `HiCExperiment` object with 1,040 contacts over 6 regions 
       ##  -------
      -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
      +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
       ##  focus: "II:800,001-813,184" 
       ##  resolutions(5): 1000 2000 4000 8000 16000
       ##  active resolution: 2000 
      @@ -774,7 +723,7 @@ 

      hic["II:300001-320000|II:800001-813184"]
       ##  `HiCExperiment` object with 3 contacts over 6 regions 
       ##  -------
      -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
      +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
       ##  focus: "II:300001-320000|II:800001-813184" 
       ##  resolutions(5): 1000 2000 4000 8000 16000
       ##  active resolution: 2000 
      @@ -791,7 +740,7 @@ 

      hic["II"]
       ##  `HiCExperiment` object with 306,212 contacts over 257 regions 
       ##  -------
      -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
      +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
       ##  focus: "II" 
       ##  resolutions(5): 1000 2000 4000 8000 16000
       ##  active resolution: 2000 
      @@ -808,7 +757,7 @@ 

      hic["II|IV"]
       ##  `HiCExperiment` object with 0 contacts over 0 regions 
       ##  -------
      -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
      +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
       ##  focus: "II:1-813184|IV:1-1531933" 
       ##  resolutions(5): 1000 2000 4000 8000 16000
       ##  active resolution: 2000 
      @@ -825,7 +774,7 @@ 

      hic["II:300001-320000|IV:1-100000"]
       ##  `HiCExperiment` object with 0 contacts over 0 regions 
       ##  -------
      -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
      +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
       ##  focus: "II:300001-320000|IV:1-100000" 
       ##  resolutions(5): 1000 2000 4000 8000 16000
       ##  active resolution: 2000 
      @@ -842,7 +791,7 @@ 

      hic[c('II', 'III', 'IV')]
       ##  `HiCExperiment` object with 306,212 contacts over 257 regions 
       ##  -------
      -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
      +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
       ##  focus: "II, III, IV" 
       ##  resolutions(5): 1000 2000 4000 8000 16000
       ##  active resolution: 2000 
      @@ -852,19 +801,7 @@ 

      ## pairsFile: N/A ## metadata(0):

      -

      -

      -

      -
      -
      -
      - -
      -
      -Note -
      -
      -
      +

      Some notes:

      • This last example (subsetting for a vector of several chromosomes) is the only scenario for which [-based in-memory subsetting of pre-imported data is the only way to go, as such subsetting is not possible with focus from disk-stored data.
      • All the other [ subsetting scenarii illustrated above can be achieved more efficiently using the focus argument when importing data into a HiCExperiment object.
      • @@ -872,6 +809,7 @@

      +

    3.1.3 Zooming on a HiCExperiment

    @@ -880,7 +818,7 @@

    hic
     ##  `HiCExperiment` object with 306,212 contacts over 257 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "II:300,001-813,184" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 2000 
    @@ -893,7 +831,7 @@ 

    zoom(hic, 4000) ## `HiCExperiment` object with 306,212 contacts over 129 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "II:300,001-813,184" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 4000 @@ -906,7 +844,7 @@

    zoom(hic, 1000) ## `HiCExperiment` object with 306,212 contacts over 514 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "II:300,001-813,184" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 1000 @@ -1076,7 +1014,7 @@

    hic ## `HiCExperiment` object with 306,212 contacts over 257 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "II:300,001-813,184" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 2000 @@ -1086,16 +1024,6 @@

    ## pairsFile: N/A ## metadata(0):

    -
    -
    -
    - -
    -
    -Note -
    -
    -

    All these objects can be used in *Overlap methods, as they all extend the GRanges class of objects.

    # ---- This counts the number of times `CTCF` anchors are being used in the 
    @@ -1106,8 +1034,6 @@ 

    ) ## [1] 5 5 5 0

    -
    -

    3.2.2.3 pairsFile

    @@ -1120,14 +1046,14 @@

    hic ## `HiCExperiment` object with 306,212 contacts over 257 regions ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: "II:300,001-813,184" ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 2000 ## interactions: 18513 ## scores(3): count balanced random ## topologicalFeatures: compartments(0) borders(0) loops(9) viewpoints(0) CTCF(4) -## pairsFile: /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753 +## pairsFile: /github/home/.cache/R/ExperimentHub/1a92835ced9_7753 ## metadata(0):

    @@ -1144,7 +1070,7 @@

    ## [1] "HiCExperiment created from an example .mcool file from `HiContactsData`" ## ## $date -## [1] "Thu Oct 19 10:04:41 2023" +## [1] "Mon Oct 30 10:36:54 2023"

    3.3 Coercing HiCExperiment objects

    @@ -1197,27 +1123,13 @@

    as.data.frame(hic) |> head()
    -##    seqnames1 start1   end1 width1 strand1 bin_id1    weight1 center1
    -##  1        II 300001 302000   2000       *     266 0.03714342  301000
    -##  2        II 300001 302000   2000       *     266 0.03714342  301000
    -##  3        II 300001 302000   2000       *     266 0.03714342  301000
    -##  4        II 300001 302000   2000       *     266 0.03714342  301000
    -##  5        II 300001 302000   2000       *     266 0.03714342  301000
    -##  6        II 300001 302000   2000       *     266 0.03714342  301000
    -##    seqnames2 start2   end2 width2 strand2 bin_id2    weight2 center2 count
    -##  1        II 300001 302000   2000       *     266 0.03714342  301000     7
    -##  2        II 302001 304000   2000       *     267 0.02242258  303000    92
    -##  3        II 304001 306000   2000       *     268 0.01942093  305000    75
    -##  4        II 306001 308000   2000       *     269 0.01895202  307000    61
    -##  5        II 308001 310000   2000       *     270 0.02898098  309000    38
    -##  6        II 310001 312000   2000       *     271 0.01834118  311000    43
    -##       balanced      random
    -##  1 0.009657438 0.080750138
    -##  2 0.076622340 0.834333037
    -##  3 0.054101992 0.600760886
    -##  4 0.042940512 0.157208442
    -##  5 0.040905212 0.007399441
    -##  6 0.029293930 0.466393497
    +## seqnames1 start1 end1 width1 strand1 bin_id1 weight1 center1 seqnames2 start2 end2 width2 strand2 bin_id2 weight2 center2 count balanced random +## 1 II 300001 302000 2000 * 266 0.03714342 301000 II 300001 302000 2000 * 266 0.03714342 301000 7 0.009657438 0.080750138 +## 2 II 300001 302000 2000 * 266 0.03714342 301000 II 302001 304000 2000 * 267 0.02242258 303000 92 0.076622340 0.834333037 +## 3 II 300001 302000 2000 * 266 0.03714342 301000 II 304001 306000 2000 * 268 0.01942093 305000 75 0.054101992 0.600760886 +## 4 II 300001 302000 2000 * 266 0.03714342 301000 II 306001 308000 2000 * 269 0.01895202 307000 61 0.042940512 0.157208442 +## 5 II 300001 302000 2000 * 266 0.03714342 301000 II 308001 310000 2000 * 270 0.02898098 309000 38 0.040905212 0.007399441 +## 6 II 300001 302000 2000 * 266 0.03714342 301000 II 310001 312000 2000 * 271 0.01834118 311000 43 0.029293930 0.466393497
    diff --git a/principles.html b/principles.html index fcde423..b70319b 100644 --- a/principles.html +++ b/principles.html @@ -339,17 +339,7 @@

    Capture-C is useful to quantify interactions between a set of regulatory elements of interest. ChIA-PET, on the other hand, can identify interactions mediated by a specific protein of interest. Finally, an increasing number of Hi-C approaches rely on long-read sequencing (e.g. Deshpande et al. (2022), Tavares-Cadete et al. (2020)) to identify clusters of 3D contacts.

    1.1.3 Sequencing

    -

    Hi-C libraries are traditionally sequenced with short-read technology, and are by essence paired-end libraries. For this reason, the end result of the experimental side of the Hi-C consists of two fastq files, each one containing sequences for one extremity of the DNA fragments purified during Hi-C. These are the two files we need to move on to the computational side of Hi-C.

    -
    -
    -
    - -
    -
    -What is a fastq file? -
    -
    -
    +

    Hi-C libraries are traditionally sequenced with short-read technology, and are by essence paired-end libraries. For this reason, the end result of the experimental side of the Hi-C consists of two fastq files, each one containing sequences for one extremity of the DNA fragments purified during Hi-C. These are the two files we need to move on to the computational side of Hi-C.

    Fastq files are plain text files (usually compressed, with the .gz extension). They are generated by the sequencing machine during a sequencing run, and for Hi-C, necessarily come in pairs, generally called *_R1.fq.gz and *_R2.fq.gz.

    Here is the first read listed in sample_R1.fq.gz file:

    @@ -371,30 +361,18 @@

    + @@@FFFFFFHHHHIJJIJJHIIEH

    -

    These two reads are the first listed in their respective file. Notice how they bear the same name (first line): they form a pair. The second line corresponds to the sequence read by the sequencer, the third line is a single + separator, and the last line indicates the per-base sequencing quality following a nebulous cypher.

    -
    -
    +

    These two reads are the first listed in their respective file. Notice how they bear the same name (first line): they form a pair. The second line corresponds to the sequence read by the sequencer, the third line is a single + separator, and the last line indicates the per-base sequencing quality following a nebulous cypher.

    1.2 Hi-C file formats

    Two important output files are typically generated during Hi-C data pre-processing:

      -
    • A “pairs” file
    • -
    • A binned “contact matrix” file
    • +
    • A “pairs” file;
    • +
    • A binned “contact matrix” file

    We will now describe the structure of these different types of files. Directly jump to the next chapter if you want to know more about importing data from a contact matrix or a pairs file in R.

    1.2.1 Pairs files

    A “pairs” file (optionally, but generally filtered and sorted) is the direct output of processing Hi-C fastq files. It stores information about putative proximity contacts identified by digestion/religation, in the lossless, human-readable, indexable format: the .pairs format.

    -
    -
    -
    - -
    -
    -What is a .pairs file? -
    -
    -

    A .pairs file is organized in a header followed by a body:

    • @@ -463,8 +441,6 @@

      EAS139:136:FC706VJ:2:2342:15343:9863 chr1 60000 chr2 10000 + + EAS139:136:FC706VJ:2:1286:25:275154 chr1 30000 chr3 40000 + -

    -
    -

    More information about the conventions related to this text file are provided by the 4DN consortium, which originally formalized the specifications of this file format.

    1.2.2 Binned contact matrix files

    @@ -662,10 +638,10 @@

    ) ## HiCool :: Fetching bowtie genome index files from AWS iGenomes S3 bucket... ## HiCool :: Recovering bowtie2 genome index from AWS iGenomes... -## + /github/home/.cache/R/basilisk/1.13.4/0/bin/conda 'create' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.13.4/HiCool/1.1.0/env' 'python=3.7.12' '--quiet' '-c' 'conda-forge' '-c' 'bioconda' -## + /github/home/.cache/R/basilisk/1.13.4/0/bin/conda 'install' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.13.4/HiCool/1.1.0/env' 'python=3.7.12' -## + /github/home/.cache/R/basilisk/1.13.4/0/bin/conda 'install' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.13.4/HiCool/1.1.0/env' '-c' 'conda-forge' '-c' 'bioconda' 'python=3.7.12' 'python=3.7.12' 'bowtie2=2.5.0' 'samtools=1.16.1' 'hicstuff=3.1.5' 'chromosight=1.6.3' 'cooler=0.9.1' -## HiCool :: Initiating processing of fastq files [tmp folder: /tmp/RtmpIWmk55/WL4DIE]... +## + /github/home/.cache/R/basilisk/1.14.0/0/bin/conda 'create' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.14.0/HiCool/1.2.0/env' 'python=3.7.12' '--quiet' '-c' 'conda-forge' '-c' 'bioconda' +## + /github/home/.cache/R/basilisk/1.14.0/0/bin/conda 'install' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.14.0/HiCool/1.2.0/env' 'python=3.7.12' +## + /github/home/.cache/R/basilisk/1.14.0/0/bin/conda 'install' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.14.0/HiCool/1.2.0/env' '-c' 'conda-forge' '-c' 'bioconda' 'python=3.7.12' 'python=3.7.12' 'bowtie2=2.5.0' 'samtools=1.16.1' 'hicstuff=3.1.5' 'chromosight=1.6.3' 'cooler=0.9.1' +## HiCool :: Initiating processing of fastq files [tmp folder: /tmp/RtmpiR9EkC/WL4DIE]... ## HiCool :: Mapping fastq files... ## HiCool :: Removing unwanted chromosomes... ## HiCool :: Parsing pairs into .cool file... @@ -675,50 +651,53 @@

    ## HiCool :: .fastq to .mcool processing done! ## HiCool :: Check ./HiCool/folder to find the generated files ## HiCool :: Generating HiCool report. This might take a while. -## HiCool :: Report generated and available @ /__w/OHCA/OHCA/HiCool/14976d56f7a_7833^mapped-R64-1-1^WL4DIE.html +## HiCool :: Report generated and available @ /__w/OHCA/OHCA/HiCool/148213ddba0_7833^mapped-R64-1-1^WL4DIE.html ## HiCool :: All processing successfully achieved. Congrats! ## CoolFile object -## .mcool file: ./HiCool//matrices/14976d56f7a_7833^mapped-R64-1-1^WL4DIE.mcool +## .mcool file: ./HiCool//matrices/148213ddba0_7833^mapped-R64-1-1^WL4DIE.mcool ## resolution: 4000 -## pairs file: ./HiCool//pairs/14976d56f7a_7833^mapped-R64-1-1^WL4DIE.pairs +## pairs file: ./HiCool//pairs/148213ddba0_7833^mapped-R64-1-1^WL4DIE.pairs ## metadata(3): log args stats -
    -
    -
    - -
    -
    -HiCool arguments -
    -
    -
    -

    Several arguments can be passed to HiCool and some are worth mentioning them:
    -- restriction: (default: "DpnII,HinfI")
    -- resolutions: (default: NULL, automatically inferring resolutions based on genome size)
    -- iterative: (default: TRUE)
    -- filter: (default: TRUE)
    -- balancing_args: (default: " --cis-only --min-nnz 3 --mad-max 7 ")
    -- threads: (default: 1L)

    -
    -
    +

    +1.3.3.2 HiCool arguments

    +

    Several arguments can be passed to HiCool and some are worth mentioning them:

    +
      +
    • +restriction: (default: "DpnII,HinfI")
      +
    • +
    • +resolutions: (default: NULL, automatically inferring resolutions based on genome size)
      +
    • +
    • +iterative: (default: TRUE)
      +
    • +
    • +filter: (default: TRUE)
      +
    • +
    • +balancing_args: (default: " --cis-only --min-nnz 3 --mad-max 7 ")
      +
    • +
    • +threads: (default: 1L)
    • +

    Other HiCool arguments can be listed by checking HiCool documentation in R: ?HiCool::HiCool.

    -

    -1.3.3.2 HiCool outputs

    +

    +1.3.3.3 HiCool outputs

    We can check the generated output files placed in the HiCool/ directory.

    fs::dir_tree('HiCool/')
     ##  HiCool/
    -##  ├── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE.html
    +##  ├── 148213ddba0_7833^mapped-R64-1-1^WL4DIE.html
     ##  ├── logs
    -##  │   └── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE.log
    +##  │   └── 148213ddba0_7833^mapped-R64-1-1^WL4DIE.log
     ##  ├── matrices
    -##  │   └── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE.mcool
    +##  │   └── 148213ddba0_7833^mapped-R64-1-1^WL4DIE.mcool
     ##  ├── pairs
    -##  │   └── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE.pairs
    +##  │   └── 148213ddba0_7833^mapped-R64-1-1^WL4DIE.pairs
     ##  └── plots
    -##      ├── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE_event_distance.pdf
    -##      └── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE_event_distribution.pdf
    +## ├── 148213ddba0_7833^mapped-R64-1-1^WL4DIE_event_distance.pdf +## └── 148213ddba0_7833^mapped-R64-1-1^WL4DIE_event_distribution.pdf
    • The *.pairs and *.mcool files are the pairs and contact matrix files, respectively. These are the output files the end-user is generally looking for. diff --git a/search.json b/search.json index 62899b1..4b4ea8c 100644 --- a/search.json +++ b/search.json @@ -4,7 +4,7 @@ "href": "index.html", "title": "Orchestrating Hi-C analysis with Bioconductor", "section": "", - "text": "Welcome\nThis is the landing page of the “Orchestrating Hi-C analysis with Bioconductor” book. The primary aim of this book is to introduce the R user to Hi-C analysis. This book starts with key concepts important for the analysis of chromatin conformation capture and then presents Bioconductor tools that can be leveraged to process, analyze, explore and visualize Hi-C data.\nAuthors: Jacques Serizay [aut, cre]Version: 1.1.0Modified: 2023-04-14Compiled: 2023-10-19Environment: R version 4.3.1 (2023-06-16), Bioconductor 3.18License: MIT + file LICENSECopyright: J. Serizay\nThis book is divided in three parts:\nPart I: Introduction to Hi-C analysis\nPart II: In-depth Hi-C analysis\nPart III: Hi-C analysis workflows" + "text": "Welcome\nThis is the landing page of the “Orchestrating Hi-C analysis with Bioconductor” book. The primary aim of this book is to introduce the R user to Hi-C analysis. This book starts with key concepts important for the analysis of chromatin conformation capture and then presents Bioconductor tools that can be leveraged to process, analyze, explore and visualize Hi-C data.\nAuthors: Jacques Serizay [aut, cre]Version: 1.1.0Modified: 2023-04-14Compiled: 2023-10-30Environment: R version 4.3.1 (2023-06-16), Bioconductor 3.18License: MIT + file LICENSECopyright: J. Serizay\nThis book is divided in three parts:\nPart I: Introduction to Hi-C analysis\nPart II: In-depth Hi-C analysis\nPart III: Hi-C analysis workflows" }, { "objectID": "index.html#general-audience", @@ -39,7 +39,7 @@ "href": "index.html#session-info", "title": "Orchestrating Hi-C analysis with Bioconductor", "section": "Session info", - "text": "Session info\n\nsessioninfo::session_info()\n## ─ Session info ────────────────────────────────────────────────────────────\n## setting value\n## version R version 4.3.1 (2023-06-16)\n## os Ubuntu 22.04.3 LTS\n## system x86_64, linux-gnu\n## ui X11\n## language (EN)\n## collate en_US.UTF-8\n## ctype en_US.UTF-8\n## tz Etc/UTC\n## date 2023-10-19\n## pandoc 3.1.1 @ /usr/local/bin/ (via rmarkdown)\n## \n## ─ Packages ────────────────────────────────────────────────────────────────\n## package * version date (UTC) lib source\n## abind 1.4-5 2016-07-21 [1] CRAN (R 4.3.1)\n## AnnotationDbi 1.63.2 2023-07-02 [1] Bioconductor\n## AnnotationHub * 3.9.2 2023-08-24 [1] Bioconductor\n## basilisk 1.13.4 2023-10-04 [1] Bioconductor\n## basilisk.utils 1.13.3 2023-09-04 [1] Bioconductor\n## beeswarm 0.4.0 2021-06-01 [1] CRAN (R 4.3.1)\n## Biobase 2.61.0 2023-04-25 [1] Bioconductor\n## BiocFileCache * 2.9.1 2023-07-12 [1] Bioconductor\n## BiocGenerics * 0.47.0 2023-04-25 [1] Bioconductor\n## BiocIO 1.11.0 2023-04-25 [1] Bioconductor\n## BiocManager 1.30.22 2023-08-08 [1] CRAN (R 4.3.1)\n## BiocParallel 1.35.4 2023-08-17 [1] Bioconductor\n## BiocStyle 2.29.2 2023-09-14 [1] Bioconductor\n## BiocVersion 3.18.0 2023-04-25 [1] Bioconductor\n## Biostrings 2.69.2 2023-07-02 [1] Bioconductor\n## bit 4.0.5 2022-11-15 [1] CRAN (R 4.3.1)\n## bit64 4.0.5 2020-08-30 [1] CRAN (R 4.3.1)\n## bitops 1.0-7 2021-04-24 [1] CRAN (R 4.3.1)\n## blob 1.2.4 2023-03-17 [1] CRAN (R 4.3.1)\n## bookdown 0.36 2023-10-16 [1] CRAN (R 4.3.1)\n## cachem 1.0.8 2023-05-01 [1] CRAN (R 4.3.1)\n## cli 3.6.1 2023-03-23 [1] CRAN (R 4.3.1)\n## CodeDepends 0.6.5 2018-07-17 [1] CRAN (R 4.3.1)\n## codetools 0.2-19 2023-02-01 [2] CRAN (R 4.3.1)\n## colorspace 2.1-0 2023-01-23 [1] CRAN (R 4.3.1)\n## crayon 1.5.2 2022-09-29 [1] CRAN (R 4.3.1)\n## curl 5.1.0 2023-10-02 [1] CRAN (R 4.3.1)\n## data.table 1.14.8 2023-02-17 [1] CRAN (R 4.3.1)\n## DBI 1.1.3 2022-06-18 [1] CRAN (R 4.3.1)\n## dbplyr * 2.3.4 2023-09-26 [1] CRAN (R 4.3.1)\n## DelayedArray 0.27.10 2023-07-28 [1] Bioconductor\n## digest 0.6.33 2023-07-07 [1] CRAN (R 4.3.1)\n## dir.expiry 1.9.0 2023-04-25 [1] Bioconductor\n## DNAZooData * 1.1.0 2023-04-27 [1] Bioconductor\n## dplyr 1.1.3 2023-09-03 [1] CRAN (R 4.3.1)\n## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.3.1)\n## evaluate 0.22 2023-09-29 [1] CRAN (R 4.3.1)\n## ExperimentHub * 2.9.1 2023-07-12 [1] Bioconductor\n## fansi 1.0.5 2023-10-08 [1] CRAN (R 4.3.1)\n## fastmap 1.1.1 2023-02-24 [1] CRAN (R 4.3.1)\n## filelock 1.0.2 2018-10-05 [1] CRAN (R 4.3.1)\n## fourDNData * 1.1.0 2023-04-27 [1] Bioconductor\n## generics 0.1.3 2022-07-05 [1] CRAN (R 4.3.1)\n## GenomeInfoDb 1.37.6 2023-10-02 [1] Bioconductor\n## GenomeInfoDbData 1.2.11 2023-10-19 [1] Bioconductor\n## GenomicRanges 1.53.2 2023-10-08 [1] Bioconductor\n## ggbeeswarm 0.7.2 2023-04-29 [1] CRAN (R 4.3.1)\n## ggplot2 3.4.4 2023-10-12 [1] CRAN (R 4.3.1)\n## ggrastr 1.0.2 2023-06-01 [1] CRAN (R 4.3.1)\n## glue 1.6.2 2022-02-24 [1] CRAN (R 4.3.1)\n## graph 1.79.4 2023-10-09 [1] Bioconductor\n## gtable 0.3.4 2023-08-21 [1] CRAN (R 4.3.1)\n## HiCExperiment * 1.1.2 2023-09-04 [1] Bioconductor\n## HiContacts * 1.3.2 2023-09-04 [1] Bioconductor\n## HiContactsData * 1.3.0 2023-04-27 [1] Bioconductor\n## HiCool * 1.1.0 2023-05-19 [1] Bioconductor\n## hms 1.1.3 2023-03-21 [1] CRAN (R 4.3.1)\n## htmltools 0.5.6.1 2023-10-06 [1] CRAN (R 4.3.1)\n## htmlwidgets 1.6.2 2023-03-17 [1] CRAN (R 4.3.1)\n## httpuv 1.6.11 2023-05-11 [1] CRAN (R 4.3.1)\n## httr 1.4.7 2023-08-15 [1] CRAN (R 4.3.1)\n## InteractionSet 1.29.1 2023-06-14 [1] Bioconductor\n## interactiveDisplayBase 1.39.0 2023-04-25 [1] Bioconductor\n## IRanges 2.35.3 2023-10-12 [1] Bioconductor\n## jsonlite 1.8.7 2023-06-29 [1] CRAN (R 4.3.1)\n## KEGGREST 1.41.4 2023-09-25 [1] Bioconductor\n## knitr 1.44 2023-09-11 [1] CRAN (R 4.3.1)\n## later 1.3.1 2023-05-02 [1] CRAN (R 4.3.1)\n## lattice 0.21-9 2023-10-01 [1] CRAN (R 4.3.1)\n## lazyeval 0.2.2 2019-03-15 [1] CRAN (R 4.3.1)\n## lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.3.1)\n## magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.3.1)\n## Matrix 1.6-1.1 2023-09-18 [1] CRAN (R 4.3.1)\n## MatrixGenerics 1.13.1 2023-07-25 [1] Bioconductor\n## matrixStats 1.0.0 2023-06-02 [1] CRAN (R 4.3.1)\n## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.3.1)\n## mime 0.12 2021-09-28 [1] CRAN (R 4.3.1)\n## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.3.1)\n## OHCA * 1.1.0 2023-10-19 [1] local\n## pillar 1.9.0 2023-03-22 [1] CRAN (R 4.3.1)\n## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.3.1)\n## plotly 4.10.2 2023-06-03 [1] CRAN (R 4.3.1)\n## png 0.1-8 2022-11-29 [1] CRAN (R 4.3.1)\n## promises 1.2.1 2023-08-10 [1] CRAN (R 4.3.1)\n## purrr 1.0.2 2023-08-10 [1] CRAN (R 4.3.1)\n## R6 2.5.1 2021-08-19 [1] CRAN (R 4.3.1)\n## rappdirs 0.3.3 2021-01-31 [1] CRAN (R 4.3.1)\n## Rcpp 1.0.11 2023-07-06 [1] CRAN (R 4.3.1)\n## RCurl 1.98-1.12 2023-03-27 [1] CRAN (R 4.3.1)\n## readr 2.1.4 2023-02-10 [1] CRAN (R 4.3.1)\n## rebook 1.11.1 2023-05-25 [1] Bioconductor\n## reticulate 1.34.0 2023-10-12 [1] CRAN (R 4.3.1)\n## rhdf5 2.45.1 2023-07-10 [1] Bioconductor\n## rhdf5filters 1.13.5 2023-07-19 [1] Bioconductor\n## Rhdf5lib 1.23.2 2023-09-10 [1] Bioconductor\n## rjson 0.2.21 2022-01-09 [1] CRAN (R 4.3.1)\n## rlang 1.1.1 2023-04-28 [1] CRAN (R 4.3.1)\n## rmarkdown 2.25 2023-09-18 [1] CRAN (R 4.3.1)\n## rmdformats 1.0.4 2022-05-17 [1] CRAN (R 4.3.1)\n## RSpectra 0.16-1 2022-04-24 [1] CRAN (R 4.3.1)\n## RSQLite 2.3.1 2023-04-03 [1] CRAN (R 4.3.1)\n## rstudioapi 0.15.0 2023-07-07 [1] CRAN (R 4.3.1)\n## S4Arrays 1.1.6 2023-08-30 [1] Bioconductor\n## S4Vectors 0.39.3 2023-10-11 [1] Bioconductor\n## scales 1.2.1 2022-08-20 [1] CRAN (R 4.3.1)\n## sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.3.1)\n## shiny 1.7.5.1 2023-10-14 [1] CRAN (R 4.3.1)\n## SparseArray 1.1.12 2023-08-31 [1] Bioconductor\n## strawr 0.0.91 2023-03-29 [1] CRAN (R 4.3.1)\n## stringi 1.7.12 2023-01-11 [1] CRAN (R 4.3.1)\n## stringr 1.5.0 2022-12-02 [1] CRAN (R 4.3.1)\n## SummarizedExperiment 1.31.1 2023-05-01 [1] Bioconductor\n## tibble 3.2.1 2023-03-20 [1] CRAN (R 4.3.1)\n## tidyr 1.3.0 2023-01-24 [1] CRAN (R 4.3.1)\n## tidyselect 1.2.0 2022-10-10 [1] CRAN (R 4.3.1)\n## tzdb 0.4.0 2023-05-12 [1] CRAN (R 4.3.1)\n## utf8 1.2.3 2023-01-31 [1] CRAN (R 4.3.1)\n## vctrs 0.6.4 2023-10-12 [1] CRAN (R 4.3.1)\n## vipor 0.4.5 2017-03-22 [1] CRAN (R 4.3.1)\n## viridisLite 0.4.2 2023-05-02 [1] CRAN (R 4.3.1)\n## vroom 1.6.4 2023-10-02 [1] CRAN (R 4.3.1)\n## xfun 0.40 2023-08-09 [1] CRAN (R 4.3.1)\n## XML 3.99-0.14 2023-03-19 [1] CRAN (R 4.3.1)\n## xtable 1.8-4 2019-04-21 [1] CRAN (R 4.3.1)\n## XVector 0.41.1 2023-05-03 [1] Bioconductor\n## yaml 2.3.7 2023-01-23 [1] CRAN (R 4.3.1)\n## zlibbioc 1.47.0 2023-04-25 [1] Bioconductor\n## \n## [1] /usr/local/lib/R/site-library\n## [2] /usr/local/lib/R/library\n## \n## ───────────────────────────────────────────────────────────────────────────" + "text": "Session info\n\nsessioninfo::session_info()\n## ─ Session info ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n## setting value\n## version R version 4.3.1 (2023-06-16)\n## os Ubuntu 22.04.3 LTS\n## system x86_64, linux-gnu\n## ui X11\n## language (EN)\n## collate en_US.UTF-8\n## ctype en_US.UTF-8\n## tz Etc/UTC\n## date 2023-10-30\n## pandoc 3.1.1 @ /usr/local/bin/ (via rmarkdown)\n## \n## ─ Packages ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n## package * version date (UTC) lib source\n## abind 1.4-5 2016-07-21 [1] CRAN (R 4.3.1)\n## AnnotationDbi 1.64.0 2023-10-24 [1] Bioconductor\n## AnnotationHub * 3.10.0 2023-10-24 [1] Bioconductor\n## basilisk 1.14.0 2023-10-24 [1] Bioconductor\n## basilisk.utils 1.14.0 2023-10-24 [1] Bioconductor\n## beeswarm 0.4.0 2021-06-01 [1] CRAN (R 4.3.1)\n## Biobase 2.62.0 2023-10-24 [1] Bioconductor\n## BiocFileCache * 2.10.1 2023-10-26 [1] Bioconductor\n## BiocGenerics * 0.48.0 2023-10-24 [1] Bioconductor\n## BiocIO 1.12.0 2023-10-24 [1] Bioconductor\n## BiocManager 1.30.22 2023-08-08 [1] CRAN (R 4.3.1)\n## BiocParallel 1.36.0 2023-10-24 [1] Bioconductor\n## BiocStyle 2.30.0 2023-10-24 [1] Bioconductor\n## BiocVersion 3.18.0 2023-04-25 [1] Bioconductor\n## Biostrings 2.70.1 2023-10-25 [1] Bioconductor\n## bit 4.0.5 2022-11-15 [1] CRAN (R 4.3.1)\n## bit64 4.0.5 2020-08-30 [1] CRAN (R 4.3.1)\n## bitops 1.0-7 2021-04-24 [1] CRAN (R 4.3.1)\n## blob 1.2.4 2023-03-17 [1] CRAN (R 4.3.1)\n## bookdown 0.36 2023-10-16 [1] CRAN (R 4.3.1)\n## cachem 1.0.8 2023-05-01 [1] CRAN (R 4.3.1)\n## cli 3.6.1 2023-03-23 [1] CRAN (R 4.3.1)\n## CodeDepends 0.6.5 2018-07-17 [1] CRAN (R 4.3.1)\n## codetools 0.2-19 2023-02-01 [2] CRAN (R 4.3.1)\n## colorspace 2.1-0 2023-01-23 [1] CRAN (R 4.3.1)\n## crayon 1.5.2 2022-09-29 [1] CRAN (R 4.3.1)\n## curl 5.1.0 2023-10-02 [1] CRAN (R 4.3.1)\n## data.table 1.14.8 2023-02-17 [1] CRAN (R 4.3.1)\n## DBI 1.1.3 2022-06-18 [1] CRAN (R 4.3.1)\n## dbplyr * 2.4.0 2023-10-26 [1] CRAN (R 4.3.1)\n## DelayedArray 0.28.0 2023-10-24 [1] Bioconductor\n## digest 0.6.33 2023-07-07 [1] CRAN (R 4.3.1)\n## dir.expiry 1.10.0 2023-10-24 [1] Bioconductor\n## DNAZooData * 1.2.0 2023-10-26 [1] Bioconductor\n## dplyr 1.1.3 2023-09-03 [1] CRAN (R 4.3.1)\n## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.3.1)\n## evaluate 0.22 2023-09-29 [1] CRAN (R 4.3.1)\n## ExperimentHub * 2.10.0 2023-10-24 [1] Bioconductor\n## fansi 1.0.5 2023-10-08 [1] CRAN (R 4.3.1)\n## fastmap 1.1.1 2023-02-24 [1] CRAN (R 4.3.1)\n## filelock 1.0.2 2018-10-05 [1] CRAN (R 4.3.1)\n## fourDNData * 1.2.0 2023-10-26 [1] Bioconductor\n## generics 0.1.3 2022-07-05 [1] CRAN (R 4.3.1)\n## GenomeInfoDb 1.38.0 2023-10-24 [1] Bioconductor\n## GenomeInfoDbData 1.2.11 2023-10-30 [1] Bioconductor\n## GenomicRanges 1.54.0 2023-10-24 [1] Bioconductor\n## ggbeeswarm 0.7.2 2023-04-29 [1] CRAN (R 4.3.1)\n## ggplot2 3.4.4 2023-10-12 [1] CRAN (R 4.3.1)\n## ggrastr 1.0.2 2023-06-01 [1] CRAN (R 4.3.1)\n## glue 1.6.2 2022-02-24 [1] CRAN (R 4.3.1)\n## graph 1.80.0 2023-10-24 [1] Bioconductor\n## gtable 0.3.4 2023-08-21 [1] CRAN (R 4.3.1)\n## HiCExperiment * 1.2.0 2023-10-24 [1] Bioconductor\n## HiContacts * 1.4.0 2023-10-24 [1] Bioconductor\n## HiContactsData * 1.4.0 2023-10-26 [1] Bioconductor\n## HiCool * 1.2.0 2023-10-24 [1] Bioconductor\n## hms 1.1.3 2023-03-21 [1] CRAN (R 4.3.1)\n## htmltools 0.5.6.1 2023-10-06 [1] CRAN (R 4.3.1)\n## htmlwidgets 1.6.2 2023-03-17 [1] CRAN (R 4.3.1)\n## httpuv 1.6.12 2023-10-23 [1] CRAN (R 4.3.1)\n## httr 1.4.7 2023-08-15 [1] CRAN (R 4.3.1)\n## InteractionSet 1.30.0 2023-10-24 [1] Bioconductor\n## interactiveDisplayBase 1.40.0 2023-10-24 [1] Bioconductor\n## IRanges 2.36.0 2023-10-24 [1] Bioconductor\n## jsonlite 1.8.7 2023-06-29 [1] CRAN (R 4.3.1)\n## KEGGREST 1.42.0 2023-10-24 [1] Bioconductor\n## knitr 1.44 2023-09-11 [1] CRAN (R 4.3.1)\n## later 1.3.1 2023-05-02 [1] CRAN (R 4.3.1)\n## lattice 0.22-5 2023-10-24 [1] CRAN (R 4.3.1)\n## lazyeval 0.2.2 2019-03-15 [1] CRAN (R 4.3.1)\n## lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.3.1)\n## magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.3.1)\n## Matrix 1.6-1.1 2023-09-18 [1] CRAN (R 4.3.1)\n## MatrixGenerics 1.14.0 2023-10-24 [1] Bioconductor\n## matrixStats 1.0.0 2023-06-02 [1] CRAN (R 4.3.1)\n## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.3.1)\n## mime 0.12 2021-09-28 [1] CRAN (R 4.3.1)\n## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.3.1)\n## OHCA * 1.1.0 2023-10-30 [1] local\n## pillar 1.9.0 2023-03-22 [1] CRAN (R 4.3.1)\n## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.3.1)\n## plotly 4.10.3 2023-10-21 [1] CRAN (R 4.3.1)\n## png 0.1-8 2022-11-29 [1] CRAN (R 4.3.1)\n## promises 1.2.1 2023-08-10 [1] CRAN (R 4.3.1)\n## purrr 1.0.2 2023-08-10 [1] CRAN (R 4.3.1)\n## R6 2.5.1 2021-08-19 [1] CRAN (R 4.3.1)\n## rappdirs 0.3.3 2021-01-31 [1] CRAN (R 4.3.1)\n## Rcpp 1.0.11 2023-07-06 [1] CRAN (R 4.3.1)\n## RCurl 1.98-1.12 2023-03-27 [1] CRAN (R 4.3.1)\n## readr 2.1.4 2023-02-10 [1] CRAN (R 4.3.1)\n## rebook 1.12.0 2023-10-24 [1] Bioconductor\n## reticulate 1.34.0 2023-10-12 [1] CRAN (R 4.3.1)\n## rhdf5 2.46.0 2023-10-24 [1] Bioconductor\n## rhdf5filters 1.14.0 2023-10-24 [1] Bioconductor\n## Rhdf5lib 1.24.0 2023-10-24 [1] Bioconductor\n## rjson 0.2.21 2022-01-09 [1] CRAN (R 4.3.1)\n## rlang 1.1.1 2023-04-28 [1] CRAN (R 4.3.1)\n## rmarkdown 2.25 2023-09-18 [1] CRAN (R 4.3.1)\n## rmdformats 1.0.4 2022-05-17 [1] CRAN (R 4.3.1)\n## RSpectra 0.16-1 2022-04-24 [1] CRAN (R 4.3.1)\n## RSQLite 2.3.2 2023-10-28 [1] CRAN (R 4.3.1)\n## rstudioapi 0.15.0 2023-07-07 [1] CRAN (R 4.3.1)\n## S4Arrays 1.2.0 2023-10-24 [1] Bioconductor\n## S4Vectors 0.40.1 2023-10-26 [1] Bioconductor\n## scales 1.2.1 2022-08-20 [1] CRAN (R 4.3.1)\n## sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.3.1)\n## shiny 1.7.5.1 2023-10-14 [1] CRAN (R 4.3.1)\n## SparseArray 1.2.0 2023-10-24 [1] Bioconductor\n## strawr 0.0.91 2023-03-29 [1] CRAN (R 4.3.1)\n## stringi 1.7.12 2023-01-11 [1] CRAN (R 4.3.1)\n## stringr 1.5.0 2022-12-02 [1] CRAN (R 4.3.1)\n## SummarizedExperiment 1.32.0 2023-10-24 [1] Bioconductor\n## tibble 3.2.1 2023-03-20 [1] CRAN (R 4.3.1)\n## tidyr 1.3.0 2023-01-24 [1] CRAN (R 4.3.1)\n## tidyselect 1.2.0 2022-10-10 [1] CRAN (R 4.3.1)\n## tzdb 0.4.0 2023-05-12 [1] CRAN (R 4.3.1)\n## utf8 1.2.4 2023-10-22 [1] CRAN (R 4.3.1)\n## vctrs 0.6.4 2023-10-12 [1] CRAN (R 4.3.1)\n## vipor 0.4.5 2017-03-22 [1] CRAN (R 4.3.1)\n## viridisLite 0.4.2 2023-05-02 [1] CRAN (R 4.3.1)\n## vroom 1.6.4 2023-10-02 [1] CRAN (R 4.3.1)\n## xfun 0.40 2023-08-09 [1] CRAN (R 4.3.1)\n## XML 3.99-0.14 2023-03-19 [1] CRAN (R 4.3.1)\n## xtable 1.8-4 2019-04-21 [1] CRAN (R 4.3.1)\n## XVector 0.42.0 2023-10-24 [1] Bioconductor\n## yaml 2.3.7 2023-01-23 [1] CRAN (R 4.3.1)\n## zlibbioc 1.48.0 2023-10-24 [1] Bioconductor\n## \n## [1] /usr/local/lib/R/site-library\n## [2] /usr/local/lib/R/library\n## \n## ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────" }, { "objectID": "preamble.html", @@ -60,21 +60,21 @@ "href": "principles.html#experimental-considerations", "title": "\n1  Hi-C pre-processing steps\n", "section": "\n1.1 Experimental considerations", - "text": "1.1 Experimental considerations\n\n1.1.1 Experimental approach\nThe Hi-C procedure (Lieberman-Aiden et al. (2009)) stems from the clever combination of high-throughput sequencing and Chromatin Conformation Capture (3C) experimental approach (Dekker et al. (2002)).\nIn Hi-C, chromatin is crosslinked within intact nuclei and enzymatically digested (usually with one or several restriction enzymes, but Hi-C variants using MNase or DNase exist). End-repair introduces biotinylated dNTPs and is followed by religation, which generates chimeric DNA fragments consisting of genomic loci originally lying in spatial proximity, usually crosslinked to a shared protein complex. After religation, DNA fragments are sheared, biotin-containing fragments are pulled-down and converted into a sequencing library.\n\n\n1.1.2 C variants\nA number of C variants have been proposed since the publication of the original 3C method (reviewed by Davies et al. (2017)), the main ones being Capture-C and ChIA-PET (see procedure below).\n\nCapture-C is useful to quantify interactions between a set of regulatory elements of interest. ChIA-PET, on the other hand, can identify interactions mediated by a specific protein of interest. Finally, an increasing number of Hi-C approaches rely on long-read sequencing (e.g. Deshpande et al. (2022), Tavares-Cadete et al. (2020)) to identify clusters of 3D contacts.\n\n1.1.3 Sequencing\nHi-C libraries are traditionally sequenced with short-read technology, and are by essence paired-end libraries. For this reason, the end result of the experimental side of the Hi-C consists of two fastq files, each one containing sequences for one extremity of the DNA fragments purified during Hi-C. These are the two files we need to move on to the computational side of Hi-C.\n\n\n\n\n\n\nWhat is a fastq file?\n\n\n\nFastq files are plain text files (usually compressed, with the .gz extension). They are generated by the sequencing machine during a sequencing run, and for Hi-C, necessarily come in pairs, generally called *_R1.fq.gz and *_R2.fq.gz.\nHere is the first read listed in sample_R1.fq.gz file:\n\n\nsample_R1.fq.gz\n\n@SRR5399542.1.1 DH1DQQN1:393:H9GEWADXX:1:1101:1187:2211 length=24\nCAACTTCAATACCAGCAGCAGCAA\n+\nCCCFFFFFHHHHHJJJJJIJJJJJ\n\nAnd here is the first read listed in sample_R2.fq.gz file:\n\n\nsample_R2.fq.gz\n\n@SRR5399542.1.1 DH1DQQN1:393:H9GEWADXX:1:1101:1187:2211 length=24\nGCTGTTGTTGTTGTTGTATTTGCA\n+\n@@@FFFFFFHHHHIJJIJJHIIEH\n\nThese two reads are the first listed in their respective file. Notice how they bear the same name (first line): they form a pair. The second line corresponds to the sequence read by the sequencer, the third line is a single + separator, and the last line indicates the per-base sequencing quality following a nebulous cypher." + "text": "1.1 Experimental considerations\n\n1.1.1 Experimental approach\nThe Hi-C procedure (Lieberman-Aiden et al. (2009)) stems from the clever combination of high-throughput sequencing and Chromatin Conformation Capture (3C) experimental approach (Dekker et al. (2002)).\nIn Hi-C, chromatin is crosslinked within intact nuclei and enzymatically digested (usually with one or several restriction enzymes, but Hi-C variants using MNase or DNase exist). End-repair introduces biotinylated dNTPs and is followed by religation, which generates chimeric DNA fragments consisting of genomic loci originally lying in spatial proximity, usually crosslinked to a shared protein complex. After religation, DNA fragments are sheared, biotin-containing fragments are pulled-down and converted into a sequencing library.\n\n\n1.1.2 C variants\nA number of C variants have been proposed since the publication of the original 3C method (reviewed by Davies et al. (2017)), the main ones being Capture-C and ChIA-PET (see procedure below).\n\nCapture-C is useful to quantify interactions between a set of regulatory elements of interest. ChIA-PET, on the other hand, can identify interactions mediated by a specific protein of interest. Finally, an increasing number of Hi-C approaches rely on long-read sequencing (e.g. Deshpande et al. (2022), Tavares-Cadete et al. (2020)) to identify clusters of 3D contacts.\n\n1.1.3 Sequencing\nHi-C libraries are traditionally sequenced with short-read technology, and are by essence paired-end libraries. For this reason, the end result of the experimental side of the Hi-C consists of two fastq files, each one containing sequences for one extremity of the DNA fragments purified during Hi-C. These are the two files we need to move on to the computational side of Hi-C.\nFastq files are plain text files (usually compressed, with the .gz extension). They are generated by the sequencing machine during a sequencing run, and for Hi-C, necessarily come in pairs, generally called *_R1.fq.gz and *_R2.fq.gz.\nHere is the first read listed in sample_R1.fq.gz file:\n\n\nsample_R1.fq.gz\n\n@SRR5399542.1.1 DH1DQQN1:393:H9GEWADXX:1:1101:1187:2211 length=24\nCAACTTCAATACCAGCAGCAGCAA\n+\nCCCFFFFFHHHHHJJJJJIJJJJJ\n\nAnd here is the first read listed in sample_R2.fq.gz file:\n\n\nsample_R2.fq.gz\n\n@SRR5399542.1.1 DH1DQQN1:393:H9GEWADXX:1:1101:1187:2211 length=24\nGCTGTTGTTGTTGTTGTATTTGCA\n+\n@@@FFFFFFHHHHIJJIJJHIIEH\n\nThese two reads are the first listed in their respective file. Notice how they bear the same name (first line): they form a pair. The second line corresponds to the sequence read by the sequencer, the third line is a single + separator, and the last line indicates the per-base sequencing quality following a nebulous cypher." }, { "objectID": "principles.html#hi-c-file-formats", "href": "principles.html#hi-c-file-formats", "title": "\n1  Hi-C pre-processing steps\n", "section": "\n1.2 Hi-C file formats", - "text": "1.2 Hi-C file formats\nTwo important output files are typically generated during Hi-C data pre-processing:\n\nA “pairs” file\nA binned “contact matrix” file\n\nWe will now describe the structure of these different types of files. Directly jump to the next chapter if you want to know more about importing data from a contact matrix or a pairs file in R.\n\n1.2.1 Pairs files\nA “pairs” file (optionally, but generally filtered and sorted) is the direct output of processing Hi-C fastq files. It stores information about putative proximity contacts identified by digestion/religation, in the lossless, human-readable, indexable format: the .pairs format.\n\n\n\n\n\n\nWhat is a .pairs file?\n\n\n\nA .pairs file is organized in a header followed by a body:\n\n\nheader: starts with #\n\nRequired entries\n\nFirst line: ## pairs format v1.0\n\n\n#columns: column contents and ordering (e.g. #columns: readID chr1 pos1 chr2 pos2 strand1 strand2 <column_name> <column_name> ...)\n\n#chromsize: chromosome names and their size in bp, one chromosome per line, in the same order that defines ordering between mates (e.g. #chromsize: chr1 230218). Chromosome order is actually defined by this header, not by the order of pairs listed in the body!\n\n\nOptional entries with reserved header keys (sorted, shape, command, genome_assembly)\n\n\n#sorted: to indicate the sorting mechanism (e.g. #sorted: chr1-chr2-pos1-pos2, #sorted: chr1-pos1, #sorted: none)\n\n#shape: to specify whether the matrix is stored as upper triangle or lower triangle (#shape: upper triangle, #shape: lower triangle)\n\n#command: to specify any command, e.g. the command used to generate the pairs file (#command: bam2pairs mysample.bam mysample)\n\n#genome_assembly: to specify the genome assembly (e.g. #genome_assembly: hg38)\n\n\n\n\n\nbody: tab-separated columns\n\n7 reserved (4 of them required) columns:\n\nreadID, chr1, pos1, chr2, pos2, strand1, strand2\nColumns 2-5 (chr1, pos1, chr2, pos2) are required and cannot have missing values\nFor column 1, 6 & 7: missing values are annotated with a single-character dummy (.)\n\n\n2 extra reserved, optional column names:\n\n\nfrag1, frag2: restriction enzyme fragment index used by Juicer\n\n\n\nAny number of optional columns can be added\n\n\n\n\n\nsample.pairs\n\n## pairs format v1.0\n#sorted: chr1-chr2-pos1-pos2\n#shape: upper triangle\n#genome_assembly: hg38\n#chromsize: chr1 249250621\n#chromsize: chr2 243199373\n#chromsize: chr3 198022430\n...\n#columns: readID chr1 pos1 chr2 pos2 strand1 strand2\nEAS139:136:FC706VJ:2:2104:23462:197393 chr1 10000 chr1 20000 + +\nEAS139:136:FC706VJ:2:8762:23765:128766 chr1 50000 chr1 70000 + +\nEAS139:136:FC706VJ:2:2342:15343:9863 chr1 60000 chr2 10000 + +\nEAS139:136:FC706VJ:2:1286:25:275154 chr1 30000 chr3 40000 + -\n\n\n\nMore information about the conventions related to this text file are provided by the 4DN consortium, which originally formalized the specifications of this file format.\n\n1.2.2 Binned contact matrix files\n\n1.2.2.1 Binning pairs into a matrix\nThe action of “binning” a .pairs file into a contact matrix consists in (1) discretizing a genome reference into genomic bins, (2) attributing bins for each pair’s extremity and (3) computing the interaction frequency between any pair of genomic bins, i.e. the “contact matrix”.\nFor instance, here is a dummy .pairs file with a total of 5 pairs:\n\n\ndummy.pairs\n\n## pairs format v1.0\n#sorted: chr1-chr2-pos1-pos2\n#columns: readID chr1 pos1 chr2 pos2 strand1 strand2\n#chromsize: chr1 389\n. chr1 162 chr1 172 . . \n. chr1 180 chr1 192 . . \n. chr1 183 chr1 254 . .\n. chr1 221 chr1 273 . . \n. chr1 254 chr1 298 . . \n\nNote that this genome reference is made of a single chromosome (chr1), very short (length of 389). By binning this chromosome in 100bp-wide bins (100 bp is the resolution), one would optain the following four bins:\n\n\nbins.bed\n\n<chr> <pos> <bin>\nchr1 1 100\nchr1 101 200\nchr1 201 300\nchr1 301 389\n\nEach pair extremity can be changed to an integer indicating the position of the bin it falls in, e.g. for the left-hand extremity of the pairs file printed hereinabove (bin1):\n<chr1> <pos1> -> <bin1>\nchr1 162 -> 2\nchr1 180 -> 2\nchr1 183 -> 2\nchr1 221 -> 3\nchr1 254 -> 3\nSimilarly for the right-hand extremity of the pairs file (bin2):\n<chr2> <pos2> -> <bin2>\nchr1 172 -> chr1 2\nchr1 192 -> chr1 2\nchr1 254 -> chr1 3\nchr1 273 -> chr1 3\nchr1 298 -> chr1 3\nBy pasting side-to-side the left-hand and right-hand extremities of each pair, the .pairs file can be turned into something like:\n<bin1> <bin2>\n2 2\n2 2\n2 3\n3 3\n3 3\nAnd if we now count the number of each <bin1> <bin2> combinaison, adding a third <count> column, we end up with a count.matrix text file:\n\n\ncount.matrix\n\n<bin1> <bin2> <count>\n2 2 2\n2 3 1\n3 3 2\n\nThis count.matrix file lists a total of 5 pairs, and in which bin each extremity of each pair is contained. Thus, a count matrix is a lossy file format, as it “rounds up” the position of each pair’s extremity to the genomic bin containing it.\nThis “i-j-x” 3-column format, in which i-j relate to a pair of “coordinates” indices (or a pair of genomic bin indices) in a matrix, and x relates to a score associated with the pair of indices, is generally called a “COO sparse matrix”.\nIn this context, the regions.bed acts as a secondary “dictionary” describing the nature of i and j indices, i.e. the location of genomic bins.\n\n1.2.2.2 Plain-text matrices: HiC-Pro style\nThe HiC-Pro pipeline (Servant et al. (2015)) outputs 2 text files: a regions.bed file and a count.matrix file. They are generated by the exact process explained above.\nTogether, these two files can describe the interaction frequency between any pair of genomic loci. They are non-binarized text files, and as such are technically human-readable. However, it is relatively hard to get a grasp of these files compared to a plain .pairs file, as information regarding genomic bins and interaction frequencies are stored in separate files. Moreover, because they are non-binarized, these files often end up using a large disk space and cannot be easily indexed. This prevents easy subsetting of the data stored in these files.\n.(m)cool and .hic file formats are two standards addressing these limitations.\n\n1.2.2.3 .(m)cool matrices\nThe .cool format has been formally defined in Abdennur & Mirny (2019) and is a particular type of HDF5 (Hierarchical Data Format) file. It is an indexed archive file storing rectangular tables called:\n\n\nbins: containing the same information than the regions.bed file;\n\npixels: containing the same information than the count.matrix (each “pixel” is a pair of 2 bins and has one or several associated scores);\n\nchroms: summarizing the order and length of the chromosomes present in a Hi-C contact matrix;\n\nindexes: allowing random access, i.e. parsing of only a subset of the data without having to read through the entire set of data.\n\n\nA single .pairs file binned at different resolutions can also be saved into a single, multi-resolution .mcool file. .mcool essentially consists of nested .cool files.\nImportantly, as an HDF5-based format, .cool files are binarized, indexed and highly-compressed. This has two major benefits:\n\nSmaller disk storage footprint\n\nRapid subsetting of the data through random access\n\n\nMoreover, parsing .cool files is possible using HDF standard APIs.\n\n1.2.2.4 .hic matrices\nThe .hic format is another type of binarized, indexed and highly-compressed file (Durand et al. (2016)). It can store virtually the same information than a .cool file. However, parsing .hic files is not as straightforward as .cool files, as it does not rely on a generic file standard. Still, the straw library has been implemented in several computing languages to facilitate parsing of .hic files (Durand et al. (2016))." + "text": "1.2 Hi-C file formats\nTwo important output files are typically generated during Hi-C data pre-processing:\n\nA “pairs” file;\nA binned “contact matrix” file\n\nWe will now describe the structure of these different types of files. Directly jump to the next chapter if you want to know more about importing data from a contact matrix or a pairs file in R.\n\n1.2.1 Pairs files\nA “pairs” file (optionally, but generally filtered and sorted) is the direct output of processing Hi-C fastq files. It stores information about putative proximity contacts identified by digestion/religation, in the lossless, human-readable, indexable format: the .pairs format.\nA .pairs file is organized in a header followed by a body:\n\n\nheader: starts with #\n\nRequired entries\n\nFirst line: ## pairs format v1.0\n\n\n#columns: column contents and ordering (e.g. #columns: readID chr1 pos1 chr2 pos2 strand1 strand2 <column_name> <column_name> ...)\n\n#chromsize: chromosome names and their size in bp, one chromosome per line, in the same order that defines ordering between mates (e.g. #chromsize: chr1 230218). Chromosome order is actually defined by this header, not by the order of pairs listed in the body!\n\n\nOptional entries with reserved header keys (sorted, shape, command, genome_assembly)\n\n\n#sorted: to indicate the sorting mechanism (e.g. #sorted: chr1-chr2-pos1-pos2, #sorted: chr1-pos1, #sorted: none)\n\n#shape: to specify whether the matrix is stored as upper triangle or lower triangle (#shape: upper triangle, #shape: lower triangle)\n\n#command: to specify any command, e.g. the command used to generate the pairs file (#command: bam2pairs mysample.bam mysample)\n\n#genome_assembly: to specify the genome assembly (e.g. #genome_assembly: hg38)\n\n\n\n\n\nbody: tab-separated columns\n\n7 reserved (4 of them required) columns:\n\nreadID, chr1, pos1, chr2, pos2, strand1, strand2\nColumns 2-5 (chr1, pos1, chr2, pos2) are required and cannot have missing values\nFor column 1, 6 & 7: missing values are annotated with a single-character dummy (.)\n\n\n2 extra reserved, optional column names:\n\n\nfrag1, frag2: restriction enzyme fragment index used by Juicer\n\n\n\nAny number of optional columns can be added\n\n\n\n\n\nsample.pairs\n\n## pairs format v1.0\n#sorted: chr1-chr2-pos1-pos2\n#shape: upper triangle\n#genome_assembly: hg38\n#chromsize: chr1 249250621\n#chromsize: chr2 243199373\n#chromsize: chr3 198022430\n...\n#columns: readID chr1 pos1 chr2 pos2 strand1 strand2\nEAS139:136:FC706VJ:2:2104:23462:197393 chr1 10000 chr1 20000 + +\nEAS139:136:FC706VJ:2:8762:23765:128766 chr1 50000 chr1 70000 + +\nEAS139:136:FC706VJ:2:2342:15343:9863 chr1 60000 chr2 10000 + +\nEAS139:136:FC706VJ:2:1286:25:275154 chr1 30000 chr3 40000 + -\n\nMore information about the conventions related to this text file are provided by the 4DN consortium, which originally formalized the specifications of this file format.\n\n1.2.2 Binned contact matrix files\n\n1.2.2.1 Binning pairs into a matrix\nThe action of “binning” a .pairs file into a contact matrix consists in (1) discretizing a genome reference into genomic bins, (2) attributing bins for each pair’s extremity and (3) computing the interaction frequency between any pair of genomic bins, i.e. the “contact matrix”.\nFor instance, here is a dummy .pairs file with a total of 5 pairs:\n\n\ndummy.pairs\n\n## pairs format v1.0\n#sorted: chr1-chr2-pos1-pos2\n#columns: readID chr1 pos1 chr2 pos2 strand1 strand2\n#chromsize: chr1 389\n. chr1 162 chr1 172 . . \n. chr1 180 chr1 192 . . \n. chr1 183 chr1 254 . .\n. chr1 221 chr1 273 . . \n. chr1 254 chr1 298 . . \n\nNote that this genome reference is made of a single chromosome (chr1), very short (length of 389). By binning this chromosome in 100bp-wide bins (100 bp is the resolution), one would optain the following four bins:\n\n\nbins.bed\n\n<chr> <pos> <bin>\nchr1 1 100\nchr1 101 200\nchr1 201 300\nchr1 301 389\n\nEach pair extremity can be changed to an integer indicating the position of the bin it falls in, e.g. for the left-hand extremity of the pairs file printed hereinabove (bin1):\n<chr1> <pos1> -> <bin1>\nchr1 162 -> 2\nchr1 180 -> 2\nchr1 183 -> 2\nchr1 221 -> 3\nchr1 254 -> 3\nSimilarly for the right-hand extremity of the pairs file (bin2):\n<chr2> <pos2> -> <bin2>\nchr1 172 -> chr1 2\nchr1 192 -> chr1 2\nchr1 254 -> chr1 3\nchr1 273 -> chr1 3\nchr1 298 -> chr1 3\nBy pasting side-to-side the left-hand and right-hand extremities of each pair, the .pairs file can be turned into something like:\n<bin1> <bin2>\n2 2\n2 2\n2 3\n3 3\n3 3\nAnd if we now count the number of each <bin1> <bin2> combinaison, adding a third <count> column, we end up with a count.matrix text file:\n\n\ncount.matrix\n\n<bin1> <bin2> <count>\n2 2 2\n2 3 1\n3 3 2\n\nThis count.matrix file lists a total of 5 pairs, and in which bin each extremity of each pair is contained. Thus, a count matrix is a lossy file format, as it “rounds up” the position of each pair’s extremity to the genomic bin containing it.\nThis “i-j-x” 3-column format, in which i-j relate to a pair of “coordinates” indices (or a pair of genomic bin indices) in a matrix, and x relates to a score associated with the pair of indices, is generally called a “COO sparse matrix”.\nIn this context, the regions.bed acts as a secondary “dictionary” describing the nature of i and j indices, i.e. the location of genomic bins.\n\n1.2.2.2 Plain-text matrices: HiC-Pro style\nThe HiC-Pro pipeline (Servant et al. (2015)) outputs 2 text files: a regions.bed file and a count.matrix file. They are generated by the exact process explained above.\nTogether, these two files can describe the interaction frequency between any pair of genomic loci. They are non-binarized text files, and as such are technically human-readable. However, it is relatively hard to get a grasp of these files compared to a plain .pairs file, as information regarding genomic bins and interaction frequencies are stored in separate files. Moreover, because they are non-binarized, these files often end up using a large disk space and cannot be easily indexed. This prevents easy subsetting of the data stored in these files.\n.(m)cool and .hic file formats are two standards addressing these limitations.\n\n1.2.2.3 .(m)cool matrices\nThe .cool format has been formally defined in Abdennur & Mirny (2019) and is a particular type of HDF5 (Hierarchical Data Format) file. It is an indexed archive file storing rectangular tables called:\n\n\nbins: containing the same information than the regions.bed file;\n\npixels: containing the same information than the count.matrix (each “pixel” is a pair of 2 bins and has one or several associated scores);\n\nchroms: summarizing the order and length of the chromosomes present in a Hi-C contact matrix;\n\nindexes: allowing random access, i.e. parsing of only a subset of the data without having to read through the entire set of data.\n\n\nA single .pairs file binned at different resolutions can also be saved into a single, multi-resolution .mcool file. .mcool essentially consists of nested .cool files.\nImportantly, as an HDF5-based format, .cool files are binarized, indexed and highly-compressed. This has two major benefits:\n\nSmaller disk storage footprint\n\nRapid subsetting of the data through random access\n\n\nMoreover, parsing .cool files is possible using HDF standard APIs.\n\n1.2.2.4 .hic matrices\nThe .hic format is another type of binarized, indexed and highly-compressed file (Durand et al. (2016)). It can store virtually the same information than a .cool file. However, parsing .hic files is not as straightforward as .cool files, as it does not rely on a generic file standard. Still, the straw library has been implemented in several computing languages to facilitate parsing of .hic files (Durand et al. (2016))." }, { "objectID": "principles.html#pre-processing-hi-c-data", "href": "principles.html#pre-processing-hi-c-data", "title": "\n1  Hi-C pre-processing steps\n", "section": "\n1.3 Pre-processing Hi-C data", - "text": "1.3 Pre-processing Hi-C data\n\n1.3.1 Processing workflow\nFundamentally, the main steps performed to pre-process Hi-C are:\n\nSeparate read mapping\nPairs parsing\nPairs sorting\nPairs filtering\nPairs binning into a contact matrix\nNormalization of contact matrix and multi-resolution matrix generation\n\n\nIn practice, a minimal workflow to pre-process Hi-C data is the following (adapted from Open2C et al. (2023)):\n\n## Note these fields have to be replaced by appropriate variables: \n## <index>\n## <input.R1.fq.gz>\n## <input.R2.fq.gz>\n## <chromsizes.txt>\n## <prefix>\nbwa mem2 -SP5M <index> <input.R1.fq.gz> <input.R2.fq.gz> \\\n | pairtools parse -c <chromsizes.txt> \\\n | pairtools sort \\\n | pairtools dedup \\\n | cooler cload pairs -c1 2 -p1 3 -c2 4 -p2 5 <chromsizes.txt>:10000 - <prefix>.cool\ncooler zoomify --balance --nproc 32 --resolutions 5000N --out <prefix>.mcool <prefix>.cool\n\nSeveral pipelines have been developed to facilitate Hi-C data pre-processing. A few of them stand out from the crowd:\n\n\nnf-distiller: a combination of an aligner + pairtools + cooler\n\n\nHiC-pro (Servant et al. (2015))\n\nJuicer (Durand et al. (2016))\n\n\n\n\n\n\n\nNote\n\n\n\nFor larger genomes (> 1Gb) with more than few tens of M of reads per fastq (e.g. > 100M), we recommend pre-processing data on an HPC cluster. Aligners, pairs processing and matrix binning can greatly benefit from parallelization over multiple CPUs (Open2C et al. (2023))).\nTo scale up data pre-processing, we recommend to rely on an efficient read mapper such as bwa, followed by pairs parsing, sorting and deduplication with pairtools and binning with cooler.\n\n\n\n1.3.2 hicstuff: lightweight Hi-C pipeline\nhicstuff is an integrated workflow to process Hi-C data. Some advantages compared to solutions mentioned above are its simplicity, flexibility and lightweight. For shallow sequencing or Hi-C on smaller genomes, it efficiently parses fastq reads and processes data into binned contact matrices with a single terminal command.\nhicstuff provides both a command-line interface (CLI) and a python API to process fastq reads into a binned contact matrix. A processing pipeline can be launched using the standard command pipeline as follows:\n\n## Note these fields have to be replaced by appropriate variables: \n## <hicstuff-options>\n## <genome.fa>\n## <input.R1.fq.gz>\n## <input.R2.fq.gz>\nhicstuff pipeline \\\n <hicstuff-options> \\\n --genome <genome.fa> \\\n <input.R1.fq.gz> \\\n <input.R2.fq.gz> \n\nhicstuff documentation website is available here: https://hicstuff.readthedocs.io/ to read more about available options and internal processing steps.\n\n1.3.3 HiCool: hicstuff within R\nhicstuff is available as a standalone (conda install -c bioconda hicstuff it!). It is also shipped in an R package: HiCool. Thus, HiCool can process fastq files directly within an R console.\n\n1.3.3.1 Executing HiCool\nTo demonstrate this, we first fetch example .fastq files:\n\nlibrary(HiContactsData)\nr1 <- HiContactsData(sample = 'yeast_wt', format = 'fastq_R1')\nr2 <- HiContactsData(sample = 'yeast_wt', format = 'fastq_R2')\n\nWe then load the HiCool library and execute the main HiCool function.\n\nlibrary(HiCool)\n## Loading required package: HiCExperiment\n## Consider using the `HiContacts` package to perform advanced genomic operations \n## on `HiCExperiment` objects.\n## \n## Read \"Orchestrating Hi-C analysis with Bioconductor\" online book to learn more:\n## https://js2264.github.io/OHCA/\nHiCool(\n r1, \n r2, \n restriction = 'DpnII,HinfI', \n resolutions = c(4000, 8000, 16000), \n genome = 'R64-1-1', \n output = './HiCool/'\n)\n## HiCool :: Fetching bowtie genome index files from AWS iGenomes S3 bucket...\n## HiCool :: Recovering bowtie2 genome index from AWS iGenomes...\n## + /github/home/.cache/R/basilisk/1.13.4/0/bin/conda 'create' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.13.4/HiCool/1.1.0/env' 'python=3.7.12' '--quiet' '-c' 'conda-forge' '-c' 'bioconda'\n## + /github/home/.cache/R/basilisk/1.13.4/0/bin/conda 'install' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.13.4/HiCool/1.1.0/env' 'python=3.7.12'\n## + /github/home/.cache/R/basilisk/1.13.4/0/bin/conda 'install' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.13.4/HiCool/1.1.0/env' '-c' 'conda-forge' '-c' 'bioconda' 'python=3.7.12' 'python=3.7.12' 'bowtie2=2.5.0' 'samtools=1.16.1' 'hicstuff=3.1.5' 'chromosight=1.6.3' 'cooler=0.9.1'\n## HiCool :: Initiating processing of fastq files [tmp folder: /tmp/RtmpIWmk55/WL4DIE]...\n## HiCool :: Mapping fastq files...\n## HiCool :: Removing unwanted chromosomes...\n## HiCool :: Parsing pairs into .cool file...\n## HiCool :: Generating multi-resolution .mcool file...\n## HiCool :: Balancing .mcool file...\n## HiCool :: Tidying up everything for you...\n## HiCool :: .fastq to .mcool processing done!\n## HiCool :: Check ./HiCool/folder to find the generated files\n## HiCool :: Generating HiCool report. This might take a while.\n## HiCool :: Report generated and available @ /__w/OHCA/OHCA/HiCool/14976d56f7a_7833^mapped-R64-1-1^WL4DIE.html\n## HiCool :: All processing successfully achieved. Congrats!\n## CoolFile object\n## .mcool file: ./HiCool//matrices/14976d56f7a_7833^mapped-R64-1-1^WL4DIE.mcool \n## resolution: 4000 \n## pairs file: ./HiCool//pairs/14976d56f7a_7833^mapped-R64-1-1^WL4DIE.pairs \n## metadata(3): log args stats\n\n\n\n\n\n\n\nHiCool arguments\n\n\n\nSeveral arguments can be passed to HiCool and some are worth mentioning them:\n- restriction: (default: \"DpnII,HinfI\")\n- resolutions: (default: NULL, automatically inferring resolutions based on genome size)\n- iterative: (default: TRUE)\n- filter: (default: TRUE)\n- balancing_args: (default: \" --cis-only --min-nnz 3 --mad-max 7 \")\n- threads: (default: 1L)\n\n\nOther HiCool arguments can be listed by checking HiCool documentation in R: ?HiCool::HiCool.\n\n1.3.3.2 HiCool outputs\nWe can check the generated output files placed in the HiCool/ directory.\n\nfs::dir_tree('HiCool/')\n## HiCool/\n## ├── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE.html\n## ├── logs\n## │ └── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE.log\n## ├── matrices\n## │ └── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE.mcool\n## ├── pairs\n## │ └── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE.pairs\n## └── plots\n## ├── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE_event_distance.pdf\n## └── 14976d56f7a_7833^mapped-R64-1-1^WL4DIE_event_distribution.pdf\n\n\nThe *.pairs and *.mcool files are the pairs and contact matrix files, respectively. These are the output files the end-user is generally looking for.\n\nThe *.html file is a report summarizing pairs numbers, filtering, etc…\nThe *.log file contains all output and error messages, as well as the full list of commands that have been executed to pre-process the input dataset.\nThe *.pdf graphic files provide a visual representation of the distribution of informative/non-informative pairs.\n\n\n\n\n\n\n\nTip\n\n\n\nAll the files generated by a single HiCool pipeline execution contain the same 6-letter unique hash to make sure they are not overwritten if re-executing the same command." + "text": "1.3 Pre-processing Hi-C data\n\n1.3.1 Processing workflow\nFundamentally, the main steps performed to pre-process Hi-C are:\n\nSeparate read mapping\nPairs parsing\nPairs sorting\nPairs filtering\nPairs binning into a contact matrix\nNormalization of contact matrix and multi-resolution matrix generation\n\n\nIn practice, a minimal workflow to pre-process Hi-C data is the following (adapted from Open2C et al. (2023)):\n\n## Note these fields have to be replaced by appropriate variables: \n## <index>\n## <input.R1.fq.gz>\n## <input.R2.fq.gz>\n## <chromsizes.txt>\n## <prefix>\nbwa mem2 -SP5M <index> <input.R1.fq.gz> <input.R2.fq.gz> \\\n | pairtools parse -c <chromsizes.txt> \\\n | pairtools sort \\\n | pairtools dedup \\\n | cooler cload pairs -c1 2 -p1 3 -c2 4 -p2 5 <chromsizes.txt>:10000 - <prefix>.cool\ncooler zoomify --balance --nproc 32 --resolutions 5000N --out <prefix>.mcool <prefix>.cool\n\nSeveral pipelines have been developed to facilitate Hi-C data pre-processing. A few of them stand out from the crowd:\n\n\nnf-distiller: a combination of an aligner + pairtools + cooler\n\n\nHiC-pro (Servant et al. (2015))\n\nJuicer (Durand et al. (2016))\n\n\n\n\n\n\n\nNote\n\n\n\nFor larger genomes (> 1Gb) with more than few tens of M of reads per fastq (e.g. > 100M), we recommend pre-processing data on an HPC cluster. Aligners, pairs processing and matrix binning can greatly benefit from parallelization over multiple CPUs (Open2C et al. (2023))).\nTo scale up data pre-processing, we recommend to rely on an efficient read mapper such as bwa, followed by pairs parsing, sorting and deduplication with pairtools and binning with cooler.\n\n\n\n1.3.2 hicstuff: lightweight Hi-C pipeline\nhicstuff is an integrated workflow to process Hi-C data. Some advantages compared to solutions mentioned above are its simplicity, flexibility and lightweight. For shallow sequencing or Hi-C on smaller genomes, it efficiently parses fastq reads and processes data into binned contact matrices with a single terminal command.\nhicstuff provides both a command-line interface (CLI) and a python API to process fastq reads into a binned contact matrix. A processing pipeline can be launched using the standard command pipeline as follows:\n\n## Note these fields have to be replaced by appropriate variables: \n## <hicstuff-options>\n## <genome.fa>\n## <input.R1.fq.gz>\n## <input.R2.fq.gz>\nhicstuff pipeline \\\n <hicstuff-options> \\\n --genome <genome.fa> \\\n <input.R1.fq.gz> \\\n <input.R2.fq.gz> \n\nhicstuff documentation website is available here: https://hicstuff.readthedocs.io/ to read more about available options and internal processing steps.\n\n1.3.3 HiCool: hicstuff within R\nhicstuff is available as a standalone (conda install -c bioconda hicstuff it!). It is also shipped in an R package: HiCool. Thus, HiCool can process fastq files directly within an R console.\n\n1.3.3.1 Executing HiCool\nTo demonstrate this, we first fetch example .fastq files:\n\nlibrary(HiContactsData)\nr1 <- HiContactsData(sample = 'yeast_wt', format = 'fastq_R1')\nr2 <- HiContactsData(sample = 'yeast_wt', format = 'fastq_R2')\n\nWe then load the HiCool library and execute the main HiCool function.\n\nlibrary(HiCool)\n## Loading required package: HiCExperiment\n## Consider using the `HiContacts` package to perform advanced genomic operations \n## on `HiCExperiment` objects.\n## \n## Read \"Orchestrating Hi-C analysis with Bioconductor\" online book to learn more:\n## https://js2264.github.io/OHCA/\nHiCool(\n r1, \n r2, \n restriction = 'DpnII,HinfI', \n resolutions = c(4000, 8000, 16000), \n genome = 'R64-1-1', \n output = './HiCool/'\n)\n## HiCool :: Fetching bowtie genome index files from AWS iGenomes S3 bucket...\n## HiCool :: Recovering bowtie2 genome index from AWS iGenomes...\n## + /github/home/.cache/R/basilisk/1.14.0/0/bin/conda 'create' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.14.0/HiCool/1.2.0/env' 'python=3.7.12' '--quiet' '-c' 'conda-forge' '-c' 'bioconda'\n## + /github/home/.cache/R/basilisk/1.14.0/0/bin/conda 'install' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.14.0/HiCool/1.2.0/env' 'python=3.7.12'\n## + /github/home/.cache/R/basilisk/1.14.0/0/bin/conda 'install' '--yes' '--prefix' '/github/home/.cache/R/basilisk/1.14.0/HiCool/1.2.0/env' '-c' 'conda-forge' '-c' 'bioconda' 'python=3.7.12' 'python=3.7.12' 'bowtie2=2.5.0' 'samtools=1.16.1' 'hicstuff=3.1.5' 'chromosight=1.6.3' 'cooler=0.9.1'\n## HiCool :: Initiating processing of fastq files [tmp folder: /tmp/RtmpiR9EkC/WL4DIE]...\n## HiCool :: Mapping fastq files...\n## HiCool :: Removing unwanted chromosomes...\n## HiCool :: Parsing pairs into .cool file...\n## HiCool :: Generating multi-resolution .mcool file...\n## HiCool :: Balancing .mcool file...\n## HiCool :: Tidying up everything for you...\n## HiCool :: .fastq to .mcool processing done!\n## HiCool :: Check ./HiCool/folder to find the generated files\n## HiCool :: Generating HiCool report. This might take a while.\n## HiCool :: Report generated and available @ /__w/OHCA/OHCA/HiCool/148213ddba0_7833^mapped-R64-1-1^WL4DIE.html\n## HiCool :: All processing successfully achieved. Congrats!\n## CoolFile object\n## .mcool file: ./HiCool//matrices/148213ddba0_7833^mapped-R64-1-1^WL4DIE.mcool \n## resolution: 4000 \n## pairs file: ./HiCool//pairs/148213ddba0_7833^mapped-R64-1-1^WL4DIE.pairs \n## metadata(3): log args stats\n\n\n1.3.3.2 HiCool arguments\nSeveral arguments can be passed to HiCool and some are worth mentioning them:\n\n\nrestriction: (default: \"DpnII,HinfI\")\n\n\nresolutions: (default: NULL, automatically inferring resolutions based on genome size)\n\n\niterative: (default: TRUE)\n\n\nfilter: (default: TRUE)\n\n\nbalancing_args: (default: \" --cis-only --min-nnz 3 --mad-max 7 \")\n\n\nthreads: (default: 1L)\n\nOther HiCool arguments can be listed by checking HiCool documentation in R: ?HiCool::HiCool.\n\n1.3.3.3 HiCool outputs\nWe can check the generated output files placed in the HiCool/ directory.\n\nfs::dir_tree('HiCool/')\n## HiCool/\n## ├── 148213ddba0_7833^mapped-R64-1-1^WL4DIE.html\n## ├── logs\n## │ └── 148213ddba0_7833^mapped-R64-1-1^WL4DIE.log\n## ├── matrices\n## │ └── 148213ddba0_7833^mapped-R64-1-1^WL4DIE.mcool\n## ├── pairs\n## │ └── 148213ddba0_7833^mapped-R64-1-1^WL4DIE.pairs\n## └── plots\n## ├── 148213ddba0_7833^mapped-R64-1-1^WL4DIE_event_distance.pdf\n## └── 148213ddba0_7833^mapped-R64-1-1^WL4DIE_event_distribution.pdf\n\n\nThe *.pairs and *.mcool files are the pairs and contact matrix files, respectively. These are the output files the end-user is generally looking for.\n\nThe *.html file is a report summarizing pairs numbers, filtering, etc…\nThe *.log file contains all output and error messages, as well as the full list of commands that have been executed to pre-process the input dataset.\nThe *.pdf graphic files provide a visual representation of the distribution of informative/non-informative pairs.\n\n\n\n\n\n\n\nTip\n\n\n\nAll the files generated by a single HiCool pipeline execution contain the same 6-letter unique hash to make sure they are not overwritten if re-executing the same command." }, { "objectID": "principles.html#exploratory-data-analysis-of-processed-hi-c-files", @@ -95,28 +95,28 @@ "href": "data-representation.html#granges-class", "title": "\n2  Hi-C data structures in R\n", "section": "\n2.1 GRanges class", - "text": "2.1 GRanges class\nGRanges is a shorthand for GenomicRanges, a core class in Bioconductor. This class is primarily used to describe genomic ranges of any nature, e.g.  sets of promoters, SNPs, chromatin loop anchors, ….\nThe data structure has been published in the seminal 2015 publication by the Bioconductor team (Huber et al. (2015)).\n\n2.1.1 GRanges fundamentals\nThe easiest way to generate a GRanges object is to coerce it from a vector of genomic coordinates in the UCSC format (e.g. \"chr2:2004-4853\"):\n\nlibrary(GenomicRanges)\ngr <- GRanges(c(\n \"chr2:2004-7853:+\", \n \"chr4:4482-9873:-\", \n \"chr5:1943-4203:+\", \n \"chr5:4103-5004:+\" \n))\ngr\n## GRanges object with 4 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr2 2004-7853 +\n## [2] chr4 4482-9873 -\n## [3] chr5 1943-4203 +\n## [4] chr5 4103-5004 +\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\nA single GRanges object can contain one or several “ranges”, or genomic intervals. To navigate between these ranges, GRanges can be subset using the standard R single bracket notation [:\n\ngr[1]\n## GRanges object with 1 range and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr2 2004-7853 +\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\ngr[1:3]\n## GRanges object with 3 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr2 2004-7853 +\n## [2] chr4 4482-9873 -\n## [3] chr5 1943-4203 +\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\nGenomicRanges objects aim to provide a natural description of genomic intervals (ranges) and are incredibly versatile. They extend the data.frame object and have four required pieces of information:\n\n\nseqnames (i.e. chromosome names) (accessible with seqnames())\n\nstart (accessible with start())\n\nend (accessible with end())\n\nstrand (accessible with strand())\n\n\nseqnames(gr)\n## factor-Rle of length 4 with 3 runs\n## Lengths: 1 1 2\n## Values : chr2 chr4 chr5\n## Levels(3): chr2 chr4 chr5\n\nstart(gr)\n## [1] 2004 4482 1943 4103\n\nend(gr)\n## [1] 7853 9873 4203 5004\n\nstrand(gr)\n## factor-Rle of length 4 with 3 runs\n## Lengths: 1 1 2\n## Values : + - +\n## Levels(3): + - *\n\nHere is a graphical representation of a GRanges object, taken from Bioconductor course material:\n\nWe will now delve into the detailed structure and operability of GRanges objects.\n\n2.1.2 GRanges metadata\nAn important aspect of GRanges objects is that each entry (range) can have extra optional metadata. This metadata is stored in a rectangular DataFrame. Each column can contain a different type of information, e.g. a numerical vector, a factor, a list, …\nOne can directly access this DataFrame using the mcols() function, and individual columns of metadata using the $ notation:\n\nmcols(gr)\n## DataFrame with 4 rows and 0 columns\nmcols(gr)$GC <- c(0.45, 0.43, 0.44, 0.42)\nmcols(gr)$annotation <- factor(c(NA, 'promoter', 'enhancer', 'centromere'))\nmcols(gr)$extended.info <- c(\n list(c(NA)), \n list(c(date = 2023, source = 'manual')), \n list(c(date = 2021, source = 'manual')), \n list(c(date = 2019, source = 'homology'))\n)\nmcols(gr)\n## DataFrame with 4 rows and 3 columns\n## GC annotation extended.info\n## <numeric> <factor> <list>\n## 1 0.45 NA NA\n## 2 0.43 promoter 2023,manual\n## 3 0.44 enhancer 2021,manual\n## 4 0.42 centromere 2019,homology\n\nWhen metadata columns are defined for a GRanges object, they are pasted next to the minimal 4 required GRanges fields, separated by a | character.\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n\n2.1.3 Genomic arithmetics on individual GRanges objects\nA GRanges object primarily describes a set of genomic ranges (it is in the name!). Useful genomic-oriented methods have been implemented to investigate individual GRanges object from a genomic perspective.\n\n2.1.3.1 Intra-range methods\nStandard genomic arithmetics are possible with GRanges, e.g.  shifting ranges, resizing, trimming, … These methods are referred to as “intra-range” methods as they work “one-region-at-a-time”.\n\n\n\n\n\n\nNote\n\n\n\n\nEach range of the input GRanges object is modified independently from the other ranges in the following code chunks.\nIntra-range operations are endomorphisms: they all take GRanges inputs and always return GRanges objects.\n\n\n\n\nShifting each genomic range in a GRanges object by a certain number of bases:\n\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Shift all genomic ranges towards the \"right\" (downstream in `+` strand), by 1000bp:\nshift(gr, 1000)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 3004-8853 + | 0.45 NA <NA>\n## [2] chr4 5482-10873 - | 0.43 promoter 2023,manual\n## [3] chr5 2943-5203 + | 0.44 enhancer 2021,manual\n## [4] chr5 5103-6004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Shift all genomic ranges towards the \"left\" (upstream in `+` strand), by 1000bp:\nshift(gr, -1000)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 1004-6853 + | 0.45 NA <NA>\n## [2] chr4 3482-8873 - | 0.43 promoter 2023,manual\n## [3] chr5 943-3203 + | 0.44 enhancer 2021,manual\n## [4] chr5 3103-4004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n\nNarrowing each genomic range in a GRanges object by a certain number of bases:\n\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Extract 21st-40th subrange for each range in `gr`:\nnarrow(gr, start = 21, end = 40)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2024-2043 + | 0.45 NA <NA>\n## [2] chr4 4502-4521 - | 0.43 promoter 2023,manual\n## [3] chr5 1963-1982 + | 0.44 enhancer 2021,manual\n## [4] chr5 4123-4142 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\nwidth(narrow(gr, start = 21, end = 40))\n## [1] 20 20 20 20\n\n\nResizing each genomic range in a GRanges object to a certain number of bases:\n\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Resize `gr` entries to 100, fixed at the start of each range:\nresize(gr, 100, fix = \"start\")\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-2103 + | 0.45 NA <NA>\n## [2] chr4 9774-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-2042 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-4202 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Resize `gr` entries to 100, fixed at the start of each range, disregarding strand information:\nresize(gr, 100, fix = \"start\", ignore.strand = TRUE)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-2103 + | 0.45 NA <NA>\n## [2] chr4 4482-4581 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-2042 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-4202 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Resize `gr` entries to 1 bp, fixed at the center of each range:\nresize(gr, 1, fix = \"center\")\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 4928 + | 0.45 NA <NA>\n## [2] chr4 7177 - | 0.43 promoter 2023,manual\n## [3] chr5 3073 + | 0.44 enhancer 2021,manual\n## [4] chr5 4553 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n\nExtracting flanking coordinates for each entry in gr:\n\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Extract 100bp UPSTREAM of each genomic range, according to range strandness:\nflank(gr, 100, start = TRUE)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 1904-2003 + | 0.45 NA <NA>\n## [2] chr4 9874-9973 - | 0.43 promoter 2023,manual\n## [3] chr5 1843-1942 + | 0.44 enhancer 2021,manual\n## [4] chr5 4003-4102 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Extract 1bp DOWNSTREAM of each genomic range, according to range strandness:\nflank(gr, 1, start = FALSE)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 7854 + | 0.45 NA <NA>\n## [2] chr4 4481 - | 0.43 promoter 2023,manual\n## [3] chr5 4204 + | 0.44 enhancer 2021,manual\n## [4] chr5 5005 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\nNote how here again, strand information is crucial and correctly leveraged to extract “upstream” or “downstream” flanking regions in agreement with genomic range orientation.\n\nSeveral arithmetics operators can also directly work with GRanges:\n\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\ngr + 100 # ----- Extend each side of the `GRanges` by a given number of bases\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 1904-7953 + | 0.45 NA <NA>\n## [2] chr4 4382-9973 - | 0.43 promoter 2023,manual\n## [3] chr5 1843-4303 + | 0.44 enhancer 2021,manual\n## [4] chr5 4003-5104 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\ngr - 200 # ----- Shrink each side of the `GRanges` by a given number of bases \n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2204-7653 + | 0.45 NA <NA>\n## [2] chr4 4682-9673 - | 0.43 promoter 2023,manual\n## [3] chr5 2143-4003 + | 0.44 enhancer 2021,manual\n## [4] chr5 4303-4804 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\ngr * 1000 # ----- Zoom in by a given factor (effectively decreasing the `GRanges` width by the same factor)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 4926-4930 + | 0.45 NA <NA>\n## [2] chr4 7175-7179 - | 0.43 promoter 2023,manual\n## [3] chr5 3072-3073 + | 0.44 enhancer 2021,manual\n## [4] chr5 4554-4553 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n\n\n\n\n\n\nGoing further\n\n\n\nTo fully grasp how to operate GRanges objects, we highly recommend reading the detailed documentation for this class by typing ?GenomicRanges and ?GenomicRanges::`intra-range-methods`.\n\n\n\n2.1.3.2 Inter-range methods\nCompared to “intra-range” methods described above, inter-range methods involve comparisons between ranges in a single GRanges object.\n\n\n\n\n\n\nNote\n\n\n\nCompared to previous section, the result of each function described below depends on the entire set of ranges in the input GRanges object.\n\n\n\nComputing the “inverse” genomic ranges, i.e. ranges in-between the input ranges:\n\n\ngaps(gr)\n## GRanges object with 3 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr2 1-2003 +\n## [2] chr4 1-4481 -\n## [3] chr5 1-1942 +\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n\nFor each entry in a GRanges, finding the index of the preceding/following/nearest genomic range:\n\n\nprecede(gr)\n## [1] NA NA NA NA\n\nfollow(gr)\n## [1] NA NA NA NA\n\nnearest(gr)\n## [1] NA NA 4 3\n\n\nComputing a coverage over a genome, optionally indicated a “score” column from metadata:\n\n\ncoverage(gr, weight = 'GC')\n## RleList of length 3\n## $chr2\n## numeric-Rle of length 7853 with 2 runs\n## Lengths: 2003 5850\n## Values : 0.00 0.45\n## \n## $chr4\n## numeric-Rle of length 9873 with 2 runs\n## Lengths: 4481 5392\n## Values : 0.00 0.43\n## \n## $chr5\n## numeric-Rle of length 5004 with 4 runs\n## Lengths: 1942 2160 101 801\n## Values : 0.00 0.44 0.86 0.42\n\n\n\n\n\n\n\nGoing further\n\n\n\nTo fully grasp how to operate GRanges objects, we highly recommend reading the detailed documentation for this class by typing ?GenomicRanges::`inter-range-methods`.\n\n\n\n2.1.4 Comparing multiple GRanges objects\nGenomic analysis typically requires intersection of two sets of genomic ranges, e.g. to find which ranges from one set overlap with those from another set.\nIn the next examples, we will use two GRanges:\n\n\npeaks represents dummy 8 ChIP-seq peaks\n\n\npeaks <- GRanges(c(\n 'chr1:320-418',\n 'chr1:512-567',\n 'chr1:843-892',\n 'chr1:1221-1317', \n 'chr1:1329-1372', \n 'chr1:1852-1909', \n 'chr1:2489-2532', \n 'chr1:2746-2790'\n))\npeaks\n## GRanges object with 8 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 320-418 *\n## [2] chr1 512-567 *\n## [3] chr1 843-892 *\n## [4] chr1 1221-1317 *\n## [5] chr1 1329-1372 *\n## [6] chr1 1852-1909 *\n## [7] chr1 2489-2532 *\n## [8] chr1 2746-2790 *\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\n\nTSSs represents dummy 3 gene promoters (± 10bp around the TSS)\n\n\ngenes <- GRanges(c(\n 'chr1:358-1292:+',\n 'chr1:1324-2343:+', \n 'chr1:2732-2751:+'\n))\nTSSs <- resize(genes, width = 1, fix = 'start') + 10\nTSSs\n## GRanges object with 3 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 348-368 +\n## [2] chr1 1314-1334 +\n## [3] chr1 2722-2742 +\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\nLet’s see how they overlap by plotting them:\n\nlibrary(ggplot2)\npeaks$type <- 'peaks'\nTSSs$type <- 'TSSs'\nggplot() + \n ggbio::geom_rect(c(peaks, TSSs), aes(fill = type), facets = type~.) + \n ggbio::theme_alignment() + \n coord_fixed(ratio = 300)\n## Registered S3 method overwritten by 'GGally':\n## method from \n## +.gg ggplot2\n## Warning: The `facets` argument of `facet_grid()` is deprecated as of ggplot2 2.2.0.\n## ℹ Please use the `rows` argument instead.\n## ℹ The deprecated feature was likely used in the ggbio package.\n## Please report the issue at <https://github.com/lawremi/ggbio/issues>.\n## Scale for y is already present.\n## Adding another scale for y, which will replace the existing scale.\n\n\n\n\n\n\n\n\n2.1.4.1 Finding overlaps between two GRanges sets\n\nFinding overlaps between a query and a subject\n\nIn our case, we want to identify which ChIP-seq peaks overlap with a TSS: the query is the set of peaks and the subject is the set of TSSs.\nfindOverlaps returns a Hits object listing which query ranges overlap with which subject ranges.\n\nov <- findOverlaps(query = peaks, subject = TSSs)\nov\n## Hits object with 3 hits and 0 metadata columns:\n## queryHits subjectHits\n## <integer> <integer>\n## [1] 1 1\n## [2] 4 2\n## [3] 5 2\n## -------\n## queryLength: 8 / subjectLength: 3\n\nThe Hits output clearly describes what overlaps with what:\n\nThe query (peak) #1 overlaps with subject (TSS) #1\n\nThe query (peak) #5 overlaps with subject (TSS) #2\n\n\n\n\n\n\n\n\nNote\n\n\n\nBecause no other query index or subject index is listed in the ov output, none of the remaining ranges from query overlap with ranges from subject.\n\n\n\nSubsetting by overlaps between a query and a subject\n\nTo directly subset ranges from query overlapping with ranges from a subject (e.g. to only keep peaks overlapping a TSS), we can use the subsetByOverlaps function.\n\nsubsetByOverlaps(peaks, TSSs)\n## GRanges object with 3 ranges and 1 metadata column:\n## seqnames ranges strand | type\n## <Rle> <IRanges> <Rle> | <character>\n## [1] chr1 320-418 * | peaks\n## [2] chr1 1221-1317 * | peaks\n## [3] chr1 1329-1372 * | peaks\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\n\n\n\n\n\nNote\n\n\n\nThe output of subsetByOverlaps is a subset of the original GRanges object provided as a query, with retained ranges being unmodified.\n\n\n\nCounting overlaps between a query and a subject\n\nFinally, the countOverlaps is used to count, for each range in a query, how many ranges in the subject it overlaps with.\n\ncountOverlaps(query = peaks, subject = TSSs)\n## [1] 1 0 0 1 1 0 0 0\n\n\n\n\n\n\n\nNote\n\n\n\nNote that which GRanges goes in query or subject is crucial! Counting for each peak, the number of TSSs it overlaps with is very different from for each TSS, how many peaks it overlaps with.\nIn our case example, it would also be informative to count how many peaks overlap with each TSS, so we’d need to swap query and subject:\n\ncountOverlaps(query = TSSs, subject = peaks)\n## [1] 1 2 0\n\nWe can add these counts to the original query object:\n\nTSSs$n_peaks <- countOverlaps(query = TSSs, subject = peaks)\nTSSs\n## GRanges object with 3 ranges and 2 metadata columns:\n## seqnames ranges strand | type n_peaks\n## <Rle> <IRanges> <Rle> | <character> <integer>\n## [1] chr1 348-368 + | TSSs 1\n## [2] chr1 1314-1334 + | TSSs 2\n## [3] chr1 2722-2742 + | TSSs 0\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\n\n\n\n%over%, %within%, %outside% : handy operators\n\nHandy operators exist that return logical vectors (same length as the query). They essentially are short-hands for specific findOverlaps() cases.\n<query> %over% <subject>:\n\npeaks %over% TSSs\n## [1] TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE\n\npeaks[peaks %over% TSSs] # ----- Equivalent to `subsetByOverlaps(peaks, TSSs)`\n## GRanges object with 3 ranges and 1 metadata column:\n## seqnames ranges strand | type\n## <Rle> <IRanges> <Rle> | <character>\n## [1] chr1 320-418 * | peaks\n## [2] chr1 1221-1317 * | peaks\n## [3] chr1 1329-1372 * | peaks\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n<query> %within% <subject>:\n\npeaks %within% TSSs\n## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE\n\nTSSs %within% peaks\n## [1] TRUE FALSE FALSE\n\n<query> %outside% <subject>:\n\npeaks %outside% TSSs\n## [1] FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE\n\n\n\n\n\n\n\nGoing further\n\n\n\nTo fully grasp how to find overlaps between GRanges objects, we highly recommend reading the detailed documentation by typing ?IRanges::`findOverlaps-methods`.\n\n\n\n2.1.4.2 Find nearest range from a subject for each range in a query\n*Overlaps methods are not always enough to match a query to a subject. For instance, some peaks in the query might be very near to some TSSs in the subject, but not quite overlapping.\n\npeaks[8]\n## GRanges object with 1 range and 1 metadata column:\n## seqnames ranges strand | type\n## <Rle> <IRanges> <Rle> | <character>\n## [1] chr1 2746-2790 * | peaks\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\nTSSs[3]\n## GRanges object with 1 range and 2 metadata columns:\n## seqnames ranges strand | type n_peaks\n## <Rle> <IRanges> <Rle> | <character> <integer>\n## [1] chr1 2722-2742 + | TSSs 0\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\nnearest()\n\nRather than finding the overlapping range in a subject for each range in a query, we can find the nearest range.\nFor each range in the query, this returns the index of the range in the subject to which the query is the nearest.\n\nnearest(peaks, TSSs)\n## [1] 1 1 2 2 2 2 3 3\n\nTSSs[nearest(peaks, TSSs)]\n## GRanges object with 8 ranges and 2 metadata columns:\n## seqnames ranges strand | type n_peaks\n## <Rle> <IRanges> <Rle> | <character> <integer>\n## [1] chr1 348-368 + | TSSs 1\n## [2] chr1 348-368 + | TSSs 1\n## [3] chr1 1314-1334 + | TSSs 2\n## [4] chr1 1314-1334 + | TSSs 2\n## [5] chr1 1314-1334 + | TSSs 2\n## [6] chr1 1314-1334 + | TSSs 2\n## [7] chr1 2722-2742 + | TSSs 0\n## [8] chr1 2722-2742 + | TSSs 0\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\ndistance()\n\nAlternatively, one can simply ask to calculate the distanceToNearest between ranges in a query and ranges in a subject.\n\ndistanceToNearest(peaks, TSSs)\n## Hits object with 8 hits and 1 metadata column:\n## queryHits subjectHits | distance\n## <integer> <integer> | <integer>\n## [1] 1 1 | 0\n## [2] 2 1 | 143\n## [3] 3 2 | 421\n## [4] 4 2 | 0\n## [5] 5 2 | 0\n## [6] 6 2 | 517\n## [7] 7 3 | 189\n## [8] 8 3 | 3\n## -------\n## queryLength: 8 / subjectLength: 3\n\npeaks$distance_to_nearest_TSS <- mcols(distanceToNearest(peaks, TSSs))$distance\n\nNote how close from a TSS the 8th peak was. It could be worth considering this as an overlap!" + "text": "2.1 GRanges class\nGRanges is a shorthand for GenomicRanges, a core class in Bioconductor. This class is primarily used to describe genomic ranges of any nature, e.g.  sets of promoters, SNPs, chromatin loop anchors, ….\nThe data structure has been published in the seminal 2015 publication by the Bioconductor team (Huber et al. (2015)).\n\n2.1.1 GRanges fundamentals\nThe easiest way to generate a GRanges object is to coerce it from a vector of genomic coordinates in the UCSC format (e.g. \"chr2:2004-4853\"):\n\nlibrary(GenomicRanges)\ngr <- GRanges(c(\n \"chr2:2004-7853:+\", \n \"chr4:4482-9873:-\", \n \"chr5:1943-4203:+\", \n \"chr5:4103-5004:+\" \n))\ngr\n## GRanges object with 4 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr2 2004-7853 +\n## [2] chr4 4482-9873 -\n## [3] chr5 1943-4203 +\n## [4] chr5 4103-5004 +\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\nA single GRanges object can contain one or several “ranges”, or genomic intervals. To navigate between these ranges, GRanges can be subset using the standard R single bracket notation [:\n\ngr[1]\n## GRanges object with 1 range and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr2 2004-7853 +\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\ngr[1:3]\n## GRanges object with 3 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr2 2004-7853 +\n## [2] chr4 4482-9873 -\n## [3] chr5 1943-4203 +\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\nGenomicRanges objects aim to provide a natural description of genomic intervals (ranges) and are incredibly versatile. They extend the data.frame object and have four required pieces of information:\n\n\nseqnames (i.e. chromosome names) (accessible with seqnames())\n\nstart (accessible with start())\n\nend (accessible with end())\n\nstrand (accessible with strand())\n\n\nseqnames(gr)\n## factor-Rle of length 4 with 3 runs\n## Lengths: 1 1 2\n## Values : chr2 chr4 chr5\n## Levels(3): chr2 chr4 chr5\n\nstart(gr)\n## [1] 2004 4482 1943 4103\n\nend(gr)\n## [1] 7853 9873 4203 5004\n\nstrand(gr)\n## factor-Rle of length 4 with 3 runs\n## Lengths: 1 1 2\n## Values : + - +\n## Levels(3): + - *\n\nHere is a graphical representation of a GRanges object, taken from Bioconductor course material:\n\nWe will now delve into the detailed structure and operability of GRanges objects.\n\n2.1.2 GRanges metadata\nAn important aspect of GRanges objects is that each entry (range) can have extra optional metadata. This metadata is stored in a rectangular DataFrame. Each column can contain a different type of information, e.g. a numerical vector, a factor, a list, …\nOne can directly access this DataFrame using the mcols() function, and individual columns of metadata using the $ notation:\n\nmcols(gr)\n## DataFrame with 4 rows and 0 columns\nmcols(gr)$GC <- c(0.45, 0.43, 0.44, 0.42)\nmcols(gr)$annotation <- factor(c(NA, 'promoter', 'enhancer', 'centromere'))\nmcols(gr)$extended.info <- c(\n list(c(NA)), \n list(c(date = 2023, source = 'manual')), \n list(c(date = 2021, source = 'manual')), \n list(c(date = 2019, source = 'homology'))\n)\nmcols(gr)\n## DataFrame with 4 rows and 3 columns\n## GC annotation extended.info\n## <numeric> <factor> <list>\n## 1 0.45 NA NA\n## 2 0.43 promoter 2023,manual\n## 3 0.44 enhancer 2021,manual\n## 4 0.42 centromere 2019,homology\n\nWhen metadata columns are defined for a GRanges object, they are pasted next to the minimal 4 required GRanges fields, separated by a | character.\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n\n2.1.3 Genomic arithmetics on individual GRanges objects\nA GRanges object primarily describes a set of genomic ranges (it is in the name!). Useful genomic-oriented methods have been implemented to investigate individual GRanges object from a genomic perspective.\n\n2.1.3.1 Intra-range methods\nStandard genomic arithmetics are possible with GRanges, e.g.  shifting ranges, resizing, trimming, … These methods are referred to as “intra-range” methods as they work “one-region-at-a-time”.\n\n\n\n\n\n\nNote\n\n\n\n\nEach range of the input GRanges object is modified independently from the other ranges in the following code chunks.\nIntra-range operations are endomorphisms: they all take GRanges inputs and always return GRanges objects.\n\n\n\n\nShifting each genomic range in a GRanges object by a certain number of bases:\n\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Shift all genomic ranges towards the \"right\" (downstream in `+` strand), by 1000bp:\nshift(gr, 1000)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 3004-8853 + | 0.45 NA <NA>\n## [2] chr4 5482-10873 - | 0.43 promoter 2023,manual\n## [3] chr5 2943-5203 + | 0.44 enhancer 2021,manual\n## [4] chr5 5103-6004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Shift all genomic ranges towards the \"left\" (upstream in `+` strand), by 1000bp:\nshift(gr, -1000)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 1004-6853 + | 0.45 NA <NA>\n## [2] chr4 3482-8873 - | 0.43 promoter 2023,manual\n## [3] chr5 943-3203 + | 0.44 enhancer 2021,manual\n## [4] chr5 3103-4004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n\nNarrowing each genomic range in a GRanges object by a certain number of bases:\n\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Extract 21st-40th subrange for each range in `gr`:\nnarrow(gr, start = 21, end = 40)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2024-2043 + | 0.45 NA <NA>\n## [2] chr4 4502-4521 - | 0.43 promoter 2023,manual\n## [3] chr5 1963-1982 + | 0.44 enhancer 2021,manual\n## [4] chr5 4123-4142 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\nwidth(narrow(gr, start = 21, end = 40))\n## [1] 20 20 20 20\n\n\nResizing each genomic range in a GRanges object to a certain number of bases:\n\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Resize `gr` entries to 100, fixed at the start of each range:\nresize(gr, 100, fix = \"start\")\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-2103 + | 0.45 NA <NA>\n## [2] chr4 9774-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-2042 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-4202 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Resize `gr` entries to 100, fixed at the start of each range, disregarding strand information:\nresize(gr, 100, fix = \"start\", ignore.strand = TRUE)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-2103 + | 0.45 NA <NA>\n## [2] chr4 4482-4581 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-2042 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-4202 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Resize `gr` entries to 1 bp, fixed at the center of each range:\nresize(gr, 1, fix = \"center\")\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 4928 + | 0.45 NA <NA>\n## [2] chr4 7177 - | 0.43 promoter 2023,manual\n## [3] chr5 3073 + | 0.44 enhancer 2021,manual\n## [4] chr5 4553 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n\nExtracting flanking coordinates for each entry in gr:\n\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Extract 100bp UPSTREAM of each genomic range, according to range strandness:\nflank(gr, 100, start = TRUE)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 1904-2003 + | 0.45 NA <NA>\n## [2] chr4 9874-9973 - | 0.43 promoter 2023,manual\n## [3] chr5 1843-1942 + | 0.44 enhancer 2021,manual\n## [4] chr5 4003-4102 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n# ----- Extract 1bp DOWNSTREAM of each genomic range, according to range strandness:\nflank(gr, 1, start = FALSE)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 7854 + | 0.45 NA <NA>\n## [2] chr4 4481 - | 0.43 promoter 2023,manual\n## [3] chr5 4204 + | 0.44 enhancer 2021,manual\n## [4] chr5 5005 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\nNote how here again, strand information is crucial and correctly leveraged to extract “upstream” or “downstream” flanking regions in agreement with genomic range orientation.\n\nSeveral arithmetics operators can also directly work with GRanges:\n\n\ngr\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2004-7853 + | 0.45 NA <NA>\n## [2] chr4 4482-9873 - | 0.43 promoter 2023,manual\n## [3] chr5 1943-4203 + | 0.44 enhancer 2021,manual\n## [4] chr5 4103-5004 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\ngr + 100 # ----- Extend each side of the `GRanges` by a given number of bases\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 1904-7953 + | 0.45 NA <NA>\n## [2] chr4 4382-9973 - | 0.43 promoter 2023,manual\n## [3] chr5 1843-4303 + | 0.44 enhancer 2021,manual\n## [4] chr5 4003-5104 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\ngr - 200 # ----- Shrink each side of the `GRanges` by a given number of bases \n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 2204-7653 + | 0.45 NA <NA>\n## [2] chr4 4682-9673 - | 0.43 promoter 2023,manual\n## [3] chr5 2143-4003 + | 0.44 enhancer 2021,manual\n## [4] chr5 4303-4804 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\ngr * 1000 # ----- Zoom in by a given factor (effectively decreasing the `GRanges` width by the same factor)\n## GRanges object with 4 ranges and 3 metadata columns:\n## seqnames ranges strand | GC annotation extended.info\n## <Rle> <IRanges> <Rle> | <numeric> <factor> <list>\n## [1] chr2 4926-4930 + | 0.45 NA <NA>\n## [2] chr4 7175-7179 - | 0.43 promoter 2023,manual\n## [3] chr5 3072-3073 + | 0.44 enhancer 2021,manual\n## [4] chr5 4554-4553 + | 0.42 centromere 2019,homology\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n\n\n\n\n\n\nGoing further\n\n\n\nTo fully grasp how to operate GRanges objects, we highly recommend reading the detailed documentation for this class by typing ?GenomicRanges and ?GenomicRanges::`intra-range-methods`.\n\n\n\n2.1.3.2 Inter-range methods\nCompared to “intra-range” methods described above, inter-range methods involve comparisons between ranges in a single GRanges object.\n\n\n\n\n\n\nNote\n\n\n\nCompared to previous section, the result of each function described below depends on the entire set of ranges in the input GRanges object.\n\n\n\nComputing the “inverse” genomic ranges, i.e. ranges in-between the input ranges:\n\n\ngaps(gr)\n## GRanges object with 3 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr2 1-2003 +\n## [2] chr4 1-4481 -\n## [3] chr5 1-1942 +\n## -------\n## seqinfo: 3 sequences from an unspecified genome; no seqlengths\n\n\nFor each entry in a GRanges, finding the index of the preceding/following/nearest genomic range:\n\n\nprecede(gr)\n## [1] NA NA NA NA\n\nfollow(gr)\n## [1] NA NA NA NA\n\nnearest(gr)\n## [1] NA NA 4 3\n\n\nComputing a coverage over a genome, optionally indicated a “score” column from metadata:\n\n\ncoverage(gr, weight = 'GC')\n## RleList of length 3\n## $chr2\n## numeric-Rle of length 7853 with 2 runs\n## Lengths: 2003 5850\n## Values : 0.00 0.45\n## \n## $chr4\n## numeric-Rle of length 9873 with 2 runs\n## Lengths: 4481 5392\n## Values : 0.00 0.43\n## \n## $chr5\n## numeric-Rle of length 5004 with 4 runs\n## Lengths: 1942 2160 101 801\n## Values : 0.00 0.44 0.86 0.42\n\n\n\n\n\n\n\nGoing further\n\n\n\nTo fully grasp how to operate GRanges objects, we highly recommend reading the detailed documentation for this class by typing ?GenomicRanges::`inter-range-methods`.\n\n\n\n2.1.4 Comparing multiple GRanges objects\nGenomic analysis typically requires intersection of two sets of genomic ranges, e.g. to find which ranges from one set overlap with those from another set.\nIn the next examples, we will use two GRanges:\n\n\npeaks represents dummy 8 ChIP-seq peaks\n\n\npeaks <- GRanges(c(\n 'chr1:320-418',\n 'chr1:512-567',\n 'chr1:843-892',\n 'chr1:1221-1317', \n 'chr1:1329-1372', \n 'chr1:1852-1909', \n 'chr1:2489-2532', \n 'chr1:2746-2790'\n))\npeaks\n## GRanges object with 8 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 320-418 *\n## [2] chr1 512-567 *\n## [3] chr1 843-892 *\n## [4] chr1 1221-1317 *\n## [5] chr1 1329-1372 *\n## [6] chr1 1852-1909 *\n## [7] chr1 2489-2532 *\n## [8] chr1 2746-2790 *\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\n\nTSSs represents dummy 3 gene promoters (± 10bp around the TSS)\n\n\ngenes <- GRanges(c(\n 'chr1:358-1292:+',\n 'chr1:1324-2343:+', \n 'chr1:2732-2751:+'\n))\nTSSs <- resize(genes, width = 1, fix = 'start') + 10\nTSSs\n## GRanges object with 3 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 348-368 +\n## [2] chr1 1314-1334 +\n## [3] chr1 2722-2742 +\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\nLet’s see how they overlap by plotting them:\n\nlibrary(ggplot2)\npeaks$type <- 'peaks'\nTSSs$type <- 'TSSs'\nggplot() + \n ggbio::geom_rect(c(peaks, TSSs), aes(fill = type), facets = type~.) + \n ggbio::theme_alignment() + \n coord_fixed(ratio = 300)\n## Registered S3 method overwritten by 'GGally':\n## method from \n## +.gg ggplot2\n## Warning: The `facets` argument of `facet_grid()` is deprecated as of ggplot2 2.2.0.\n## ℹ Please use the `rows` argument instead.\n## ℹ The deprecated feature was likely used in the ggbio package.\n## Please report the issue at <https://github.com/lawremi/ggbio/issues>.\n## Scale for y is already present.\n## Adding another scale for y, which will replace the existing scale.\n\n\n\n\n\n\n\n\n2.1.4.1 Finding overlaps between two GRanges sets\n\nFinding overlaps between a query and a subject\n\nIn our case, we want to identify which ChIP-seq peaks overlap with a TSS: the query is the set of peaks and the subject is the set of TSSs.\nfindOverlaps returns a Hits object listing which query ranges overlap with which subject ranges.\n\nov <- findOverlaps(query = peaks, subject = TSSs)\nov\n## Hits object with 3 hits and 0 metadata columns:\n## queryHits subjectHits\n## <integer> <integer>\n## [1] 1 1\n## [2] 4 2\n## [3] 5 2\n## -------\n## queryLength: 8 / subjectLength: 3\n\nThe Hits output clearly describes what overlaps with what:\n\nThe query (peak) #1 overlaps with subject (TSS) #1\n\nThe query (peak) #5 overlaps with subject (TSS) #2\n\n\n\n\n\n\n\n\nNote\n\n\n\nBecause no other query index or subject index is listed in the ov output, none of the remaining ranges from query overlap with ranges from subject.\n\n\n\nSubsetting by overlaps between a query and a subject\n\nTo directly subset ranges from query overlapping with ranges from a subject (e.g. to only keep peaks overlapping a TSS), we can use the subsetByOverlaps function. The output of subsetByOverlaps is a subset of the original GRanges object provided as a query, with retained ranges being unmodified.\n\nsubsetByOverlaps(peaks, TSSs)\n## GRanges object with 3 ranges and 1 metadata column:\n## seqnames ranges strand | type\n## <Rle> <IRanges> <Rle> | <character>\n## [1] chr1 320-418 * | peaks\n## [2] chr1 1221-1317 * | peaks\n## [3] chr1 1329-1372 * | peaks\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\nCounting overlaps between a query and a subject\n\nFinally, the countOverlaps is used to count, for each range in a query, how many ranges in the subject it overlaps with.\n\ncountOverlaps(query = peaks, subject = TSSs)\n## [1] 1 0 0 1 1 0 0 0\n\n\n\n\n\n\n\nNote\n\n\n\nNote that which GRanges goes in query or subject is crucial! Counting for each peak, the number of TSSs it overlaps with is very different from for each TSS, how many peaks it overlaps with.\nIn our case example, it would also be informative to count how many peaks overlap with each TSS, so we’d need to swap query and subject:\n\ncountOverlaps(query = TSSs, subject = peaks)\n## [1] 1 2 0\n\nWe can add these counts to the original query object:\n\nTSSs$n_peaks <- countOverlaps(query = TSSs, subject = peaks)\nTSSs\n## GRanges object with 3 ranges and 2 metadata columns:\n## seqnames ranges strand | type n_peaks\n## <Rle> <IRanges> <Rle> | <character> <integer>\n## [1] chr1 348-368 + | TSSs 1\n## [2] chr1 1314-1334 + | TSSs 2\n## [3] chr1 2722-2742 + | TSSs 0\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\n\n\n\n%over%, %within%, %outside% : handy operators\n\nHandy operators exist that return logical vectors (same length as the query). They essentially are short-hands for specific findOverlaps() cases.\n<query> %over% <subject>:\n\npeaks %over% TSSs\n## [1] TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE\n\npeaks[peaks %over% TSSs] # ----- Equivalent to `subsetByOverlaps(peaks, TSSs)`\n## GRanges object with 3 ranges and 1 metadata column:\n## seqnames ranges strand | type\n## <Rle> <IRanges> <Rle> | <character>\n## [1] chr1 320-418 * | peaks\n## [2] chr1 1221-1317 * | peaks\n## [3] chr1 1329-1372 * | peaks\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n<query> %within% <subject>:\n\npeaks %within% TSSs\n## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE\n\nTSSs %within% peaks\n## [1] TRUE FALSE FALSE\n\n<query> %outside% <subject>:\n\npeaks %outside% TSSs\n## [1] FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE\n\n\n\n\n\n\n\nGoing further\n\n\n\nTo fully grasp how to find overlaps between GRanges objects, we highly recommend reading the detailed documentation by typing ?IRanges::`findOverlaps-methods`.\n\n\n\n2.1.4.2 Find nearest range from a subject for each range in a query\n*Overlaps methods are not always enough to match a query to a subject. For instance, some peaks in the query might be very near to some TSSs in the subject, but not quite overlapping.\n\npeaks[8]\n## GRanges object with 1 range and 1 metadata column:\n## seqnames ranges strand | type\n## <Rle> <IRanges> <Rle> | <character>\n## [1] chr1 2746-2790 * | peaks\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\nTSSs[3]\n## GRanges object with 1 range and 2 metadata columns:\n## seqnames ranges strand | type n_peaks\n## <Rle> <IRanges> <Rle> | <character> <integer>\n## [1] chr1 2722-2742 + | TSSs 0\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\nnearest()\n\nRather than finding the overlapping range in a subject for each range in a query, we can find the nearest range.\nFor each range in the query, this returns the index of the range in the subject to which the query is the nearest.\n\nnearest(peaks, TSSs)\n## [1] 1 1 2 2 2 2 3 3\n\nTSSs[nearest(peaks, TSSs)]\n## GRanges object with 8 ranges and 2 metadata columns:\n## seqnames ranges strand | type n_peaks\n## <Rle> <IRanges> <Rle> | <character> <integer>\n## [1] chr1 348-368 + | TSSs 1\n## [2] chr1 348-368 + | TSSs 1\n## [3] chr1 1314-1334 + | TSSs 2\n## [4] chr1 1314-1334 + | TSSs 2\n## [5] chr1 1314-1334 + | TSSs 2\n## [6] chr1 1314-1334 + | TSSs 2\n## [7] chr1 2722-2742 + | TSSs 0\n## [8] chr1 2722-2742 + | TSSs 0\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\ndistance()\n\nAlternatively, one can simply ask to calculate the distanceToNearest between ranges in a query and ranges in a subject.\n\ndistanceToNearest(peaks, TSSs)\n## Hits object with 8 hits and 1 metadata column:\n## queryHits subjectHits | distance\n## <integer> <integer> | <integer>\n## [1] 1 1 | 0\n## [2] 2 1 | 143\n## [3] 3 2 | 421\n## [4] 4 2 | 0\n## [5] 5 2 | 0\n## [6] 6 2 | 517\n## [7] 7 3 | 189\n## [8] 8 3 | 3\n## -------\n## queryLength: 8 / subjectLength: 3\n\npeaks$distance_to_nearest_TSS <- mcols(distanceToNearest(peaks, TSSs))$distance\n\nNote how close from a TSS the 8th peak was. It could be worth considering this as an overlap!" }, { "objectID": "data-representation.html#ginteractions-class", "href": "data-representation.html#ginteractions-class", "title": "\n2  Hi-C data structures in R\n", "section": "\n2.2 GInteractions class", - "text": "2.2 GInteractions class\nGRanges describe genomic ranges and hence are of general use to study 1D genome organization. To study chromatin interactions, we need a way to link pairs of GRanges. This is exactly what the GInteractions class does. This data structure is defined in the InteractionSet package and has been published in the 2016 paper by Lun et al. (Lun et al. (2016)).\n\n\n2.2.1 Building a GInteractions object from scratch\nLet’s first define two parallel GRanges objects (i.e. two GRanges of same length). Each GRanges will contain 5 ranges.\n\ngr_first <- GRanges(c(\n 'chr1:1-100', \n 'chr1:1001-2000', \n 'chr1:5001-6000', \n 'chr1:8001-9000', \n 'chr1:7001-8000' \n))\ngr_second <- GRanges(c(\n 'chr1:1-100', \n 'chr1:3001-4000', \n 'chr1:8001-9000', \n 'chr1:7001-8000', \n 'chr2:13000-14000' \n))\n\nBecause these two GRanges objects are of same length (5), one can “bind” them together by using the GInteractionsfunction. This effectively associate each entry from one GRanges to the entry aligned in the other GRanges object.\n\nlibrary(InteractionSet)\ngi <- GInteractions(gr_first, gr_second)\ngi\n## GInteractions object with 5 interactions and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] chr1 1-100 --- chr1 1-100\n## [2] chr1 1001-2000 --- chr1 3001-4000\n## [3] chr1 5001-6000 --- chr1 8001-9000\n## [4] chr1 8001-9000 --- chr1 7001-8000\n## [5] chr1 7001-8000 --- chr2 13000-14000\n## -------\n## regions: 7 ranges and 0 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nThe way GInteractions objects are printed in an R console mimics that of GRanges, but pairs two “ends” (a.k.a. anchors) of an interaction together, each end being represented as a separate GRanges range.\n\n\n\n\n\n\nNotes\n\n\n\n\nNote that it is possible to have interactions joining two identical anchors.\n\n\ngi[1]\n## GInteractions object with 1 interaction and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] chr1 1-100 --- chr1 1-100\n## -------\n## regions: 7 ranges and 0 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\nIt is also technically possible (though not advised) to have interactions for which the “first” end is located after the “second” end along the chromosome.\n\n\ngi[4]\n## GInteractions object with 1 interaction and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] chr1 8001-9000 --- chr1 7001-8000\n## -------\n## regions: 7 ranges and 0 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\nFinally, it is possible to define inter-chromosomal interactions (a.k.a. trans interactions).\n\n\ngi[5]\n## GInteractions object with 1 interaction and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] chr1 7001-8000 --- chr2 13000-14000\n## -------\n## regions: 7 ranges and 0 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\n\n\n2.2.2 GInteractions specific slots\nCompared to GRanges, extra slots are available for GInteractions objects, e.g. anchors and regions.\n\n2.2.2.1 Anchors\n“Anchors” of a single genomic interaction refer to the two ends of this interaction. These anchors can be extracted from a GInteractions object using the anchors() function. This outputs a list of two GRanges, the first corresponding to the “left” end of interactions (when printed to the console) and the second corresponding to the “right” end of interactions (when printed to the console).\n\n# ----- This extracts the two sets of anchors (\"first\" and \"second\") from a GInteractions object\nanchors(gi)\n## $first\n## GRanges object with 5 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 1001-2000 *\n## [3] chr1 5001-6000 *\n## [4] chr1 8001-9000 *\n## [5] chr1 7001-8000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n## \n## $second\n## GRanges object with 5 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 3001-4000 *\n## [3] chr1 8001-9000 *\n## [4] chr1 7001-8000 *\n## [5] chr2 13000-14000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n# ----- We can query for the \"first\" or \"second\" set of anchors directly\nanchors(gi, \"first\")\n## GRanges object with 5 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 1001-2000 *\n## [3] chr1 5001-6000 *\n## [4] chr1 8001-9000 *\n## [5] chr1 7001-8000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nanchors(gi, \"second\")\n## GRanges object with 5 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 3001-4000 *\n## [3] chr1 8001-9000 *\n## [4] chr1 7001-8000 *\n## [5] chr2 13000-14000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\n2.2.2.2 Regions\n“Regions” of a set of interactions refer to the universe of unique anchors represented in a set of interactions. Therefore, the length of the regions can only be equal to or strictly lower than twice the length of anchors.\nThe regions function returns the regions associated with a GInteractions object, stored as a GRanges object.\n\nregions(gi)\n## GRanges object with 7 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 1001-2000 *\n## [3] chr1 3001-4000 *\n## [4] chr1 5001-6000 *\n## [5] chr1 7001-8000 *\n## [6] chr1 8001-9000 *\n## [7] chr2 13000-14000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nlength(regions(gi))\n## [1] 7\n\nlength(anchors(gi, \"first\"))\n## [1] 5\n\n\n2.2.3 GInteractions methods\nGInteractions behave as an extension of GRanges. For this reason, many methods that work with GRanges will work seamlessly with GInteractions.\n\n2.2.3.1 Metadata\nOne can add metadata columns directly to a GInteractions object.\n\nmcols(gi)\n## DataFrame with 5 rows and 0 columns\nmcols(gi) <- data.frame(\n idx = seq(1, length(gi)),\n type = c(\"cis\", \"cis\", \"cis\", \"trans\", \"cis\")\n)\ngi\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [5] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 0 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\ngi$type\n## [1] \"cis\" \"cis\" \"cis\" \"trans\" \"cis\"\n\nImportantly, metadata columns can also be directly added to regions of a GInteractions object, since these regions are a GRanges object themselves!\n\nregions(gi)\n## GRanges object with 7 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 1001-2000 *\n## [3] chr1 3001-4000 *\n## [4] chr1 5001-6000 *\n## [5] chr1 7001-8000 *\n## [6] chr1 8001-9000 *\n## [7] chr2 13000-14000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\nregions(gi)$binID <- seq_along(regions(gi))\nregions(gi)$type <- c(\"P\", \"P\", \"P\", \"E\", \"E\", \"P\", \"P\")\nregions(gi)\n## GRanges object with 7 ranges and 2 metadata columns:\n## seqnames ranges strand | binID type\n## <Rle> <IRanges> <Rle> | <integer> <character>\n## [1] chr1 1-100 * | 1 P\n## [2] chr1 1001-2000 * | 2 P\n## [3] chr1 3001-4000 * | 3 P\n## [4] chr1 5001-6000 * | 4 E\n## [5] chr1 7001-8000 * | 5 E\n## [6] chr1 8001-9000 * | 6 P\n## [7] chr2 13000-14000 * | 7 P\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\n2.2.3.2 Sorting GInteractions\n\nThe sort function works seamlessly with GInteractions objects. It sorts the interactions using a similar approach to that performed by pairtools sort ... for disk-stored .pairs files, sorting on the “first” anchor first, then for interactions with the same “first” anchors, sorting on the “second” anchor.\n\ngi\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [5] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nsort(gi)\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## [5] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\n2.2.3.3 Swapping GInteractions anchors\nFor an individual interaction contained in a GInteractions object, the “first” and “second” anchors themselves can be sorted as well. This is called “pairs swapping”, and it is performed similarly to pairtools flip ... for disk-stored .pairs files. This ensures that interactions, when represented as a contact matrix, generate an upper-triangular matrix.\n\ngi\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [5] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nswapAnchors(gi)\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 7001-8000 --- chr1 8001-9000 | 4 trans\n## [5] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\n\n\n\n\n\nNote\n\n\n\n“Sorting” and “swapping” a GInteractions object are two entirely different actions:\n\n“sorting” reorganizes all rows (interactions);\n“swapping” anchors reorganizes “first” and “second” anchors for each interaction independently.\n\n\n\n\n2.2.3.4 GInteractions distance method\n“Distance”, when applied to genomic interactions, typically refers to the genomic distance between the two anchors of a single interaction. For GInteractions, this is computed using the pairdist function.\n\ngi\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [5] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\npairdist(gi)\n## [1] 0 2000 3000 1000 NA\n\nNote that for “trans” inter-chromosomal interactions, i.e. interactions with anchors on different chromosomes, the notion of genomic distance is meaningless and for this reason, pairdist returns a NA value.\n\n\n\n\n\n\nAdvanced pairdist arguments\n\n\n\nThe type argument can be tweaked to specify which type of “distance” should be computed:\n\n\nmid: The distance between the midpoints of the two regions (rounded down to the nearest integer) is returned (Default).\n\ngap: The length of the gap between the closest points of the two regions is computed - negative lengths are returned for overlapping regions, indicating the length of the overlap.\n\nspan: The distance between the furthermost points of the two regions is computed.\n\ndiag: The difference between the anchor indices is returned. This corresponds to a diagonal on the interaction space when bins are used in the ‘regions’ slot of ‘x’.\n\n\n\n\n2.2.3.5 GInteractions overlap methods\n“Overlaps” for genomic interactions could be computed in different contexts:\n\nCase 1: Overlap between any of the two anchors of an interaction with a genomic range\nCase 2: Overlap between anchors of an interaction with anchors of another interaction\nCase 3: Spanning of the interaction “across” a genomic range\n\n\nCase 1: Overlap between any of the two anchors of an interaction with a genomic range\n\nThis is the default behavior of findOverlaps when providing a GInteractions object as query and a GRanges as a subject.\n\ngr <- GRanges(c(\"chr1:7501-7600\", \"chr1:8501-8600\"))\nfindOverlaps(query = gi, subject = gr)\n## Hits object with 4 hits and 0 metadata columns:\n## queryHits subjectHits\n## <integer> <integer>\n## [1] 3 2\n## [2] 4 1\n## [3] 4 2\n## [4] 5 1\n## -------\n## queryLength: 5 / subjectLength: 2\n\ncountOverlaps(gi, gr)\n## [1] 0 0 1 2 1\n\nsubsetByOverlaps(gi, gr)\n## GInteractions object with 3 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [2] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [3] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nHere again, the order matters!\n\ncountOverlaps(gr, gi)\n## [1] 2 2\n\nAnd again, the %over% operator can be used here:\n\ngi %over% gr\n## [1] FALSE FALSE TRUE TRUE TRUE\n\ngi[gi %over% gr] # ----- Equivalent to `subsetByOverlaps(gi, gr)`\n## GInteractions object with 3 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [2] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [3] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\nCase 2: Overlap between anchors of an interaction with anchors of another interaction\n\nThis slightly different scenario involves overlapping two sets of interactions, to see whether any interaction in Set-1 has its two anchors overlapping anchors from an interaction in Set-2.\n\ngi2 <- GInteractions(\n GRanges(\"chr1:1081-1090\"), \n GRanges(\"chr1:3401-3501\")\n)\ngi %over% gi2\n## [1] FALSE TRUE FALSE FALSE FALSE\n\nNote that both anchors of an interaction from a query have to overlap to a pair of anchors of a single interaction from a subject with this method!\n\ngi3 <- GInteractions(\n GRanges(\"chr1:1-1000\"), \n GRanges(\"chr1:3401-3501\")\n)\ngi %over% gi3\n## [1] FALSE FALSE FALSE FALSE FALSE\n\n\nCase 3 : Spanning of the interaction “accross” a genomic range\n\nThis requires a bit of wrangling, to mimic an overlap between two GRanges objects:\n\ngi <- swapAnchors(gi) # ----- Make sure anchors are correctly sorted\ngi <- sort(gi) # ----- Make sure interactions are correctly sorted\ngi <- gi[!is.na(pairdist(gi))] # ----- Remove inter-chromosomal interactions\nspanning_gi <- GRanges(\n seqnames = seqnames(anchors(gi)[[1]]), \n ranges = IRanges(\n start(anchors(gi)[[1]]), \n end(anchors(gi)[[2]])\n )\n)\nspanning_gi \n## GRanges object with 4 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 1001-4000 *\n## [3] chr1 5001-9000 *\n## [4] chr1 7001-9000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nspanning_gi %over% gr\n## [1] FALSE FALSE TRUE TRUE\n\n\n\n\n\n\n\nGoing further\n\n\n\nA detailed manual of overlap methods available for GInteractions object can be read by typing ?`Interaction-overlaps` in R." + "text": "2.2 GInteractions class\nGRanges describe genomic ranges and hence are of general use to study 1D genome organization. To study chromatin interactions, we need a way to link pairs of GRanges. This is exactly what the GInteractions class does. This data structure is defined in the InteractionSet package and has been published in the 2016 paper by Lun et al. (Lun et al. (2016)).\n\n\n2.2.1 Building a GInteractions object from scratch\nLet’s first define two parallel GRanges objects (i.e. two GRanges of same length). Each GRanges will contain 5 ranges.\n\ngr_first <- GRanges(c(\n 'chr1:1-100', \n 'chr1:1001-2000', \n 'chr1:5001-6000', \n 'chr1:8001-9000', \n 'chr1:7001-8000' \n))\ngr_second <- GRanges(c(\n 'chr1:1-100', \n 'chr1:3001-4000', \n 'chr1:8001-9000', \n 'chr1:7001-8000', \n 'chr2:13000-14000' \n))\n\nBecause these two GRanges objects are of same length (5), one can “bind” them together by using the GInteractionsfunction. This effectively associate each entry from one GRanges to the entry aligned in the other GRanges object.\n\nlibrary(InteractionSet)\ngi <- GInteractions(gr_first, gr_second)\ngi\n## GInteractions object with 5 interactions and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] chr1 1-100 --- chr1 1-100\n## [2] chr1 1001-2000 --- chr1 3001-4000\n## [3] chr1 5001-6000 --- chr1 8001-9000\n## [4] chr1 8001-9000 --- chr1 7001-8000\n## [5] chr1 7001-8000 --- chr2 13000-14000\n## -------\n## regions: 7 ranges and 0 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nThe way GInteractions objects are printed in an R console mimics that of GRanges, but pairs two “ends” (a.k.a. anchors) of an interaction together, each end being represented as a separate GRanges range.\n\nNote that it is possible to have interactions joining two identical anchors.\n\n\ngi[1]\n## GInteractions object with 1 interaction and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] chr1 1-100 --- chr1 1-100\n## -------\n## regions: 7 ranges and 0 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\nIt is also technically possible (though not advised) to have interactions for which the “first” end is located after the “second” end along the chromosome.\n\n\ngi[4]\n## GInteractions object with 1 interaction and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] chr1 8001-9000 --- chr1 7001-8000\n## -------\n## regions: 7 ranges and 0 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\nFinally, it is possible to define inter-chromosomal interactions (a.k.a. trans interactions).\n\n\ngi[5]\n## GInteractions object with 1 interaction and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] chr1 7001-8000 --- chr2 13000-14000\n## -------\n## regions: 7 ranges and 0 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\n2.2.2 GInteractions specific slots\nCompared to GRanges, extra slots are available for GInteractions objects, e.g. anchors and regions.\n\n2.2.2.1 Anchors\n“Anchors” of a single genomic interaction refer to the two ends of this interaction. These anchors can be extracted from a GInteractions object using the anchors() function. This outputs a list of two GRanges, the first corresponding to the “left” end of interactions (when printed to the console) and the second corresponding to the “right” end of interactions (when printed to the console).\n\n# ----- This extracts the two sets of anchors (\"first\" and \"second\") from a GInteractions object\nanchors(gi)\n## $first\n## GRanges object with 5 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 1001-2000 *\n## [3] chr1 5001-6000 *\n## [4] chr1 8001-9000 *\n## [5] chr1 7001-8000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n## \n## $second\n## GRanges object with 5 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 3001-4000 *\n## [3] chr1 8001-9000 *\n## [4] chr1 7001-8000 *\n## [5] chr2 13000-14000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n# ----- We can query for the \"first\" or \"second\" set of anchors directly\nanchors(gi, \"first\")\n## GRanges object with 5 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 1001-2000 *\n## [3] chr1 5001-6000 *\n## [4] chr1 8001-9000 *\n## [5] chr1 7001-8000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nanchors(gi, \"second\")\n## GRanges object with 5 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 3001-4000 *\n## [3] chr1 8001-9000 *\n## [4] chr1 7001-8000 *\n## [5] chr2 13000-14000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\n2.2.2.2 Regions\n“Regions” of a set of interactions refer to the universe of unique anchors represented in a set of interactions. Therefore, the length of the regions can only be equal to or strictly lower than twice the length of anchors.\nThe regions function returns the regions associated with a GInteractions object, stored as a GRanges object.\n\nregions(gi)\n## GRanges object with 7 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 1001-2000 *\n## [3] chr1 3001-4000 *\n## [4] chr1 5001-6000 *\n## [5] chr1 7001-8000 *\n## [6] chr1 8001-9000 *\n## [7] chr2 13000-14000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nlength(regions(gi))\n## [1] 7\n\nlength(anchors(gi, \"first\"))\n## [1] 5\n\n\n2.2.3 GInteractions methods\nGInteractions behave as an extension of GRanges. For this reason, many methods that work with GRanges will work seamlessly with GInteractions.\n\n2.2.3.1 Metadata\nOne can add metadata columns directly to a GInteractions object.\n\nmcols(gi)\n## DataFrame with 5 rows and 0 columns\nmcols(gi) <- data.frame(\n idx = seq(1, length(gi)),\n type = c(\"cis\", \"cis\", \"cis\", \"trans\", \"cis\")\n)\ngi\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [5] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 0 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\ngi$type\n## [1] \"cis\" \"cis\" \"cis\" \"trans\" \"cis\"\n\nImportantly, metadata columns can also be directly added to regions of a GInteractions object, since these regions are a GRanges object themselves!\n\nregions(gi)\n## GRanges object with 7 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 1001-2000 *\n## [3] chr1 3001-4000 *\n## [4] chr1 5001-6000 *\n## [5] chr1 7001-8000 *\n## [6] chr1 8001-9000 *\n## [7] chr2 13000-14000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\nregions(gi)$binID <- seq_along(regions(gi))\nregions(gi)$type <- c(\"P\", \"P\", \"P\", \"E\", \"E\", \"P\", \"P\")\nregions(gi)\n## GRanges object with 7 ranges and 2 metadata columns:\n## seqnames ranges strand | binID type\n## <Rle> <IRanges> <Rle> | <integer> <character>\n## [1] chr1 1-100 * | 1 P\n## [2] chr1 1001-2000 * | 2 P\n## [3] chr1 3001-4000 * | 3 P\n## [4] chr1 5001-6000 * | 4 E\n## [5] chr1 7001-8000 * | 5 E\n## [6] chr1 8001-9000 * | 6 P\n## [7] chr2 13000-14000 * | 7 P\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\n2.2.3.2 Sorting GInteractions\n\nThe sort function works seamlessly with GInteractions objects. It sorts the interactions using a similar approach to that performed by pairtools sort ... for disk-stored .pairs files, sorting on the “first” anchor first, then for interactions with the same “first” anchors, sorting on the “second” anchor.\n\ngi\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [5] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nsort(gi)\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## [5] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\n2.2.3.3 Swapping GInteractions anchors\nFor an individual interaction contained in a GInteractions object, the “first” and “second” anchors themselves can be sorted as well. This is called “pairs swapping”, and it is performed similarly to pairtools flip ... for disk-stored .pairs files. This ensures that interactions, when represented as a contact matrix, generate an upper-triangular matrix.\n\ngi\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [5] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nswapAnchors(gi)\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 7001-8000 --- chr1 8001-9000 | 4 trans\n## [5] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\n\n\n\n\n\nNote\n\n\n\n“Sorting” and “swapping” a GInteractions object are two entirely different actions:\n\n“sorting” reorganizes all rows (interactions);\n“swapping” anchors reorganizes “first” and “second” anchors for each interaction independently.\n\n\n\n\n2.2.3.4 GInteractions distance method\n“Distance”, when applied to genomic interactions, typically refers to the genomic distance between the two anchors of a single interaction. For GInteractions, this is computed using the pairdist function.\n\ngi\n## GInteractions object with 5 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 1-100 --- chr1 1-100 | 1 cis\n## [2] chr1 1001-2000 --- chr1 3001-4000 | 2 cis\n## [3] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [4] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [5] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\npairdist(gi)\n## [1] 0 2000 3000 1000 NA\n\nNote that for “trans” inter-chromosomal interactions, i.e. interactions with anchors on different chromosomes, the notion of genomic distance is meaningless and for this reason, pairdist returns a NA value.\nThe type argument of the pairdist() function can be tweaked to specify which type of “distance” should be computed:\n\n\nmid: The distance between the midpoints of the two regions (rounded down to the nearest integer) is returned (Default).\n\ngap: The length of the gap between the closest points of the two regions is computed - negative lengths are returned for overlapping regions, indicating the length of the overlap.\n\nspan: The distance between the furthermost points of the two regions is computed.\n\ndiag: The difference between the anchor indices is returned. This corresponds to a diagonal on the interaction space when bins are used in the ‘regions’ slot of ‘x’.\n\n2.2.3.5 GInteractions overlap methods\n“Overlaps” for genomic interactions could be computed in different contexts:\n\nCase 1: Overlap between any of the two anchors of an interaction with a genomic range\nCase 2: Overlap between anchors of an interaction with anchors of another interaction\nCase 3: Spanning of the interaction “across” a genomic range\n\n\nCase 1: Overlap between any of the two anchors of an interaction with a genomic range\n\nThis is the default behavior of findOverlaps when providing a GInteractions object as query and a GRanges as a subject.\n\ngr <- GRanges(c(\"chr1:7501-7600\", \"chr1:8501-8600\"))\nfindOverlaps(query = gi, subject = gr)\n## Hits object with 4 hits and 0 metadata columns:\n## queryHits subjectHits\n## <integer> <integer>\n## [1] 3 2\n## [2] 4 1\n## [3] 4 2\n## [4] 5 1\n## -------\n## queryLength: 5 / subjectLength: 2\n\ncountOverlaps(gi, gr)\n## [1] 0 0 1 2 1\n\nsubsetByOverlaps(gi, gr)\n## GInteractions object with 3 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [2] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [3] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nHere again, the order matters!\n\ncountOverlaps(gr, gi)\n## [1] 2 2\n\nAnd again, the %over% operator can be used here:\n\ngi %over% gr\n## [1] FALSE FALSE TRUE TRUE TRUE\n\ngi[gi %over% gr] # ----- Equivalent to `subsetByOverlaps(gi, gr)`\n## GInteractions object with 3 interactions and 2 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | idx type\n## <Rle> <IRanges> <Rle> <IRanges> | <integer> <character>\n## [1] chr1 5001-6000 --- chr1 8001-9000 | 3 cis\n## [2] chr1 8001-9000 --- chr1 7001-8000 | 4 trans\n## [3] chr1 7001-8000 --- chr2 13000-14000 | 5 cis\n## -------\n## regions: 7 ranges and 2 metadata columns\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\n\nCase 2: Overlap between anchors of an interaction with anchors of another interaction\n\nThis slightly different scenario involves overlapping two sets of interactions, to see whether any interaction in Set-1 has its two anchors overlapping anchors from an interaction in Set-2.\n\ngi2 <- GInteractions(\n GRanges(\"chr1:1081-1090\"), \n GRanges(\"chr1:3401-3501\")\n)\ngi %over% gi2\n## [1] FALSE TRUE FALSE FALSE FALSE\n\nNote that both anchors of an interaction from a query have to overlap to a pair of anchors of a single interaction from a subject with this method!\n\ngi3 <- GInteractions(\n GRanges(\"chr1:1-1000\"), \n GRanges(\"chr1:3401-3501\")\n)\ngi %over% gi3\n## [1] FALSE FALSE FALSE FALSE FALSE\n\n\nCase 3 : Spanning of the interaction “accross” a genomic range\n\nThis requires a bit of wrangling, to mimic an overlap between two GRanges objects:\n\ngi <- swapAnchors(gi) # ----- Make sure anchors are correctly sorted\ngi <- sort(gi) # ----- Make sure interactions are correctly sorted\ngi <- gi[!is.na(pairdist(gi))] # ----- Remove inter-chromosomal interactions\nspanning_gi <- GRanges(\n seqnames = seqnames(anchors(gi)[[1]]), \n ranges = IRanges(\n start(anchors(gi)[[1]]), \n end(anchors(gi)[[2]])\n )\n)\nspanning_gi \n## GRanges object with 4 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] chr1 1-100 *\n## [2] chr1 1001-4000 *\n## [3] chr1 5001-9000 *\n## [4] chr1 7001-9000 *\n## -------\n## seqinfo: 2 sequences from an unspecified genome; no seqlengths\n\nspanning_gi %over% gr\n## [1] FALSE FALSE TRUE TRUE\n\n\n\n\n\n\n\nGoing further\n\n\n\nA detailed manual of overlap methods available for GInteractions object can be read by typing ?`Interaction-overlaps` in R." }, { "objectID": "data-representation.html#contactfile-class", "href": "data-representation.html#contactfile-class", "title": "\n2  Hi-C data structures in R\n", "section": "\n2.3 ContactFile class", - "text": "2.3 ContactFile class\nHi-C contacts can be stored in four different formats (see previous chapter):\n\nAs a .(m)cool matrix (multi-scores, multi-resolution, indexed)\nAs a .hic matrix (multi-scores, multi-resolution, indexed)\nAs a HiC-pro derived matrix (single-score, single-resolution, non-indexed)\nUnbinned, Hi-C contacts can be stored in .pairs files\n\n\n2.3.1 Accessing example Hi-C files\nExample contact files can be downloaded using HiContactsData function.\n\nlibrary(HiContactsData)\ncoolf <- HiContactsData('yeast_wt', 'mcool')\n\nThis fetches files from the cloud, download them locally and returns the path of the local file.\n\ncoolf\n## EH7702 \n## \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\"\n\nSimilarly, example files are available for other file formats:\n\nhicf <- HiContactsData('yeast_wt', 'hic')\nhicpromatrixf <- HiContactsData('yeast_wt', 'hicpro_matrix')\nhicproregionsf <- HiContactsData('yeast_wt', 'hicpro_bed')\npairsf <- HiContactsData('yeast_wt', 'pairs.gz')\n\nWe can even check the content of some of these files to make sure they are actually what they are:\n\n# ---- HiC-Pro generates a tab-separated `regions.bed` file\nreadLines(hicproregionsf, 25)\n## [1] \"I\\t0\\t1000\" \"I\\t1000\\t2000\" \"I\\t2000\\t3000\" \"I\\t3000\\t4000\" \n## [5] \"I\\t4000\\t5000\" \"I\\t5000\\t6000\" \"I\\t6000\\t7000\" \"I\\t7000\\t8000\" \n## [9] \"I\\t8000\\t9000\" \"I\\t9000\\t10000\" \"I\\t10000\\t11000\" \"I\\t11000\\t12000\"\n## [13] \"I\\t12000\\t13000\" \"I\\t13000\\t14000\" \"I\\t14000\\t15000\" \"I\\t15000\\t16000\"\n## [17] \"I\\t16000\\t17000\" \"I\\t17000\\t18000\" \"I\\t18000\\t19000\" \"I\\t19000\\t20000\"\n## [21] \"I\\t20000\\t21000\" \"I\\t21000\\t22000\" \"I\\t22000\\t23000\" \"I\\t23000\\t24000\"\n## [25] \"I\\t24000\\t25000\"\n\n# ---- Pairs are also tab-separated \nreadLines(pairsf, 25)\n## [1] \"## pairs format v1.0\" \n## [2] \"#sorted: chr1-pos1-chr2-pos2\" \n## [3] \"#columns: readID chr1 pos1 chr2 pos2 strand1 strand2 frag1 frag2\" \n## [4] \"#chromsize: I 230218\" \n## [5] \"#chromsize: II 813184\" \n## [6] \"#chromsize: III 316620\" \n## [7] \"#chromsize: IV 1531933\" \n## [8] \"#chromsize: V 576874\" \n## [9] \"#chromsize: VI 270161\" \n## [10] \"#chromsize: VII 1090940\" \n## [11] \"#chromsize: VIII 562643\" \n## [12] \"#chromsize: IX 439888\" \n## [13] \"#chromsize: X 745751\" \n## [14] \"#chromsize: XI 666816\" \n## [15] \"#chromsize: XII 1078177\" \n## [16] \"#chromsize: XIII 924431\" \n## [17] \"#chromsize: XIV 784333\" \n## [18] \"#chromsize: XV 1091291\" \n## [19] \"#chromsize: XVI 948066\" \n## [20] \"#chromsize: Mito 85779\" \n## [21] \"NS500150:527:HHGYNBGXF:3:21611:19085:3986\\tII\\t105\\tII\\t48548\\t+\\t-\\t1358\\t1681\" \n## [22] \"NS500150:527:HHGYNBGXF:4:13604:19734:2406\\tII\\t113\\tII\\t45003\\t-\\t+\\t1358\\t1658\" \n## [23] \"NS500150:527:HHGYNBGXF:2:11108:25178:11036\\tII\\t119\\tII\\t687251\\t-\\t+\\t1358\\t5550\"\n## [24] \"NS500150:527:HHGYNBGXF:1:22301:8468:1586\\tII\\t160\\tII\\t26124\\t+\\t-\\t1358\\t1510\" \n## [25] \"NS500150:527:HHGYNBGXF:4:23606:24037:2076\\tII\\t169\\tII\\t39052\\t+\\t+\\t1358\\t1613\"\n\n\n2.3.2 ContactFile fundamentals\nA ContactFile object establishes a connection with a disk-stored Hi-C file (e.g. a .cool file, or a .pairs file, …). ContactFile classes are defined in the HiCExperiment package.\nContactFiles come in four different flavors:\n\n\nCoolFile: connection to a .(m)cool file\n\nHicFile: connection to a .hic file\n\nHicproFile: connection to output files generated by HiC-Pro\n\nPairsFile: connection to a .pairs file\n\nTo create each flavor of ContactFile, one can use the corresponding function:\n\nlibrary(HiCExperiment)\n\n# ----- This creates a connection to a `.(m)cool` file (path stored in `coolf`)\nCoolFile(coolf)\n## CoolFile object\n## .mcool file: /github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752 \n## resolution: 1000 \n## pairs file: \n## metadata(0):\n\n# ----- This creates a connection to a `.hic` file (path stored in `hicf`)\nHicFile(hicf)\n## HicFile object\n## .hic file: /github/home/.cache/R/ExperimentHub/1a9a270f71fe_7836 \n## resolution: 1000 \n## pairs file: \n## metadata(0):\n\n# ----- This creates a connection to output files from HiC-Pro\nHicproFile(hicpromatrixf, hicproregionsf)\n## HicproFile object\n## HiC-Pro files:\n## $ matrix: /github/home/.cache/R/ExperimentHub/1a9a6531ab2c_7837 \n## $ regions: /github/home/.cache/R/ExperimentHub/1a9a3c1fca84_7838 \n## resolution: 1000 \n## pairs file: \n## metadata(0):\n\n# ----- This creates a connection to a pairs file\nPairsFile(pairsf)\n## PairsFile object\n## resource: /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753\n\n\n2.3.3 ContactFile slots\nSeveral “slots” (i.e. pieces of information) are attached to a ContactFile object:\n\nThe path to the disk-stored contact matrix;\nThe active resolution (by default, the finest resolution available in a multi-resolution contact matrix);\nOptionally, the path to a matching pairs file (see below);\nSome metadata.\n\nSlots of a CoolFile object can be accessed as follow:\n\ncf <- CoolFile(coolf)\ncf\n## CoolFile object\n## .mcool file: /github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752 \n## resolution: 1000 \n## pairs file: \n## metadata(0):\n\nresolution(cf)\n## [1] 1000\n\npairsFile(cf)\n## NULL\n\nmetadata(cf)\n## list()\n\n\n\n\n\n\n\nImportant!\n\n\n\nContactFile objects are only connections to a disk-stored HiC file. Although metadata is available, they do not contain actual data!\n\n\n\n2.3.4 ContactFile methods\nTwo useful methods are available for ContactFiles:\n\n\navailableResolutions checks which resolutions are available in a ContactFile.\n\n\navailableResolutions(cf)\n## resolutions(5): 1000 2000 4000 8000 16000\n## \n\n\n\navailableChromosomes checks which chromosomes are available in a ContactFile, along with their length.\n\n\navailableChromosomes(cf)\n## Seqinfo object with 16 sequences from an unspecified genome:\n## seqnames seqlengths isCircular genome\n## I 230218 <NA> <NA>\n## II 813184 <NA> <NA>\n## III 316620 <NA> <NA>\n## IV 1531933 <NA> <NA>\n## V 576874 <NA> <NA>\n## ... ... ... ...\n## XII 1078177 <NA> <NA>\n## XIII 924431 <NA> <NA>\n## XIV 784333 <NA> <NA>\n## XV 1091291 <NA> <NA>\n## XVI 948066 <NA> <NA>" + "text": "2.3 ContactFile class\nHi-C contacts can be stored in four different formats (see previous chapter):\n\nAs a .(m)cool matrix (multi-scores, multi-resolution, indexed)\nAs a .hic matrix (multi-scores, multi-resolution, indexed)\nAs a HiC-pro derived matrix (single-score, single-resolution, non-indexed)\nUnbinned, Hi-C contacts can be stored in .pairs files\n\n\n2.3.1 Accessing example Hi-C files\nExample contact files can be downloaded using HiContactsData function.\n\nlibrary(HiContactsData)\ncoolf <- HiContactsData('yeast_wt', 'mcool')\n\nThis fetches files from the cloud, download them locally and returns the path of the local file.\n\ncoolf\n## EH7702 \n## \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\"\n\nSimilarly, example files are available for other file formats:\n\nhicf <- HiContactsData('yeast_wt', 'hic')\nhicpromatrixf <- HiContactsData('yeast_wt', 'hicpro_matrix')\nhicproregionsf <- HiContactsData('yeast_wt', 'hicpro_bed')\npairsf <- HiContactsData('yeast_wt', 'pairs.gz')\n\nWe can even check the content of some of these files to make sure they are actually what they are:\n\n# ---- HiC-Pro generates a tab-separated `regions.bed` file\nreadLines(hicproregionsf, 25)\n## [1] \"I\\t0\\t1000\" \"I\\t1000\\t2000\" \"I\\t2000\\t3000\" \"I\\t3000\\t4000\" \"I\\t4000\\t5000\" \"I\\t5000\\t6000\" \"I\\t6000\\t7000\" \"I\\t7000\\t8000\" \"I\\t8000\\t9000\" \"I\\t9000\\t10000\" \"I\\t10000\\t11000\" \"I\\t11000\\t12000\" \"I\\t12000\\t13000\" \"I\\t13000\\t14000\" \"I\\t14000\\t15000\" \"I\\t15000\\t16000\" \"I\\t16000\\t17000\" \"I\\t17000\\t18000\" \"I\\t18000\\t19000\" \"I\\t19000\\t20000\" \"I\\t20000\\t21000\" \"I\\t21000\\t22000\" \"I\\t22000\\t23000\" \"I\\t23000\\t24000\" \"I\\t24000\\t25000\"\n\n# ---- Pairs are also tab-separated \nreadLines(pairsf, 25)\n## [1] \"## pairs format v1.0\" \"#sorted: chr1-pos1-chr2-pos2\" \"#columns: readID chr1 pos1 chr2 pos2 strand1 strand2 frag1 frag2\" \"#chromsize: I 230218\" \"#chromsize: II 813184\" \"#chromsize: III 316620\" \"#chromsize: IV 1531933\" \"#chromsize: V 576874\" \"#chromsize: VI 270161\" \"#chromsize: VII 1090940\" \"#chromsize: VIII 562643\" \"#chromsize: IX 439888\" \"#chromsize: X 745751\" \"#chromsize: XI 666816\" \"#chromsize: XII 1078177\" \"#chromsize: XIII 924431\" \"#chromsize: XIV 784333\" \"#chromsize: XV 1091291\" \"#chromsize: XVI 948066\" \"#chromsize: Mito 85779\" \"NS500150:527:HHGYNBGXF:3:21611:19085:3986\\tII\\t105\\tII\\t48548\\t+\\t-\\t1358\\t1681\" \"NS500150:527:HHGYNBGXF:4:13604:19734:2406\\tII\\t113\\tII\\t45003\\t-\\t+\\t1358\\t1658\" \"NS500150:527:HHGYNBGXF:2:11108:25178:11036\\tII\\t119\\tII\\t687251\\t-\\t+\\t1358\\t5550\" \"NS500150:527:HHGYNBGXF:1:22301:8468:1586\\tII\\t160\\tII\\t26124\\t+\\t-\\t1358\\t1510\" \"NS500150:527:HHGYNBGXF:4:23606:24037:2076\\tII\\t169\\tII\\t39052\\t+\\t+\\t1358\\t1613\"\n\n\n2.3.2 ContactFile fundamentals\nA ContactFile object establishes a connection with a disk-stored Hi-C file (e.g. a .cool file, or a .pairs file, …). ContactFile classes are defined in the HiCExperiment package.\nContactFiles come in four different flavors:\n\n\nCoolFile: connection to a .(m)cool file\n\nHicFile: connection to a .hic file\n\nHicproFile: connection to output files generated by HiC-Pro\n\nPairsFile: connection to a .pairs file\n\nTo create each flavor of ContactFile, one can use the corresponding function:\n\nlibrary(HiCExperiment)\n\n# ----- This creates a connection to a `.(m)cool` file (path stored in `coolf`)\nCoolFile(coolf)\n## CoolFile object\n## .mcool file: /github/home/.cache/R/ExperimentHub/1a92248c093f_7752 \n## resolution: 1000 \n## pairs file: \n## metadata(0):\n\n# ----- This creates a connection to a `.hic` file (path stored in `hicf`)\nHicFile(hicf)\n## HicFile object\n## .hic file: /github/home/.cache/R/ExperimentHub/1a92259b7f1f_7836 \n## resolution: 1000 \n## pairs file: \n## metadata(0):\n\n# ----- This creates a connection to output files from HiC-Pro\nHicproFile(hicpromatrixf, hicproregionsf)\n## HicproFile object\n## HiC-Pro files:\n## $ matrix: /github/home/.cache/R/ExperimentHub/1a925372027_7837 \n## $ regions: /github/home/.cache/R/ExperimentHub/1a92600d50bf_7838 \n## resolution: 1000 \n## pairs file: \n## metadata(0):\n\n# ----- This creates a connection to a pairs file\nPairsFile(pairsf)\n## PairsFile object\n## resource: /github/home/.cache/R/ExperimentHub/1a92835ced9_7753\n\n\n2.3.3 ContactFile slots\nSeveral “slots” (i.e. pieces of information) are attached to a ContactFile object:\n\nThe path to the disk-stored contact matrix;\nThe active resolution (by default, the finest resolution available in a multi-resolution contact matrix);\nOptionally, the path to a matching pairs file (see below);\nSome metadata.\n\nSlots of a CoolFile object can be accessed as follow:\n\ncf <- CoolFile(coolf)\ncf\n## CoolFile object\n## .mcool file: /github/home/.cache/R/ExperimentHub/1a92248c093f_7752 \n## resolution: 1000 \n## pairs file: \n## metadata(0):\n\nresolution(cf)\n## [1] 1000\n\npairsFile(cf)\n## NULL\n\nmetadata(cf)\n## list()\n\n\n\n\n\n\n\nImportant!\n\n\n\nContactFile objects are only connections to a disk-stored HiC file. Although metadata is available, they do not contain actual data!\n\n\n\n2.3.4 ContactFile methods\nTwo useful methods are available for ContactFiles:\n\n\navailableResolutions checks which resolutions are available in a ContactFile.\n\n\navailableResolutions(cf)\n## resolutions(5): 1000 2000 4000 8000 16000\n## \n\n\n\navailableChromosomes checks which chromosomes are available in a ContactFile, along with their length.\n\n\navailableChromosomes(cf)\n## Seqinfo object with 16 sequences from an unspecified genome:\n## seqnames seqlengths isCircular genome\n## I 230218 <NA> <NA>\n## II 813184 <NA> <NA>\n## III 316620 <NA> <NA>\n## IV 1531933 <NA> <NA>\n## V 576874 <NA> <NA>\n## ... ... ... ...\n## XII 1078177 <NA> <NA>\n## XIII 924431 <NA> <NA>\n## XIV 784333 <NA> <NA>\n## XV 1091291 <NA> <NA>\n## XVI 948066 <NA> <NA>" }, { "objectID": "data-representation.html#hicexperiment-class", "href": "data-representation.html#hicexperiment-class", "title": "\n2  Hi-C data structures in R\n", "section": "\n2.4 HiCExperiment class", - "text": "2.4 HiCExperiment class\nBased on the previous sections, we have different Bioconductor classes relevant for Hi-C:\n\n\nGInteractions which can be used to represent genomic interactions in R\n\nContactFiles which can be used to establish a connection with disk-stored Hi-C files\n\nHiCExperiment objects are created when parsing a ContactFile in R. The HiCExperiment class reads a ContactFile in memory and store genomic interactions as GInteractions. The HiCExperiment class is, quite obviously, defined in the HiCExperiment package.\n\n2.4.1 Creating a HiCExperiment object\n\n2.4.1.1 Importing a ContactFile\n\nIn practice, to create a HiCExperiment object from a ContactFile, one can use the import method.\n\n\n\n\n\n\nCaution\n\n\n\n\nCreating a HiCExperiment object means importing data from a Hi-C matrix (e.g.  from a ContactFile) in memory in R.\n\nCreating a HiCExperiment object from large disk-stored contact matrices can potentially take a long time.\n\n\n\n\ncf <- CoolFile(coolf)\nhic <- import(cf)\nhic\n## `HiCExperiment` object with 8,757,906 contacts over 12,079 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"whole genome\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 2945692 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\nPrinting a HiCExperiment to the console will not reveal the actual data stored in the object (it would most likely crash your R session!). Instead, it gives a summary of the data stored in the object:\n\nThe fileName, i.e. the path to the disk-stored data file\nThe focus, i.e. the genomic location for which data has been imported (in the example above, \"whole genome\" implies that all the data has been imported in R)\n\nresolutions available in the disk-stored data file (this will be identical to availableResolutions(cf))\n\nactive resolution indicates at which resolution the data is currently imported\n\ninteractions refers to the actual GInteractions imported in R and “hidden” (for now!) in the HiCExperiment object\n\nscores refer to different interaction frequency estimates. These can be raw counts, balanced (if the contact matrix has been previously normalized), or whatever score the end-user want to attribute to each interaction (e.g. ratio of counts between two Hi-C maps, …)\n\ntopologicalFeatures is a list of GRanges or GInteractions objects to describe important topological features.\n\npairsFile is a pointer to an optional disk-stored .pairs file from which the contact matrix has been created. This is often useful to estimate some Hi-C metrics.\n\nmetadata is a list to further describe the experiment.\n\n\n\n\n\n\n\nHiCExperiment slots\n\n\n\nThese pieces of information are called slots. They can be directly accessed using getter functions, bearing the same name than the slot.\n\nfileName(hic)\n## [1] \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\"\n\nfocus(hic)\n## NULL\n\nresolutions(hic)\n## [1] 1000 2000 4000 8000 16000\n\nresolution(hic)\n## [1] 1000\n\ninteractions(hic)\n## GInteractions object with 2945692 interactions and 4 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric>\n## [1] I 1-1000 --- I 1-1000 | 0\n## [2] I 1-1000 --- I 1001-2000 | 0\n## [3] I 1-1000 --- I 2001-3000 | 0\n## [4] I 1-1000 --- I 3001-4000 | 0\n## [5] I 1-1000 --- I 4001-5000 | 0\n## ... ... ... ... ... ... . ...\n## [2945688] XVI 940001-941000 --- XVI 942001-943000 | 12070\n## [2945689] XVI 940001-941000 --- XVI 943001-944000 | 12070\n## [2945690] XVI 941001-942000 --- XVI 941001-942000 | 12071\n## [2945691] XVI 941001-942000 --- XVI 942001-943000 | 12071\n## [2945692] XVI 941001-942000 --- XVI 943001-944000 | 12071\n## bin_id2 count balanced\n## <numeric> <numeric> <numeric>\n## [1] 0 15 0.0663491\n## [2] 1 21 0.1273505\n## [3] 2 21 0.0738691\n## [4] 3 38 0.0827051\n## [5] 4 17 0.0591984\n## ... ... ... ...\n## [2945688] 12072 11 0.0575550\n## [2945689] 12073 1 NaN\n## [2945690] 12071 74 0.0504615\n## [2945691] 12072 39 0.1624599\n## [2945692] 12073 1 NaN\n## -------\n## regions: 12079 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome\n\nscores(hic)\n## List of length 2\n## names(2): count balanced\n\ntopologicalFeatures(hic)\n## List of length 4\n## names(4): compartments borders loops viewpoints\n\npairsFile(hic)\n## NULL\n\nmetadata(hic)\n## list()\n\n\n\n\n\n\n\n\n\nNotes\n\n\n\nimport also works for other types of ContactFile (HicFile, HicproFile, PairsFile), e.g. \n\nFor HicFile and HicproFile, import seamlessly returns a HiCExperiment as well:\n\n\nhf <- HicFile(hicf)\nhic <- import(hf)\nhic\n## `HiCExperiment` object with 13,681,280 contacts over 12,165 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a270f71fe_7836\" \n## focus: \"whole genome\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 2965693 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nFor PairsFile, the returned object is a representation of Hi-C “pairs” in R, i.e. GInteractions\n\n\n\npf <- PairsFile(pairsf)\npairs <- import(pf)\npairs\n## GInteractions object with 471364 interactions and 3 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | frag1 frag2\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric>\n## [1] II 105 --- II 48548 | 1358 1681\n## [2] II 113 --- II 45003 | 1358 1658\n## [3] II 119 --- II 687251 | 1358 5550\n## [4] II 160 --- II 26124 | 1358 1510\n## [5] II 169 --- II 39052 | 1358 1613\n## ... ... ... ... ... ... . ... ...\n## [471360] II 808605 --- II 809683 | 6316 6320\n## [471361] II 808609 --- II 809917 | 6316 6324\n## [471362] II 808617 --- II 809506 | 6316 6319\n## [471363] II 809447 --- II 809685 | 6319 6321\n## [471364] II 809472 --- II 809675 | 6319 6320\n## distance\n## <integer>\n## [1] 48443\n## [2] 44890\n## [3] 687132\n## [4] 25964\n## [5] 38883\n## ... ...\n## [471360] 1078\n## [471361] 1308\n## [471362] 889\n## [471363] 238\n## [471364] 203\n## -------\n## regions: 549331 ranges and 0 metadata columns\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\n\n\n2.4.1.2 Customizing the import\n\nTo reduce the import to only parse the data that is relevant to the study, two arguments can be passed to import, along with a ContactFile.\n\n\n\n\n\n\nKey import arguments:\n\n\n\n\n\nfocus: This can be used to only parse data for a specific genomic location.\n\nresolution: This can be used to choose which resolution to parse the contact matrix at (this is ignored if the ContactFile is not multi-resolution, e.g. .cool or HiC-Pro generated matrices)\n\n\n\n\nImport interactions within a single chromosome:\n\n\nhic <- import(cf, focus = 'II', resolution = 2000)\n\nregions(hic) # ---- `regions()` work on `HiCExperiment` the same way than on `GInteractions`\n## GRanges object with 407 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle>\n## II_1_2000 II 1-2000 * | 116 NaN II\n## II_2001_4000 II 2001-4000 * | 117 NaN II\n## II_4001_6000 II 4001-6000 * | 118 NaN II\n## II_6001_8000 II 6001-8000 * | 119 NaN II\n## II_8001_10000 II 8001-10000 * | 120 0.0461112 II\n## ... ... ... ... . ... ... ...\n## II_804001_806000 II 804001-806000 * | 518 0.0493107 II\n## II_806001_808000 II 806001-808000 * | 519 0.0611355 II\n## II_808001_810000 II 808001-810000 * | 520 NaN II\n## II_810001_812000 II 810001-812000 * | 521 NaN II\n## II_812001_813184 II 812001-813184 * | 522 NaN II\n## center\n## <integer>\n## II_1_2000 1000\n## II_2001_4000 3000\n## II_4001_6000 5000\n## II_6001_8000 7000\n## II_8001_10000 9000\n## ... ...\n## II_804001_806000 805000\n## II_806001_808000 807000\n## II_808001_810000 809000\n## II_810001_812000 811000\n## II_812001_813184 812592\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\ntable(seqnames(regions(hic)))\n## \n## I II III IV V VI VII VIII IX X XI XII XIII XIV XV \n## 0 407 0 0 0 0 0 0 0 0 0 0 0 0 0 \n## XVI \n## 0\n\nanchors(hic) # ---- `anchors()` work on `HiCExperiment` the same way than on `GInteractions`\n## $first\n## GRanges object with 34063 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle>\n## [1] II 1-2000 * | 116 NaN II\n## [2] II 1-2000 * | 116 NaN II\n## [3] II 1-2000 * | 116 NaN II\n## [4] II 1-2000 * | 116 NaN II\n## [5] II 1-2000 * | 116 NaN II\n## ... ... ... ... . ... ... ...\n## [34059] II 804001-806000 * | 518 0.0493107 II\n## [34060] II 806001-808000 * | 519 0.0611355 II\n## [34061] II 806001-808000 * | 519 0.0611355 II\n## [34062] II 806001-808000 * | 519 0.0611355 II\n## [34063] II 808001-810000 * | 520 NaN II\n## center\n## <integer>\n## [1] 1000\n## [2] 1000\n## [3] 1000\n## [4] 1000\n## [5] 1000\n## ... ...\n## [34059] 805000\n## [34060] 807000\n## [34061] 807000\n## [34062] 807000\n## [34063] 809000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n## \n## $second\n## GRanges object with 34063 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle>\n## [1] II 1-2000 * | 116 NaN II\n## [2] II 4001-6000 * | 118 NaN II\n## [3] II 6001-8000 * | 119 NaN II\n## [4] II 8001-10000 * | 120 0.0461112 II\n## [5] II 10001-12000 * | 121 0.0334807 II\n## ... ... ... ... . ... ... ...\n## [34059] II 810001-812000 * | 521 NaN II\n## [34060] II 806001-808000 * | 519 0.0611355 II\n## [34061] II 808001-810000 * | 520 NaN II\n## [34062] II 810001-812000 * | 521 NaN II\n## [34063] II 808001-810000 * | 520 NaN II\n## center\n## <integer>\n## [1] 1000\n## [2] 5000\n## [3] 7000\n## [4] 9000\n## [5] 11000\n## ... ...\n## [34059] 811000\n## [34060] 807000\n## [34061] 809000\n## [34062] 811000\n## [34063] 809000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\nImport interactions within a segment of a chromosome:\n\n\nhic <- import(cf, focus = 'II:40000-60000', resolution = 1000)\n\nregions(hic) \n## GRanges object with 21 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle>\n## II_39001_40000 II 39001-40000 * | 270 0.0220798 II\n## II_40001_41000 II 40001-41000 * | 271 0.0246775 II\n## II_41001_42000 II 41001-42000 * | 272 0.0269232 II\n## II_42001_43000 II 42001-43000 * | 273 0.0341849 II\n## II_43001_44000 II 43001-44000 * | 274 0.0265386 II\n## ... ... ... ... . ... ... ...\n## II_55001_56000 II 55001-56000 * | 286 0.0213532 II\n## II_56001_57000 II 56001-57000 * | 287 0.0569839 II\n## II_57001_58000 II 57001-58000 * | 288 0.0338612 II\n## II_58001_59000 II 58001-59000 * | 289 0.0294531 II\n## II_59001_60000 II 59001-60000 * | 290 0.0306662 II\n## center\n## <integer>\n## II_39001_40000 39500\n## II_40001_41000 40500\n## II_41001_42000 41500\n## II_42001_43000 42500\n## II_43001_44000 43500\n## ... ...\n## II_55001_56000 55500\n## II_56001_57000 56500\n## II_57001_58000 57500\n## II_58001_59000 58500\n## II_59001_60000 59500\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\nanchors(hic)\n## $first\n## GRanges object with 210 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] II 40001-41000 * | 271 0.0246775 II 40500\n## [2] II 40001-41000 * | 271 0.0246775 II 40500\n## [3] II 40001-41000 * | 271 0.0246775 II 40500\n## [4] II 40001-41000 * | 271 0.0246775 II 40500\n## [5] II 40001-41000 * | 271 0.0246775 II 40500\n## ... ... ... ... . ... ... ... ...\n## [206] II 57001-58000 * | 288 0.0338612 II 57500\n## [207] II 57001-58000 * | 288 0.0338612 II 57500\n## [208] II 58001-59000 * | 289 0.0294531 II 58500\n## [209] II 58001-59000 * | 289 0.0294531 II 58500\n## [210] II 59001-60000 * | 290 0.0306662 II 59500\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n## \n## $second\n## GRanges object with 210 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] II 40001-41000 * | 271 0.0246775 II 40500\n## [2] II 41001-42000 * | 272 0.0269232 II 41500\n## [3] II 42001-43000 * | 273 0.0341849 II 42500\n## [4] II 43001-44000 * | 274 0.0265386 II 43500\n## [5] II 44001-45000 * | 275 0.0488968 II 44500\n## ... ... ... ... . ... ... ... ...\n## [206] II 58001-59000 * | 289 0.0294531 II 58500\n## [207] II 59001-60000 * | 290 0.0306662 II 59500\n## [208] II 58001-59000 * | 289 0.0294531 II 58500\n## [209] II 59001-60000 * | 290 0.0306662 II 59500\n## [210] II 59001-60000 * | 290 0.0306662 II 59500\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\nImport interactions between two chromosomes:\n\n\nhic2 <- import(cf, focus = 'II|XV', resolution = 4000)\n\nregions(hic2)\n## GRanges object with 477 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight\n## <Rle> <IRanges> <Rle> | <numeric> <numeric>\n## II_1_4000 II 1-4000 * | 58 NaN\n## II_4001_8000 II 4001-8000 * | 59 NaN\n## II_8001_12000 II 8001-12000 * | 60 0.0274474\n## II_12001_16000 II 12001-16000 * | 61 0.0342116\n## II_16001_20000 II 16001-20000 * | 62 0.0195128\n## ... ... ... ... . ... ...\n## XV_1072001_1076000 XV 1072001-1076000 * | 2783 0.041763\n## XV_1076001_1080000 XV 1076001-1080000 * | 2784 NaN\n## XV_1080001_1084000 XV 1080001-1084000 * | 2785 NaN\n## XV_1084001_1088000 XV 1084001-1088000 * | 2786 NaN\n## XV_1088001_1091291 XV 1088001-1091291 * | 2787 NaN\n## chr center\n## <Rle> <integer>\n## II_1_4000 II 2000\n## II_4001_8000 II 6000\n## II_8001_12000 II 10000\n## II_12001_16000 II 14000\n## II_16001_20000 II 18000\n## ... ... ...\n## XV_1072001_1076000 XV 1074000\n## XV_1076001_1080000 XV 1078000\n## XV_1080001_1084000 XV 1082000\n## XV_1084001_1088000 XV 1086000\n## XV_1088001_1091291 XV 1089646\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\nanchors(hic2)\n## $first\n## GRanges object with 18032 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle>\n## [1] II 1-4000 * | 58 NaN II\n## [2] II 1-4000 * | 58 NaN II\n## [3] II 1-4000 * | 58 NaN II\n## [4] II 1-4000 * | 58 NaN II\n## [5] II 1-4000 * | 58 NaN II\n## ... ... ... ... . ... ... ...\n## [18028] II 808001-812000 * | 260 NaN II\n## [18029] II 808001-812000 * | 260 NaN II\n## [18030] II 808001-812000 * | 260 NaN II\n## [18031] II 808001-812000 * | 260 NaN II\n## [18032] II 808001-812000 * | 260 NaN II\n## center\n## <integer>\n## [1] 2000\n## [2] 2000\n## [3] 2000\n## [4] 2000\n## [5] 2000\n## ... ...\n## [18028] 810000\n## [18029] 810000\n## [18030] 810000\n## [18031] 810000\n## [18032] 810000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n## \n## $second\n## GRanges object with 18032 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle>\n## [1] XV 48001-52000 * | 2527 0.0185354 XV\n## [2] XV 348001-352000 * | 2602 0.0233750 XV\n## [3] XV 468001-472000 * | 2632 0.0153615 XV\n## [4] XV 472001-476000 * | 2633 0.0189624 XV\n## [5] XV 584001-588000 * | 2661 0.0167715 XV\n## ... ... ... ... . ... ... ...\n## [18028] XV 980001-984000 * | 2760 0.0187827 XV\n## [18029] XV 984001-988000 * | 2761 0.0250094 XV\n## [18030] XV 992001-996000 * | 2763 0.0185599 XV\n## [18031] XV 1004001-1008000 * | 2766 0.0196942 XV\n## [18032] XV 1064001-1068000 * | 2781 0.0208220 XV\n## center\n## <integer>\n## [1] 50000\n## [2] 350000\n## [3] 470000\n## [4] 474000\n## [5] 586000\n## ... ...\n## [18028] 982000\n## [18029] 986000\n## [18030] 994000\n## [18031] 1006000\n## [18032] 1066000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\nImport interactions between segments of two chromosomes:\n\n\nhic3 <- import(cf, focus = 'III:10000-40000|XV:10000-40000', resolution = 2000)\n\nregions(hic3)\n## GRanges object with 32 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle>\n## III_8001_10000 III 8001-10000 * | 527 NaN III\n## III_10001_12000 III 10001-12000 * | 528 NaN III\n## III_12001_14000 III 12001-14000 * | 529 NaN III\n## III_14001_16000 III 14001-16000 * | 530 0.0356351 III\n## III_16001_18000 III 16001-18000 * | 531 0.0230693 III\n## ... ... ... ... . ... ... ...\n## XV_30001_32000 XV 30001-32000 * | 5039 0.0482465 XV\n## XV_32001_34000 XV 32001-34000 * | 5040 0.0241580 XV\n## XV_34001_36000 XV 34001-36000 * | 5041 0.0273166 XV\n## XV_36001_38000 XV 36001-38000 * | 5042 0.0542235 XV\n## XV_38001_40000 XV 38001-40000 * | 5043 0.0206849 XV\n## center\n## <integer>\n## III_8001_10000 9000\n## III_10001_12000 11000\n## III_12001_14000 13000\n## III_14001_16000 15000\n## III_16001_18000 17000\n## ... ...\n## XV_30001_32000 31000\n## XV_32001_34000 33000\n## XV_34001_36000 35000\n## XV_36001_38000 37000\n## XV_38001_40000 39000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\nanchors(hic3)\n## $first\n## GRanges object with 11 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] III 14001-16000 * | 530 0.0356351 III 15000\n## [2] III 16001-18000 * | 531 0.0230693 III 17000\n## [3] III 16001-18000 * | 531 0.0230693 III 17000\n## [4] III 20001-22000 * | 533 0.0343250 III 21000\n## [5] III 22001-24000 * | 534 0.0258604 III 23000\n## [6] III 24001-26000 * | 535 0.0290757 III 25000\n## [7] III 28001-30000 * | 537 0.0290713 III 29000\n## [8] III 30001-32000 * | 538 0.0266373 III 31000\n## [9] III 32001-34000 * | 539 0.0201137 III 33000\n## [10] III 32001-34000 * | 539 0.0201137 III 33000\n## [11] III 36001-38000 * | 541 0.0220603 III 37000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n## \n## $second\n## GRanges object with 11 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] XV 16001-18000 * | 5032 0.0187250 XV 17000\n## [2] XV 16001-18000 * | 5032 0.0187250 XV 17000\n## [3] XV 20001-22000 * | 5034 0.0247973 XV 21000\n## [4] XV 14001-16000 * | 5031 0.0379727 XV 15000\n## [5] XV 10001-12000 * | 5029 0.0296913 XV 11000\n## [6] XV 32001-34000 * | 5040 0.0241580 XV 33000\n## [7] XV 16001-18000 * | 5032 0.0187250 XV 17000\n## [8] XV 38001-40000 * | 5043 0.0206849 XV 39000\n## [9] XV 22001-24000 * | 5035 0.0613856 XV 23000\n## [10] XV 30001-32000 * | 5039 0.0482465 XV 31000\n## [11] XV 10001-12000 * | 5029 0.0296913 XV 11000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\n2.4.2 Interacting with HiCExperiment data\n\nAn HiCExperiment object allows parsing of a disk-stored contact matrix.\nAn HiCExperiment object operates by wrapping together (1) a ContactFile (i.e. a connection to a disk-stored data file) and (2) a GInteractions generated by parsing the data file.\n\nWe will use the yeast_hic HiCExperiment object to demonstrate how to parse information from a HiCExperiment object.\n\nyeast_hic <- contacts_yeast()\n\n\nyeast_hic\n## `HiCExperiment` object with 8,757,906 contacts over 763 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"whole genome\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 16000 \n## interactions: 267709 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753 \n## metadata(3): ID org date\n\n\n2.4.2.1 Interactions\nThe imported genomic interactions can be directly exposed using the interactions function and are returned as a GInteractions object.\n\ninteractions(yeast_hic)\n## GInteractions object with 267709 interactions and 4 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric>\n## [1] I 1-16000 --- I 1-16000 | 0\n## [2] I 1-16000 --- I 16001-32000 | 0\n## [3] I 1-16000 --- I 32001-48000 | 0\n## [4] I 1-16000 --- I 48001-64000 | 0\n## [5] I 1-16000 --- I 64001-80000 | 0\n## ... ... ... ... ... ... . ...\n## [267705] XVI 896001-912000 --- XVI 912001-928000 | 759\n## [267706] XVI 896001-912000 --- XVI 928001-944000 | 759\n## [267707] XVI 912001-928000 --- XVI 912001-928000 | 760\n## [267708] XVI 912001-928000 --- XVI 928001-944000 | 760\n## [267709] XVI 928001-944000 --- XVI 928001-944000 | 761\n## bin_id2 count balanced\n## <numeric> <numeric> <numeric>\n## [1] 0 2836 1.0943959\n## [2] 1 2212 0.9592069\n## [3] 2 1183 0.4385242\n## [4] 3 831 0.2231192\n## [5] 4 310 0.0821255\n## ... ... ... ...\n## [267705] 760 3565 1.236371\n## [267706] 761 1359 0.385016\n## [267707] 760 3534 2.103988\n## [267708] 761 3055 1.485794\n## [267709] 761 4308 1.711565\n## -------\n## regions: 763 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome\n\n\n\n\n\n\n\nNote\n\n\n\nBecause genomic interactions are actually stored as GInteractions, regions and anchors work on HiCExperiment objects just as they work with GInteractions!\n\n\n\nregions(yeast_hic)\n## GRanges object with 763 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight\n## <Rle> <IRanges> <Rle> | <numeric> <numeric>\n## I_1_16000 I 1-16000 * | 0 0.0196442\n## I_16001_32000 I 16001-32000 * | 1 0.0220746\n## I_32001_48000 I 32001-48000 * | 2 0.0188701\n## I_48001_64000 I 48001-64000 * | 3 0.0136679\n## I_64001_80000 I 64001-80000 * | 4 0.0134860\n## ... ... ... ... . ... ...\n## XVI_880001_896000 XVI 880001-896000 * | 758 0.00910873\n## XVI_896001_912000 XVI 896001-912000 * | 759 0.01421350\n## XVI_912001_928000 XVI 912001-928000 * | 760 0.02439992\n## XVI_928001_944000 XVI 928001-944000 * | 761 0.01993237\n## XVI_944001_948066 XVI 944001-948066 * | 762 NaN\n## chr center\n## <Rle> <integer>\n## I_1_16000 I 8000\n## I_16001_32000 I 24000\n## I_32001_48000 I 40000\n## I_48001_64000 I 56000\n## I_64001_80000 I 72000\n## ... ... ...\n## XVI_880001_896000 XVI 888000\n## XVI_896001_912000 XVI 904000\n## XVI_912001_928000 XVI 920000\n## XVI_928001_944000 XVI 936000\n## XVI_944001_948066 XVI 946033\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\nanchors(yeast_hic)\n## $first\n## GRanges object with 267709 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle>\n## [1] I 1-16000 * | 0 0.0196442 I\n## [2] I 1-16000 * | 0 0.0196442 I\n## [3] I 1-16000 * | 0 0.0196442 I\n## [4] I 1-16000 * | 0 0.0196442 I\n## [5] I 1-16000 * | 0 0.0196442 I\n## ... ... ... ... . ... ... ...\n## [267705] XVI 896001-912000 * | 759 0.0142135 XVI\n## [267706] XVI 896001-912000 * | 759 0.0142135 XVI\n## [267707] XVI 912001-928000 * | 760 0.0243999 XVI\n## [267708] XVI 912001-928000 * | 760 0.0243999 XVI\n## [267709] XVI 928001-944000 * | 761 0.0199324 XVI\n## center\n## <integer>\n## [1] 8000\n## [2] 8000\n## [3] 8000\n## [4] 8000\n## [5] 8000\n## ... ...\n## [267705] 904000\n## [267706] 904000\n## [267707] 920000\n## [267708] 920000\n## [267709] 936000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n## \n## $second\n## GRanges object with 267709 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle>\n## [1] I 1-16000 * | 0 0.0196442 I\n## [2] I 16001-32000 * | 1 0.0220746 I\n## [3] I 32001-48000 * | 2 0.0188701 I\n## [4] I 48001-64000 * | 3 0.0136679 I\n## [5] I 64001-80000 * | 4 0.0134860 I\n## ... ... ... ... . ... ... ...\n## [267705] XVI 912001-928000 * | 760 0.0243999 XVI\n## [267706] XVI 928001-944000 * | 761 0.0199324 XVI\n## [267707] XVI 912001-928000 * | 760 0.0243999 XVI\n## [267708] XVI 928001-944000 * | 761 0.0199324 XVI\n## [267709] XVI 928001-944000 * | 761 0.0199324 XVI\n## center\n## <integer>\n## [1] 8000\n## [2] 24000\n## [3] 40000\n## [4] 56000\n## [5] 72000\n## ... ...\n## [267705] 920000\n## [267706] 936000\n## [267707] 920000\n## [267708] 936000\n## [267709] 936000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\n2.4.2.2 Bins and seqinfo\nAdditional useful information can be recovered from a HiCExperiment object. This includes:\n\nThe seqinfo of the HiCExperiment:\n\n\nseqinfo(yeast_hic)\n## Seqinfo object with 16 sequences from an unspecified genome:\n## seqnames seqlengths isCircular genome\n## I 230218 <NA> <NA>\n## II 813184 <NA> <NA>\n## III 316620 <NA> <NA>\n## IV 1531933 <NA> <NA>\n## V 576874 <NA> <NA>\n## ... ... ... ...\n## XII 1078177 <NA> <NA>\n## XIII 924431 <NA> <NA>\n## XIV 784333 <NA> <NA>\n## XV 1091291 <NA> <NA>\n## XVI 948066 <NA> <NA>\n\nThis lists the different chromosomes available to parse along with their length.\n\nThe bins of the HiCExperiment:\n\n\nbins(yeast_hic)\n## GRanges object with 763 ranges and 2 metadata columns:\n## seqnames ranges strand | bin_id weight\n## <Rle> <IRanges> <Rle> | <numeric> <numeric>\n## I_1_16000 I 1-16000 * | 0 0.0196442\n## I_16001_32000 I 16001-32000 * | 1 0.0220746\n## I_32001_48000 I 32001-48000 * | 2 0.0188701\n## I_48001_64000 I 48001-64000 * | 3 0.0136679\n## I_64001_80000 I 64001-80000 * | 4 0.0134860\n## ... ... ... ... . ... ...\n## XVI_880001_896000 XVI 880001-896000 * | 758 0.00910873\n## XVI_896001_912000 XVI 896001-912000 * | 759 0.01421350\n## XVI_912001_928000 XVI 912001-928000 * | 760 0.02439992\n## XVI_928001_944000 XVI 928001-944000 * | 761 0.01993237\n## XVI_944001_948066 XVI 944001-948066 * | 762 NaN\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\n\n\n\n\n\nDifference between bins and regions\n\n\n\nbins are not equivalent to regions of an HiCExperiment.\n\n\nbins refer to all the possible regions of a HiCExperiment. For instance, for a HiCExperiment with a total genome size of 1,000,000 and a resolution of 2000, bins will always return a GRanges object with 500 ranges.\n\nregions, on the opposite, refer to the union of anchors of all the interactions imported in a HiCExperiment object.\n\nThus, all the regions will necessarily be a subset of the HiCExperiment bins, or equal to bins if no focus has been specified when importing a ContactFile.\n\n\n\n2.4.2.3 Scores\nOf course, what the end-user would be looking for is the frequency for each genomic interaction. Such frequency scores are available using the scores function. scores returns a list with a number of different types of scores.\n\nhead(scores(yeast_hic))\n## List of length 2\n## names(2): count balanced\n\nhead(scores(yeast_hic, \"count\"))\n## [1] 2836 2212 1183 831 310 159\n\nhead(scores(yeast_hic, \"balanced\"))\n## [1] 1.09439586 0.95920688 0.43852417 0.22311917 0.08212549 0.03345221\n\n\n\n\n\n\n\nTip\n\n\n\nCalling interactions(hic) returns a GInteractions with scores already stored in extra columns. This short-hand allows one to dynamically check scores directly from the interactions output.\n\ninteractions(yeast_hic)\n## GInteractions object with 267709 interactions and 4 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric>\n## [1] I 1-16000 --- I 1-16000 | 0\n## [2] I 1-16000 --- I 16001-32000 | 0\n## [3] I 1-16000 --- I 32001-48000 | 0\n## [4] I 1-16000 --- I 48001-64000 | 0\n## [5] I 1-16000 --- I 64001-80000 | 0\n## ... ... ... ... ... ... . ...\n## [267705] XVI 896001-912000 --- XVI 912001-928000 | 759\n## [267706] XVI 896001-912000 --- XVI 928001-944000 | 759\n## [267707] XVI 912001-928000 --- XVI 912001-928000 | 760\n## [267708] XVI 912001-928000 --- XVI 928001-944000 | 760\n## [267709] XVI 928001-944000 --- XVI 928001-944000 | 761\n## bin_id2 count balanced\n## <numeric> <numeric> <numeric>\n## [1] 0 2836 1.0943959\n## [2] 1 2212 0.9592069\n## [3] 2 1183 0.4385242\n## [4] 3 831 0.2231192\n## [5] 4 310 0.0821255\n## ... ... ... ...\n## [267705] 760 3565 1.236371\n## [267706] 761 1359 0.385016\n## [267707] 760 3534 2.103988\n## [267708] 761 3055 1.485794\n## [267709] 761 4308 1.711565\n## -------\n## regions: 763 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome\n\nhead(interactions(yeast_hic)$count)\n## [1] 2836 2212 1183 831 310 159\n\n\n\n\n2.4.2.4 topologicalFeatures\nIn Hi-C studies, “topological features” refer to genomic structures identified (usually from a Hi-C map, but not necessarily). For instance, one may want to study known structural loops anchored at CTCF sites, or interactions around or over centromeres, or simply specific genomic “viewpoints”.\nHiCExperiment objects can store topologicalFeatures to facilitate this analysis. By default, four empty topologicalFeatures are stored in a list:\n\ncompartments\nborders\nloops\nviewpoints\n\nAdditional topologicalFeatures can be added to this list (read next chapter for more detail).\n\ntopologicalFeatures(yeast_hic)\n## List of length 5\n## names(5): compartments borders loops viewpoints centromeres\n\ntopologicalFeatures(yeast_hic, 'centromeres')\n## GRanges object with 16 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] I 151583-151641 +\n## [2] II 238361-238419 +\n## [3] III 114322-114380 +\n## [4] IV 449879-449937 +\n## [5] V 152522-152580 +\n## ... ... ... ...\n## [12] XII 151366-151424 +\n## [13] XIII 268222-268280 +\n## [14] XIV 628588-628646 +\n## [15] XV 326897-326955 +\n## [16] XVI 556255-556313 +\n## -------\n## seqinfo: 17 sequences (1 circular) from R64-1-1 genome\n\n\n2.4.2.5 pairsFile\nAs a contact matrix is typically obtained from binning a .pairs file, it is often the case that the matching .pairs file is available to then end-user. A PairsFile can thus be created and associated to the corresponding HiCExperiment object. This allows more accurate estimation of contact distribution, e.g. when calculating distance-dependent genomic interaction frequency.\n\npairsFile(yeast_hic) <- pairsf\n\npairsFile(yeast_hic)\n## EH7703 \n## \"/github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753\"\n\nreadLines(pairsFile(yeast_hic), 25)\n## [1] \"## pairs format v1.0\" \n## [2] \"#sorted: chr1-pos1-chr2-pos2\" \n## [3] \"#columns: readID chr1 pos1 chr2 pos2 strand1 strand2 frag1 frag2\" \n## [4] \"#chromsize: I 230218\" \n## [5] \"#chromsize: II 813184\" \n## [6] \"#chromsize: III 316620\" \n## [7] \"#chromsize: IV 1531933\" \n## [8] \"#chromsize: V 576874\" \n## [9] \"#chromsize: VI 270161\" \n## [10] \"#chromsize: VII 1090940\" \n## [11] \"#chromsize: VIII 562643\" \n## [12] \"#chromsize: IX 439888\" \n## [13] \"#chromsize: X 745751\" \n## [14] \"#chromsize: XI 666816\" \n## [15] \"#chromsize: XII 1078177\" \n## [16] \"#chromsize: XIII 924431\" \n## [17] \"#chromsize: XIV 784333\" \n## [18] \"#chromsize: XV 1091291\" \n## [19] \"#chromsize: XVI 948066\" \n## [20] \"#chromsize: Mito 85779\" \n## [21] \"NS500150:527:HHGYNBGXF:3:21611:19085:3986\\tII\\t105\\tII\\t48548\\t+\\t-\\t1358\\t1681\" \n## [22] \"NS500150:527:HHGYNBGXF:4:13604:19734:2406\\tII\\t113\\tII\\t45003\\t-\\t+\\t1358\\t1658\" \n## [23] \"NS500150:527:HHGYNBGXF:2:11108:25178:11036\\tII\\t119\\tII\\t687251\\t-\\t+\\t1358\\t5550\"\n## [24] \"NS500150:527:HHGYNBGXF:1:22301:8468:1586\\tII\\t160\\tII\\t26124\\t+\\t-\\t1358\\t1510\" \n## [25] \"NS500150:527:HHGYNBGXF:4:23606:24037:2076\\tII\\t169\\tII\\t39052\\t+\\t+\\t1358\\t1613\"\n\n\n\n\n\n\n\nImporting a PairsFile\n\n\n\nThe .pairs file linked to a HiCExperiment object can itself be imported in a GInteractions object:\n\nimport(pairsFile(yeast_hic), format = 'pairs')\n## GInteractions object with 471364 interactions and 3 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | frag1 frag2\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric>\n## [1] II 105 --- II 48548 | 1358 1681\n## [2] II 113 --- II 45003 | 1358 1658\n## [3] II 119 --- II 687251 | 1358 5550\n## [4] II 160 --- II 26124 | 1358 1510\n## [5] II 169 --- II 39052 | 1358 1613\n## ... ... ... ... ... ... . ... ...\n## [471360] II 808605 --- II 809683 | 6316 6320\n## [471361] II 808609 --- II 809917 | 6316 6324\n## [471362] II 808617 --- II 809506 | 6316 6319\n## [471363] II 809447 --- II 809685 | 6319 6321\n## [471364] II 809472 --- II 809675 | 6319 6320\n## distance\n## <integer>\n## [1] 48443\n## [2] 44890\n## [3] 687132\n## [4] 25964\n## [5] 38883\n## ... ...\n## [471360] 1078\n## [471361] 1308\n## [471362] 889\n## [471363] 238\n## [471364] 203\n## -------\n## regions: 549331 ranges and 0 metadata columns\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\nNote that these GInteractions are not binned, contrary to interactions extracted from a HiCExperiment. Anchors of the interactions listed in the GInteractions imported from a disk-stored .pairs file are all of width 1." + "text": "2.4 HiCExperiment class\nBased on the previous sections, we have different Bioconductor classes relevant for Hi-C:\n\n\nGInteractions which can be used to represent genomic interactions in R\n\nContactFiles which can be used to establish a connection with disk-stored Hi-C files\n\nHiCExperiment objects are created when parsing a ContactFile in R. The HiCExperiment class reads a ContactFile in memory and store genomic interactions as GInteractions. The HiCExperiment class is, quite obviously, defined in the HiCExperiment package.\n\n2.4.1 Creating a HiCExperiment object\n\n2.4.1.1 Importing a ContactFile\n\nIn practice, to create a HiCExperiment object from a ContactFile, one can use the import method.\n\n\n\n\n\n\nCaution\n\n\n\n\nCreating a HiCExperiment object means importing data from a Hi-C matrix (e.g.  from a ContactFile) in memory in R.\n\nCreating a HiCExperiment object from large disk-stored contact matrices can potentially take a long time.\n\n\n\n\ncf <- CoolFile(coolf)\nhic <- import(cf)\nhic\n## `HiCExperiment` object with 8,757,906 contacts over 12,079 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"whole genome\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 2945692 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\nPrinting a HiCExperiment to the console will not reveal the actual data stored in the object (it would most likely crash your R session!). Instead, it gives a summary of the data stored in the object:\n\nThe fileName, i.e. the path to the disk-stored data file\nThe focus, i.e. the genomic location for which data has been imported (in the example above, \"whole genome\" implies that all the data has been imported in R)\n\nresolutions available in the disk-stored data file (this will be identical to availableResolutions(cf))\n\nactive resolution indicates at which resolution the data is currently imported\n\ninteractions refers to the actual GInteractions imported in R and “hidden” (for now!) in the HiCExperiment object\n\nscores refer to different interaction frequency estimates. These can be raw counts, balanced (if the contact matrix has been previously normalized), or whatever score the end-user want to attribute to each interaction (e.g. ratio of counts between two Hi-C maps, …)\n\ntopologicalFeatures is a list of GRanges or GInteractions objects to describe important topological features.\n\npairsFile is a pointer to an optional disk-stored .pairs file from which the contact matrix has been created. This is often useful to estimate some Hi-C metrics.\n\nmetadata is a list to further describe the experiment.\n\nThese pieces of information are called slots. They can be directly accessed using getter functions, bearing the same name than the slot.\n\nfileName(hic)\n## [1] \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\"\n\nfocus(hic)\n## NULL\n\nresolutions(hic)\n## [1] 1000 2000 4000 8000 16000\n\nresolution(hic)\n## [1] 1000\n\ninteractions(hic)\n## GInteractions object with 2945692 interactions and 4 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1 bin_id2 count balanced\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <numeric> <numeric>\n## [1] I 1-1000 --- I 1-1000 | 0 0 15 0.0663491\n## [2] I 1-1000 --- I 1001-2000 | 0 1 21 0.1273505\n## [3] I 1-1000 --- I 2001-3000 | 0 2 21 0.0738691\n## [4] I 1-1000 --- I 3001-4000 | 0 3 38 0.0827051\n## [5] I 1-1000 --- I 4001-5000 | 0 4 17 0.0591984\n## ... ... ... ... ... ... . ... ... ... ...\n## [2945688] XVI 940001-941000 --- XVI 942001-943000 | 12070 12072 11 0.0575550\n## [2945689] XVI 940001-941000 --- XVI 943001-944000 | 12070 12073 1 NaN\n## [2945690] XVI 941001-942000 --- XVI 941001-942000 | 12071 12071 74 0.0504615\n## [2945691] XVI 941001-942000 --- XVI 942001-943000 | 12071 12072 39 0.1624599\n## [2945692] XVI 941001-942000 --- XVI 943001-944000 | 12071 12073 1 NaN\n## -------\n## regions: 12079 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome\n\nscores(hic)\n## List of length 2\n## names(2): count balanced\n\ntopologicalFeatures(hic)\n## List of length 4\n## names(4): compartments borders loops viewpoints\n\npairsFile(hic)\n## NULL\n\nmetadata(hic)\n## list()\n\nimport also works for other types of ContactFile (HicFile, HicproFile, PairsFile), e.g. \n\nFor HicFile and HicproFile, import seamlessly returns a HiCExperiment as well:\n\n\nhf <- HicFile(hicf)\nhic <- import(hf)\nhic\n## `HiCExperiment` object with 13,681,280 contacts over 12,165 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92259b7f1f_7836\" \n## focus: \"whole genome\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 2965693 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nFor PairsFile, the returned object is a representation of Hi-C “pairs” in R, i.e. GInteractions\n\n\n\npf <- PairsFile(pairsf)\npairs <- import(pf)\npairs\n## GInteractions object with 471364 interactions and 3 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | frag1 frag2 distance\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <integer>\n## [1] II 105 --- II 48548 | 1358 1681 48443\n## [2] II 113 --- II 45003 | 1358 1658 44890\n## [3] II 119 --- II 687251 | 1358 5550 687132\n## [4] II 160 --- II 26124 | 1358 1510 25964\n## [5] II 169 --- II 39052 | 1358 1613 38883\n## ... ... ... ... ... ... . ... ... ...\n## [471360] II 808605 --- II 809683 | 6316 6320 1078\n## [471361] II 808609 --- II 809917 | 6316 6324 1308\n## [471362] II 808617 --- II 809506 | 6316 6319 889\n## [471363] II 809447 --- II 809685 | 6319 6321 238\n## [471364] II 809472 --- II 809675 | 6319 6320 203\n## -------\n## regions: 549331 ranges and 0 metadata columns\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\n2.4.1.2 Customizing the import\n\nTo reduce the import to only parse the data that is relevant to the study, two arguments can be passed to import, along with a ContactFile.\n\n\n\n\n\n\nKey import arguments:\n\n\n\n\n\nfocus: This can be used to only parse data for a specific genomic location.\n\nresolution: This can be used to choose which resolution to parse the contact matrix at (this is ignored if the ContactFile is not multi-resolution, e.g. .cool or HiC-Pro generated matrices)\n\n\n\n\nImport interactions within a single chromosome:\n\n\nhic <- import(cf, focus = 'II', resolution = 2000)\n\nregions(hic) # ---- `regions()` work on `HiCExperiment` the same way than on `GInteractions`\n## GRanges object with 407 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## II_1_2000 II 1-2000 * | 116 NaN II 1000\n## II_2001_4000 II 2001-4000 * | 117 NaN II 3000\n## II_4001_6000 II 4001-6000 * | 118 NaN II 5000\n## II_6001_8000 II 6001-8000 * | 119 NaN II 7000\n## II_8001_10000 II 8001-10000 * | 120 0.0461112 II 9000\n## ... ... ... ... . ... ... ... ...\n## II_804001_806000 II 804001-806000 * | 518 0.0493107 II 805000\n## II_806001_808000 II 806001-808000 * | 519 0.0611355 II 807000\n## II_808001_810000 II 808001-810000 * | 520 NaN II 809000\n## II_810001_812000 II 810001-812000 * | 521 NaN II 811000\n## II_812001_813184 II 812001-813184 * | 522 NaN II 812592\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\ntable(seqnames(regions(hic)))\n## \n## I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI \n## 0 407 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n\nanchors(hic) # ---- `anchors()` work on `HiCExperiment` the same way than on `GInteractions`\n## $first\n## GRanges object with 34063 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] II 1-2000 * | 116 NaN II 1000\n## [2] II 1-2000 * | 116 NaN II 1000\n## [3] II 1-2000 * | 116 NaN II 1000\n## [4] II 1-2000 * | 116 NaN II 1000\n## [5] II 1-2000 * | 116 NaN II 1000\n## ... ... ... ... . ... ... ... ...\n## [34059] II 804001-806000 * | 518 0.0493107 II 805000\n## [34060] II 806001-808000 * | 519 0.0611355 II 807000\n## [34061] II 806001-808000 * | 519 0.0611355 II 807000\n## [34062] II 806001-808000 * | 519 0.0611355 II 807000\n## [34063] II 808001-810000 * | 520 NaN II 809000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n## \n## $second\n## GRanges object with 34063 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] II 1-2000 * | 116 NaN II 1000\n## [2] II 4001-6000 * | 118 NaN II 5000\n## [3] II 6001-8000 * | 119 NaN II 7000\n## [4] II 8001-10000 * | 120 0.0461112 II 9000\n## [5] II 10001-12000 * | 121 0.0334807 II 11000\n## ... ... ... ... . ... ... ... ...\n## [34059] II 810001-812000 * | 521 NaN II 811000\n## [34060] II 806001-808000 * | 519 0.0611355 II 807000\n## [34061] II 808001-810000 * | 520 NaN II 809000\n## [34062] II 810001-812000 * | 521 NaN II 811000\n## [34063] II 808001-810000 * | 520 NaN II 809000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\nImport interactions within a segment of a chromosome:\n\n\nhic <- import(cf, focus = 'II:40000-60000', resolution = 1000)\n\nregions(hic) \n## GRanges object with 21 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## II_39001_40000 II 39001-40000 * | 270 0.0220798 II 39500\n## II_40001_41000 II 40001-41000 * | 271 0.0246775 II 40500\n## II_41001_42000 II 41001-42000 * | 272 0.0269232 II 41500\n## II_42001_43000 II 42001-43000 * | 273 0.0341849 II 42500\n## II_43001_44000 II 43001-44000 * | 274 0.0265386 II 43500\n## ... ... ... ... . ... ... ... ...\n## II_55001_56000 II 55001-56000 * | 286 0.0213532 II 55500\n## II_56001_57000 II 56001-57000 * | 287 0.0569839 II 56500\n## II_57001_58000 II 57001-58000 * | 288 0.0338612 II 57500\n## II_58001_59000 II 58001-59000 * | 289 0.0294531 II 58500\n## II_59001_60000 II 59001-60000 * | 290 0.0306662 II 59500\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\nanchors(hic)\n## $first\n## GRanges object with 210 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] II 40001-41000 * | 271 0.0246775 II 40500\n## [2] II 40001-41000 * | 271 0.0246775 II 40500\n## [3] II 40001-41000 * | 271 0.0246775 II 40500\n## [4] II 40001-41000 * | 271 0.0246775 II 40500\n## [5] II 40001-41000 * | 271 0.0246775 II 40500\n## ... ... ... ... . ... ... ... ...\n## [206] II 57001-58000 * | 288 0.0338612 II 57500\n## [207] II 57001-58000 * | 288 0.0338612 II 57500\n## [208] II 58001-59000 * | 289 0.0294531 II 58500\n## [209] II 58001-59000 * | 289 0.0294531 II 58500\n## [210] II 59001-60000 * | 290 0.0306662 II 59500\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n## \n## $second\n## GRanges object with 210 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] II 40001-41000 * | 271 0.0246775 II 40500\n## [2] II 41001-42000 * | 272 0.0269232 II 41500\n## [3] II 42001-43000 * | 273 0.0341849 II 42500\n## [4] II 43001-44000 * | 274 0.0265386 II 43500\n## [5] II 44001-45000 * | 275 0.0488968 II 44500\n## ... ... ... ... . ... ... ... ...\n## [206] II 58001-59000 * | 289 0.0294531 II 58500\n## [207] II 59001-60000 * | 290 0.0306662 II 59500\n## [208] II 58001-59000 * | 289 0.0294531 II 58500\n## [209] II 59001-60000 * | 290 0.0306662 II 59500\n## [210] II 59001-60000 * | 290 0.0306662 II 59500\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\nImport interactions between two chromosomes:\n\n\nhic2 <- import(cf, focus = 'II|XV', resolution = 4000)\n\nregions(hic2)\n## GRanges object with 477 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## II_1_4000 II 1-4000 * | 58 NaN II 2000\n## II_4001_8000 II 4001-8000 * | 59 NaN II 6000\n## II_8001_12000 II 8001-12000 * | 60 0.0274474 II 10000\n## II_12001_16000 II 12001-16000 * | 61 0.0342116 II 14000\n## II_16001_20000 II 16001-20000 * | 62 0.0195128 II 18000\n## ... ... ... ... . ... ... ... ...\n## XV_1072001_1076000 XV 1072001-1076000 * | 2783 0.041763 XV 1074000\n## XV_1076001_1080000 XV 1076001-1080000 * | 2784 NaN XV 1078000\n## XV_1080001_1084000 XV 1080001-1084000 * | 2785 NaN XV 1082000\n## XV_1084001_1088000 XV 1084001-1088000 * | 2786 NaN XV 1086000\n## XV_1088001_1091291 XV 1088001-1091291 * | 2787 NaN XV 1089646\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\nanchors(hic2)\n## $first\n## GRanges object with 18032 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] II 1-4000 * | 58 NaN II 2000\n## [2] II 1-4000 * | 58 NaN II 2000\n## [3] II 1-4000 * | 58 NaN II 2000\n## [4] II 1-4000 * | 58 NaN II 2000\n## [5] II 1-4000 * | 58 NaN II 2000\n## ... ... ... ... . ... ... ... ...\n## [18028] II 808001-812000 * | 260 NaN II 810000\n## [18029] II 808001-812000 * | 260 NaN II 810000\n## [18030] II 808001-812000 * | 260 NaN II 810000\n## [18031] II 808001-812000 * | 260 NaN II 810000\n## [18032] II 808001-812000 * | 260 NaN II 810000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n## \n## $second\n## GRanges object with 18032 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] XV 48001-52000 * | 2527 0.0185354 XV 50000\n## [2] XV 348001-352000 * | 2602 0.0233750 XV 350000\n## [3] XV 468001-472000 * | 2632 0.0153615 XV 470000\n## [4] XV 472001-476000 * | 2633 0.0189624 XV 474000\n## [5] XV 584001-588000 * | 2661 0.0167715 XV 586000\n## ... ... ... ... . ... ... ... ...\n## [18028] XV 980001-984000 * | 2760 0.0187827 XV 982000\n## [18029] XV 984001-988000 * | 2761 0.0250094 XV 986000\n## [18030] XV 992001-996000 * | 2763 0.0185599 XV 994000\n## [18031] XV 1004001-1008000 * | 2766 0.0196942 XV 1006000\n## [18032] XV 1064001-1068000 * | 2781 0.0208220 XV 1066000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\nImport interactions between segments of two chromosomes:\n\n\nhic3 <- import(cf, focus = 'III:10000-40000|XV:10000-40000', resolution = 2000)\n\nregions(hic3)\n## GRanges object with 32 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## III_8001_10000 III 8001-10000 * | 527 NaN III 9000\n## III_10001_12000 III 10001-12000 * | 528 NaN III 11000\n## III_12001_14000 III 12001-14000 * | 529 NaN III 13000\n## III_14001_16000 III 14001-16000 * | 530 0.0356351 III 15000\n## III_16001_18000 III 16001-18000 * | 531 0.0230693 III 17000\n## ... ... ... ... . ... ... ... ...\n## XV_30001_32000 XV 30001-32000 * | 5039 0.0482465 XV 31000\n## XV_32001_34000 XV 32001-34000 * | 5040 0.0241580 XV 33000\n## XV_34001_36000 XV 34001-36000 * | 5041 0.0273166 XV 35000\n## XV_36001_38000 XV 36001-38000 * | 5042 0.0542235 XV 37000\n## XV_38001_40000 XV 38001-40000 * | 5043 0.0206849 XV 39000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\nanchors(hic3)\n## $first\n## GRanges object with 11 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] III 14001-16000 * | 530 0.0356351 III 15000\n## [2] III 16001-18000 * | 531 0.0230693 III 17000\n## [3] III 16001-18000 * | 531 0.0230693 III 17000\n## [4] III 20001-22000 * | 533 0.0343250 III 21000\n## [5] III 22001-24000 * | 534 0.0258604 III 23000\n## [6] III 24001-26000 * | 535 0.0290757 III 25000\n## [7] III 28001-30000 * | 537 0.0290713 III 29000\n## [8] III 30001-32000 * | 538 0.0266373 III 31000\n## [9] III 32001-34000 * | 539 0.0201137 III 33000\n## [10] III 32001-34000 * | 539 0.0201137 III 33000\n## [11] III 36001-38000 * | 541 0.0220603 III 37000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n## \n## $second\n## GRanges object with 11 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] XV 16001-18000 * | 5032 0.0187250 XV 17000\n## [2] XV 16001-18000 * | 5032 0.0187250 XV 17000\n## [3] XV 20001-22000 * | 5034 0.0247973 XV 21000\n## [4] XV 14001-16000 * | 5031 0.0379727 XV 15000\n## [5] XV 10001-12000 * | 5029 0.0296913 XV 11000\n## [6] XV 32001-34000 * | 5040 0.0241580 XV 33000\n## [7] XV 16001-18000 * | 5032 0.0187250 XV 17000\n## [8] XV 38001-40000 * | 5043 0.0206849 XV 39000\n## [9] XV 22001-24000 * | 5035 0.0613856 XV 23000\n## [10] XV 30001-32000 * | 5039 0.0482465 XV 31000\n## [11] XV 10001-12000 * | 5029 0.0296913 XV 11000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\n2.4.2 Interacting with HiCExperiment data\n\nAn HiCExperiment object allows parsing of a disk-stored contact matrix.\nAn HiCExperiment object operates by wrapping together (1) a ContactFile (i.e. a connection to a disk-stored data file) and (2) a GInteractions generated by parsing the data file.\n\nWe will use the yeast_hic HiCExperiment object to demonstrate how to parse information from a HiCExperiment object.\n\nyeast_hic <- contacts_yeast()\n\n\nyeast_hic\n## `HiCExperiment` object with 8,757,906 contacts over 763 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"whole genome\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 16000 \n## interactions: 267709 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: /github/home/.cache/R/ExperimentHub/1a92835ced9_7753 \n## metadata(3): ID org date\n\n\n2.4.2.1 Interactions\nThe imported genomic interactions can be directly exposed using the interactions function and are returned as a GInteractions object.\n\ninteractions(yeast_hic)\n## GInteractions object with 267709 interactions and 4 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1 bin_id2 count balanced\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <numeric> <numeric>\n## [1] I 1-16000 --- I 1-16000 | 0 0 2836 1.0943959\n## [2] I 1-16000 --- I 16001-32000 | 0 1 2212 0.9592069\n## [3] I 1-16000 --- I 32001-48000 | 0 2 1183 0.4385242\n## [4] I 1-16000 --- I 48001-64000 | 0 3 831 0.2231192\n## [5] I 1-16000 --- I 64001-80000 | 0 4 310 0.0821255\n## ... ... ... ... ... ... . ... ... ... ...\n## [267705] XVI 896001-912000 --- XVI 912001-928000 | 759 760 3565 1.236371\n## [267706] XVI 896001-912000 --- XVI 928001-944000 | 759 761 1359 0.385016\n## [267707] XVI 912001-928000 --- XVI 912001-928000 | 760 760 3534 2.103988\n## [267708] XVI 912001-928000 --- XVI 928001-944000 | 760 761 3055 1.485794\n## [267709] XVI 928001-944000 --- XVI 928001-944000 | 761 761 4308 1.711565\n## -------\n## regions: 763 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome\n\nBecause genomic interactions are actually stored as GInteractions, regions and anchors work on HiCExperiment objects just as they work with GInteractions!\n\nregions(yeast_hic)\n## GRanges object with 763 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## I_1_16000 I 1-16000 * | 0 0.0196442 I 8000\n## I_16001_32000 I 16001-32000 * | 1 0.0220746 I 24000\n## I_32001_48000 I 32001-48000 * | 2 0.0188701 I 40000\n## I_48001_64000 I 48001-64000 * | 3 0.0136679 I 56000\n## I_64001_80000 I 64001-80000 * | 4 0.0134860 I 72000\n## ... ... ... ... . ... ... ... ...\n## XVI_880001_896000 XVI 880001-896000 * | 758 0.00910873 XVI 888000\n## XVI_896001_912000 XVI 896001-912000 * | 759 0.01421350 XVI 904000\n## XVI_912001_928000 XVI 912001-928000 * | 760 0.02439992 XVI 920000\n## XVI_928001_944000 XVI 928001-944000 * | 761 0.01993237 XVI 936000\n## XVI_944001_948066 XVI 944001-948066 * | 762 NaN XVI 946033\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\nanchors(yeast_hic)\n## $first\n## GRanges object with 267709 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] I 1-16000 * | 0 0.0196442 I 8000\n## [2] I 1-16000 * | 0 0.0196442 I 8000\n## [3] I 1-16000 * | 0 0.0196442 I 8000\n## [4] I 1-16000 * | 0 0.0196442 I 8000\n## [5] I 1-16000 * | 0 0.0196442 I 8000\n## ... ... ... ... . ... ... ... ...\n## [267705] XVI 896001-912000 * | 759 0.0142135 XVI 904000\n## [267706] XVI 896001-912000 * | 759 0.0142135 XVI 904000\n## [267707] XVI 912001-928000 * | 760 0.0243999 XVI 920000\n## [267708] XVI 912001-928000 * | 760 0.0243999 XVI 920000\n## [267709] XVI 928001-944000 * | 761 0.0199324 XVI 936000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n## \n## $second\n## GRanges object with 267709 ranges and 4 metadata columns:\n## seqnames ranges strand | bin_id weight chr center\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer>\n## [1] I 1-16000 * | 0 0.0196442 I 8000\n## [2] I 16001-32000 * | 1 0.0220746 I 24000\n## [3] I 32001-48000 * | 2 0.0188701 I 40000\n## [4] I 48001-64000 * | 3 0.0136679 I 56000\n## [5] I 64001-80000 * | 4 0.0134860 I 72000\n## ... ... ... ... . ... ... ... ...\n## [267705] XVI 912001-928000 * | 760 0.0243999 XVI 920000\n## [267706] XVI 928001-944000 * | 761 0.0199324 XVI 936000\n## [267707] XVI 912001-928000 * | 760 0.0243999 XVI 920000\n## [267708] XVI 928001-944000 * | 761 0.0199324 XVI 936000\n## [267709] XVI 928001-944000 * | 761 0.0199324 XVI 936000\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\n2.4.2.2 Bins and seqinfo\nAdditional useful information can be recovered from a HiCExperiment object. This includes:\n\nThe seqinfo of the HiCExperiment:\n\n\nseqinfo(yeast_hic)\n## Seqinfo object with 16 sequences from an unspecified genome:\n## seqnames seqlengths isCircular genome\n## I 230218 <NA> <NA>\n## II 813184 <NA> <NA>\n## III 316620 <NA> <NA>\n## IV 1531933 <NA> <NA>\n## V 576874 <NA> <NA>\n## ... ... ... ...\n## XII 1078177 <NA> <NA>\n## XIII 924431 <NA> <NA>\n## XIV 784333 <NA> <NA>\n## XV 1091291 <NA> <NA>\n## XVI 948066 <NA> <NA>\n\nThis lists the different chromosomes available to parse along with their length.\n\nThe bins of the HiCExperiment:\n\n\nbins(yeast_hic)\n## GRanges object with 763 ranges and 2 metadata columns:\n## seqnames ranges strand | bin_id weight\n## <Rle> <IRanges> <Rle> | <numeric> <numeric>\n## I_1_16000 I 1-16000 * | 0 0.0196442\n## I_16001_32000 I 16001-32000 * | 1 0.0220746\n## I_32001_48000 I 32001-48000 * | 2 0.0188701\n## I_48001_64000 I 48001-64000 * | 3 0.0136679\n## I_64001_80000 I 64001-80000 * | 4 0.0134860\n## ... ... ... ... . ... ...\n## XVI_880001_896000 XVI 880001-896000 * | 758 0.00910873\n## XVI_896001_912000 XVI 896001-912000 * | 759 0.01421350\n## XVI_912001_928000 XVI 912001-928000 * | 760 0.02439992\n## XVI_928001_944000 XVI 928001-944000 * | 761 0.01993237\n## XVI_944001_948066 XVI 944001-948066 * | 762 NaN\n## -------\n## seqinfo: 16 sequences from an unspecified genome\n\n\n\n\n\n\n\nDifference between bins and regions\n\n\n\nbins are not equivalent to regions of an HiCExperiment.\n\n\nbins refer to all the possible regions of a HiCExperiment. For instance, for a HiCExperiment with a total genome size of 1,000,000 and a resolution of 2000, bins will always return a GRanges object with 500 ranges.\n\nregions, on the opposite, refer to the union of anchors of all the interactions imported in a HiCExperiment object.\n\nThus, all the regions will necessarily be a subset of the HiCExperiment bins, or equal to bins if no focus has been specified when importing a ContactFile.\n\n\n\n2.4.2.3 Scores\nOf course, what the end-user would be looking for is the frequency for each genomic interaction. Such frequency scores are available using the scores function. scores returns a list with a number of different types of scores.\n\nhead(scores(yeast_hic))\n## List of length 2\n## names(2): count balanced\n\nhead(scores(yeast_hic, \"count\"))\n## [1] 2836 2212 1183 831 310 159\n\nhead(scores(yeast_hic, \"balanced\"))\n## [1] 1.09439586 0.95920688 0.43852417 0.22311917 0.08212549 0.03345221\n\nCalling interactions(hic) returns a GInteractions with scores already stored in extra columns. This short-hand allows one to dynamically check scores directly from the interactions output.\n\ninteractions(yeast_hic)\n## GInteractions object with 267709 interactions and 4 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1 bin_id2 count balanced\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <numeric> <numeric>\n## [1] I 1-16000 --- I 1-16000 | 0 0 2836 1.0943959\n## [2] I 1-16000 --- I 16001-32000 | 0 1 2212 0.9592069\n## [3] I 1-16000 --- I 32001-48000 | 0 2 1183 0.4385242\n## [4] I 1-16000 --- I 48001-64000 | 0 3 831 0.2231192\n## [5] I 1-16000 --- I 64001-80000 | 0 4 310 0.0821255\n## ... ... ... ... ... ... . ... ... ... ...\n## [267705] XVI 896001-912000 --- XVI 912001-928000 | 759 760 3565 1.236371\n## [267706] XVI 896001-912000 --- XVI 928001-944000 | 759 761 1359 0.385016\n## [267707] XVI 912001-928000 --- XVI 912001-928000 | 760 760 3534 2.103988\n## [267708] XVI 912001-928000 --- XVI 928001-944000 | 760 761 3055 1.485794\n## [267709] XVI 928001-944000 --- XVI 928001-944000 | 761 761 4308 1.711565\n## -------\n## regions: 763 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome\n\nhead(interactions(yeast_hic)$count)\n## [1] 2836 2212 1183 831 310 159\n\n\n2.4.2.4 topologicalFeatures\nIn Hi-C studies, “topological features” refer to genomic structures identified (usually from a Hi-C map, but not necessarily). For instance, one may want to study known structural loops anchored at CTCF sites, or interactions around or over centromeres, or simply specific genomic “viewpoints”.\nHiCExperiment objects can store topologicalFeatures to facilitate this analysis. By default, four empty topologicalFeatures are stored in a list:\n\ncompartments\nborders\nloops\nviewpoints\n\nAdditional topologicalFeatures can be added to this list (read next chapter for more detail).\n\ntopologicalFeatures(yeast_hic)\n## List of length 5\n## names(5): compartments borders loops viewpoints centromeres\n\ntopologicalFeatures(yeast_hic, 'centromeres')\n## GRanges object with 16 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] I 151583-151641 +\n## [2] II 238361-238419 +\n## [3] III 114322-114380 +\n## [4] IV 449879-449937 +\n## [5] V 152522-152580 +\n## ... ... ... ...\n## [12] XII 151366-151424 +\n## [13] XIII 268222-268280 +\n## [14] XIV 628588-628646 +\n## [15] XV 326897-326955 +\n## [16] XVI 556255-556313 +\n## -------\n## seqinfo: 17 sequences (1 circular) from R64-1-1 genome\n\n\n2.4.2.5 pairsFile\nAs a contact matrix is typically obtained from binning a .pairs file, it is often the case that the matching .pairs file is available to then end-user. A PairsFile can thus be created and associated to the corresponding HiCExperiment object. This allows more accurate estimation of contact distribution, e.g. when calculating distance-dependent genomic interaction frequency.\n\npairsFile(yeast_hic) <- pairsf\n\npairsFile(yeast_hic)\n## EH7703 \n## \"/github/home/.cache/R/ExperimentHub/1a92835ced9_7753\"\n\nreadLines(pairsFile(yeast_hic), 25)\n## [1] \"## pairs format v1.0\" \"#sorted: chr1-pos1-chr2-pos2\" \"#columns: readID chr1 pos1 chr2 pos2 strand1 strand2 frag1 frag2\" \"#chromsize: I 230218\" \"#chromsize: II 813184\" \"#chromsize: III 316620\" \"#chromsize: IV 1531933\" \"#chromsize: V 576874\" \"#chromsize: VI 270161\" \"#chromsize: VII 1090940\" \"#chromsize: VIII 562643\" \"#chromsize: IX 439888\" \"#chromsize: X 745751\" \"#chromsize: XI 666816\" \"#chromsize: XII 1078177\" \"#chromsize: XIII 924431\" \"#chromsize: XIV 784333\" \"#chromsize: XV 1091291\" \"#chromsize: XVI 948066\" \"#chromsize: Mito 85779\" \"NS500150:527:HHGYNBGXF:3:21611:19085:3986\\tII\\t105\\tII\\t48548\\t+\\t-\\t1358\\t1681\" \"NS500150:527:HHGYNBGXF:4:13604:19734:2406\\tII\\t113\\tII\\t45003\\t-\\t+\\t1358\\t1658\" \"NS500150:527:HHGYNBGXF:2:11108:25178:11036\\tII\\t119\\tII\\t687251\\t-\\t+\\t1358\\t5550\" \"NS500150:527:HHGYNBGXF:1:22301:8468:1586\\tII\\t160\\tII\\t26124\\t+\\t-\\t1358\\t1510\" \"NS500150:527:HHGYNBGXF:4:23606:24037:2076\\tII\\t169\\tII\\t39052\\t+\\t+\\t1358\\t1613\"\n\n\n2.4.2.6 Importing a PairsFile\n\nThe .pairs file linked to a HiCExperiment object can itself be imported in a GInteractions object:\n\nimport(pairsFile(yeast_hic), format = 'pairs')\n## GInteractions object with 471364 interactions and 3 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | frag1 frag2 distance\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <integer>\n## [1] II 105 --- II 48548 | 1358 1681 48443\n## [2] II 113 --- II 45003 | 1358 1658 44890\n## [3] II 119 --- II 687251 | 1358 5550 687132\n## [4] II 160 --- II 26124 | 1358 1510 25964\n## [5] II 169 --- II 39052 | 1358 1613 38883\n## ... ... ... ... ... ... . ... ... ...\n## [471360] II 808605 --- II 809683 | 6316 6320 1078\n## [471361] II 808609 --- II 809917 | 6316 6324 1308\n## [471362] II 808617 --- II 809506 | 6316 6319 889\n## [471363] II 809447 --- II 809685 | 6319 6321 238\n## [471364] II 809472 --- II 809675 | 6319 6320 203\n## -------\n## regions: 549331 ranges and 0 metadata columns\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\nNote that these GInteractions are not binned, contrary to interactions extracted from a HiCExperiment. Anchors of the interactions listed in the GInteractions imported from a disk-stored .pairs file are all of width 1." }, { "objectID": "data-representation.html#visual-summary-of-the-hicexperiment-data-structure", @@ -130,21 +130,21 @@ "href": "parsing.html#subsetting-a-contact-matrix", "title": "\n3  Manipulating Hi-C data in R\n", "section": "\n3.1 Subsetting a contact matrix", - "text": "3.1 Subsetting a contact matrix\nTwo entirely different approaches are possible to subset of a Hi-C contact matrix:\n\nSubsetting before importing: leveraging random access to a disk-stored contact matrix to only import interactions overlapping with a genomic locus of interest.\nSubsetting after importing: parsing the entire contact matrix in memory, and subsequently subset interactions overlapping with a genomic locus of interest.\n\n\n\n3.1.1 Subsetting before import: with focus\n\nSpecifying a focus when importing a dataset in R (i.e. \"Subset first, then parse\") is generally the recommended approach to import Hi-C data in R.\nThe focus argument can be set when importing a ContactFile in R, as follows:\n\nimport(cf, focus = \"...\")\n\nThis ensures that only the needed data is parsed in R, reducing memory load and accelerating the import. Thus, this should be the preferred way of parsing HiCExperiment data, as disk-stored contact matrices allow efficient random access to indexed data.\nfocus can be any of the following string types:\n\n# \"II\" --> import contacts over an entire chromosome\n# \"II:300001-800000\" --> import on-diagonal contacts within a chromosome\n# \"II:300001-400000|II:600001-700000\" --> import off-diagonal contacts within a chromosome\n# \"II|III\" --> import contacts between two chromosomes\n# \"II:300001-800000|V:1-500000\" --> import contacts between segments of two chromosomes\n\n\n\n\n\n\n\nMore examples for import with focus argument 👇\n\n\n\n\n\n\nSubsetting to a specific on-diagonal genomic location using standard UCSC coordinates query:\n\n\nimport(cf, focus = 'II:300001-800000', resolution = 2000)\n## `HiCExperiment` object with 301,018 contacts over 250 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:300,001-800,000\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 17974 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting to a specific off-diagonal genomic location using pairs of coordinates query:\n\n\nimport(cf, focus = 'II:300001-400000|II:600001-700000', resolution = 2000)\n## `HiCExperiment` object with 402 contacts over 100 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:300001-400000|II:600001-700000\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 357 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those constrained within a single chromosome:\n\n\nimport(cf, focus = 'II', resolution = 2000)\n## `HiCExperiment` object with 471,364 contacts over 407 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 34063 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those between two chromosomes:\n\n\nimport(cf, focus = 'II|III', resolution = 2000)\n## `HiCExperiment` object with 9,092 contacts over 566 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II|III\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 7438 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those between parts of two chromosomes:\n\n\nimport(cf, focus = 'II:300001-800000|V:1-500000', resolution = 2000)\n## `HiCExperiment` object with 7,147 contacts over 500 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:300001-800000|V:1-500000\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 6523 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\n\n\n\n\n3.1.2 Subsetting after import\nIt may sometimes be desirable to import a full dataset from disk first, and only then perform in-memory subsetting of the HiCExperiment object (i.e. \"Parse first, then subset\"). This is for example necessary when the end user aims to investigate subsets of interactions across a large number of different areas of a contact matrix.\nSeveral strategies are possible to allow subsetting of imported data, either with subsetByOverlaps or [.\n\n3.1.2.1 subsetByOverlaps(<HiCExperiment>, <GRanges>)\n\nsubsetByOverlaps can take a HiCExperiment as a query and a GRanges as a query. In this case, the GRanges is used to extract a subset of a HiCExperiment constrained within a specific genomic location.\n\ntelomere <- GRanges(\"II:700001-813184\")\nsubsetByOverlaps(hic, telomere) |> interactions()\n## GInteractions object with 1540 interactions and 4 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric>\n## [1] II 700001-702000 --- II 700001-702000 | 466\n## [2] II 700001-702000 --- II 702001-704000 | 466\n## [3] II 700001-702000 --- II 704001-706000 | 466\n## [4] II 700001-702000 --- II 706001-708000 | 466\n## [5] II 700001-702000 --- II 708001-710000 | 466\n## ... ... ... ... ... ... . ...\n## [1536] II 804001-806000 --- II 810001-812000 | 518\n## [1537] II 806001-808000 --- II 806001-808000 | 519\n## [1538] II 806001-808000 --- II 808001-810000 | 519\n## [1539] II 806001-808000 --- II 810001-812000 | 519\n## [1540] II 808001-810000 --- II 808001-810000 | 520\n## bin_id2 count balanced\n## <numeric> <numeric> <numeric>\n## [1] 466 30 0.0283618\n## [2] 467 145 0.0709380\n## [3] 468 124 0.0704979\n## [4] 469 59 0.0510221\n## [5] 470 59 0.0384004\n## ... ... ... ...\n## [1536] 521 1 NaN\n## [1537] 519 15 0.0560633\n## [1538] 520 25 NaN\n## [1539] 521 1 NaN\n## [1540] 520 10 NaN\n## -------\n## regions: 57 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome\n\n\n\n\n\n\n\ntype argument\n\n\n\nBy default, subsetByOverlaps(hic, telomere) will only recover interactions constrained within telomere, i.e. interactions for which both ends are in telomere.\nAlternatively, type = \"any\" can be specified to get all interactions with at least one of their anchors within telomere.\n\nsubsetByOverlaps(hic, telomere, type = \"any\") |> interactions()\n## GInteractions object with 6041 interactions and 4 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric>\n## [1] II 300001-302000 --- II 702001-704000 | 266\n## [2] II 300001-302000 --- II 704001-706000 | 266\n## [3] II 300001-302000 --- II 768001-770000 | 266\n## [4] II 300001-302000 --- II 784001-786000 | 266\n## [5] II 302001-304000 --- II 740001-742000 | 267\n## ... ... ... ... ... ... . ...\n## [6037] II 804001-806000 --- II 810001-812000 | 518\n## [6038] II 806001-808000 --- II 806001-808000 | 519\n## [6039] II 806001-808000 --- II 808001-810000 | 519\n## [6040] II 806001-808000 --- II 810001-812000 | 519\n## [6041] II 808001-810000 --- II 808001-810000 | 520\n## bin_id2 count balanced\n## <numeric> <numeric> <numeric>\n## [1] 467 1 0.000590999\n## [2] 468 1 0.000686799\n## [3] 500 1 0.000728215\n## [4] 508 1 0.000923092\n## [5] 486 1 0.000382222\n## ... ... ... ...\n## [6037] 521 1 NaN\n## [6038] 519 15 0.0560633\n## [6039] 520 25 NaN\n## [6040] 521 1 NaN\n## [6041] 520 10 NaN\n## -------\n## regions: 257 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome\n\n\n\n\n3.1.2.2 <HiCExperiment>[\"...\"]\n\nThe square bracket operator [ allows for more advanced textual queries, similarly to focus arguments that can be used when importing contact matrices in memory.\nThis ensures that only the needed data is parsed in R, reducing memory load and accelerating the import. Thus, this should be the preferred way of parsing HiCExperiment data, as disk-stored contact matrices allow efficient random access to indexed data.\nThe following string types can be used to subset a HiCExperiment object with the [ notation:\n\n# \"II\" --> import contacts over an entire chromosome\n# \"II:300001-800000\" --> import on-diagonal contacts within a chromosome\n# \"II:300001-400000|II:600001-700000\" --> import off-diagonal contacts within a chromosome\n# \"II|III\" --> import contacts between two chromosomes\n# \"II:300001-800000|V:1-500000\" --> import contacts between segments of two chromosomes\n# c(\"II\", \"III\", \"IV\") --> import contacts within and between several chromosomes\n\n\n\n\n\n\n\nMore examples for subsetting with [ 👇\n\n\n\n\n\n\nSubsetting to a specific on-diagonal genomic location using standard UCSC coordinates query:\n\n\nhic[\"II:800001-813184\"]\n## `HiCExperiment` object with 1,040 contacts over 6 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:800,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 19 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting to a specific off-diagonal genomic location using pairs of coordinates query:\n\n\nhic[\"II:300001-320000|II:800001-813184\"]\n## `HiCExperiment` object with 3 contacts over 6 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:300001-320000|II:800001-813184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 3 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those constrained within a single chromosome:\n\n\nhic[\"II\"]\n## `HiCExperiment` object with 306,212 contacts over 257 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 18513 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those between two chromosomes:\n\n\nhic[\"II|IV\"]\n## `HiCExperiment` object with 0 contacts over 0 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:1-813184|IV:1-1531933\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 0 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those between segments of two chromosomes:\n\n\nhic[\"II:300001-320000|IV:1-100000\"]\n## `HiCExperiment` object with 0 contacts over 0 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:300001-320000|IV:1-100000\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 0 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those constrained within several chromosomes:\n\n\nhic[c('II', 'III', 'IV')]\n## `HiCExperiment` object with 306,212 contacts over 257 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II, III, IV\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 18513 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\n\n\n\n\n\n\n\n\nNote\n\n\n\n\nThis last example (subsetting for a vector of several chromosomes) is the only scenario for which [-based in-memory subsetting of pre-imported data is the only way to go, as such subsetting is not possible with focus from disk-stored data.\nAll the other [ subsetting scenarii illustrated above can be achieved more efficiently using the focus argument when importing data into a HiCExperiment object.\nHowever, keep in mind that subsetting preserves extra data, e.g. added scores, topologicalFeatures, metadata or pairsFile, whereas this information is lost using focus with import.\n\n\n\n\n3.1.3 Zooming on a HiCExperiment\n\n“Zooming” refers to dynamically changing the resolution of a HiCExperiment. By zooming a HiCExperiment, one can refine or coarsen the contact matrix. This operation takes aContactFile and focus from an existing HiCExperiment input and re-generates a new HiCExperiment with updated resolution, interactions and scores. Note that zoom will preserve existing metadata, topologicalFeatures and pairsFile information.\n\nhic\n## `HiCExperiment` object with 306,212 contacts over 257 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:300,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 18513 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\nzoom(hic, 4000)\n## `HiCExperiment` object with 306,212 contacts over 129 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:300,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 4000 \n## interactions: 6800 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\nzoom(hic, 1000)\n## `HiCExperiment` object with 306,212 contacts over 514 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:300,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 44363 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\n\n\n\n\n\nNote\n\n\n\nThe sum of raw counts do not change after zooming, however the number of individual interactions and regions changes.\n\nlength(hic)\n## [1] 18513\nlength(zoom(hic, 1000))\n## [1] 44363\nlength(zoom(hic, 4000))\n## [1] 6800\nsum(scores(hic, \"count\"))\n## [1] 306212\nsum(scores(zoom(hic, 1000), \"count\"))\n## [1] 306212\nsum(scores(zoom(hic, 4000), \"count\"))\n## [1] 306212\n\n\n\n\n\n\n\n\n\nImportant\n\n\n\n\n\nzoom does not change the focus! It only affects the resolution (and consequently, the interactions).\n\nzoom will only work for multi-resolution contact matrices, e.g. .mcool or .hic." + "text": "3.1 Subsetting a contact matrix\nTwo entirely different approaches are possible to subset of a Hi-C contact matrix:\n\nSubsetting before importing: leveraging random access to a disk-stored contact matrix to only import interactions overlapping with a genomic locus of interest.\nSubsetting after importing: parsing the entire contact matrix in memory, and subsequently subset interactions overlapping with a genomic locus of interest.\n\n\n\n3.1.1 Subsetting before import: with focus\n\nSpecifying a focus when importing a dataset in R (i.e. \"Subset first, then parse\") is generally the recommended approach to import Hi-C data in R.\nThe focus argument can be set when importing a ContactFile in R, as follows:\n\nimport(cf, focus = \"...\")\n\nThis ensures that only the needed data is parsed in R, reducing memory load and accelerating the import. Thus, this should be the preferred way of parsing HiCExperiment data, as disk-stored contact matrices allow efficient random access to indexed data.\nfocus can be any of the following string types:\n\n# \"II\" --> import contacts over an entire chromosome\n# \"II:300001-800000\" --> import on-diagonal contacts within a chromosome\n# \"II:300001-400000|II:600001-700000\" --> import off-diagonal contacts within a chromosome\n# \"II|III\" --> import contacts between two chromosomes\n# \"II:300001-800000|V:1-500000\" --> import contacts between segments of two chromosomes\n\n\n\n\n\n\n\nMore examples for import with focus argument 👇\n\n\n\n\n\n\nSubsetting to a specific on-diagonal genomic location using standard UCSC coordinates query:\n\n\nimport(cf, focus = 'II:300001-800000', resolution = 2000)\n## `HiCExperiment` object with 301,018 contacts over 250 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:300,001-800,000\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 17974 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting to a specific off-diagonal genomic location using pairs of coordinates query:\n\n\nimport(cf, focus = 'II:300001-400000|II:600001-700000', resolution = 2000)\n## `HiCExperiment` object with 402 contacts over 100 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:300001-400000|II:600001-700000\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 357 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those constrained within a single chromosome:\n\n\nimport(cf, focus = 'II', resolution = 2000)\n## `HiCExperiment` object with 471,364 contacts over 407 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 34063 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those between two chromosomes:\n\n\nimport(cf, focus = 'II|III', resolution = 2000)\n## `HiCExperiment` object with 9,092 contacts over 566 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II|III\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 7438 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those between parts of two chromosomes:\n\n\nimport(cf, focus = 'II:300001-800000|V:1-500000', resolution = 2000)\n## `HiCExperiment` object with 7,147 contacts over 500 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:300001-800000|V:1-500000\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 6523 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\n\n\n\n\n3.1.2 Subsetting after import\nIt may sometimes be desirable to import a full dataset from disk first, and only then perform in-memory subsetting of the HiCExperiment object (i.e. \"Parse first, then subset\"). This is for example necessary when the end user aims to investigate subsets of interactions across a large number of different areas of a contact matrix.\nSeveral strategies are possible to allow subsetting of imported data, either with subsetByOverlaps or [.\n\n3.1.2.1 subsetByOverlaps(<HiCExperiment>, <GRanges>)\n\nsubsetByOverlaps can take a HiCExperiment as a query and a GRanges as a query. In this case, the GRanges is used to extract a subset of a HiCExperiment constrained within a specific genomic location.\n\ntelomere <- GRanges(\"II:700001-813184\")\nsubsetByOverlaps(hic, telomere) |> interactions()\n## GInteractions object with 1540 interactions and 4 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1 bin_id2 count balanced\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <numeric> <numeric>\n## [1] II 700001-702000 --- II 700001-702000 | 466 466 30 0.0283618\n## [2] II 700001-702000 --- II 702001-704000 | 466 467 145 0.0709380\n## [3] II 700001-702000 --- II 704001-706000 | 466 468 124 0.0704979\n## [4] II 700001-702000 --- II 706001-708000 | 466 469 59 0.0510221\n## [5] II 700001-702000 --- II 708001-710000 | 466 470 59 0.0384004\n## ... ... ... ... ... ... . ... ... ... ...\n## [1536] II 804001-806000 --- II 810001-812000 | 518 521 1 NaN\n## [1537] II 806001-808000 --- II 806001-808000 | 519 519 15 0.0560633\n## [1538] II 806001-808000 --- II 808001-810000 | 519 520 25 NaN\n## [1539] II 806001-808000 --- II 810001-812000 | 519 521 1 NaN\n## [1540] II 808001-810000 --- II 808001-810000 | 520 520 10 NaN\n## -------\n## regions: 57 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome\n\nBy default, subsetByOverlaps(hic, telomere) will only recover interactions constrained within telomere, i.e. interactions for which both ends are in telomere.\nAlternatively, type = \"any\" can be specified to get all interactions with at least one of their anchors within telomere.\n\nsubsetByOverlaps(hic, telomere, type = \"any\") |> interactions()\n## GInteractions object with 6041 interactions and 4 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1 bin_id2 count balanced\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <numeric> <numeric>\n## [1] II 300001-302000 --- II 702001-704000 | 266 467 1 0.000590999\n## [2] II 300001-302000 --- II 704001-706000 | 266 468 1 0.000686799\n## [3] II 300001-302000 --- II 768001-770000 | 266 500 1 0.000728215\n## [4] II 300001-302000 --- II 784001-786000 | 266 508 1 0.000923092\n## [5] II 302001-304000 --- II 740001-742000 | 267 486 1 0.000382222\n## ... ... ... ... ... ... . ... ... ... ...\n## [6037] II 804001-806000 --- II 810001-812000 | 518 521 1 NaN\n## [6038] II 806001-808000 --- II 806001-808000 | 519 519 15 0.0560633\n## [6039] II 806001-808000 --- II 808001-810000 | 519 520 25 NaN\n## [6040] II 806001-808000 --- II 810001-812000 | 519 521 1 NaN\n## [6041] II 808001-810000 --- II 808001-810000 | 520 520 10 NaN\n## -------\n## regions: 257 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome\n\n\n3.1.2.2 <HiCExperiment>[\"...\"]\n\nThe square bracket operator [ allows for more advanced textual queries, similarly to focus arguments that can be used when importing contact matrices in memory.\nThis ensures that only the needed data is parsed in R, reducing memory load and accelerating the import. Thus, this should be the preferred way of parsing HiCExperiment data, as disk-stored contact matrices allow efficient random access to indexed data.\nThe following string types can be used to subset a HiCExperiment object with the [ notation:\n\n# \"II\" --> import contacts over an entire chromosome\n# \"II:300001-800000\" --> import on-diagonal contacts within a chromosome\n# \"II:300001-400000|II:600001-700000\" --> import off-diagonal contacts within a chromosome\n# \"II|III\" --> import contacts between two chromosomes\n# \"II:300001-800000|V:1-500000\" --> import contacts between segments of two chromosomes\n# c(\"II\", \"III\", \"IV\") --> import contacts within and between several chromosomes\n\n\n\n\n\n\n\nMore examples for subsetting with [ 👇\n\n\n\n\n\n\nSubsetting to a specific on-diagonal genomic location using standard UCSC coordinates query:\n\n\nhic[\"II:800001-813184\"]\n## `HiCExperiment` object with 1,040 contacts over 6 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:800,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 19 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting to a specific off-diagonal genomic location using pairs of coordinates query:\n\n\nhic[\"II:300001-320000|II:800001-813184\"]\n## `HiCExperiment` object with 3 contacts over 6 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:300001-320000|II:800001-813184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 3 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those constrained within a single chromosome:\n\n\nhic[\"II\"]\n## `HiCExperiment` object with 306,212 contacts over 257 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 18513 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those between two chromosomes:\n\n\nhic[\"II|IV\"]\n## `HiCExperiment` object with 0 contacts over 0 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:1-813184|IV:1-1531933\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 0 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those between segments of two chromosomes:\n\n\nhic[\"II:300001-320000|IV:1-100000\"]\n## `HiCExperiment` object with 0 contacts over 0 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:300001-320000|IV:1-100000\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 0 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\nSubsetting interactions to retain those constrained within several chromosomes:\n\n\nhic[c('II', 'III', 'IV')]\n## `HiCExperiment` object with 306,212 contacts over 257 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II, III, IV\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 18513 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\nSome notes:\n\nThis last example (subsetting for a vector of several chromosomes) is the only scenario for which [-based in-memory subsetting of pre-imported data is the only way to go, as such subsetting is not possible with focus from disk-stored data.\nAll the other [ subsetting scenarii illustrated above can be achieved more efficiently using the focus argument when importing data into a HiCExperiment object.\nHowever, keep in mind that subsetting preserves extra data, e.g. added scores, topologicalFeatures, metadata or pairsFile, whereas this information is lost using focus with import.\n\n\n\n\n\n3.1.3 Zooming on a HiCExperiment\n\n“Zooming” refers to dynamically changing the resolution of a HiCExperiment. By zooming a HiCExperiment, one can refine or coarsen the contact matrix. This operation takes aContactFile and focus from an existing HiCExperiment input and re-generates a new HiCExperiment with updated resolution, interactions and scores. Note that zoom will preserve existing metadata, topologicalFeatures and pairsFile information.\n\nhic\n## `HiCExperiment` object with 306,212 contacts over 257 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:300,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 18513 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\nzoom(hic, 4000)\n## `HiCExperiment` object with 306,212 contacts over 129 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:300,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 4000 \n## interactions: 6800 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\nzoom(hic, 1000)\n## `HiCExperiment` object with 306,212 contacts over 514 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:300,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 44363 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\n\n\n\n\n\n\nNote\n\n\n\nThe sum of raw counts do not change after zooming, however the number of individual interactions and regions changes.\n\nlength(hic)\n## [1] 18513\nlength(zoom(hic, 1000))\n## [1] 44363\nlength(zoom(hic, 4000))\n## [1] 6800\nsum(scores(hic, \"count\"))\n## [1] 306212\nsum(scores(zoom(hic, 1000), \"count\"))\n## [1] 306212\nsum(scores(zoom(hic, 4000), \"count\"))\n## [1] 306212\n\n\n\n\n\n\n\n\n\nImportant\n\n\n\n\n\nzoom does not change the focus! It only affects the resolution (and consequently, the interactions).\n\nzoom will only work for multi-resolution contact matrices, e.g. .mcool or .hic." }, { "objectID": "parsing.html#updating-an-hicexperiment-object", "href": "parsing.html#updating-an-hicexperiment-object", "title": "\n3  Manipulating Hi-C data in R\n", "section": "\n3.2 Updating an HiCExperiment object", - "text": "3.2 Updating an HiCExperiment object\n\n\n\n\n\n\nTL;DR: Which HiCExperiment slots are mutable (✅) / immutable (⛔️)?\n\n\n\n\n\nfileName(hic): ⛔️ (obtained from disk-stored file)\n\nfocus(hic): 🤔 (see subsetting section)\n\nresolutions(hic): ⛔️ (obtained from disk-stored file)\n\nresolution(hic): 🤔 (see zooming section)\n\ninteractions(hic): ⛔️ (obtained from disk-stored file)\n\nscores(hic): ✅\n\ntopologicalFeatures(hic): ✅\n\npairsFile(hic): ✅\n\nmetadata(hic): ✅\n\n\n\n\n3.2.1 Immutable slots\nAn HiCExperiment object acts as an interface exposing disk-stored data. This implies that the fileName slot itself is immutable (i.e. cannot be changed). This should be obvious, as a HiCExperiment has to be associated with a disk-stored contact matrix to properly function (except in some advanced cases developed in next chapters).\nFor this reason, methods to manually modify interactions and resolutions slots are also not exposed in the HiCExperiment package.\nA corollary of this is that the associated regions and anchors of an HiCExperiment should not be modified by hand either, since they are directly linked to interactions.\n\n3.2.2 Mutable slots\nThat being said, HiCExperiment objects are flexible and can be partially modified in memory without having to change/overwrite the original, disk-stored contact matrix.\nSeveral slots can be modified in memory: slots, topologicalFeatures, pairsFile and metadata.\n\n3.2.2.1 scores\n\nWe have seen in the previous chapter that scores are stored in a list and are available using the scores function.\n\nscores(hic)\n## List of length 2\n## names(2): count balanced\n\nhead(scores(hic, \"count\"))\n## [1] 7 92 75 61 38 43\n\nhead(scores(hic, \"balanced\"))\n## [1] 0.009657438 0.076622340 0.054101992 0.042940512 0.040905212 0.029293930\n\nExtra scores can be added to this list, e.g. to describe the “expected” interaction frequency for each interaction stored in the HiCExperiment object). This can be achieved using the scores()<- function.\n\nscores(hic, \"random\") <- runif(length(hic))\n\nscores(hic)\n## List of length 3\n## names(3): count balanced random\n\nhead(scores(hic, \"random\"))\n## [1] 0.080750138 0.834333037 0.600760886 0.157208442 0.007399441 0.466393497\n\n\n3.2.2.2 topologicalFeatures\n\nThe end-user can create additional topologicalFeatures or modify the existing ones using the topologicalFeatures()<- function.\n\ntopologicalFeatures(hic, 'CTCF') <- GRanges(c(\n \"II:340-352\", \n \"II:3520-3532\", \n \"II:7980-7992\", \n \"II:9240-9252\" \n))\ntopologicalFeatures(hic, 'CTCF')\n## GRanges object with 4 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] II 340-352 *\n## [2] II 3520-3532 *\n## [3] II 7980-7992 *\n## [4] II 9240-9252 *\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\ntopologicalFeatures(hic, 'loops') <- GInteractions(\n topologicalFeatures(hic, 'CTCF')[rep(1:3, each = 3)],\n topologicalFeatures(hic, 'CTCF')[rep(1:3, 3)]\n)\ntopologicalFeatures(hic, 'loops')\n## GInteractions object with 9 interactions and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] II 340-352 --- II 340-352\n## [2] II 340-352 --- II 3520-3532\n## [3] II 340-352 --- II 7980-7992\n## [4] II 3520-3532 --- II 340-352\n## [5] II 3520-3532 --- II 3520-3532\n## [6] II 3520-3532 --- II 7980-7992\n## [7] II 7980-7992 --- II 340-352\n## [8] II 7980-7992 --- II 3520-3532\n## [9] II 7980-7992 --- II 7980-7992\n## -------\n## regions: 3 ranges and 0 metadata columns\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\nhic\n## `HiCExperiment` object with 306,212 contacts over 257 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:300,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 18513 \n## scores(3): count balanced random \n## topologicalFeatures: compartments(0) borders(0) loops(9) viewpoints(0) CTCF(4) \n## pairsFile: N/A \n## metadata(0):\n\n\n\n\n\n\n\nNote\n\n\n\nAll these objects can be used in *Overlap methods, as they all extend the GRanges class of objects.\n\n# ---- This counts the number of times `CTCF` anchors are being used in the \n# `loops` `GInteractions` object\ncountOverlaps(\n query = topologicalFeatures(hic, 'CTCF'), \n subject = topologicalFeatures(hic, 'loops')\n)\n## [1] 5 5 5 0\n\n\n\n\n3.2.2.3 pairsFile\n\nIf pairsFile is not specified when importing the ContactFile into a HiCExperiment object, one can add it later.\n\npairsf <- HiContactsData('yeast_wt', 'pairs.gz')\n\n\npairsFile(hic) <- pairsf\nhic\n## `HiCExperiment` object with 306,212 contacts over 257 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:300,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 18513 \n## scores(3): count balanced random \n## topologicalFeatures: compartments(0) borders(0) loops(9) viewpoints(0) CTCF(4) \n## pairsFile: /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753 \n## metadata(0):\n\n\n3.2.2.4 metadata\n\nMetadata associated with a HiCExperiment can be updated at any point.\n\nmetadata(hic) <- list(\n info = \"HiCExperiment created from an example .mcool file from `HiContactsData`\", \n date = date()\n)\nmetadata(hic)\n## $info\n## [1] \"HiCExperiment created from an example .mcool file from `HiContactsData`\"\n## \n## $date\n## [1] \"Thu Oct 19 10:04:41 2023\"" + "text": "3.2 Updating an HiCExperiment object\n\n\n\n\n\n\nTL;DR: Which HiCExperiment slots are mutable (✅) / immutable (⛔️)?\n\n\n\n\n\nfileName(hic): ⛔️ (obtained from disk-stored file)\n\nfocus(hic): 🤔 (see subsetting section)\n\nresolutions(hic): ⛔️ (obtained from disk-stored file)\n\nresolution(hic): 🤔 (see zooming section)\n\ninteractions(hic): ⛔️ (obtained from disk-stored file)\n\nscores(hic): ✅\n\ntopologicalFeatures(hic): ✅\n\npairsFile(hic): ✅\n\nmetadata(hic): ✅\n\n\n\n\n3.2.1 Immutable slots\nAn HiCExperiment object acts as an interface exposing disk-stored data. This implies that the fileName slot itself is immutable (i.e. cannot be changed). This should be obvious, as a HiCExperiment has to be associated with a disk-stored contact matrix to properly function (except in some advanced cases developed in next chapters).\nFor this reason, methods to manually modify interactions and resolutions slots are also not exposed in the HiCExperiment package.\nA corollary of this is that the associated regions and anchors of an HiCExperiment should not be modified by hand either, since they are directly linked to interactions.\n\n3.2.2 Mutable slots\nThat being said, HiCExperiment objects are flexible and can be partially modified in memory without having to change/overwrite the original, disk-stored contact matrix.\nSeveral slots can be modified in memory: slots, topologicalFeatures, pairsFile and metadata.\n\n3.2.2.1 scores\n\nWe have seen in the previous chapter that scores are stored in a list and are available using the scores function.\n\nscores(hic)\n## List of length 2\n## names(2): count balanced\n\nhead(scores(hic, \"count\"))\n## [1] 7 92 75 61 38 43\n\nhead(scores(hic, \"balanced\"))\n## [1] 0.009657438 0.076622340 0.054101992 0.042940512 0.040905212 0.029293930\n\nExtra scores can be added to this list, e.g. to describe the “expected” interaction frequency for each interaction stored in the HiCExperiment object). This can be achieved using the scores()<- function.\n\nscores(hic, \"random\") <- runif(length(hic))\n\nscores(hic)\n## List of length 3\n## names(3): count balanced random\n\nhead(scores(hic, \"random\"))\n## [1] 0.080750138 0.834333037 0.600760886 0.157208442 0.007399441 0.466393497\n\n\n3.2.2.2 topologicalFeatures\n\nThe end-user can create additional topologicalFeatures or modify the existing ones using the topologicalFeatures()<- function.\n\ntopologicalFeatures(hic, 'CTCF') <- GRanges(c(\n \"II:340-352\", \n \"II:3520-3532\", \n \"II:7980-7992\", \n \"II:9240-9252\" \n))\ntopologicalFeatures(hic, 'CTCF')\n## GRanges object with 4 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] II 340-352 *\n## [2] II 3520-3532 *\n## [3] II 7980-7992 *\n## [4] II 9240-9252 *\n## -------\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\ntopologicalFeatures(hic, 'loops') <- GInteractions(\n topologicalFeatures(hic, 'CTCF')[rep(1:3, each = 3)],\n topologicalFeatures(hic, 'CTCF')[rep(1:3, 3)]\n)\ntopologicalFeatures(hic, 'loops')\n## GInteractions object with 9 interactions and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] II 340-352 --- II 340-352\n## [2] II 340-352 --- II 3520-3532\n## [3] II 340-352 --- II 7980-7992\n## [4] II 3520-3532 --- II 340-352\n## [5] II 3520-3532 --- II 3520-3532\n## [6] II 3520-3532 --- II 7980-7992\n## [7] II 7980-7992 --- II 340-352\n## [8] II 7980-7992 --- II 3520-3532\n## [9] II 7980-7992 --- II 7980-7992\n## -------\n## regions: 3 ranges and 0 metadata columns\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\nhic\n## `HiCExperiment` object with 306,212 contacts over 257 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:300,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 18513 \n## scores(3): count balanced random \n## topologicalFeatures: compartments(0) borders(0) loops(9) viewpoints(0) CTCF(4) \n## pairsFile: N/A \n## metadata(0):\n\nAll these objects can be used in *Overlap methods, as they all extend the GRanges class of objects.\n\n# ---- This counts the number of times `CTCF` anchors are being used in the \n# `loops` `GInteractions` object\ncountOverlaps(\n query = topologicalFeatures(hic, 'CTCF'), \n subject = topologicalFeatures(hic, 'loops')\n)\n## [1] 5 5 5 0\n\n\n3.2.2.3 pairsFile\n\nIf pairsFile is not specified when importing the ContactFile into a HiCExperiment object, one can add it later.\n\npairsf <- HiContactsData('yeast_wt', 'pairs.gz')\n\n\npairsFile(hic) <- pairsf\nhic\n## `HiCExperiment` object with 306,212 contacts over 257 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:300,001-813,184\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 18513 \n## scores(3): count balanced random \n## topologicalFeatures: compartments(0) borders(0) loops(9) viewpoints(0) CTCF(4) \n## pairsFile: /github/home/.cache/R/ExperimentHub/1a92835ced9_7753 \n## metadata(0):\n\n\n3.2.2.4 metadata\n\nMetadata associated with a HiCExperiment can be updated at any point.\n\nmetadata(hic) <- list(\n info = \"HiCExperiment created from an example .mcool file from `HiContactsData`\", \n date = date()\n)\nmetadata(hic)\n## $info\n## [1] \"HiCExperiment created from an example .mcool file from `HiContactsData`\"\n## \n## $date\n## [1] \"Mon Oct 30 10:36:54 2023\"" }, { "objectID": "parsing.html#coercing-hicexperiment-objects", "href": "parsing.html#coercing-hicexperiment-objects", "title": "\n3  Manipulating Hi-C data in R\n", "section": "\n3.3 Coercing HiCExperiment objects", - "text": "3.3 Coercing HiCExperiment objects\nConvenient coercing functions exist to transform data stored as a HiCExperiment into another class.\n\n\nas.matrix(): allows to coerce the HiCExperiment into a sparse or dense matrix (using the sparse logical argument, TRUE by default) and choosing specific scores of interest (using the use.scores argument, \"balanced\" by default).\n\n\n# ----- `as.matrix` coerces a `HiCExperiment` into a `sparseMatrix` by default \nas.matrix(hic) |> class()\n## [1] \"dgTMatrix\"\n## attr(,\"package\")\n## [1] \"Matrix\"\n\nas.matrix(hic) |> dim()\n## [1] 257 257\n\n# ----- One can specify which scores should be used when coercing into a matrix\nas.matrix(hic, use.scores = \"balanced\")[1:5, 1:5]\n## 5 x 5 sparse Matrix of class \"dgTMatrix\"\n## \n## [1,] 0.009657438 0.07662234 0.05410199 0.04294051 0.04090521\n## [2,] 0.076622340 0.05128277 0.09841564 0.06926737 0.05263611\n## [3,] 0.054101992 0.09841564 0.05657589 0.08723160 0.07316890\n## [4,] 0.042940512 0.06926737 0.08723160 0.03699543 0.08403496\n## [5,] 0.040905212 0.05263611 0.07316890 0.08403496 0.04787415\n\nas.matrix(hic, use.scores = \"count\")[1:5, 1:5]\n## 5 x 5 sparse Matrix of class \"dgTMatrix\"\n## \n## [1,] 7 92 75 61 38\n## [2,] 92 102 226 163 81\n## [3,] 75 226 150 237 130\n## [4,] 61 163 237 103 153\n## [5,] 38 81 130 153 57\n\n# ----- If **expressly required**, one can coerce a HiCExperiment into a dense matrix\nas.matrix(hic, use.scores = \"count\", sparse = FALSE)[1:5, 1:5]\n## [,1] [,2] [,3] [,4] [,5]\n## [1,] 7 92 75 61 38\n## [2,] 92 102 226 163 81\n## [3,] 75 226 150 237 130\n## [4,] 61 163 237 103 153\n## [5,] 38 81 130 153 57\n\n\n\nas.data.frame(): simply coercing interactions into a rectangular data frame\n\n\nas.data.frame(hic) |> head()\n## seqnames1 start1 end1 width1 strand1 bin_id1 weight1 center1\n## 1 II 300001 302000 2000 * 266 0.03714342 301000\n## 2 II 300001 302000 2000 * 266 0.03714342 301000\n## 3 II 300001 302000 2000 * 266 0.03714342 301000\n## 4 II 300001 302000 2000 * 266 0.03714342 301000\n## 5 II 300001 302000 2000 * 266 0.03714342 301000\n## 6 II 300001 302000 2000 * 266 0.03714342 301000\n## seqnames2 start2 end2 width2 strand2 bin_id2 weight2 center2 count\n## 1 II 300001 302000 2000 * 266 0.03714342 301000 7\n## 2 II 302001 304000 2000 * 267 0.02242258 303000 92\n## 3 II 304001 306000 2000 * 268 0.01942093 305000 75\n## 4 II 306001 308000 2000 * 269 0.01895202 307000 61\n## 5 II 308001 310000 2000 * 270 0.02898098 309000 38\n## 6 II 310001 312000 2000 * 271 0.01834118 311000 43\n## balanced random\n## 1 0.009657438 0.080750138\n## 2 0.076622340 0.834333037\n## 3 0.054101992 0.600760886\n## 4 0.042940512 0.157208442\n## 5 0.040905212 0.007399441\n## 6 0.029293930 0.466393497\n\n\n\n\n\n\n\nWarning\n\n\n\nThese coercing methods only operate on interactions and scores, and discard all other information, e.g. regarding genomic regions, available resolutions, associated metadata, pairsFile or topologicalFeatures." + "text": "3.3 Coercing HiCExperiment objects\nConvenient coercing functions exist to transform data stored as a HiCExperiment into another class.\n\n\nas.matrix(): allows to coerce the HiCExperiment into a sparse or dense matrix (using the sparse logical argument, TRUE by default) and choosing specific scores of interest (using the use.scores argument, \"balanced\" by default).\n\n\n# ----- `as.matrix` coerces a `HiCExperiment` into a `sparseMatrix` by default \nas.matrix(hic) |> class()\n## [1] \"dgTMatrix\"\n## attr(,\"package\")\n## [1] \"Matrix\"\n\nas.matrix(hic) |> dim()\n## [1] 257 257\n\n# ----- One can specify which scores should be used when coercing into a matrix\nas.matrix(hic, use.scores = \"balanced\")[1:5, 1:5]\n## 5 x 5 sparse Matrix of class \"dgTMatrix\"\n## \n## [1,] 0.009657438 0.07662234 0.05410199 0.04294051 0.04090521\n## [2,] 0.076622340 0.05128277 0.09841564 0.06926737 0.05263611\n## [3,] 0.054101992 0.09841564 0.05657589 0.08723160 0.07316890\n## [4,] 0.042940512 0.06926737 0.08723160 0.03699543 0.08403496\n## [5,] 0.040905212 0.05263611 0.07316890 0.08403496 0.04787415\n\nas.matrix(hic, use.scores = \"count\")[1:5, 1:5]\n## 5 x 5 sparse Matrix of class \"dgTMatrix\"\n## \n## [1,] 7 92 75 61 38\n## [2,] 92 102 226 163 81\n## [3,] 75 226 150 237 130\n## [4,] 61 163 237 103 153\n## [5,] 38 81 130 153 57\n\n# ----- If **expressly required**, one can coerce a HiCExperiment into a dense matrix\nas.matrix(hic, use.scores = \"count\", sparse = FALSE)[1:5, 1:5]\n## [,1] [,2] [,3] [,4] [,5]\n## [1,] 7 92 75 61 38\n## [2,] 92 102 226 163 81\n## [3,] 75 226 150 237 130\n## [4,] 61 163 237 103 153\n## [5,] 38 81 130 153 57\n\n\n\nas.data.frame(): simply coercing interactions into a rectangular data frame\n\n\nas.data.frame(hic) |> head()\n## seqnames1 start1 end1 width1 strand1 bin_id1 weight1 center1 seqnames2 start2 end2 width2 strand2 bin_id2 weight2 center2 count balanced random\n## 1 II 300001 302000 2000 * 266 0.03714342 301000 II 300001 302000 2000 * 266 0.03714342 301000 7 0.009657438 0.080750138\n## 2 II 300001 302000 2000 * 266 0.03714342 301000 II 302001 304000 2000 * 267 0.02242258 303000 92 0.076622340 0.834333037\n## 3 II 300001 302000 2000 * 266 0.03714342 301000 II 304001 306000 2000 * 268 0.01942093 305000 75 0.054101992 0.600760886\n## 4 II 300001 302000 2000 * 266 0.03714342 301000 II 306001 308000 2000 * 269 0.01895202 307000 61 0.042940512 0.157208442\n## 5 II 300001 302000 2000 * 266 0.03714342 301000 II 308001 310000 2000 * 270 0.02898098 309000 38 0.040905212 0.007399441\n## 6 II 300001 302000 2000 * 266 0.03714342 301000 II 310001 312000 2000 * 271 0.01834118 311000 43 0.029293930 0.466393497\n\n\n\n\n\n\n\nWarning\n\n\n\nThese coercing methods only operate on interactions and scores, and discard all other information, e.g. regarding genomic regions, available resolutions, associated metadata, pairsFile or topologicalFeatures." }, { "objectID": "visualization.html", @@ -165,14 +165,14 @@ "href": "visualization.html#hi-c-maps-customization-options", "title": "\n4  Hi-C data visualization\n", "section": "\n4.2 Hi-C maps customization options", - "text": "4.2 Hi-C maps customization options\nA number of customization options are available for the plotMatrix function. The next subsections focus on how to:\n\nPick the scores of interest to represent in a Hi-C heatmap;\nChange the numeric scale and boundaries;\nChange the color map;\nExtra customization options\n\n\n4.2.1 Choosing scores\nBy default, plotMatrix will attempt to plot balanced (coverage normalized) Hi-C matrices. However, extra scores may be associated with interactions in a HiCExperiment object (more on this in the next chapter)\nFor instance, we can plot the count scores, which are un-normalized raw contact counts directly obtained when binning a .pairs file:\n\nplotMatrix(hic, use.scores = 'count')\n\n\n\n\n\n\n\n\n4.2.2 Choosing scale\nThe color scale is automatically adjusted to range from the minimum to the maximum scores of the HiCExperiment being plotted. This can be adjusted using the limits argument.\n\nplotMatrix(hic, limits = c(-3.5, -1))\n\n\n\n\n\n\n\n\n4.2.3 Choosing color map\n?HiContacts::palettes returns a list of available color maps to use with plotMatrix. Any custom color map can also be used by manually specifying a vector of colors.\n\n# ----- `afmhotr` color map is shipped in the `HiContacts` package\nafmhotrColors() \n## [1] \"#ffffff\" \"#f8f5c3\" \"#f4ee8d\" \"#f6be35\" \"#ee7d32\" \"#c44228\" \"#821d19\"\n## [8] \"#381211\" \"#050606\"\nplotMatrix(\n hic, \n use.scores = 'balanced',\n limits = c(-4, -1),\n cmap = afmhotrColors()\n)" + "text": "4.2 Hi-C maps customization options\nA number of customization options are available for the plotMatrix function. The next subsections focus on how to:\n\nPick the scores of interest to represent in a Hi-C heatmap;\nChange the numeric scale and boundaries;\nChange the color map;\nExtra customization options\n\n\n4.2.1 Choosing scores\nBy default, plotMatrix will attempt to plot balanced (coverage normalized) Hi-C matrices. However, extra scores may be associated with interactions in a HiCExperiment object (more on this in the next chapter)\nFor instance, we can plot the count scores, which are un-normalized raw contact counts directly obtained when binning a .pairs file:\n\nplotMatrix(hic, use.scores = 'count')\n\n\n\n\n\n\n\n\n4.2.2 Choosing scale\nThe color scale is automatically adjusted to range from the minimum to the maximum scores of the HiCExperiment being plotted. This can be adjusted using the limits argument.\n\nplotMatrix(hic, limits = c(-3.5, -1))\n\n\n\n\n\n\n\n\n4.2.3 Choosing color map\n?HiContacts::palettes returns a list of available color maps to use with plotMatrix. Any custom color map can also be used by manually specifying a vector of colors.\n\n# ----- `afmhotr` color map is shipped in the `HiContacts` package\nafmhotrColors() \n## [1] \"#ffffff\" \"#f8f5c3\" \"#f4ee8d\" \"#f6be35\" \"#ee7d32\" \"#c44228\" \"#821d19\" \"#381211\" \"#050606\"\nplotMatrix(\n hic, \n use.scores = 'balanced',\n limits = c(-4, -1),\n cmap = afmhotrColors()\n)" }, { "objectID": "visualization.html#advanced-visualization", "href": "visualization.html#advanced-visualization", "title": "\n4  Hi-C data visualization\n", "section": "\n4.3 Advanced visualization", - "text": "4.3 Advanced visualization\n\n4.3.1 Overlaying topological features\nTopological features (e.g. chromatin loops, domain borders, A/B compartments, e.g. …) are often displayed over a Hi-C heatmap.\nTo illustrate how to do this, let’s import pre-computed chromatin loops in R. These loops have been identified using chromosight (Matthey-Doret et al. (2020)) on the contact matrix which we imported interactions from.\n\nlibrary(rtracklayer)\nlibrary(InteractionSet)\nloops <- system.file('extdata', 'S288C-loops.bedpe', package = 'HiCExperiment') |> \n import() |> \n makeGInteractionsFromGRangesPairs()\nloops\n## GInteractions object with 162 interactions and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] I 3001-4000 --- I 29001-30000\n## [2] I 29001-30000 --- I 50001-51000\n## [3] I 95001-96000 --- I 128001-129000\n## [4] I 133001-134000 --- I 157001-158000\n## [5] II 8001-9000 --- II 46001-47000\n## ... ... ... ... ... ...\n## [158] XVI 773001-774000 --- XVI 803001-804000\n## [159] XVI 834001-835000 --- XVI 859001-860000\n## [160] XVI 860001-861000 --- XVI 884001-885000\n## [161] XVI 901001-902000 --- XVI 940001-941000\n## [162] XVI 917001-918000 --- XVI 939001-940000\n## -------\n## regions: 316 ranges and 0 metadata columns\n## seqinfo: 16 sequences from an unspecified genome; no seqlengths\n\nSimilarly, borders have also been mapped with chromosight. We can also import them in R.\n\nborders <- system.file('extdata', 'S288C-borders.bed', package = 'HiCExperiment') |> \n import()\nborders\n## GRanges object with 814 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] I 73001-74000 *\n## [2] I 108001-109000 *\n## [3] I 181001-182000 *\n## [4] II 90001-91000 *\n## [5] II 119001-120000 *\n## ... ... ... ...\n## [810] XVI 777001-778000 *\n## [811] XVI 796001-797000 *\n## [812] XVI 811001-812000 *\n## [813] XVI 890001-891000 *\n## [814] XVI 933001-934000 *\n## -------\n## seqinfo: 16 sequences from an unspecified genome; no seqlengths\n\nChromatin loops are stored in GInteractions while borders are GRanges. The former will be displayed as off-diagonal circles and the later as on-diagonal diamonds on the Hi-C heatmap.\n\nplotMatrix(hic, loops = loops, borders = borders)\n\n\n\n\n\n\n\n\n4.3.2 Aggregated Hi-C maps\nFinally, Hi-C map “snippets” (i.e. extracts) are often aggregated together to show an average signal. This analysis is sometimes referred to as APA (Aggregated Plot Analysis).\nAggregated Hi-C maps can be computed over a collection of targets using the aggregate function. These targets can be GRanges (to extract on-diagonal snippets) or GInteractions (to extract off-diagonal snippets). The flankingBins specifies how many matrix bins should be extracted on each side of the targets of interest.\nHere, we compute the aggregated Hi-C snippets of ± 15kb around each chromatin loop listed in loops.\n\nhic <- zoom(hic, 1000)\naggr_loops <- aggregate(hic, targets = loops, flankingBins = 15)\n## Going through preflight checklist...\n## Parsing the entire contact matrice as a sparse matrix...\n## Modeling distance decay...\n## Filtering for contacts within provided targets...\naggr_loops\n## `AggrHiCExperiment` object over 148 targets \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: 148 targets \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 961 \n## scores(4): count balanced expected detrended \n## slices(4): count balanced expected detrended \n## topologicalFeatures: targets(148) compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: N/A \n## metadata(0):\n\naggregate generates a AggrHiCExperiment object, a flavor of HiCExperiment class of objects.\n\n\nAggrHiCExperiment objects have an extra slices slot. This stores a list of arrays, one per scores. Each array is of 3 dimensions, x and y representing the heatmap axes, and z representing the index of the target.\n\nAggrHiCExperiment objects also have a mandatory topologicalFeatures element named targets, storing the genomic loci provided in aggregate.\n\n\nslices(aggr_loops)\n## List of length 4\n## names(4): count balanced expected detrended\ndim(slices(aggr_loops, 'count'))\n## [1] 31 31 148\ntopologicalFeatures(aggr_loops, 'targets')\n## Pairs object with 148 pairs and 0 metadata columns:\n## first second\n## <GRanges> <GRanges>\n## [1] I:14501-44500 I:35501-65500\n## [2] I:80501-110500 I:113501-143500\n## [3] I:118501-148500 I:142501-172500\n## [4] II:33501-63500 II:63501-93500\n## [5] II:134501-164500 II:159501-189500\n## ... ... ...\n## [144] XVI:586501-616500 XVI:606501-636500\n## [145] XVI:733501-763500 XVI:754501-784500\n## [146] XVI:758501-788500 XVI:788501-818500\n## [147] XVI:819501-849500 XVI:844501-874500\n## [148] XVI:845501-875500 XVI:869501-899500\n\nThe resulting AggrHiCExperiment can be plotted using the same plotMatrix function with the arguments described above.\n\nplotMatrix(\n aggr_loops, \n use.scores = 'detrended', \n scale = 'linear', \n limits = c(-1, 1), \n cmap = bgrColors()\n)" + "text": "4.3 Advanced visualization\n\n4.3.1 Overlaying topological features\nTopological features (e.g. chromatin loops, domain borders, A/B compartments, e.g. …) are often displayed over a Hi-C heatmap.\nTo illustrate how to do this, let’s import pre-computed chromatin loops in R. These loops have been identified using chromosight (Matthey-Doret et al. (2020)) on the contact matrix which we imported interactions from.\n\nlibrary(rtracklayer)\nlibrary(InteractionSet)\nloops <- system.file('extdata', 'S288C-loops.bedpe', package = 'HiCExperiment') |> \n import() |> \n makeGInteractionsFromGRangesPairs()\nloops\n## GInteractions object with 162 interactions and 0 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2\n## <Rle> <IRanges> <Rle> <IRanges>\n## [1] I 3001-4000 --- I 29001-30000\n## [2] I 29001-30000 --- I 50001-51000\n## [3] I 95001-96000 --- I 128001-129000\n## [4] I 133001-134000 --- I 157001-158000\n## [5] II 8001-9000 --- II 46001-47000\n## ... ... ... ... ... ...\n## [158] XVI 773001-774000 --- XVI 803001-804000\n## [159] XVI 834001-835000 --- XVI 859001-860000\n## [160] XVI 860001-861000 --- XVI 884001-885000\n## [161] XVI 901001-902000 --- XVI 940001-941000\n## [162] XVI 917001-918000 --- XVI 939001-940000\n## -------\n## regions: 316 ranges and 0 metadata columns\n## seqinfo: 16 sequences from an unspecified genome; no seqlengths\n\nSimilarly, borders have also been mapped with chromosight. We can also import them in R.\n\nborders <- system.file('extdata', 'S288C-borders.bed', package = 'HiCExperiment') |> \n import()\nborders\n## GRanges object with 814 ranges and 0 metadata columns:\n## seqnames ranges strand\n## <Rle> <IRanges> <Rle>\n## [1] I 73001-74000 *\n## [2] I 108001-109000 *\n## [3] I 181001-182000 *\n## [4] II 90001-91000 *\n## [5] II 119001-120000 *\n## ... ... ... ...\n## [810] XVI 777001-778000 *\n## [811] XVI 796001-797000 *\n## [812] XVI 811001-812000 *\n## [813] XVI 890001-891000 *\n## [814] XVI 933001-934000 *\n## -------\n## seqinfo: 16 sequences from an unspecified genome; no seqlengths\n\nChromatin loops are stored in GInteractions while borders are GRanges. The former will be displayed as off-diagonal circles and the later as on-diagonal diamonds on the Hi-C heatmap.\n\nplotMatrix(hic, loops = loops, borders = borders)\n\n\n\n\n\n\n\n\n4.3.2 Aggregated Hi-C maps\nFinally, Hi-C map “snippets” (i.e. extracts) are often aggregated together to show an average signal. This analysis is sometimes referred to as APA (Aggregated Plot Analysis).\nAggregated Hi-C maps can be computed over a collection of targets using the aggregate function. These targets can be GRanges (to extract on-diagonal snippets) or GInteractions (to extract off-diagonal snippets). The flankingBins specifies how many matrix bins should be extracted on each side of the targets of interest.\nHere, we compute the aggregated Hi-C snippets of ± 15kb around each chromatin loop listed in loops.\n\nhic <- zoom(hic, 1000)\naggr_loops <- aggregate(hic, targets = loops, flankingBins = 15)\n## Going through preflight checklist...\n## Parsing the entire contact matrice as a sparse matrix...\n## Modeling distance decay...\n## Filtering for contacts within provided targets...\naggr_loops\n## `AggrHiCExperiment` object over 148 targets \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: 148 targets \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 961 \n## scores(4): count balanced expected detrended \n## slices(4): count balanced expected detrended \n## topologicalFeatures: targets(148) compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: N/A \n## metadata(0):\n\naggregate generates a AggrHiCExperiment object, a flavor of HiCExperiment class of objects.\n\n\nAggrHiCExperiment objects have an extra slices slot. This stores a list of arrays, one per scores. Each array is of 3 dimensions, x and y representing the heatmap axes, and z representing the index of the target.\n\nAggrHiCExperiment objects also have a mandatory topologicalFeatures element named targets, storing the genomic loci provided in aggregate.\n\n\nslices(aggr_loops)\n## List of length 4\n## names(4): count balanced expected detrended\ndim(slices(aggr_loops, 'count'))\n## [1] 31 31 148\ntopologicalFeatures(aggr_loops, 'targets')\n## Pairs object with 148 pairs and 0 metadata columns:\n## first second\n## <GRanges> <GRanges>\n## [1] I:14501-44500 I:35501-65500\n## [2] I:80501-110500 I:113501-143500\n## [3] I:118501-148500 I:142501-172500\n## [4] II:33501-63500 II:63501-93500\n## [5] II:134501-164500 II:159501-189500\n## ... ... ...\n## [144] XVI:586501-616500 XVI:606501-636500\n## [145] XVI:733501-763500 XVI:754501-784500\n## [146] XVI:758501-788500 XVI:788501-818500\n## [147] XVI:819501-849500 XVI:844501-874500\n## [148] XVI:845501-875500 XVI:869501-899500\n\nThe resulting AggrHiCExperiment can be plotted using the same plotMatrix function with the arguments described above.\n\nplotMatrix(\n aggr_loops, \n use.scores = 'detrended', \n scale = 'linear', \n limits = c(-1, 1), \n cmap = bgrColors()\n)" }, { "objectID": "matrix-centric.html", @@ -186,7 +186,7 @@ "href": "matrix-centric.html#operations-in-an-individual-matrix", "title": "\n5  Matrix-centric analysis\n", "section": "\n5.1 Operations in an individual matrix", - "text": "5.1 Operations in an individual matrix\n\n5.1.1 Balancing a raw interaction count map\nHi-C sequencing coverage is systematically affected by multiple confounding factors, e.g.  density of restriction sites, GC%, genome mappability, etc.. Overall, it generally ends up not homogenous throughout the entire genome and this leads to artifacts in un-normalized count matrices.\nTo correct for sequencing coverage heterogeneity of raw count maps, Hi-C data can be normalized using matrix balancing approaches (Cournac et al. (2012), Imakaev et al. (2012)). This is generally done directly on the disk-stored matrices using out-of-memory strategies (e.g. with cooler balance <.cool>). However, if contact matrix files are imported into a HiCExperiment object but no balanced scores are available, in-memory balancing can be performed using the normalize function.\n\nnormalized_hic <- normalize(hic)\nnormalized_hic\n## `HiCExperiment` object with 471,364 contacts over 407 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 34063 \n## scores(3): count balanced ICE \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: N/A \n## metadata(0):\n\n\n\n\n\n\n\nNote\n\n\n\nThe only change done to the HiCExperiment object by the normalize function is the addition of a single extra ICE in scores list. The interactions themselves are unmodified.\n\n\nIt is possible to plot the different scores of the resulting object to visualize the newly computed scores. In this example, ICE scores should be nearly identical to balanced scores, which were originally imported from the disk-stored contact matrix.\n\n\npatchwork::wrap_plots(\n plotMatrix(normalized_hic, use.scores = 'count', caption = FALSE),\n plotMatrix(normalized_hic, use.scores = 'balanced', caption = FALSE),\n plotMatrix(normalized_hic, use.scores = 'ICE', caption = FALSE), \n nrow = 1\n)\n\n\n\n\n\n\n\n\n\n5.1.2 Computing observed/expected (O/E) map\nThe most prominent feature of a balanced Hi-C matrix is the strong main diagonal. This main diagonal is observed because interactions between immediate adjacent genomic loci are more prone to happen than interactions spanning longer genomic distances. This “expected” behavior is due to the polymer nature of the chromosomes being studied, and can be locally estimated using the distance-dependent interaction frequency (a.k.a. the “distance law”, or P(s)). It can be used to compute an expected matrix on interactions.\nWhen it is desirable to “mask” this polymer behavior to emphasize topological structures formed by chromosomes, one can divide a given balanced matrix by its expected matrix, i.e. calculate the observed/expected (O/E) map. This is sometimes called “detrending”, as it effectively removes the average polymer behavior from the balanced matrix.\nThe detrend function performs this operation on a given HiCExperiment object.\n\ndetrended_hic <- detrend(hic)\ndetrended_hic\n## `HiCExperiment` object with 471,364 contacts over 407 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 34063 \n## scores(4): count balanced expected detrended \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: N/A \n## metadata(0):\n\n\n\n\n\n\n\nNote\n\n\n\nThe only change done to the HiCExperiment object by the detrend function is the addition of two extra scores:\n\nexpected\ndetrended\n\nThe interactions themselves are unmodified.\n\n\nTopological features will be visually more prominent in the O/E detrended Hi-C map.\n\n\npatchwork::wrap_plots(\n plotMatrix(detrended_hic, use.scores = 'balanced', scale = 'log10', limits = c(-3.5, -1.2), caption = FALSE),\n plotMatrix(detrended_hic, use.scores = 'expected', scale = 'log10', limits = c(-3.5, -1.2), caption = FALSE),\n plotMatrix(detrended_hic, use.scores = 'detrended', scale = 'linear', limits = c(-1, 1), cmap = bwrColors(), caption = FALSE), \n nrow = 1\n)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nScale for detrended scores\n\n\n\n\n\nexpected scores are in linear scale and ± in the same amplitude than balanced scores;\n\ndetrended scores are in log2 scale, in general approximately centered around 0. When plotting detrended scores, scale = linear should be set to prevent the default log10 scaling.\n\n\n\n\n5.1.3 Computing autocorrelated map\nCorrelation matrices are often calculated from balanced Hi-C matrices. For instance, in genomes composed of eu- and heterochromatin, a correlation matrix can be used to reveal a checkerboard pattern emphasizing the segregation of chromatin into two A/B compartments (Lieberman-Aiden et al. (2009)).\nThe autocorrelate function is used to compute a correlation matrix of a HiCExperiment object. For each pair of interacting loci, the autocorrelated score represents the correlation between their respective interaction profiles with the rest of the genome.\n\nautocorr_hic <- autocorrelate(hic)\n## \nautocorr_hic\n## `HiCExperiment` object with 471,364 contacts over 407 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 34063 \n## scores(5): count balanced expected detrended autocorrelated \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: N/A \n## metadata(0):\n\nSince these metrics represent correlation scores, they range between -1 and 1. Two loci with an autocorrelated score close to -1 have anti-correlated interaction profiles, while two loci with a autocorrelated score close to 1 are likely to interact with shared targets.\n\nsummary(scores(autocorr_hic, 'autocorrelated'))\n## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's \n## -0.4156 0.0025 0.0504 0.0645 0.1036 1.0000 564\n\nCorrelated and anti-correlated loci will be visually represented in the autocorrelated Hi-C map in red and blue pixels, respectively.\n\n\n\n\n\n\nNote\n\n\n\nHere we have illustrated how to compute an autocorrelation matrix from a HiCExperiment object using the example yeast Hi-C experiment. Bear in mind that this is unusual and not very useful, as yeast chromatin is not segregated in two compartments but rather follows a Rabl conformation (Duan et al. (2010)). An example of autocorrelation map from a vertebrate Hi-C experiment (for which chromatin is segregated in A/B compartments) is shown in Chapter 10.\n\n\n\nplotMatrix(\n autocorr_hic, \n use.scores = 'autocorrelated', \n scale = 'linear', \n limits = c(-0.4, 0.4), \n cmap = bgrColors()\n)\n\n\n\n\n\n\n\n\n\n\n\n\n\nScale for autocorrelated scores\n\n\n\n\n\nautocorrelated scores are in linear scale, in general approximately centered around 0. When plotting autocorrelated scores, scale = linear should be set to prevent the default log10 scaling.\n\nlimits should be manually set to c(-x, x) (0 < x <= 1) to ensure that the color range is effectively centered on 0.\n\n\n\n\n5.1.4 Despeckling (smoothing out) a contact map\nShallow-sequenced Hi-C libraries or matrices binned with an overly small bin size sometimes produce “grainy” Hi-C maps with noisy backgrounds. A grainy map may also be obtained when dividing two matrices, e.g. when computing the O/E ratio with detrend. This is particularly true for sparser long-range interactions. To overcome such limitations, HiCExperiment objects can be “despeckled” to smooth out focal speckles.\n\nhic2 <- detrend(hic['II:400000-700000'])\nhic2 <- despeckle(hic2, use.scores = 'detrended', focal.size = 2)\nhic2\n## `HiCExperiment` object with 168,785 contacts over 150 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II:400,000-700,000\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 11325 \n## scores(5): count balanced expected detrended detrended.despeckled \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: N/A \n## metadata(0):\n\nThe added <use.scores>.despeckled scores correspond to scores averaged using a window, whose width is provided with the focal.size argument. This results in a smoother Hi-C heatmap, effectively removing the “speckles” observed at longer range.\n\n\nlibrary(InteractionSet)\nloops <- system.file('extdata', 'S288C-loops.bedpe', package = 'HiCExperiment') |> \n import() |> \n makeGInteractionsFromGRangesPairs()\nborders <- system.file('extdata', 'S288C-borders.bed', package = 'HiCExperiment') |> \n import()\npatchwork::wrap_plots(\n plotMatrix(hic2, caption = FALSE),\n plotMatrix(hic2, use.scores = 'detrended', scale = 'linear', limits = c(-1, 1), caption = FALSE),\n plotMatrix(\n hic2, \n use.scores = 'detrended.despeckled', \n scale = 'linear', \n limits = c(-1, 1), \n caption = FALSE, \n loops = loops, \n borders = borders\n ),\n nrow = 1\n)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nScale for despeckled scores\n\n\n\ndespeckled scores are in the same scale than the scores they were computed from." + "text": "5.1 Operations in an individual matrix\n\n5.1.1 Balancing a raw interaction count map\nHi-C sequencing coverage is systematically affected by multiple confounding factors, e.g.  density of restriction sites, GC%, genome mappability, etc.. Overall, it generally ends up not homogenous throughout the entire genome and this leads to artifacts in un-normalized count matrices.\nTo correct for sequencing coverage heterogeneity of raw count maps, Hi-C data can be normalized using matrix balancing approaches (Cournac et al. (2012), Imakaev et al. (2012)). This is generally done directly on the disk-stored matrices using out-of-memory strategies (e.g. with cooler balance <.cool>). However, if contact matrix files are imported into a HiCExperiment object but no balanced scores are available, in-memory balancing can be performed using the normalize function. This adds an extra ICE element in scores list (while the interactions themselves are unmodified).\n\nnormalized_hic <- normalize(hic)\nnormalized_hic\n## `HiCExperiment` object with 471,364 contacts over 407 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 34063 \n## scores(3): count balanced ICE \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: N/A \n## metadata(0):\n\nIt is possible to plot the different scores of the resulting object to visualize the newly computed scores. In this example, ICE scores should be nearly identical to balanced scores, which were originally imported from the disk-stored contact matrix.\n\n\npatchwork::wrap_plots(\n plotMatrix(normalized_hic, use.scores = 'count', caption = FALSE),\n plotMatrix(normalized_hic, use.scores = 'balanced', caption = FALSE),\n plotMatrix(normalized_hic, use.scores = 'ICE', caption = FALSE), \n nrow = 1\n)\n\n\n\n\n\n\n\n\n\n5.1.2 Computing observed/expected (O/E) map\nThe most prominent feature of a balanced Hi-C matrix is the strong main diagonal. This main diagonal is observed because interactions between immediate adjacent genomic loci are more prone to happen than interactions spanning longer genomic distances. This “expected” behavior is due to the polymer nature of the chromosomes being studied, and can be locally estimated using the distance-dependent interaction frequency (a.k.a. the “distance law”, or P(s)). It can be used to compute an expected matrix on interactions.\nWhen it is desirable to “mask” this polymer behavior to emphasize topological structures formed by chromosomes, one can divide a given balanced matrix by its expected matrix, i.e. calculate the observed/expected (O/E) map. This is sometimes called “detrending”, as it effectively removes the average polymer behavior from the balanced matrix.\nThe detrend function performs this operation on a given HiCExperiment object. It adds two extra elements in scores list: expected and detrended metrics (while the interactions themselves are unmodified).\n\ndetrended_hic <- detrend(hic)\ndetrended_hic\n## `HiCExperiment` object with 471,364 contacts over 407 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 34063 \n## scores(4): count balanced expected detrended \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: N/A \n## metadata(0):\n\nTopological features will be visually more prominent in the O/E detrended Hi-C map.\n\n\npatchwork::wrap_plots(\n plotMatrix(detrended_hic, use.scores = 'balanced', scale = 'log10', limits = c(-3.5, -1.2), caption = FALSE),\n plotMatrix(detrended_hic, use.scores = 'expected', scale = 'log10', limits = c(-3.5, -1.2), caption = FALSE),\n plotMatrix(detrended_hic, use.scores = 'detrended', scale = 'linear', limits = c(-1, 1), cmap = bwrColors(), caption = FALSE), \n nrow = 1\n)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nScale for detrended scores\n\n\n\n\n\nexpected scores are in linear scale and ± in the same amplitude than balanced scores;\n\ndetrended scores are in log2 scale, in general approximately centered around 0. When plotting detrended scores, scale = linear should be set to prevent the default log10 scaling.\n\n\n\n\n5.1.3 Computing autocorrelated map\nCorrelation matrices are often calculated from balanced Hi-C matrices. For instance, in genomes composed of eu- and heterochromatin, a correlation matrix can be used to reveal a checkerboard pattern emphasizing the segregation of chromatin into two A/B compartments (Lieberman-Aiden et al. (2009)).\nThe autocorrelate function is used to compute a correlation matrix of a HiCExperiment object. For each pair of interacting loci, the autocorrelated score represents the correlation between their respective interaction profiles with the rest of the genome.\n\nautocorr_hic <- autocorrelate(hic)\n## \nautocorr_hic\n## `HiCExperiment` object with 471,364 contacts over 407 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 34063 \n## scores(5): count balanced expected detrended autocorrelated \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: N/A \n## metadata(0):\n\nSince these metrics represent correlation scores, they range between -1 and 1. Two loci with an autocorrelated score close to -1 have anti-correlated interaction profiles, while two loci with a autocorrelated score close to 1 are likely to interact with shared targets.\n\nsummary(scores(autocorr_hic, 'autocorrelated'))\n## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's \n## -0.4156 0.0025 0.0504 0.0645 0.1036 1.0000 564\n\nCorrelated and anti-correlated loci will be visually represented in the autocorrelated Hi-C map in red and blue pixels, respectively.\n\n\n\n\n\n\nNote\n\n\n\nHere we have illustrated how to compute an autocorrelation matrix from a HiCExperiment object using the example yeast Hi-C experiment. Bear in mind that this is unusual and not very useful, as yeast chromatin is not segregated in two compartments but rather follows a Rabl conformation (Duan et al. (2010)). An example of autocorrelation map from a vertebrate Hi-C experiment (for which chromatin is segregated in A/B compartments) is shown in Chapter 10.\n\n\n\nplotMatrix(\n autocorr_hic, \n use.scores = 'autocorrelated', \n scale = 'linear', \n limits = c(-0.4, 0.4), \n cmap = bgrColors()\n)\n\n\n\n\n\n\n\n\n\n\n\n\n\nScale for autocorrelated scores\n\n\n\n\n\nautocorrelated scores are in linear scale, in general approximately centered around 0. When plotting autocorrelated scores, scale = linear should be set to prevent the default log10 scaling.\n\nlimits should be manually set to c(-x, x) (0 < x <= 1) to ensure that the color range is effectively centered on 0.\n\n\n\n\n5.1.4 Despeckling (smoothing out) a contact map\nShallow-sequenced Hi-C libraries or matrices binned with an overly small bin size sometimes produce “grainy” Hi-C maps with noisy backgrounds. A grainy map may also be obtained when dividing two matrices, e.g. when computing the O/E ratio with detrend. This is particularly true for sparser long-range interactions. To overcome such limitations, HiCExperiment objects can be “despeckled” to smooth out focal speckles.\n\nhic2 <- detrend(hic['II:400000-700000'])\nhic2 <- despeckle(hic2, use.scores = 'detrended', focal.size = 2)\nhic2\n## `HiCExperiment` object with 168,785 contacts over 150 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II:400,000-700,000\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 2000 \n## interactions: 11325 \n## scores(5): count balanced expected detrended detrended.despeckled \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) centromeres(16) \n## pairsFile: N/A \n## metadata(0):\n\nThe added <use.scores>.despeckled scores correspond to scores averaged using a window, whose width is provided with the focal.size argument. This results in a smoother Hi-C heatmap, effectively removing the “speckles” observed at longer range.\n\n\nlibrary(InteractionSet)\nloops <- system.file('extdata', 'S288C-loops.bedpe', package = 'HiCExperiment') |> \n import() |> \n makeGInteractionsFromGRangesPairs()\nborders <- system.file('extdata', 'S288C-borders.bed', package = 'HiCExperiment') |> \n import()\npatchwork::wrap_plots(\n plotMatrix(hic2, caption = FALSE),\n plotMatrix(hic2, use.scores = 'detrended', scale = 'linear', limits = c(-1, 1), caption = FALSE),\n plotMatrix(\n hic2, \n use.scores = 'detrended.despeckled', \n scale = 'linear', \n limits = c(-1, 1), \n caption = FALSE, \n loops = loops, \n borders = borders\n ),\n nrow = 1\n)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nScale for despeckled scores\n\n\n\ndespeckled scores are in the same scale than the scores they were computed from." }, { "objectID": "matrix-centric.html#operations-between-multiple-matrices", @@ -207,28 +207,28 @@ "href": "interactions-centric.html#distance-laws", "title": "\n6  Interactions-centric analysis\n", "section": "\n6.1 Distance law(s)", - "text": "6.1 Distance law(s)\n\n6.1.1 P(s) from a single .pairs file\nDistance laws are generally computed directly from .pairs files. This is because the .pairs files are at 1-bp resolution whereas the contact matrices (for example from .cool files) are binned at a minimum resolution.\nAn example .pairs file can be fetched from the ExperimentHub database using the HiContactsData package.\n\nlibrary(HiCExperiment)\nlibrary(HiContactsData)\npairsf <- HiContactsData('yeast_wt', 'pairs.gz')\npf <- PairsFile(pairsf)\n\n\npf\n## PairsFile object\n## resource: /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753\n\n\n\n\n\n\n\nReminder!\n\n\n\nPairsFile connections can be imported directly into a GInteractions object with import():\n\nimport(pf)\n## GInteractions object with 471364 interactions and 3 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | frag1 frag2\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric>\n## [1] II 105 --- II 48548 | 1358 1681\n## [2] II 113 --- II 45003 | 1358 1658\n## [3] II 119 --- II 687251 | 1358 5550\n## [4] II 160 --- II 26124 | 1358 1510\n## [5] II 169 --- II 39052 | 1358 1613\n## ... ... ... ... ... ... . ... ...\n## [471360] II 808605 --- II 809683 | 6316 6320\n## [471361] II 808609 --- II 809917 | 6316 6324\n## [471362] II 808617 --- II 809506 | 6316 6319\n## [471363] II 809447 --- II 809685 | 6319 6321\n## [471364] II 809472 --- II 809675 | 6319 6320\n## distance\n## <integer>\n## [1] 48443\n## [2] 44890\n## [3] 687132\n## [4] 25964\n## [5] 38883\n## ... ...\n## [471360] 1078\n## [471361] 1308\n## [471362] 889\n## [471363] 238\n## [471364] 203\n## -------\n## regions: 549331 ranges and 0 metadata columns\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\n\n\nWe can compute a P(s) per chromosome from this .pairs file using the distanceLaw function.\n\nlibrary(HiContacts)\nps <- distanceLaw(pf, by_chr = TRUE) \n## Importing pairs file /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753 in memory. This may take a while...\nps\n## # A tibble: 115 × 6\n## chr binned_distance p norm_p norm_p_unity slope\n## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>\n## 1 II 14 0.00000212 0.00000106 2.27 0 \n## 2 II 16 0.0000170 0.0000170 36.4 1.56\n## 3 II 17 0.0000361 0.0000180 38.6 1.55\n## 4 II 19 0.0000424 0.0000212 45.5 1.55\n## 5 II 21 0.0000467 0.0000233 50.0 1.54\n## 6 II 23 0.0000870 0.0000290 62.1 1.53\n## # ℹ 109 more rows\n\n\n\n\n\n\n\nNote\n\n\n\nBecause this is a toy dataset, contacts are only provided for the chromosome II.\n\ntable(ps$chr)\n## \n## II \n## 115\n\n\n\nThe plotPs() and plotPsSlope() functions are convenient ggplot2-based functions with pre-configured settings optimized for P(s) visualization.\n\nlibrary(ggplot2)\nplotPs(ps, aes(x = binned_distance, y = norm_p, color = chr))\n## Warning: Removed 67 rows containing missing values (`geom_line()`).\n\n\n\n\n\n\nplotPsSlope(ps, aes(x = binned_distance, y = slope, color = chr))\n## Warning: Removed 67 rows containing missing values (`geom_line()`).\n\n\n\n\n\n\n\n\n6.1.2 P(s) for multiple .pairs files\nLet’s first import a second example dataset. We’ll import pairs identified in a eco1 yeast mutant.\n\neco1_pairsf <- HiContactsData('yeast_eco1', 'pairs.gz')\neco1_pf <- PairsFile(eco1_pairsf)\n\n\neco1_ps <- distanceLaw(eco1_pf, by_chr = TRUE) \n## Importing pairs file /github/home/.cache/R/ExperimentHub/21fb251da216_7755 in memory. This may take a while...\neco1_ps\n## # A tibble: 115 × 6\n## chr binned_distance p norm_p norm_p_unity slope\n## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>\n## 1 II 14 0.00000201 0.00000100 0.660 0 \n## 2 II 16 0.0000221 0.0000221 14.5 1.46\n## 3 II 17 0.0000492 0.0000246 16.2 1.46\n## 4 II 19 0.0000412 0.0000206 13.5 1.45\n## 5 II 21 0.0000653 0.0000326 21.5 1.45\n## 6 II 23 0.0000803 0.0000268 17.6 1.44\n## # ℹ 109 more rows\n\nA little data wrangling can help plotting the distance laws for 2 different samples in the same plot.\n\nlibrary(dplyr)\nmerged_ps <- rbind(\n ps |> mutate(sample = 'WT'), \n eco1_ps |> mutate(sample = 'eco1')\n)\nplotPs(merged_ps, aes(x = binned_distance, y = norm_p, color = sample, linetype = chr)) + \n scale_color_manual(values = c('#c6c6c6', '#ca0000'))\n## Warning: Removed 134 rows containing missing values (`geom_line()`).\n\n\n\n\n\n\nplotPsSlope(merged_ps, aes(x = binned_distance, y = slope, color = sample, linetype = chr)) + \n scale_color_manual(values = c('#c6c6c6', '#ca0000'))\n## Warning: Removed 135 rows containing missing values (`geom_line()`).\n\n\n\n\n\n\n\n\n6.1.3 P(s) from HiCExperiment objects\nAlternatively, distance laws can be computed from binned matrices directly by providing HiCExperiment objects. For deeply sequenced datasets, this can be significantly faster than when using original .pairs files, but the smoothness of the resulting curves will be greatly impacted, notably at short distances.\n\nps_from_hic <- distanceLaw(hic, by_chr = TRUE) \n## pairsFile not specified. The P(s) curve will be an approximation.\nplotPs(ps_from_hic, aes(x = binned_distance, y = norm_p))\n## Warning: Removed 9 rows containing missing values (`geom_line()`).\n\n\n\n\n\n\nplotPsSlope(ps_from_hic, aes(x = binned_distance, y = slope))\n## Warning: Removed 8 rows containing missing values (`geom_line()`)." + "text": "6.1 Distance law(s)\n\n6.1.1 P(s) from a single .pairs file\nDistance laws are generally computed directly from .pairs files. This is because the .pairs files are at 1-bp resolution whereas the contact matrices (for example from .cool files) are binned at a minimum resolution.\nAn example .pairs file can be fetched from the ExperimentHub database using the HiContactsData package.\n\nlibrary(HiCExperiment)\nlibrary(HiContactsData)\npairsf <- HiContactsData('yeast_wt', 'pairs.gz')\npf <- PairsFile(pairsf)\n\n\npf\n## PairsFile object\n## resource: /github/home/.cache/R/ExperimentHub/1a92835ced9_7753\n\nIf needed, PairsFile connections can be imported directly into a GInteractions object with import().\n\nimport(pf)\n## GInteractions object with 471364 interactions and 3 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | frag1 frag2 distance\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <integer>\n## [1] II 105 --- II 48548 | 1358 1681 48443\n## [2] II 113 --- II 45003 | 1358 1658 44890\n## [3] II 119 --- II 687251 | 1358 5550 687132\n## [4] II 160 --- II 26124 | 1358 1510 25964\n## [5] II 169 --- II 39052 | 1358 1613 38883\n## ... ... ... ... ... ... . ... ... ...\n## [471360] II 808605 --- II 809683 | 6316 6320 1078\n## [471361] II 808609 --- II 809917 | 6316 6324 1308\n## [471362] II 808617 --- II 809506 | 6316 6319 889\n## [471363] II 809447 --- II 809685 | 6319 6321 238\n## [471364] II 809472 --- II 809675 | 6319 6320 203\n## -------\n## regions: 549331 ranges and 0 metadata columns\n## seqinfo: 1 sequence from an unspecified genome; no seqlengths\n\nWe can compute a P(s) per chromosome from this .pairs file using the distanceLaw function.\n\nlibrary(HiContacts)\nps <- distanceLaw(pf, by_chr = TRUE) \n## Importing pairs file /github/home/.cache/R/ExperimentHub/1a92835ced9_7753 in memory. This may take a while...\nps\n## # A tibble: 115 × 6\n## chr binned_distance p norm_p norm_p_unity slope\n## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>\n## 1 II 14 0.00000212 0.00000106 2.27 0 \n## 2 II 16 0.0000170 0.0000170 36.4 1.56\n## 3 II 17 0.0000361 0.0000180 38.6 1.55\n## 4 II 19 0.0000424 0.0000212 45.5 1.55\n## 5 II 21 0.0000467 0.0000233 50.0 1.54\n## 6 II 23 0.0000870 0.0000290 62.1 1.53\n## # ℹ 109 more rows\n\nThe plotPs() and plotPsSlope() functions are convenient ggplot2-based functions with pre-configured settings optimized for P(s) visualization.\n\nlibrary(ggplot2)\nplotPs(ps, aes(x = binned_distance, y = norm_p, color = chr))\n## Warning: Removed 67 rows containing missing values (`geom_line()`).\n\n\n\n\n\n\nplotPsSlope(ps, aes(x = binned_distance, y = slope, color = chr))\n## Warning: Removed 67 rows containing missing values (`geom_line()`).\n\n\n\n\n\n\n\n\n6.1.2 P(s) for multiple .pairs files\nLet’s first import a second example dataset. We’ll import pairs identified in a eco1 yeast mutant.\n\neco1_pairsf <- HiContactsData('yeast_eco1', 'pairs.gz')\neco1_pf <- PairsFile(eco1_pairsf)\n\n\neco1_ps <- distanceLaw(eco1_pf, by_chr = TRUE) \n## Importing pairs file /github/home/.cache/R/ExperimentHub/21f275852cbd_7755 in memory. This may take a while...\neco1_ps\n## # A tibble: 115 × 6\n## chr binned_distance p norm_p norm_p_unity slope\n## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>\n## 1 II 14 0.00000201 0.00000100 0.660 0 \n## 2 II 16 0.0000221 0.0000221 14.5 1.46\n## 3 II 17 0.0000492 0.0000246 16.2 1.46\n## 4 II 19 0.0000412 0.0000206 13.5 1.45\n## 5 II 21 0.0000653 0.0000326 21.5 1.45\n## 6 II 23 0.0000803 0.0000268 17.6 1.44\n## # ℹ 109 more rows\n\nA little data wrangling can help plotting the distance laws for 2 different samples in the same plot.\n\nlibrary(dplyr)\nmerged_ps <- rbind(\n ps |> mutate(sample = 'WT'), \n eco1_ps |> mutate(sample = 'eco1')\n)\nplotPs(merged_ps, aes(x = binned_distance, y = norm_p, color = sample, linetype = chr)) + \n scale_color_manual(values = c('#c6c6c6', '#ca0000'))\n## Warning: Removed 134 rows containing missing values (`geom_line()`).\n\n\n\n\n\n\nplotPsSlope(merged_ps, aes(x = binned_distance, y = slope, color = sample, linetype = chr)) + \n scale_color_manual(values = c('#c6c6c6', '#ca0000'))\n## Warning: Removed 135 rows containing missing values (`geom_line()`).\n\n\n\n\n\n\n\n\n6.1.3 P(s) from HiCExperiment objects\nAlternatively, distance laws can be computed from binned matrices directly by providing HiCExperiment objects. For deeply sequenced datasets, this can be significantly faster than when using original .pairs files, but the smoothness of the resulting curves will be greatly impacted, notably at short distances.\n\nps_from_hic <- distanceLaw(hic, by_chr = TRUE) \n## pairsFile not specified. The P(s) curve will be an approximation.\nplotPs(ps_from_hic, aes(x = binned_distance, y = norm_p))\n## Warning: Removed 9 rows containing missing values (`geom_line()`).\n\n\n\n\n\n\nplotPsSlope(ps_from_hic, aes(x = binned_distance, y = slope))\n## Warning: Removed 8 rows containing missing values (`geom_line()`)." }, { "objectID": "interactions-centric.html#cistrans-ratios", "href": "interactions-centric.html#cistrans-ratios", "title": "\n6  Interactions-centric analysis\n", "section": "\n6.2 Cis/trans ratios", - "text": "6.2 Cis/trans ratios\nThe ratio between cis interactions and trans interactions is often used to assess the overall quality of a Hi-C dataset. It can be computed per chromosome using the cisTransRatio() function.\n\n\n\n\n\n\nTip!\n\n\n\nYou will need to provide a genome-wide HiCExperiment to estimate cis/trans ratios!\n\n\n\nfull_hic <- import(cf, resolution = 2000)\nct <- cisTransRatio(full_hic) \nct\n## # A tibble: 16 × 6\n## # Groups: chr [16]\n## chr cis trans n_total cis_pct trans_pct\n## <fct> <dbl> <dbl> <dbl> <dbl> <dbl>\n## 1 I 186326 96738 283064 0.658 0.342\n## 2 II 942728 273966 1216694 0.775 0.225\n## 3 III 303980 127087 431067 0.705 0.295\n## 4 IV 1858062 418218 2276280 0.816 0.184\n## 5 V 607090 220873 827963 0.733 0.267\n## 6 VI 280282 127771 408053 0.687 0.313\n## # ℹ 10 more rows\n\nIt can be plotted using ggplot2-based visualization functions.\n\nggplot(ct, aes(x = chr, y = cis_pct)) + \n geom_col(position = position_stack()) + \n theme_bw() + \n guides(x=guide_axis(angle = 90)) + \n scale_y_continuous(labels = scales::percent) + \n labs(x = 'Chromosomes', y = '% of cis contacts')\n\n\n\n\n\n\n\n\n\n\n\n\n\nWatch out\n\n\n\nCis/trans contact ratios will greatly vary depending on the cell cycle phase the sample is in! For instance, chromosomes during the mitosis phase of the cell cycle have very little trans contacts, due to their structural organization and individualization." + "text": "6.2 Cis/trans ratios\nThe ratio between cis interactions and trans interactions is often used to assess the overall quality of a Hi-C dataset. It can be computed per chromosome using the cisTransRatio() function. You will need to provide a genome-wide HiCExperiment to estimate cis/trans ratios!\n\nfull_hic <- import(cf, resolution = 2000)\nct <- cisTransRatio(full_hic) \nct\n## # A tibble: 16 × 6\n## # Groups: chr [16]\n## chr cis trans n_total cis_pct trans_pct\n## <fct> <dbl> <dbl> <dbl> <dbl> <dbl>\n## 1 I 186326 96738 283064 0.658 0.342\n## 2 II 942728 273966 1216694 0.775 0.225\n## 3 III 303980 127087 431067 0.705 0.295\n## 4 IV 1858062 418218 2276280 0.816 0.184\n## 5 V 607090 220873 827963 0.733 0.267\n## 6 VI 280282 127771 408053 0.687 0.313\n## # ℹ 10 more rows\n\nIt can be plotted using ggplot2-based visualization functions.\n\nggplot(ct, aes(x = chr, y = cis_pct)) + \n geom_col(position = position_stack()) + \n theme_bw() + \n guides(x=guide_axis(angle = 90)) + \n scale_y_continuous(labels = scales::percent) + \n labs(x = 'Chromosomes', y = '% of cis contacts')\n\n\n\n\n\n\n\nCis/trans contact ratios will greatly vary depending on the cell cycle phase the sample is in! For instance, chromosomes during the mitosis phase of the cell cycle have very little trans contacts, due to their structural organization and individualization." }, { "objectID": "interactions-centric.html#virtual-4c-profiles", "href": "interactions-centric.html#virtual-4c-profiles", "title": "\n6  Interactions-centric analysis\n", "section": "\n6.3 Virtual 4C profiles", - "text": "6.3 Virtual 4C profiles\nInteraction profile of a genomic locus of interest with its surrounding environment or the rest of the genome is frequently generated. In some cases, this can help in identifying and/or comparing regulatory or structural interactions.\nFor instance, we can compute the genome-wide virtual 4C profile of interactions anchored at the centromere in chromosome II (located at ~ 238kb).\n\nlibrary(GenomicRanges)\nv4C <- virtual4C(full_hic, viewpoint = GRanges(\"II:230001-240000\"))\nv4C\n## GRanges object with 6045 ranges and 4 metadata columns:\n## seqnames ranges strand | score viewpoint\n## <Rle> <IRanges> <Rle> | <numeric> <character>\n## [1] I 1-2000 * | 0.00000000 II:230001-240000\n## [2] I 2001-4000 * | 0.00000000 II:230001-240000\n## [3] I 4001-6000 * | 0.00129049 II:230001-240000\n## [4] I 6001-8000 * | 0.00000000 II:230001-240000\n## [5] I 8001-10000 * | 0.00000000 II:230001-240000\n## ... ... ... ... . ... ...\n## [6041] XVI 940001-942000 * | 0.000775721 II:230001-240000\n## [6042] XVI 942001-944000 * | 0.000000000 II:230001-240000\n## [6043] XVI 944001-946000 * | 0.000000000 II:230001-240000\n## [6044] XVI 946001-948000 * | 0.000000000 II:230001-240000\n## [6045] XVI 948001-948066 * | 0.000000000 II:230001-240000\n## center in_viewpoint\n## <numeric> <logical>\n## [1] 1000.5 FALSE\n## [2] 3000.5 FALSE\n## [3] 5000.5 FALSE\n## [4] 7000.5 FALSE\n## [5] 9000.5 FALSE\n## ... ... ...\n## [6041] 941000 FALSE\n## [6042] 943000 FALSE\n## [6043] 945000 FALSE\n## [6044] 947000 FALSE\n## [6045] 948034 FALSE\n## -------\n## seqinfo: 16 sequences from an unspecified genome; no seqlengths\n\nggplot2 can be used to visualize the 4C-like profile over multiple chromosomes.\n\n\ndf <- as_tibble(v4C)\nggplot(df, aes(x = center, y = score)) + \n geom_area(position = \"identity\", alpha = 0.5) + \n theme_bw() + \n labs(x = \"Position\", y = \"Contacts with viewpoint\") +\n scale_x_continuous(labels = scales::unit_format(unit = \"M\", scale = 1e-06)) + \n facet_wrap(~seqnames, scales = 'free_y')\n\n\n\n\n\n\n\n\nThis clearly highlights trans interactions of the chromosome II centromere with the centromeres from other chromosomes." + "text": "6.3 Virtual 4C profiles\nInteraction profile of a genomic locus of interest with its surrounding environment or the rest of the genome is frequently generated. In some cases, this can help in identifying and/or comparing regulatory or structural interactions.\nFor instance, we can compute the genome-wide virtual 4C profile of interactions anchored at the centromere in chromosome II (located at ~ 238kb).\n\nlibrary(GenomicRanges)\nv4C <- virtual4C(full_hic, viewpoint = GRanges(\"II:230001-240000\"))\nv4C\n## GRanges object with 6045 ranges and 4 metadata columns:\n## seqnames ranges strand | score viewpoint center in_viewpoint\n## <Rle> <IRanges> <Rle> | <numeric> <character> <numeric> <logical>\n## [1] I 1-2000 * | 0.00000000 II:230001-240000 1000.5 FALSE\n## [2] I 2001-4000 * | 0.00000000 II:230001-240000 3000.5 FALSE\n## [3] I 4001-6000 * | 0.00129049 II:230001-240000 5000.5 FALSE\n## [4] I 6001-8000 * | 0.00000000 II:230001-240000 7000.5 FALSE\n## [5] I 8001-10000 * | 0.00000000 II:230001-240000 9000.5 FALSE\n## ... ... ... ... . ... ... ... ...\n## [6041] XVI 940001-942000 * | 0.000775721 II:230001-240000 941000 FALSE\n## [6042] XVI 942001-944000 * | 0.000000000 II:230001-240000 943000 FALSE\n## [6043] XVI 944001-946000 * | 0.000000000 II:230001-240000 945000 FALSE\n## [6044] XVI 946001-948000 * | 0.000000000 II:230001-240000 947000 FALSE\n## [6045] XVI 948001-948066 * | 0.000000000 II:230001-240000 948034 FALSE\n## -------\n## seqinfo: 16 sequences from an unspecified genome; no seqlengths\n\nggplot2 can be used to visualize the 4C-like profile over multiple chromosomes.\n\n\ndf <- as_tibble(v4C)\nggplot(df, aes(x = center, y = score)) + \n geom_area(position = \"identity\", alpha = 0.5) + \n theme_bw() + \n labs(x = \"Position\", y = \"Contacts with viewpoint\") +\n scale_x_continuous(labels = scales::unit_format(unit = \"M\", scale = 1e-06)) + \n facet_wrap(~seqnames, scales = 'free_y')\n\n\n\n\n\n\n\n\nThis clearly highlights trans interactions of the chromosome II centromere with the centromeres from other chromosomes." }, { "objectID": "interactions-centric.html#scalograms", "href": "interactions-centric.html#scalograms", "title": "\n6  Interactions-centric analysis\n", "section": "\n6.4 Scalograms", - "text": "6.4 Scalograms\nScalograms were introduced in Lioy et al. (2018) to investigate distance-dependent contact frequencies for individual genomic bins along chromosomes.\nTo generate a scalogram, one needs to provide a HiCExperiment object with a valid associated pairsFile.\n\npairsFile(hic) <- pairsf\nscalo <- scalogram(hic) \n## Importing pairs file /github/home/.cache/R/ExperimentHub/1a9a1c034d7_7753 in memory. This may take a while...\nplotScalogram(scalo |> filter(chr == 'II'), ylim = c(1e3, 1e5))\n\n\n\n\n\n\n\nSeveral scalograms can be plotted together to compare distance-dependent contact frequencies along a given chromosome in different samples.\n\n\neco1_hic <- import(\n CoolFile(HiContactsData('yeast_eco1', 'mcool')), \n focus = 'II', \n resolution = 2000\n)\n## see ?HiContactsData and browseVignettes('HiContactsData') for documentation\n## loading from cache\neco1_pairsf <- HiContactsData('yeast_eco1', 'pairs.gz')\n## see ?HiContactsData and browseVignettes('HiContactsData') for documentation\n## loading from cache\npairsFile(eco1_hic) <- eco1_pairsf\neco1_scalo <- scalogram(eco1_hic) \n## Importing pairs file /github/home/.cache/R/ExperimentHub/21fb251da216_7755 in memory. This may take a while...\nmerged_scalo <- rbind(\n scalo |> mutate(sample = 'WT'), \n eco1_scalo |> mutate(sample = 'eco1')\n)\nplotScalogram(merged_scalo |> filter(chr == 'II'), ylim = c(1e3, 1e5)) + \n facet_grid(~sample)\n\n\n\n\n\n\n\n\nThis example points out the overall longer interactions within the long arm of the chromosome II in an eco1 mutant." + "text": "6.4 Scalograms\nScalograms were introduced in Lioy et al. (2018) to investigate distance-dependent contact frequencies for individual genomic bins along chromosomes.\nTo generate a scalogram, one needs to provide a HiCExperiment object with a valid associated pairsFile.\n\npairsFile(hic) <- pairsf\nscalo <- scalogram(hic) \n## Importing pairs file /github/home/.cache/R/ExperimentHub/1a92835ced9_7753 in memory. This may take a while...\nplotScalogram(scalo |> filter(chr == 'II'), ylim = c(1e3, 1e5))\n\n\n\n\n\n\n\nSeveral scalograms can be plotted together to compare distance-dependent contact frequencies along a given chromosome in different samples.\n\n\neco1_hic <- import(\n CoolFile(HiContactsData('yeast_eco1', 'mcool')), \n focus = 'II', \n resolution = 2000\n)\n## see ?HiContactsData and browseVignettes('HiContactsData') for documentation\n## loading from cache\neco1_pairsf <- HiContactsData('yeast_eco1', 'pairs.gz')\n## see ?HiContactsData and browseVignettes('HiContactsData') for documentation\n## loading from cache\npairsFile(eco1_hic) <- eco1_pairsf\neco1_scalo <- scalogram(eco1_hic) \n## Importing pairs file /github/home/.cache/R/ExperimentHub/21f275852cbd_7755 in memory. This may take a while...\nmerged_scalo <- rbind(\n scalo |> mutate(sample = 'WT'), \n eco1_scalo |> mutate(sample = 'eco1')\n)\nplotScalogram(merged_scalo |> filter(chr == 'II'), ylim = c(1e3, 1e5)) + \n facet_grid(~sample)\n\n\n\n\n\n\n\n\nThis example points out the overall longer interactions within the long arm of the chromosome II in an eco1 mutant." }, { "objectID": "topological-features.html", @@ -242,21 +242,21 @@ "href": "topological-features.html#chromosome-compartments", "title": "\n7  Finding topological features in Hi-C\n", "section": "\n7.1 Chromosome compartments", - "text": "7.1 Chromosome compartments\nChromosome compartments refer to the segregation of the chromatin into active euchromatin (A compartments) and regulated heterochromatin (B compartment).\n\n7.1.1 Importing Hi-C data\nTo investigate chromosome compartments, we will fetch a contact matrix generated from a micro-C experiment (from Krietenstein et al. (2020)). A subset of the genome-wide dataset is provided in the OHCA package. It contains intra-chromosomal interactions within chr17, binned at 5000, 100000 and 250000 bp.\n\nlibrary(HiCExperiment)\nlibrary(OHCA)\ncf <- fs::path_package('OHCA', 'extdata', 'chr17.mcool')\nmicroC <- import(cf, resolution = 250000)\nmicroC\n## `HiCExperiment` object with 10,086,710 contacts over 334 regions \n## -------\n## fileName: \"/usr/local/lib/R/site-library/OHCA/extdata/chr17.mcool\" \n## focus: \"whole genome\" \n## resolutions(3): 5000 100000 250000\n## active resolution: 250000 \n## interactions: 52755 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\nseqinfo(microC)\n## Seqinfo object with 1 sequence from an unspecified genome:\n## seqnames seqlengths isCircular genome\n## chr17 83257441 NA <NA>\n\n\n7.1.2 Annotating A/B compartments\nThe consensus approach to annotate A/B compartments is to compute the eigenvectors of a Hi-C contact matrix and identify the eigenvector representing the chromosome-wide bi-partite segmentation of the genome.\nThe getCompartments() function performs several internal operations to achieve this:\n\nObtains cis interactions per chromosome\nComputes O/E contact matrix scores\nComputes 3 first eigenvectors of this Hi-C contact matrix\nNormalizes eigenvectors\nPicks the eigenvector that has the greatest absolute correlation with a phasing track (e.g. a GC% track automatically computed from a genome reference sequence, or a gene density track)\nSigns this eigenvector so that positive values represent the A compartment\n\n\nphasing_track <- BSgenome.Hsapiens.UCSC.hg38::BSgenome.Hsapiens.UCSC.hg38\nmicroC_compts <- getCompartments(microC, genome = phasing_track)\n## Going through preflight checklist...\n## Parsing intra-chromosomal contacts for each chromosome...\n## Computing eigenvectors for each chromosome...\n\nmicroC_compts\n## `HiCExperiment` object with 10,086,710 contacts over 334 regions \n## -------\n## fileName: \"/usr/local/lib/R/site-library/OHCA/extdata/chr17.mcool\" \n## focus: \"whole genome\" \n## resolutions(3): 5000 100000 250000\n## active resolution: 250000 \n## interactions: 52755 \n## scores(2): count balanced \n## topologicalFeatures: compartments(41) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(1): eigens\n\n\n\n\n\n\n\nNote\n\n\n\ngetCompartments() is an endomorphism: it returns the original object, enriched with two new pieces of information:\n\nA compartments topologicalFeatures:\n\n\ntopologicalFeatures(microC_compts, \"compartments\")\n## GRanges object with 41 ranges and 1 metadata column:\n## seqnames ranges strand | compartment\n## <Rle> <IRanges> <Rle> | <character>\n## [1] chr17 250001-3000000 * | A\n## [2] chr17 3000001-3500000 * | B\n## [3] chr17 3500001-5500000 * | A\n## [4] chr17 5500001-6500000 * | B\n## [5] chr17 6500001-8500000 * | A\n## ... ... ... ... . ...\n## [37] chr17 72750001-73250000 * | A\n## [38] chr17 73250001-74750000 * | B\n## [39] chr17 74750001-79250000 * | A\n## [40] chr17 79250001-79750000 * | B\n## [41] chr17 79750001-83250000 * | A\n## -------\n## seqinfo: 1 sequence from an unspecified genome\n\n\nThe calculated eigenvectors stored in metadata:\n\n\nmetadata(microC_compts)$eigens\n## GRanges object with 334 ranges and 9 metadata columns:\n## seqnames ranges strand |\n## <Rle> <IRanges> <Rle> |\n## chr17.chr17_1_250000 chr17 1-250000 * |\n## chr17.chr17_250001_500000 chr17 250001-500000 * |\n## chr17.chr17_500001_750000 chr17 500001-750000 * |\n## chr17.chr17_750001_1000000 chr17 750001-1000000 * |\n## chr17.chr17_1000001_1250000 chr17 1000001-1250000 * |\n## ... ... ... ... .\n## chr17.chr17_82250001_82500000 chr17 82250001-82500000 * |\n## chr17.chr17_82500001_82750000 chr17 82500001-82750000 * |\n## chr17.chr17_82750001_83000000 chr17 82750001-83000000 * |\n## chr17.chr17_83000001_83250000 chr17 83000001-83250000 * |\n## chr17.chr17_83250001_83257441 chr17 83250001-83257441 * |\n## bin_id weight chr center\n## <numeric> <numeric> <Rle> <integer>\n## chr17.chr17_1_250000 0 NaN chr17 125000\n## chr17.chr17_250001_500000 1 0.00626903 chr17 375000\n## chr17.chr17_500001_750000 2 0.00567190 chr17 625000\n## chr17.chr17_750001_1000000 3 0.00528588 chr17 875000\n## chr17.chr17_1000001_1250000 4 0.00464628 chr17 1125000\n## ... ... ... ... ...\n## chr17.chr17_82250001_82500000 329 0.00463044 chr17 82375000\n## chr17.chr17_82500001_82750000 330 0.00486910 chr17 82625000\n## chr17.chr17_82750001_83000000 331 0.00561269 chr17 82875000\n## chr17.chr17_83000001_83250000 332 0.00546433 chr17 83125000\n## chr17.chr17_83250001_83257441 333 NaN chr17 83253721\n## E1 E2 E3 phasing\n## <numeric> <numeric> <numeric> <numeric>\n## chr17.chr17_1_250000 0.000000 0.000000 0.000000 0.383084\n## chr17.chr17_250001_500000 0.450991 0.653287 0.615300 0.433972\n## chr17.chr17_500001_750000 0.716784 0.707461 0.845033 0.465556\n## chr17.chr17_750001_1000000 0.904423 0.414952 0.864288 0.503592\n## chr17.chr17_1000001_1250000 0.913023 0.266287 0.759016 0.547712\n## ... ... ... ... ...\n## chr17.chr17_82250001_82500000 1.147060 0.239112 1.133498 0.550872\n## chr17.chr17_82500001_82750000 1.106937 0.419647 1.169464 0.513212\n## chr17.chr17_82750001_83000000 0.818990 0.591955 0.850340 0.522432\n## chr17.chr17_83000001_83250000 0.874038 0.503175 0.847926 0.528448\n## chr17.chr17_83250001_83257441 0.000000 0.000000 0.000000 0.000000\n## eigen\n## <numeric>\n## chr17.chr17_1_250000 0.000000\n## chr17.chr17_250001_500000 0.450991\n## chr17.chr17_500001_750000 0.716784\n## chr17.chr17_750001_1000000 0.904423\n## chr17.chr17_1000001_1250000 0.913023\n## ... ...\n## chr17.chr17_82250001_82500000 1.147060\n## chr17.chr17_82500001_82750000 1.106937\n## chr17.chr17_82750001_83000000 0.818990\n## chr17.chr17_83000001_83250000 0.874038\n## chr17.chr17_83250001_83257441 0.000000\n## -------\n## seqinfo: 1 sequence from an unspecified genome\n\n\n\n\n7.1.3 Exporting compartment tracks\nTo save the eigenvector (as a bigwig file) and the compartments(as a gff file), the export function can be used:\n\nlibrary(GenomicRanges)\nlibrary(rtracklayer)\ncoverage(metadata(microC_compts)$eigens, weight = 'eigen') |> export('microC_eigen.bw')\ntopologicalFeatures(microC_compts, \"compartments\") |> export('microC_compartments.gff3')\n\n\n7.1.4 Visualizing compartment tracks\nCompartment tracks should be visualized in a dedicated genome browser, with the phasing track loaded as well, to ensure they are phased accordingly.\nThat being said, it is possible to visualize a genome track in R besides the matching Hi-C contact matrix.\n\nlibrary(ggplot2)\nlibrary(patchwork)\nmicroC <- autocorrelate(microC)\n## \np1 <- plotMatrix(microC, use.scores = 'autocorrelated', scale = 'linear', limits = c(-1, 1), caption = FALSE)\neigen <- coverage(metadata(microC_compts)$eigens, weight = 'eigen')[[1]]\neigen_df <- tibble(pos = cumsum(runLength(eigen)), eigen = runValue(eigen))\np2 <- ggplot(eigen_df, aes(x = pos, y = eigen)) + \n geom_area() + \n theme_void() + \n coord_cartesian(expand = FALSE) + \n labs(x = \"Genomic position\", y = \"Eigenvector value\")\nwrap_plots(p1, p2, ncol = 1, heights = c(10, 1))\n\n\n\n\n\n\n\nHere, we clearly note the concordance between the Hi-C correlation matrix, highlighting correlated interactions between pairs of genomic segments, and the eigenvector representing chromosome segmentation into 2 compartments: A (for positive values) and B (for negative values).\n\n7.1.5 Saddle plots\nSaddle plots are typically used to measure the observed vs. expected interaction scores within or between genomic loci belonging to A and B compartments.\nNon-overlapping genomic windows are grouped in nbins quantiles (typically between 10 and 50 quantiles) according to their A/B compartment eigenvector value, from lowest eigenvector values (i.e. strongest B compartments) to highest eigenvector values (i.e. strongest A compartments). The average observed vs. expected interaction scores are then computed for pairwise eigenvector quantiles and plotted in a 2D heatmap.\n\nlibrary(BiocParallel)\nplotSaddle(microC_compts, nbins = 25, BPPARAM = SerialParam(progressbar = FALSE))\n\n\n\n\n\n\n\nHere, the top-left small corner represents average O/E scores between strong B compartments and the bottom-right larger corner represents average O/E scores between strong A compartments.\n\n\n\n\n\n\nNote\n\n\n\nOnly chr17 interactions are contained in this dataset, explaining the grainy aspect of the saddle plot." + "text": "7.1 Chromosome compartments\nChromosome compartments refer to the segregation of the chromatin into active euchromatin (A compartments) and regulated heterochromatin (B compartment).\n\n7.1.1 Importing Hi-C data\nTo investigate chromosome compartments, we will fetch a contact matrix generated from a micro-C experiment (from Krietenstein et al. (2020)). A subset of the genome-wide dataset is provided in the OHCA package. It contains intra-chromosomal interactions within chr17, binned at 5000, 100000 and 250000 bp.\n\nlibrary(HiCExperiment)\nlibrary(OHCA)\ncf <- fs::path_package('OHCA', 'extdata', 'chr17.mcool')\nmicroC <- import(cf, resolution = 250000)\nmicroC\n## `HiCExperiment` object with 10,086,710 contacts over 334 regions \n## -------\n## fileName: \"/usr/local/lib/R/site-library/OHCA/extdata/chr17.mcool\" \n## focus: \"whole genome\" \n## resolutions(3): 5000 100000 250000\n## active resolution: 250000 \n## interactions: 52755 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\nseqinfo(microC)\n## Seqinfo object with 1 sequence from an unspecified genome:\n## seqnames seqlengths isCircular genome\n## chr17 83257441 NA <NA>\n\n\n7.1.2 Annotating A/B compartments\nThe consensus approach to annotate A/B compartments is to compute the eigenvectors of a Hi-C contact matrix and identify the eigenvector representing the chromosome-wide bi-partite segmentation of the genome.\nThe getCompartments() function performs several internal operations to achieve this:\n\nObtains cis interactions per chromosome\nComputes O/E contact matrix scores\nComputes 3 first eigenvectors of this Hi-C contact matrix\nNormalizes eigenvectors\nPicks the eigenvector that has the greatest absolute correlation with a phasing track (e.g. a GC% track automatically computed from a genome reference sequence, or a gene density track)\nSigns this eigenvector so that positive values represent the A compartment\n\n\nphasing_track <- BSgenome.Hsapiens.UCSC.hg38::BSgenome.Hsapiens.UCSC.hg38\nmicroC_compts <- getCompartments(microC, genome = phasing_track)\n## Going through preflight checklist...\n## Parsing intra-chromosomal contacts for each chromosome...\n## Computing eigenvectors for each chromosome...\n\nmicroC_compts\n## `HiCExperiment` object with 10,086,710 contacts over 334 regions \n## -------\n## fileName: \"/usr/local/lib/R/site-library/OHCA/extdata/chr17.mcool\" \n## focus: \"whole genome\" \n## resolutions(3): 5000 100000 250000\n## active resolution: 250000 \n## interactions: 52755 \n## scores(2): count balanced \n## topologicalFeatures: compartments(41) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(1): eigens\n\ngetCompartments() is an endomorphism: it returns the original object, enriched with two new pieces of information:\n\nA compartments topologicalFeatures:\n\n\ntopologicalFeatures(microC_compts, \"compartments\")\n## GRanges object with 41 ranges and 1 metadata column:\n## seqnames ranges strand | compartment\n## <Rle> <IRanges> <Rle> | <character>\n## [1] chr17 250001-3000000 * | A\n## [2] chr17 3000001-3500000 * | B\n## [3] chr17 3500001-5500000 * | A\n## [4] chr17 5500001-6500000 * | B\n## [5] chr17 6500001-8500000 * | A\n## ... ... ... ... . ...\n## [37] chr17 72750001-73250000 * | A\n## [38] chr17 73250001-74750000 * | B\n## [39] chr17 74750001-79250000 * | A\n## [40] chr17 79250001-79750000 * | B\n## [41] chr17 79750001-83250000 * | A\n## -------\n## seqinfo: 1 sequence from an unspecified genome\n\n\nThe calculated eigenvectors stored in metadata:\n\n\nmetadata(microC_compts)$eigens\n## GRanges object with 334 ranges and 9 metadata columns:\n## seqnames ranges strand | bin_id weight chr center E1 E2 E3 phasing eigen\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer> <numeric> <numeric> <numeric> <numeric> <numeric>\n## chr17.chr17_1_250000 chr17 1-250000 * | 0 NaN chr17 125000 0.000000 0.000000 0.000000 0.383084 0.000000\n## chr17.chr17_250001_500000 chr17 250001-500000 * | 1 0.00626903 chr17 375000 0.450991 0.653287 0.615300 0.433972 0.450991\n## chr17.chr17_500001_750000 chr17 500001-750000 * | 2 0.00567190 chr17 625000 0.716784 0.707461 0.845033 0.465556 0.716784\n## chr17.chr17_750001_1000000 chr17 750001-1000000 * | 3 0.00528588 chr17 875000 0.904423 0.414952 0.864288 0.503592 0.904423\n## chr17.chr17_1000001_1250000 chr17 1000001-1250000 * | 4 0.00464628 chr17 1125000 0.913023 0.266287 0.759016 0.547712 0.913023\n## ... ... ... ... . ... ... ... ... ... ... ... ... ...\n## chr17.chr17_82250001_82500000 chr17 82250001-82500000 * | 329 0.00463044 chr17 82375000 1.147060 0.239112 1.133498 0.550872 1.147060\n## chr17.chr17_82500001_82750000 chr17 82500001-82750000 * | 330 0.00486910 chr17 82625000 1.106937 0.419647 1.169464 0.513212 1.106937\n## chr17.chr17_82750001_83000000 chr17 82750001-83000000 * | 331 0.00561269 chr17 82875000 0.818990 0.591955 0.850340 0.522432 0.818990\n## chr17.chr17_83000001_83250000 chr17 83000001-83250000 * | 332 0.00546433 chr17 83125000 0.874038 0.503175 0.847926 0.528448 0.874038\n## chr17.chr17_83250001_83257441 chr17 83250001-83257441 * | 333 NaN chr17 83253721 0.000000 0.000000 0.000000 0.000000 0.000000\n## -------\n## seqinfo: 1 sequence from an unspecified genome\n\n\n7.1.3 Exporting compartment tracks\nTo save the eigenvector (as a bigwig file) and the compartments(as a gff file), the export function can be used:\n\nlibrary(GenomicRanges)\nlibrary(rtracklayer)\ncoverage(metadata(microC_compts)$eigens, weight = 'eigen') |> export('microC_eigen.bw')\ntopologicalFeatures(microC_compts, \"compartments\") |> export('microC_compartments.gff3')\n\n\n7.1.4 Visualizing compartment tracks\nCompartment tracks should be visualized in a dedicated genome browser, with the phasing track loaded as well, to ensure they are phased accordingly.\nThat being said, it is possible to visualize a genome track in R besides the matching Hi-C contact matrix.\n\nlibrary(ggplot2)\nlibrary(patchwork)\nmicroC <- autocorrelate(microC)\n## \np1 <- plotMatrix(microC, use.scores = 'autocorrelated', scale = 'linear', limits = c(-1, 1), caption = FALSE)\neigen <- coverage(metadata(microC_compts)$eigens, weight = 'eigen')[[1]]\neigen_df <- tibble(pos = cumsum(runLength(eigen)), eigen = runValue(eigen))\np2 <- ggplot(eigen_df, aes(x = pos, y = eigen)) + \n geom_area() + \n theme_void() + \n coord_cartesian(expand = FALSE) + \n labs(x = \"Genomic position\", y = \"Eigenvector value\")\nwrap_plots(p1, p2, ncol = 1, heights = c(10, 1))\n\n\n\n\n\n\n\nHere, we clearly note the concordance between the Hi-C correlation matrix, highlighting correlated interactions between pairs of genomic segments, and the eigenvector representing chromosome segmentation into 2 compartments: A (for positive values) and B (for negative values).\n\n7.1.5 Saddle plots\nSaddle plots are typically used to measure the observed vs. expected interaction scores within or between genomic loci belonging to A and B compartments.\nNon-overlapping genomic windows are grouped in nbins quantiles (typically between 10 and 50 quantiles) according to their A/B compartment eigenvector value, from lowest eigenvector values (i.e. strongest B compartments) to highest eigenvector values (i.e. strongest A compartments). The average observed vs. expected interaction scores are then computed for pairwise eigenvector quantiles and plotted in a 2D heatmap.\n\nlibrary(BiocParallel)\nplotSaddle(microC_compts, nbins = 25, BPPARAM = SerialParam(progressbar = FALSE))\n\n\n\n\n\n\n\nHere, the top-left small corner represents average O/E scores between strong B compartments and the bottom-right larger corner represents average O/E scores between strong A compartments. Note that only chr17 interactions are contained in this dataset, explaining the grainy aspect of the saddle plot." }, { "objectID": "topological-features.html#topological-domains", "href": "topological-features.html#topological-domains", "title": "\n7  Finding topological features in Hi-C\n", "section": "\n7.2 Topological domains", - "text": "7.2 Topological domains\nTopological domains (a.k.a. Topologically Associating Domains, TADs, isolated neighborhoods, contact domains, …) refer to local chromosomal segments (e.b. roughly ≤ 1Mb in mammal genomes) which preferentially self-interact, in a constrained manner. They are demarcated by domain boundaries.\n\n\n\n\nThey are generally conserved across cell types and species (Schmitt et al. (2016)), typically correlate with units of DNA replication (Pope et al. (2014)), and could play a role during development (Stadhouders et al. (2019)).\n\n7.2.1 Computing diamond insulation score\nSeveral approaches exist to annotate topological domains (Sefer (2022)). Several packages in R implement some of these functionalities, e.g. spectralTAD or TADcompare.\nHiContacts offers a simple getDiamondInsulation function which computes the diamond insulation score (Crane et al. (2015)). This score quantifies average interaction frequency in an insulation window (of a certain window_size) sliding along contact matrices at a chosen resolution.\n\n# - Compute insulation score\nbpparam <- SerialParam(progressbar = FALSE)\nhic <- zoom(microC, 5000) |> \n refocus('chr17:60000001-83257441') |>\n getDiamondInsulation(window_size = 100000, BPPARAM = bpparam) |> \n getBorders()\n## Going through preflight checklist...\n## Scan each window and compute diamond insulation score...\n## Annotating diamond score prominence for each window...\n\nhic\n## `HiCExperiment` object with 2,156,222 contacts over 4,652 regions \n## -------\n## fileName: \"/usr/local/lib/R/site-library/OHCA/extdata/chr17.mcool\" \n## focus: \"chr17:60,000,001-83,257,441\" \n## resolutions(3): 5000 100000 250000\n## active resolution: 5000 \n## interactions: 2156044 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(21) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(1): insulation\n\n\n\n\n\n\n\nNote\n\n\n\nThe getDiamondInsulation function can be parallelized over multiple threads by specifying the Bioconductor generic BPPARAM argument.\n\n\n\n\n\n\n\n\nNote\n\n\n\ngetDiamondInsulation() is an endomorphism: it returns the original object, enriched with two new pieces of information:\n\nA borders topologicalFeatures:\n\n\ntopologicalFeatures(hic, \"borders\")\n## GRanges object with 21 ranges and 1 metadata column:\n## seqnames ranges strand | score\n## <Rle> <IRanges> <Rle> | <numeric>\n## strong chr17 60105001-60110000 * | 0.574760\n## weak chr17 60210001-60215000 * | 0.414425\n## weak chr17 61415001-61420000 * | 0.346668\n## strong chr17 61500001-61505000 * | 0.544336\n## weak chr17 62930001-62935000 * | 0.399794\n## ... ... ... ... . ...\n## weak chr17 78395001-78400000 * | 0.235613\n## weak chr17 79065001-79070000 * | 0.236535\n## weak chr17 80155001-80160000 * | 0.284855\n## weak chr17 81735001-81740000 * | 0.497478\n## strong chr17 81840001-81845000 * | 1.395949\n## -------\n## seqinfo: 1 sequence from an unspecified genome\n\n\nThe calculated insulation scores stored in metadata:\n\n\nmetadata(hic)$insulation\n## GRanges object with 4611 ranges and 8 metadata columns:\n## seqnames ranges strand | bin_id\n## <Rle> <IRanges> <Rle> | <numeric>\n## chr17_60100001_60105000 chr17 60100001-60105000 * | 12020\n## chr17_60105001_60110000 chr17 60105001-60110000 * | 12021\n## chr17_60110001_60115000 chr17 60110001-60115000 * | 12022\n## chr17_60115001_60120000 chr17 60115001-60120000 * | 12023\n## chr17_60120001_60125000 chr17 60120001-60125000 * | 12024\n## ... ... ... ... . ...\n## chr17_83130001_83135000 chr17 83130001-83135000 * | 16626\n## chr17_83135001_83140000 chr17 83135001-83140000 * | 16627\n## chr17_83140001_83145000 chr17 83140001-83145000 * | 16628\n## chr17_83145001_83150000 chr17 83145001-83150000 * | 16629\n## chr17_83150001_83155000 chr17 83150001-83155000 * | 16630\n## weight chr center score insulation\n## <numeric> <Rle> <integer> <numeric> <numeric>\n## chr17_60100001_60105000 0.0406489 chr17 60102500 0.188061 -0.750142\n## chr17_60105001_60110000 0.0255539 chr17 60107500 0.180860 -0.806466\n## chr17_60110001_60115000 NaN chr17 60112500 0.196579 -0.686232\n## chr17_60115001_60120000 NaN chr17 60117500 0.216039 -0.550046\n## chr17_60120001_60125000 NaN chr17 60122500 0.230035 -0.459489\n## ... ... ... ... ... ...\n## chr17_83130001_83135000 0.0314684 chr17 83132500 0.262191 -0.270723\n## chr17_83135001_83140000 0.0307197 chr17 83137500 0.240779 -0.393632\n## chr17_83140001_83145000 0.0322810 chr17 83142500 0.219113 -0.529664\n## chr17_83145001_83150000 0.0280840 chr17 83147500 0.199645 -0.663900\n## chr17_83150001_83155000 0.0272775 chr17 83152500 0.180434 -0.809873\n## min prominence\n## <logical> <numeric>\n## chr17_60100001_60105000 FALSE NA\n## chr17_60105001_60110000 TRUE 0.57476\n## chr17_60110001_60115000 FALSE NA\n## chr17_60115001_60120000 FALSE NA\n## chr17_60120001_60125000 FALSE NA\n## ... ... ...\n## chr17_83130001_83135000 FALSE NA\n## chr17_83135001_83140000 FALSE NA\n## chr17_83140001_83145000 FALSE NA\n## chr17_83145001_83150000 FALSE NA\n## chr17_83150001_83155000 FALSE NA\n## -------\n## seqinfo: 1 sequence from an unspecified genome\n\n\n\n\n7.2.2 Exporting insulation scores tracks\nTo save the diamond insulation scores (as a bigwig file) and the borders (as a bed file), the export function can be used:\n\ncoverage(metadata(hic)$insulation, weight = 'insulation') |> export('microC_insulation.bw')\ntopologicalFeatures(hic, \"borders\") |> export('microC_borders.bed')\n\n\n7.2.3 Visualizing chromatin domains\nInsulation tracks should be visualized in a dedicated genome browser.\nThat being said, it is possible to visualize a genome track in R besides the matching Hi-C contact matrix.\n\nhic <- zoom(hic, 100000)\np1 <- plotMatrix(\n hic, \n use.scores = 'balanced', \n limits = c(-3.5, -1),\n borders = topologicalFeatures(hic, \"borders\"),\n caption = FALSE\n)\ninsulation <- coverage(metadata(hic)$insulation, weight = 'insulation')[[1]]\ninsulation_df <- tibble(pos = cumsum(runLength(insulation)), insulation = runValue(insulation))\np2 <- ggplot(insulation_df, aes(x = pos, y = insulation)) + \n geom_area() + \n theme_void() + \n coord_cartesian(expand = FALSE) + \n labs(x = \"Genomic position\", y = \"Diamond insulation score\")\nwrap_plots(p1, p2, ncol = 1, heights = c(10, 1))\n\n\n\n\n\n\n\nLocal minima in the diamond insulation score displayed below the Hi-C contact matrix are identified using the getBorders() function, which automatically estimates a minimum threshold. These local minima correspond to borders and are visually depicted on the Hi-C map by blue diamonds." + "text": "7.2 Topological domains\nTopological domains (a.k.a. Topologically Associating Domains, TADs, isolated neighborhoods, contact domains, …) refer to local chromosomal segments (e.b. roughly ≤ 1Mb in mammal genomes) which preferentially self-interact, in a constrained manner. They are demarcated by domain boundaries.\n\n\n\n\nThey are generally conserved across cell types and species (Schmitt et al. (2016)), typically correlate with units of DNA replication (Pope et al. (2014)), and could play a role during development (Stadhouders et al. (2019)).\n\n7.2.1 Computing diamond insulation score\nSeveral approaches exist to annotate topological domains (Sefer (2022)). Several packages in R implement some of these functionalities, e.g. spectralTAD or TADcompare.\nHiContacts offers a simple getDiamondInsulation function which computes the diamond insulation score (Crane et al. (2015)). This score quantifies average interaction frequency in an insulation window (of a certain window_size) sliding along contact matrices at a chosen resolution.\n\n# - Compute insulation score\nbpparam <- SerialParam(progressbar = FALSE)\nhic <- zoom(microC, 5000) |> \n refocus('chr17:60000001-83257441') |>\n getDiamondInsulation(window_size = 100000, BPPARAM = bpparam) |> \n getBorders()\n## Going through preflight checklist...\n## Scan each window and compute diamond insulation score...\n## Annotating diamond score prominence for each window...\n\nhic\n## `HiCExperiment` object with 2,156,222 contacts over 4,652 regions \n## -------\n## fileName: \"/usr/local/lib/R/site-library/OHCA/extdata/chr17.mcool\" \n## focus: \"chr17:60,000,001-83,257,441\" \n## resolutions(3): 5000 100000 250000\n## active resolution: 5000 \n## interactions: 2156044 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(21) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(1): insulation\n\ngetDiamondInsulation() is an endomorphism: it returns the original object, enriched with two new pieces of information:\n\nA borders topologicalFeatures:\n\n\ntopologicalFeatures(hic, \"borders\")\n## GRanges object with 21 ranges and 1 metadata column:\n## seqnames ranges strand | score\n## <Rle> <IRanges> <Rle> | <numeric>\n## strong chr17 60105001-60110000 * | 0.574760\n## weak chr17 60210001-60215000 * | 0.414425\n## weak chr17 61415001-61420000 * | 0.346668\n## strong chr17 61500001-61505000 * | 0.544336\n## weak chr17 62930001-62935000 * | 0.399794\n## ... ... ... ... . ...\n## weak chr17 78395001-78400000 * | 0.235613\n## weak chr17 79065001-79070000 * | 0.236535\n## weak chr17 80155001-80160000 * | 0.284855\n## weak chr17 81735001-81740000 * | 0.497478\n## strong chr17 81840001-81845000 * | 1.395949\n## -------\n## seqinfo: 1 sequence from an unspecified genome\n\n\nThe calculated insulation scores stored in metadata:\n\n\nmetadata(hic)$insulation\n## GRanges object with 4611 ranges and 8 metadata columns:\n## seqnames ranges strand | bin_id weight chr center score insulation min prominence\n## <Rle> <IRanges> <Rle> | <numeric> <numeric> <Rle> <integer> <numeric> <numeric> <logical> <numeric>\n## chr17_60100001_60105000 chr17 60100001-60105000 * | 12020 0.0406489 chr17 60102500 0.188061 -0.750142 FALSE NA\n## chr17_60105001_60110000 chr17 60105001-60110000 * | 12021 0.0255539 chr17 60107500 0.180860 -0.806466 TRUE 0.57476\n## chr17_60110001_60115000 chr17 60110001-60115000 * | 12022 NaN chr17 60112500 0.196579 -0.686232 FALSE NA\n## chr17_60115001_60120000 chr17 60115001-60120000 * | 12023 NaN chr17 60117500 0.216039 -0.550046 FALSE NA\n## chr17_60120001_60125000 chr17 60120001-60125000 * | 12024 NaN chr17 60122500 0.230035 -0.459489 FALSE NA\n## ... ... ... ... . ... ... ... ... ... ... ... ...\n## chr17_83130001_83135000 chr17 83130001-83135000 * | 16626 0.0314684 chr17 83132500 0.262191 -0.270723 FALSE NA\n## chr17_83135001_83140000 chr17 83135001-83140000 * | 16627 0.0307197 chr17 83137500 0.240779 -0.393632 FALSE NA\n## chr17_83140001_83145000 chr17 83140001-83145000 * | 16628 0.0322810 chr17 83142500 0.219113 -0.529664 FALSE NA\n## chr17_83145001_83150000 chr17 83145001-83150000 * | 16629 0.0280840 chr17 83147500 0.199645 -0.663900 FALSE NA\n## chr17_83150001_83155000 chr17 83150001-83155000 * | 16630 0.0272775 chr17 83152500 0.180434 -0.809873 FALSE NA\n## -------\n## seqinfo: 1 sequence from an unspecified genome\n\n\n\n\n\n\n\nNote\n\n\n\nThe getDiamondInsulation function can be parallelized over multiple threads by specifying the Bioconductor generic BPPARAM argument.\n\n\n\n7.2.2 Exporting insulation scores tracks\nTo save the diamond insulation scores (as a bigwig file) and the borders (as a bed file), the export function can be used:\n\ncoverage(metadata(hic)$insulation, weight = 'insulation') |> export('microC_insulation.bw')\ntopologicalFeatures(hic, \"borders\") |> export('microC_borders.bed')\n\n\n7.2.3 Visualizing chromatin domains\nInsulation tracks should be visualized in a dedicated genome browser.\nThat being said, it is possible to visualize a genome track in R besides the matching Hi-C contact matrix.\n\nhic <- zoom(hic, 100000)\np1 <- plotMatrix(\n hic, \n use.scores = 'balanced', \n limits = c(-3.5, -1),\n borders = topologicalFeatures(hic, \"borders\"),\n caption = FALSE\n)\ninsulation <- coverage(metadata(hic)$insulation, weight = 'insulation')[[1]]\ninsulation_df <- tibble(pos = cumsum(runLength(insulation)), insulation = runValue(insulation))\np2 <- ggplot(insulation_df, aes(x = pos, y = insulation)) + \n geom_area() + \n theme_void() + \n coord_cartesian(expand = FALSE) + \n labs(x = \"Genomic position\", y = \"Diamond insulation score\")\nwrap_plots(p1, p2, ncol = 1, heights = c(10, 1))\n\n\n\n\n\n\n\nLocal minima in the diamond insulation score displayed below the Hi-C contact matrix are identified using the getBorders() function, which automatically estimates a minimum threshold. These local minima correspond to borders and are visually depicted on the Hi-C map by blue diamonds." }, { "objectID": "topological-features.html#chromatin-loops", "href": "topological-features.html#chromatin-loops", "title": "\n7  Finding topological features in Hi-C\n", "section": "\n7.3 Chromatin loops", - "text": "7.3 Chromatin loops\n\n7.3.1 chromosight\n\nChromatin loops, dots, or contacts, refer to a strong increase of interaction frequency between a pair of two genomic loci. They correspond to focal “dots” on a Hi-C map. Relying on computer vision algorithms, chromosight uses this property to annotate chromatin loops in a Hi-C map (Matthey-Doret et al. (2020)). chromosight is a standalone python package and is made available in R through the HiCool-managed conda environment with the getLoops() function.\n\n7.3.1.1 Identifying loops\n\nhic <- HiCool::getLoops(microC, resolution = 5000)\n\nhic\n## `HiCExperiment` object with 917,156 contacts over 100 regions\n## -------\n## fileName: \"/home/rsg/.cache/R/fourDNData/4d434d8538a0_4DNFI9FVHJZQ.mcool\"\n## focus: \"chr17:63,000,001-63,500,000\"\n## resolutions(13): 1000 2000 ... 5000000 10000000\n## active resolution: 5000\n## interactions: 5047\n## scores(2): count balanced\n## topologicalFeatures: compartments(0) borders(0) loops(66411) viewpoints(0)\n## pairsFile: N/A\n## metadata(1): chromosight_args\n\n\n\n\n\n\n\nNote\n\n\n\ngetLoops() is an endomorphism: it returns the original object, enriched with two new pieces of information:\n\nA loops topologicalFeatures:\n\n\ntopologicalFeatures(hic, \"loops\")\n## GInteractions object with 66411 interactions and 5 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1 bin_id2 score ## pvalue qvalue\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <numeric> ## <numeric> <numeric>\n## [1] chr1 775001-780000 --- chr1 850001-855000 | 155 170 0.334586 2.## 15995e-05 2.162e-05\n## [2] chr1 775001-780000 --- chr1 865001-870000 | 155 173 0.403336 1.## 62900e-07 1.669e-07\n## [3] chr1 865001-870000 --- chr1 890001-895000 | 173 178 0.337344 1.## 91400e-07 1.957e-07\n## [4] chr1 910001-915000 --- chr1 955001-960000 | 182 191 0.639725 0.## 00000e+00 0.000e+00\n## [5] chr1 910001-915000 --- chr1 1055001-1060000 | 182 211 0.521699 0.## 00000e+00 0.000e+00\n## ... ... ... ... ... ... . ... ... ... ## ... ...\n## [66407] chrY 19570001-19575000 --- chrY 19720001-19725000 | 610133 610163 0.315529 3.## 30e-08 3.55e-08\n## [66408] chrY 19705001-19710000 --- chrY 19730001-19735000 | 610160 610165 0.708753 0.## 00e+00 0.00e+00\n## [66409] chrY 19765001-19770000 --- chrY 19800001-19805000 | 610172 610179 0.373635 1.## 10e-09 1.40e-09\n## [66410] chrY 20555001-20560000 --- chrY 20645001-20650000 | 610330 610348 0.603308 0.## 00e+00 0.00e+00\n## [66411] chrY 21015001-21020000 --- chrY 21055001-21060000 | 610422 610430 0.394614 9.## 12e-08 9.45e-08\n## -------\n## regions: 84171 ranges and 0 metadata columns\n## seqinfo: 24 sequences from an unspecified genome; no seqlengths\n\n\nThe arguments used by chromosight, stored in metadata:\n\n\nmetadata(hic)$chromosight_args\n## $`--pattern`\n## [1] \"loops\"\n## \n## $`--dump`\n## [1] \"/data/.cache/R//RtmpSaRwiZ\"\n## \n## $`--inter`\n## [1] FALSE\n## \n## $`--iterations`\n## [1] \"auto\"\n## \n## $`--kernel-config`\n## NULL\n## \n## $`--perc-zero`\n## [1] \"auto\"\n## \n## $`--perc-undetected`\n## [1] \"auto\"\n## \n## $`--tsvd`\n## [1] FALSE\n## \n## $`--win-fmt`\n## [1] \"json\"\n## \n## $`--win-size`\n## [1] \"auto\"\n## \n## $`--no-plotting`\n## [1] TRUE\n## \n## $`--smooth-trend`\n## [1] FALSE\n## \n## $`--norm`\n## [1] \"auto\"\n## \n## $`<contact_map>`\n## [1] \"/home/rsg/.cache/R/fourDNData/4d434d8538a0_4DNFI9FVHJZQ.mcool::/resolutions/5000\"\n## \n## $`--max-dist`\n## [1] \"auto\"\n## \n## $`--min-dist`\n## [1] \"auto\"\n## \n## $`--min-separation`\n## [1] \"auto\"\n## \n## $`--n-mads`\n## [1] 5\n## \n## $`<prefix>`\n## [1] \"chromosight/chromo\"\n## \n## $`--pearson`\n## [1] \"auto\"\n## \n## $`--subsample`\n## [1] \"no\"\n## \n## $`--threads`\n## [1] 1\n\n\n\n\n7.3.1.2 Exporting chromatin loops\n\nloops <- topologicalFeatures(hic, \"loops\")\nloops <- loops[loops$score >= 0.4 & loops$qvalue <= 1e-6]\nGenomicInteractions::export.bedpe(loops, 'loops.bedpe')\n\n\n7.3.1.3 Visualizing chromatin loops\n\n\n\n\n\n\nChromosight users\n\n\n\nIf you are using chromosight directly from the terminal (i.e. outside R), you can import the annotated loops in R as follows:\n\ndf <- readr::read_tsv(\"...\")\nloops <- InteractionSet::GInteractions(\n anchor1 = GenomicRanges::GRanges(\n df$chrom1, IRanges::IRanges(df$start1+1, df$end1)\n ),\n anchor2 = GenomicRanges::GRanges(\n df$chrom2, IRanges::IRanges(df$start2+1, df$end2)\n ),\n bin_id1 = df$bin1, \n bin_id2 = df$bin2, \n score = df$score, \n pvalue = df$pvalue, \n qvalue = df$qvalue\n)\n\n\n\n\nplotMatrix(\n refocus(hic, 'chr17:62500001-63500000') |> zoom(5000), \n loops = loops,\n limits = c(-4, -1.2),\n caption = FALSE\n)\n\n\n\n7.3.2 Other R packages\nA number of other R packages have been developed to identify focal chromatin loops, notably fitHiC (Ay et al. (2014)), GOTHiC (Mifsud et al. (2017)) or idr2d (Krismer et al. (2020)). Each fits a slightly different purpose, and we encourage the end user to read companion publications." + "text": "7.3 Chromatin loops\n\n7.3.1 chromosight\n\nChromatin loops, dots, or contacts, refer to a strong increase of interaction frequency between a pair of two genomic loci. They correspond to focal “dots” on a Hi-C map. Relying on computer vision algorithms, chromosight uses this property to annotate chromatin loops in a Hi-C map (Matthey-Doret et al. (2020)). chromosight is a standalone python package and is made available in R through the HiCool-managed conda environment with the getLoops() function.\n\n7.3.1.1 Identifying loops\n\nhic <- HiCool::getLoops(microC, resolution = 5000)\n\nhic\n## `HiCExperiment` object with 917,156 contacts over 100 regions\n## -------\n## fileName: \"/home/rsg/.cache/R/fourDNData/4d434d8538a0_4DNFI9FVHJZQ.mcool\"\n## focus: \"chr17:63,000,001-63,500,000\"\n## resolutions(13): 1000 2000 ... 5000000 10000000\n## active resolution: 5000\n## interactions: 5047\n## scores(2): count balanced\n## topologicalFeatures: compartments(0) borders(0) loops(66411) viewpoints(0)\n## pairsFile: N/A\n## metadata(1): chromosight_args\n\ngetLoops() is an endomorphism: it returns the original object, enriched with two new pieces of information:\n\nA loops topologicalFeatures:\n\n\ntopologicalFeatures(hic, \"loops\")\n## GInteractions object with 66411 interactions and 5 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1 bin_id2 score ## pvalue qvalue\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <numeric> ## <numeric> <numeric>\n## [1] chr1 775001-780000 --- chr1 850001-855000 | 155 170 0.334586 2.## 15995e-05 2.162e-05\n## [2] chr1 775001-780000 --- chr1 865001-870000 | 155 173 0.403336 1.## 62900e-07 1.669e-07\n## [3] chr1 865001-870000 --- chr1 890001-895000 | 173 178 0.337344 1.## 91400e-07 1.957e-07\n## [4] chr1 910001-915000 --- chr1 955001-960000 | 182 191 0.639725 0.## 00000e+00 0.000e+00\n## [5] chr1 910001-915000 --- chr1 1055001-1060000 | 182 211 0.521699 0.## 00000e+00 0.000e+00\n## ... ... ... ... ... ... . ... ... ... ## ... ...\n## [66407] chrY 19570001-19575000 --- chrY 19720001-19725000 | 610133 610163 0.315529 3.## 30e-08 3.55e-08\n## [66408] chrY 19705001-19710000 --- chrY 19730001-19735000 | 610160 610165 0.708753 0.## 00e+00 0.00e+00\n## [66409] chrY 19765001-19770000 --- chrY 19800001-19805000 | 610172 610179 0.373635 1.## 10e-09 1.40e-09\n## [66410] chrY 20555001-20560000 --- chrY 20645001-20650000 | 610330 610348 0.603308 0.## 00e+00 0.00e+00\n## [66411] chrY 21015001-21020000 --- chrY 21055001-21060000 | 610422 610430 0.394614 9.## 12e-08 9.45e-08\n## -------\n## regions: 84171 ranges and 0 metadata columns\n## seqinfo: 24 sequences from an unspecified genome; no seqlengths\n\n\nThe arguments used by chromosight, stored in metadata:\n\n\nmetadata(hic)$chromosight_args\n## $`--pattern`\n## [1] \"loops\"\n## \n## $`--dump`\n## [1] \"/data/.cache/R//RtmpSaRwiZ\"\n## \n## $`--inter`\n## [1] FALSE\n## \n## $`--iterations`\n## [1] \"auto\"\n## \n## $`--kernel-config`\n## NULL\n## \n## $`--perc-zero`\n## [1] \"auto\"\n## \n## $`--perc-undetected`\n## [1] \"auto\"\n## \n## $`--tsvd`\n## [1] FALSE\n## \n## $`--win-fmt`\n## [1] \"json\"\n## \n## $`--win-size`\n## [1] \"auto\"\n## \n## $`--no-plotting`\n## [1] TRUE\n## \n## $`--smooth-trend`\n## [1] FALSE\n## \n## $`--norm`\n## [1] \"auto\"\n## \n## $`<contact_map>`\n## [1] \"/home/rsg/.cache/R/fourDNData/4d434d8538a0_4DNFI9FVHJZQ.mcool::/resolutions/5000\"\n## \n## $`--max-dist`\n## [1] \"auto\"\n## \n## $`--min-dist`\n## [1] \"auto\"\n## \n## $`--min-separation`\n## [1] \"auto\"\n## \n## $`--n-mads`\n## [1] 5\n## \n## $`<prefix>`\n## [1] \"chromosight/chromo\"\n## \n## $`--pearson`\n## [1] \"auto\"\n## \n## $`--subsample`\n## [1] \"no\"\n## \n## $`--threads`\n## [1] 1\n\n\n7.3.1.2 Importing loops from files\nIf you are using chromosight directly from the terminal (i.e. outside R), you can import the annotated loops in R as follows:\n\ndf <- readr::read_tsv(\"...\") ## Here put your loops file\nloops <- InteractionSet::GInteractions(\n anchor1 = GenomicRanges::GRanges(\n df$chrom1, IRanges::IRanges(df$start1+1, df$end1)\n ),\n anchor2 = GenomicRanges::GRanges(\n df$chrom2, IRanges::IRanges(df$start2+1, df$end2)\n ),\n bin_id1 = df$bin1, \n bin_id2 = df$bin2, \n score = df$score, \n pvalue = df$pvalue, \n qvalue = df$qvalue\n)\n\n\n7.3.1.3 Exporting chromatin loops\n\nloops <- topologicalFeatures(hic, \"loops\")\nloops <- loops[loops$score >= 0.4 & loops$qvalue <= 1e-6]\nGenomicInteractions::export.bedpe(loops, 'loops.bedpe')\n\n\n7.3.1.4 Visualizing chromatin loops\n\nplotMatrix(\n refocus(hic, 'chr17:62500001-63500000') |> zoom(5000), \n loops = loops,\n limits = c(-4, -1.2),\n caption = FALSE\n)\n\n\n\n7.3.2 Other R packages\nA number of other R packages have been developed to identify focal chromatin loops, notably fitHiC (Ay et al. (2014)), GOTHiC (Mifsud et al. (2017)) or idr2d (Krismer et al. (2020)). Each fits a slightly different purpose, and we encourage the end user to read companion publications." }, { "objectID": "disseminating.html", @@ -291,7 +291,7 @@ "href": "interoperability.html#hicrep", "title": "\n9  Interoperability: using HiCExperiment with other R packages\n", "section": "\n9.1 HiCrep", - "text": "9.1 HiCrep\nhicrep is a popular package to compute stratum-adjusted correlations between Hi-C datasets (Yang et al. (2017)). “Stratum” refers to the distance from the main diagonal: with increase distance from the main diagonal, interactions of the DNA polymer are bound to decrease. hicrep computes a “per-stratum” correlation score and computes a weighted average correlation for entire chromosomes.\n\n\n\n\n\n\nInstalling hicrep\n\n\n\nhicrep package has been available from Bioconductor for many years but has been withdrawn from their repositories at some point. You can always install hicrep directly from its GitHub repository as follows:\n\nremotes::install_github('TaoYang-dev/hicrep')\n\n\n\nIn order to use hicrep, we first need to create two HiCExperiment objects.\n\nlibrary(InteractionSet)\nlibrary(HiCExperiment)\nlibrary(HiContactsData)\n\n# ---- This downloads example `.mcool` and `.pairs` files and caches them locally \ncoolf_wt <- HiContactsData('yeast_wt', 'mcool')\ncoolf_eco1 <- HiContactsData('yeast_eco1', 'mcool')\n\n\nhic_wt <- import(coolf_wt, format = 'cool')\nhic_eco1 <- import(coolf_eco1, format = 'cool')\n\nWe can now run the main get.scc function from hicrep. The documentation for this function is available from the console by typing ?hicrep::get.scc. More information is also available from the GitHub page. It informs the end user that the input for this function should be two intra-chromosomal Hi-C raw count matrices in square (optionally sparse) format.\n\nhic_wt\n## `HiCExperiment` object with 8,757,906 contacts over 12,079 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"whole genome\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 2945692 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\nas.matrix(hic_wt[\"IV\"], use.scores = 'count')[1:10, 1:10]\n## 10 x 10 sparse Matrix of class \"dgTMatrix\"\n## \n## [1,] . 1 . . 1 . . . . .\n## [2,] 1 . . . . . . . . .\n## [3,] . . . . . . . . . .\n## [4,] . . . . . . . . . .\n## [5,] 1 . . . . . . . 1 .\n## [6,] . . . . . . . . . .\n## [7,] . . . . . . . . . .\n## [8,] . . . . . . . . 1 .\n## [9,] . . . . 1 . . 1 . .\n## [10,] . . . . . . . . . .\n\nlibrary(hicrep)\nscc <- get.scc(\n as.matrix(hic_wt[\"IV\"], use.scores = 'count'), \n as.matrix(hic_eco1[\"IV\"], use.scores = 'count'), \n resol = 1000, h = 25, lbr = 5000, ubr = 50000\n)\nscc\n## $corr\n## [1] 0.9412784 0.9410680 0.9408082 0.9404796 0.9404544 0.9402584 0.9400710\n## [8] 0.9398965 0.9397935 0.9397027 0.9396112 0.9393001 0.9393180 0.9390608\n## [15] 0.9391645 0.9394670 0.9395147 0.9396798 0.9397547 0.9398291 0.9401371\n## [22] 0.9402369 0.9402251 0.9404188 0.9404327 0.9403101 0.9402634 0.9401683\n## [29] 0.9401746 0.9394978 0.9391277 0.9381969 0.9371561 0.9357012 0.9342620\n## [36] 0.9324366 0.9302835 0.9277556 0.9247008 0.9208466 0.9166648 0.9120206\n## [43] 0.9060828 0.9002430 0.8931754 0.8847777\n## \n## $wei\n## [1] 123.2500 123.1667 123.0833 123.0000 122.9167 122.8333 122.7500 122.6667\n## [9] 122.5833 122.5000 122.4167 122.3333 122.2500 122.1667 122.0833 122.0000\n## [17] 121.9167 121.8333 121.7500 121.6667 121.5833 121.5000 121.4167 121.3333\n## [25] 121.2500 121.1667 121.0833 121.0000 120.9167 120.8333 120.7500 120.6667\n## [33] 120.5833 120.5000 120.4167 120.3333 120.2500 120.1667 120.0833 120.0000\n## [41] 119.9167 119.8333 119.7500 119.6667 119.5833 119.5000\n## \n## $scc\n## [,1]\n## [1,] 0.9334303\n## \n## $std\n## [1] 0.001994845\n\nscc$scc\n## [,1]\n## [1,] 0.9334303" + "text": "9.1 HiCrep\nhicrep is a popular package to compute stratum-adjusted correlations between Hi-C datasets (Yang et al. (2017)). “Stratum” refers to the distance from the main diagonal: with increase distance from the main diagonal, interactions of the DNA polymer are bound to decrease. hicrep computes a “per-stratum” correlation score and computes a weighted average correlation for entire chromosomes.\n\n\n\n\n\n\nInstalling hicrep\n\n\n\nhicrep package has been available from Bioconductor for many years but has been withdrawn from their repositories at some point. You can always install hicrep directly from its GitHub repository as follows:\n\nremotes::install_github('TaoYang-dev/hicrep')\n\n\n\nIn order to use hicrep, we first need to create two HiCExperiment objects.\n\nlibrary(InteractionSet)\nlibrary(HiCExperiment)\nlibrary(HiContactsData)\n\n# ---- This downloads example `.mcool` and `.pairs` files and caches them locally \ncoolf_wt <- HiContactsData('yeast_wt', 'mcool')\ncoolf_eco1 <- HiContactsData('yeast_eco1', 'mcool')\n\n\nhic_wt <- import(coolf_wt, format = 'cool')\nhic_eco1 <- import(coolf_eco1, format = 'cool')\n\nWe can now run the main get.scc function from hicrep. The documentation for this function is available from the console by typing ?hicrep::get.scc. More information is also available from the GitHub page. It informs the end user that the input for this function should be two intra-chromosomal Hi-C raw count matrices in square (optionally sparse) format.\n\nhic_wt\n## `HiCExperiment` object with 8,757,906 contacts over 12,079 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"whole genome\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 2945692 \n## scores(2): count balanced \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) \n## pairsFile: N/A \n## metadata(0):\n\nas.matrix(hic_wt[\"IV\"], use.scores = 'count')[1:10, 1:10]\n## 10 x 10 sparse Matrix of class \"dgTMatrix\"\n## \n## [1,] . 1 . . 1 . . . . .\n## [2,] 1 . . . . . . . . .\n## [3,] . . . . . . . . . .\n## [4,] . . . . . . . . . .\n## [5,] 1 . . . . . . . 1 .\n## [6,] . . . . . . . . . .\n## [7,] . . . . . . . . . .\n## [8,] . . . . . . . . 1 .\n## [9,] . . . . 1 . . 1 . .\n## [10,] . . . . . . . . . .\n\nlibrary(hicrep)\nscc <- get.scc(\n as.matrix(hic_wt[\"IV\"], use.scores = 'count'), \n as.matrix(hic_eco1[\"IV\"], use.scores = 'count'), \n resol = 1000, h = 25, lbr = 5000, ubr = 50000\n)\nscc\n## $corr\n## [1] 0.9412784 0.9410680 0.9408082 0.9404796 0.9404544 0.9402584 0.9400710 0.9398965 0.9397935 0.9397027 0.9396112 0.9393001 0.9393180 0.9390608 0.9391645 0.9394670 0.9395147 0.9396798 0.9397547 0.9398291 0.9401371 0.9402369 0.9402251 0.9404188 0.9404327 0.9403101 0.9402634 0.9401683 0.9401746 0.9394978 0.9391277 0.9381969 0.9371561 0.9357012 0.9342620 0.9324366 0.9302835 0.9277556 0.9247008 0.9208466 0.9166648 0.9120206 0.9060828 0.9002430 0.8931754 0.8847777\n## \n## $wei\n## [1] 123.2500 123.1667 123.0833 123.0000 122.9167 122.8333 122.7500 122.6667 122.5833 122.5000 122.4167 122.3333 122.2500 122.1667 122.0833 122.0000 121.9167 121.8333 121.7500 121.6667 121.5833 121.5000 121.4167 121.3333 121.2500 121.1667 121.0833 121.0000 120.9167 120.8333 120.7500 120.6667 120.5833 120.5000 120.4167 120.3333 120.2500 120.1667 120.0833 120.0000 119.9167 119.8333 119.7500 119.6667 119.5833 119.5000\n## \n## $scc\n## [,1]\n## [1,] 0.9334303\n## \n## $std\n## [1] 0.001994845\n\nscc$scc\n## [,1]\n## [1,] 0.9334303" }, { "objectID": "interoperability.html#multihiccompare", @@ -312,7 +312,7 @@ "href": "interoperability.html#gothic", "title": "\n9  Interoperability: using HiCExperiment with other R packages\n", "section": "\n9.4 GOTHiC", - "text": "9.4 GOTHiC\nGOTHiC relies on a cumulative binomial test to detect interactions between distal genomic loci that have significantly more reads than expected by chance in Hi-C experiments (Mifsud et al. (2017)).\n\n\n\n\n\n\nUsing the GOTHiC function\n\n\n\nUnfortunately, the main GOTHiC function require two .bam files as input. These files are often deleted due to their larger size, while the filtered pairs file itself is retained.\nMoreover, the internal nuts and bolts of the main GOTHiC function perform several operations that are not required in modern workflows:\n\n\nFiltering pairs from same restriction fragment; this step is now usually taken care of automatically, e.g. with HiCool Hi-C processing package.\n\nFiltering short-range pairs; the GOTHiC package hard-codes a 10kb lower threshold for minimum pair distance. More advanced optimized filtering approaches have been implemented since then, to circumvent the need for such hard-coded threshold.\n\nBinning pairs; this step is also already taken care of, when working with Hi-C matrices in modern formats, e.g. with .(m)cool files.\n\n\n\nBased on these facts, we can simplify the binomial test function provided by GOTHiC so that it can directly used binned interactions imported as a HiCExperiment object in R.\n\nShow the code for GOTHiC_binomial functionGOTHiC_binomial <- function(x) {\n\n if (length(trans(x)) != 0) stop(\"Only `cis` interactions can be used here.\")\n ints <- interactions(x) |>\n as.data.frame() |> \n select(seqnames1, start1, seqnames2, start2, count) |>\n dplyr::rename(chr1 = seqnames1, locus1 = start1, chr2 = seqnames2, locus2 = start2, frequencies = count) |>\n mutate(locus1 = locus1 - 1, locus2 = locus2 - 1) |>\n mutate(int1 = paste0(chr1, '_', locus1), int2 = paste0(chr2, '_', locus2))\n \n numberOfReadPairs <- sum(ints$frequencies)\n all_bins <- unique(c(unique(ints$int1), unique(ints$int2)))\n all_bins <- sort(all_bins)\n upperhalfBinNumber <- (length(all_bins)^2 - length(all_bins))/2\n\n cov <- ints |> \n group_by(int1) |> \n tally(frequencies) |> \n full_join(ints |> \n group_by(int2) |> \n tally(frequencies), \n by = c('int1' = 'int2')\n ) |> \n rowwise() |> \n mutate(coverage = sum(n.x, n.y, na.rm = TRUE)) |> \n ungroup() |>\n mutate(relative_coverage = coverage/sum(coverage))\n \n results <- mutate(ints,\n cov1 = left_join(ints, select(cov, int1, relative_coverage), by = c('int1' = 'int1'))$relative_coverage, \n cov2 = left_join(ints, select(cov, int1, relative_coverage), by = c('int2' = 'int1'))$relative_coverage,\n probability = cov1 * cov2 * 2 * 1/(1 - sum(cov$relative_coverage^2)),\n predicted = probability * numberOfReadPairs\n ) |> \n rowwise() |>\n mutate(\n pvalue = binom.test(\n frequencies, \n numberOfReadPairs, \n probability,\n alternative = \"greater\"\n )$p.value\n ) |> \n ungroup() |> \n mutate(\n logFoldChange = log2(frequencies / predicted), \n qvalue = stats::p.adjust(pvalue, method = \"BH\", n = upperhalfBinNumber)\n )\n\n scores(x, \"probability\") <- results$probability\n scores(x, \"predicted\") <- results$predicted\n scores(x, \"pvalue\") <- results$pvalue\n scores(x, \"qvalue\") <- results$qvalue\n scores(x, \"logFoldChange\") <- results$logFoldChange\n\n return(x)\n\n} \n\n\n\nres <- GOTHiC_binomial(hic[\"II\"])\nres\n## `HiCExperiment` object with 471,364 contacts over 802 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 74360 \n## scores(7): count balanced probability predicted pvalue qvalue logFoldChange \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) domain(52) \n## pairsFile: N/A \n## metadata(0):\n\ninteractions(res)\n## GInteractions object with 74360 interactions and 9 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric>\n## [1] II 1-1000 --- II 1001-2000 | 231\n## [2] II 1-1000 --- II 5001-6000 | 231\n## [3] II 1-1000 --- II 6001-7000 | 231\n## [4] II 1-1000 --- II 8001-9000 | 231\n## [5] II 1-1000 --- II 9001-10000 | 231\n## ... ... ... ... ... ... . ...\n## [74356] II 807001-808000 --- II 809001-810000 | 1038\n## [74357] II 807001-808000 --- II 810001-811000 | 1038\n## [74358] II 808001-809000 --- II 808001-809000 | 1039\n## [74359] II 808001-809000 --- II 809001-810000 | 1039\n## [74360] II 809001-810000 --- II 809001-810000 | 1040\n## bin_id2 count balanced probability predicted pvalue\n## <numeric> <numeric> <numeric> <numeric> <numeric> <numeric>\n## [1] 232 1 NaN 7.83580e-09 0.00369352 3.68670e-03\n## [2] 236 2 NaN 2.81318e-08 0.01326033 8.71446e-05\n## [3] 237 1 NaN 2.02960e-08 0.00956681 9.52120e-03\n## [4] 239 2 NaN 6.73108e-08 0.03172791 4.92808e-04\n## [5] 240 3 NaN 7.37336e-08 0.03475538 6.81713e-06\n## ... ... ... ... ... ... ...\n## [74356] 1040 8 0.0472023 3.85638e-07 0.1817758 2.51560e-11\n## [74357] 1041 1 NaN 5.03006e-08 0.0237099 2.34310e-02\n## [74358] 1039 1 NaN 8.74604e-08 0.0412257 4.03875e-02\n## [74359] 1040 7 NaN 1.02111e-07 0.0481315 1.13834e-13\n## [74360] 1040 2 0.0411355 1.19216e-07 0.0561941 1.52097e-03\n## qvalue logFoldChange\n## <numeric> <numeric>\n## [1] 0.063385760 8.08079\n## [2] 0.001926954 7.23674\n## [3] 0.150288341 6.70775\n## [4] 0.009806734 5.97810\n## [5] 0.000173165 6.43158\n## ... ... ...\n## [74356] 1.07966e-09 5.45977\n## [74357] 3.38098e-01 5.39837\n## [74358] 5.49519e-01 4.60031\n## [74359] 5.77259e-12 7.18423\n## [74360] 2.79707e-02 5.15344\n## -------\n## regions: 802 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome" + "text": "9.4 GOTHiC\nGOTHiC relies on a cumulative binomial test to detect interactions between distal genomic loci that have significantly more reads than expected by chance in Hi-C experiments (Mifsud et al. (2017)).\n\n\n\n\n\n\nUsing the GOTHiC function\n\n\n\nUnfortunately, the main GOTHiC function require two .bam files as input. These files are often deleted due to their larger size, while the filtered pairs file itself is retained.\nMoreover, the internal nuts and bolts of the main GOTHiC function perform several operations that are not required in modern workflows:\n\n\nFiltering pairs from same restriction fragment; this step is now usually taken care of automatically, e.g. with HiCool Hi-C processing package.\n\nFiltering short-range pairs; the GOTHiC package hard-codes a 10kb lower threshold for minimum pair distance. More advanced optimized filtering approaches have been implemented since then, to circumvent the need for such hard-coded threshold.\n\nBinning pairs; this step is also already taken care of, when working with Hi-C matrices in modern formats, e.g. with .(m)cool files.\n\n\n\nBased on these facts, we can simplify the binomial test function provided by GOTHiC so that it can directly used binned interactions imported as a HiCExperiment object in R.\n\nShow the code for GOTHiC_binomial functionGOTHiC_binomial <- function(x) {\n\n if (length(trans(x)) != 0) stop(\"Only `cis` interactions can be used here.\")\n ints <- interactions(x) |>\n as.data.frame() |> \n select(seqnames1, start1, seqnames2, start2, count) |>\n dplyr::rename(chr1 = seqnames1, locus1 = start1, chr2 = seqnames2, locus2 = start2, frequencies = count) |>\n mutate(locus1 = locus1 - 1, locus2 = locus2 - 1) |>\n mutate(int1 = paste0(chr1, '_', locus1), int2 = paste0(chr2, '_', locus2))\n \n numberOfReadPairs <- sum(ints$frequencies)\n all_bins <- unique(c(unique(ints$int1), unique(ints$int2)))\n all_bins <- sort(all_bins)\n upperhalfBinNumber <- (length(all_bins)^2 - length(all_bins))/2\n\n cov <- ints |> \n group_by(int1) |> \n tally(frequencies) |> \n full_join(ints |> \n group_by(int2) |> \n tally(frequencies), \n by = c('int1' = 'int2')\n ) |> \n rowwise() |> \n mutate(coverage = sum(n.x, n.y, na.rm = TRUE)) |> \n ungroup() |>\n mutate(relative_coverage = coverage/sum(coverage))\n \n results <- mutate(ints,\n cov1 = left_join(ints, select(cov, int1, relative_coverage), by = c('int1' = 'int1'))$relative_coverage, \n cov2 = left_join(ints, select(cov, int1, relative_coverage), by = c('int2' = 'int1'))$relative_coverage,\n probability = cov1 * cov2 * 2 * 1/(1 - sum(cov$relative_coverage^2)),\n predicted = probability * numberOfReadPairs\n ) |> \n rowwise() |>\n mutate(\n pvalue = binom.test(\n frequencies, \n numberOfReadPairs, \n probability,\n alternative = \"greater\"\n )$p.value\n ) |> \n ungroup() |> \n mutate(\n logFoldChange = log2(frequencies / predicted), \n qvalue = stats::p.adjust(pvalue, method = \"BH\", n = upperhalfBinNumber)\n )\n\n scores(x, \"probability\") <- results$probability\n scores(x, \"predicted\") <- results$predicted\n scores(x, \"pvalue\") <- results$pvalue\n scores(x, \"qvalue\") <- results$qvalue\n scores(x, \"logFoldChange\") <- results$logFoldChange\n\n return(x)\n\n} \n\n\n\nres <- GOTHiC_binomial(hic[\"II\"])\nres\n## `HiCExperiment` object with 471,364 contacts over 802 regions \n## -------\n## fileName: \"/github/home/.cache/R/ExperimentHub/1a92248c093f_7752\" \n## focus: \"II\" \n## resolutions(5): 1000 2000 4000 8000 16000\n## active resolution: 1000 \n## interactions: 74360 \n## scores(7): count balanced probability predicted pvalue qvalue logFoldChange \n## topologicalFeatures: compartments(0) borders(0) loops(0) viewpoints(0) domain(52) \n## pairsFile: N/A \n## metadata(0):\n\ninteractions(res)\n## GInteractions object with 74360 interactions and 9 metadata columns:\n## seqnames1 ranges1 seqnames2 ranges2 | bin_id1 bin_id2 count balanced probability predicted pvalue qvalue logFoldChange\n## <Rle> <IRanges> <Rle> <IRanges> | <numeric> <numeric> <numeric> <numeric> <numeric> <numeric> <numeric> <numeric> <numeric>\n## [1] II 1-1000 --- II 1001-2000 | 231 232 1 NaN 7.83580e-09 0.00369352 3.68670e-03 0.063385760 8.08079\n## [2] II 1-1000 --- II 5001-6000 | 231 236 2 NaN 2.81318e-08 0.01326033 8.71446e-05 0.001926954 7.23674\n## [3] II 1-1000 --- II 6001-7000 | 231 237 1 NaN 2.02960e-08 0.00956681 9.52120e-03 0.150288341 6.70775\n## [4] II 1-1000 --- II 8001-9000 | 231 239 2 NaN 6.73108e-08 0.03172791 4.92808e-04 0.009806734 5.97810\n## [5] II 1-1000 --- II 9001-10000 | 231 240 3 NaN 7.37336e-08 0.03475538 6.81713e-06 0.000173165 6.43158\n## ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ...\n## [74356] II 807001-808000 --- II 809001-810000 | 1038 1040 8 0.0472023 3.85638e-07 0.1817758 2.51560e-11 1.07966e-09 5.45977\n## [74357] II 807001-808000 --- II 810001-811000 | 1038 1041 1 NaN 5.03006e-08 0.0237099 2.34310e-02 3.38098e-01 5.39837\n## [74358] II 808001-809000 --- II 808001-809000 | 1039 1039 1 NaN 8.74604e-08 0.0412257 4.03875e-02 5.49519e-01 4.60031\n## [74359] II 808001-809000 --- II 809001-810000 | 1039 1040 7 NaN 1.02111e-07 0.0481315 1.13834e-13 5.77259e-12 7.18423\n## [74360] II 809001-810000 --- II 809001-810000 | 1040 1040 2 0.0411355 1.19216e-07 0.0561941 1.52097e-03 2.79707e-02 5.15344\n## -------\n## regions: 802 ranges and 4 metadata columns\n## seqinfo: 16 sequences from an unspecified genome" }, { "objectID": "interoperability.html#references", @@ -326,7 +326,7 @@ "href": "interoperability.html#session-info", "title": "\n9  Interoperability: using HiCExperiment with other R packages\n", "section": "Session info", - "text": "Session info\n\n## ─ Session info ────────────────────────────────────────────────────────────\n## setting value\n## version R version 4.3.1 (2023-06-16)\n## os Ubuntu 22.04.3 LTS\n## system x86_64, linux-gnu\n## ui X11\n## language (EN)\n## collate en_US.UTF-8\n## ctype en_US.UTF-8\n## tz Etc/UTC\n## date 2023-10-19\n## pandoc 3.1.1 @ /usr/local/bin/ (via rmarkdown)\n## \n## ─ Packages ────────────────────────────────────────────────────────────────\n## package * version date (UTC) lib source\n## abind 1.4-5 2016-07-21 [1] CRAN (R 4.3.1)\n## aggregation 1.0.1 2018-01-25 [1] CRAN (R 4.3.1)\n## AnnotationDbi 1.63.2 2023-07-02 [1] Bioconductor\n## AnnotationHub * 3.9.2 2023-08-24 [1] Bioconductor\n## Biobase * 2.61.0 2023-04-25 [1] Bioconductor\n## BiocFileCache * 2.9.1 2023-07-12 [1] Bioconductor\n## BiocGenerics * 0.47.0 2023-04-25 [1] Bioconductor\n## BiocIO 1.11.0 2023-04-25 [1] Bioconductor\n## BiocManager 1.30.22 2023-08-08 [1] CRAN (R 4.3.1)\n## BiocParallel 1.35.4 2023-08-17 [1] Bioconductor\n## BiocVersion 3.18.0 2023-04-25 [1] Bioconductor\n## Biostrings 2.69.2 2023-07-02 [1] Bioconductor\n## bit 4.0.5 2022-11-15 [1] CRAN (R 4.3.1)\n## bit64 4.0.5 2020-08-30 [1] CRAN (R 4.3.1)\n## bitops 1.0-7 2021-04-24 [1] CRAN (R 4.3.1)\n## blob 1.2.4 2023-03-17 [1] CRAN (R 4.3.1)\n## cachem 1.0.8 2023-05-01 [1] CRAN (R 4.3.1)\n## calibrate 1.7.7 2020-06-19 [1] CRAN (R 4.3.1)\n## cli 3.6.1 2023-03-23 [1] CRAN (R 4.3.1)\n## codetools 0.2-19 2023-02-01 [2] CRAN (R 4.3.1)\n## colorspace 2.1-0 2023-01-23 [1] CRAN (R 4.3.1)\n## crayon 1.5.2 2022-09-29 [1] CRAN (R 4.3.1)\n## curl 5.1.0 2023-10-02 [1] CRAN (R 4.3.1)\n## data.table 1.14.8 2023-02-17 [1] CRAN (R 4.3.1)\n## DBI 1.1.3 2022-06-18 [1] CRAN (R 4.3.1)\n## dbplyr * 2.3.4 2023-09-26 [1] CRAN (R 4.3.1)\n## DelayedArray 0.27.10 2023-07-28 [1] Bioconductor\n## digest 0.6.33 2023-07-07 [1] CRAN (R 4.3.1)\n## dplyr * 1.1.3 2023-09-03 [1] CRAN (R 4.3.1)\n## edgeR 3.99.3 2023-10-16 [1] Bioconductor\n## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.3.1)\n## evaluate 0.22 2023-09-29 [1] CRAN (R 4.3.1)\n## ExperimentHub * 2.9.1 2023-07-12 [1] Bioconductor\n## fansi 1.0.5 2023-10-08 [1] CRAN (R 4.3.1)\n## fastmap 1.1.1 2023-02-24 [1] CRAN (R 4.3.1)\n## filelock 1.0.2 2018-10-05 [1] CRAN (R 4.3.1)\n## generics 0.1.3 2022-07-05 [1] CRAN (R 4.3.1)\n## GenomeInfoDb * 1.37.6 2023-10-02 [1] Bioconductor\n## GenomeInfoDbData 1.2.11 2023-10-19 [1] Bioconductor\n## GenomicAlignments 1.37.0 2023-04-25 [1] Bioconductor\n## GenomicRanges * 1.53.2 2023-10-08 [1] Bioconductor\n## ggplot2 * 3.4.4 2023-10-12 [1] CRAN (R 4.3.1)\n## glue 1.6.2 2022-02-24 [1] CRAN (R 4.3.1)\n## gridExtra 2.3 2017-09-09 [1] CRAN (R 4.3.1)\n## gtable 0.3.4 2023-08-21 [1] CRAN (R 4.3.1)\n## gtools 3.9.4 2022-11-27 [1] CRAN (R 4.3.1)\n## HiCcompare 1.23.1 2023-06-04 [1] Bioconductor\n## HiCExperiment * 1.1.2 2023-09-04 [1] Bioconductor\n## HiContactsData * 1.3.0 2023-04-27 [1] Bioconductor\n## hicrep * 1.12.2 2023-10-19 [1] Github (TaoYang-dev/hicrep@e485dfa)\n## htmltools 0.5.6.1 2023-10-06 [1] CRAN (R 4.3.1)\n## htmlwidgets 1.6.2 2023-03-17 [1] CRAN (R 4.3.1)\n## httpuv 1.6.11 2023-05-11 [1] CRAN (R 4.3.1)\n## httr 1.4.7 2023-08-15 [1] CRAN (R 4.3.1)\n## InteractionSet * 1.29.1 2023-06-14 [1] Bioconductor\n## interactiveDisplayBase 1.39.0 2023-04-25 [1] Bioconductor\n## IRanges * 2.35.3 2023-10-12 [1] Bioconductor\n## jsonlite 1.8.7 2023-06-29 [1] CRAN (R 4.3.1)\n## KEGGREST 1.41.4 2023-09-25 [1] Bioconductor\n## KernSmooth 2.23-22 2023-07-10 [1] CRAN (R 4.3.1)\n## knitr 1.44 2023-09-11 [1] CRAN (R 4.3.1)\n## later 1.3.1 2023-05-02 [1] CRAN (R 4.3.1)\n## lattice 0.21-9 2023-10-01 [1] CRAN (R 4.3.1)\n## lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.3.1)\n## limma 3.57.10 2023-10-11 [1] Bioconductor\n## locfit 1.5-9.8 2023-06-11 [1] CRAN (R 4.3.1)\n## magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.3.1)\n## MASS 7.3-60 2023-05-04 [2] CRAN (R 4.3.1)\n## Matrix 1.6-1.1 2023-09-18 [1] CRAN (R 4.3.1)\n## MatrixGenerics * 1.13.1 2023-07-25 [1] Bioconductor\n## matrixStats * 1.0.0 2023-06-02 [1] CRAN (R 4.3.1)\n## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.3.1)\n## mgcv 1.9-0 2023-07-11 [1] CRAN (R 4.3.1)\n## mime 0.12 2021-09-28 [1] CRAN (R 4.3.1)\n## multiHiCcompare * 1.19.1 2023-07-02 [1] Bioconductor\n## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.3.1)\n## nlme 3.1-163 2023-08-09 [1] CRAN (R 4.3.1)\n## pbapply 1.7-2 2023-06-27 [1] CRAN (R 4.3.1)\n## pheatmap 1.0.12 2019-01-04 [1] CRAN (R 4.3.1)\n## pillar 1.9.0 2023-03-22 [1] CRAN (R 4.3.1)\n## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.3.1)\n## plyr 1.8.9 2023-10-02 [1] CRAN (R 4.3.1)\n## png 0.1-8 2022-11-29 [1] CRAN (R 4.3.1)\n## promises 1.2.1 2023-08-10 [1] CRAN (R 4.3.1)\n## purrr * 1.0.2 2023-08-10 [1] CRAN (R 4.3.1)\n## qqman 0.1.9 2023-08-23 [1] CRAN (R 4.3.1)\n## R6 2.5.1 2021-08-19 [1] CRAN (R 4.3.1)\n## rappdirs 0.3.3 2021-01-31 [1] CRAN (R 4.3.1)\n## RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.3.1)\n## Rcpp 1.0.11 2023-07-06 [1] CRAN (R 4.3.1)\n## RCurl 1.98-1.12 2023-03-27 [1] CRAN (R 4.3.1)\n## reshape2 1.4.4 2020-04-09 [1] CRAN (R 4.3.1)\n## restfulr 0.0.15 2022-06-16 [1] CRAN (R 4.3.1)\n## rhdf5 2.45.1 2023-07-10 [1] Bioconductor\n## rhdf5filters 1.13.5 2023-07-19 [1] Bioconductor\n## Rhdf5lib 1.23.2 2023-09-10 [1] Bioconductor\n## rjson 0.2.21 2022-01-09 [1] CRAN (R 4.3.1)\n## rlang 1.1.1 2023-04-28 [1] CRAN (R 4.3.1)\n## rmarkdown 2.25 2023-09-18 [1] CRAN (R 4.3.1)\n## Rsamtools 2.17.0 2023-04-25 [1] Bioconductor\n## RSQLite 2.3.1 2023-04-03 [1] CRAN (R 4.3.1)\n## rstudioapi 0.15.0 2023-07-07 [1] CRAN (R 4.3.1)\n## rtracklayer 1.61.1 2023-08-15 [1] Bioconductor\n## S4Arrays 1.1.6 2023-08-30 [1] Bioconductor\n## S4Vectors * 0.39.3 2023-10-11 [1] Bioconductor\n## scales 1.2.1 2022-08-20 [1] CRAN (R 4.3.1)\n## sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.3.1)\n## shiny 1.7.5.1 2023-10-14 [1] CRAN (R 4.3.1)\n## SparseArray 1.1.12 2023-08-31 [1] Bioconductor\n## statmod 1.5.0 2023-01-06 [1] CRAN (R 4.3.1)\n## strawr 0.0.91 2023-03-29 [1] CRAN (R 4.3.1)\n## stringi 1.7.12 2023-01-11 [1] CRAN (R 4.3.1)\n## stringr 1.5.0 2022-12-02 [1] CRAN (R 4.3.1)\n## SummarizedExperiment * 1.31.1 2023-05-01 [1] Bioconductor\n## tibble 3.2.1 2023-03-20 [1] CRAN (R 4.3.1)\n## tidyr * 1.3.0 2023-01-24 [1] CRAN (R 4.3.1)\n## tidyselect 1.2.0 2022-10-10 [1] CRAN (R 4.3.1)\n## TopDom * 0.10.1 2021-05-06 [1] CRAN (R 4.3.1)\n## tzdb 0.4.0 2023-05-12 [1] CRAN (R 4.3.1)\n## utf8 1.2.3 2023-01-31 [1] CRAN (R 4.3.1)\n## vctrs 0.6.4 2023-10-12 [1] CRAN (R 4.3.1)\n## vroom 1.6.4 2023-10-02 [1] CRAN (R 4.3.1)\n## withr 2.5.1 2023-09-26 [1] CRAN (R 4.3.1)\n## xfun 0.40 2023-08-09 [1] CRAN (R 4.3.1)\n## XML 3.99-0.14 2023-03-19 [1] CRAN (R 4.3.1)\n## xtable 1.8-4 2019-04-21 [1] CRAN (R 4.3.1)\n## XVector 0.41.1 2023-05-03 [1] Bioconductor\n## yaml 2.3.7 2023-01-23 [1] CRAN (R 4.3.1)\n## zlibbioc 1.47.0 2023-04-25 [1] Bioconductor\n## \n## [1] /usr/local/lib/R/site-library\n## [2] /usr/local/lib/R/library\n## \n## ───────────────────────────────────────────────────────────────────────────" + "text": "Session info\n\n## ─ Session info ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n## setting value\n## version R version 4.3.1 (2023-06-16)\n## os Ubuntu 22.04.3 LTS\n## system x86_64, linux-gnu\n## ui X11\n## language (EN)\n## collate en_US.UTF-8\n## ctype en_US.UTF-8\n## tz Etc/UTC\n## date 2023-10-30\n## pandoc 3.1.1 @ /usr/local/bin/ (via rmarkdown)\n## \n## ─ Packages ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n## package * version date (UTC) lib source\n## abind 1.4-5 2016-07-21 [1] CRAN (R 4.3.1)\n## aggregation 1.0.1 2018-01-25 [1] CRAN (R 4.3.1)\n## AnnotationDbi 1.64.0 2023-10-24 [1] Bioconductor\n## AnnotationHub * 3.10.0 2023-10-24 [1] Bioconductor\n## Biobase * 2.62.0 2023-10-24 [1] Bioconductor\n## BiocFileCache * 2.10.1 2023-10-26 [1] Bioconductor\n## BiocGenerics * 0.48.0 2023-10-24 [1] Bioconductor\n## BiocIO 1.12.0 2023-10-24 [1] Bioconductor\n## BiocManager 1.30.22 2023-08-08 [1] CRAN (R 4.3.1)\n## BiocParallel 1.36.0 2023-10-24 [1] Bioconductor\n## BiocVersion 3.18.0 2023-04-25 [1] Bioconductor\n## Biostrings 2.70.1 2023-10-25 [1] Bioconductor\n## bit 4.0.5 2022-11-15 [1] CRAN (R 4.3.1)\n## bit64 4.0.5 2020-08-30 [1] CRAN (R 4.3.1)\n## bitops 1.0-7 2021-04-24 [1] CRAN (R 4.3.1)\n## blob 1.2.4 2023-03-17 [1] CRAN (R 4.3.1)\n## cachem 1.0.8 2023-05-01 [1] CRAN (R 4.3.1)\n## calibrate 1.7.7 2020-06-19 [1] CRAN (R 4.3.1)\n## cli 3.6.1 2023-03-23 [1] CRAN (R 4.3.1)\n## codetools 0.2-19 2023-02-01 [2] CRAN (R 4.3.1)\n## colorspace 2.1-0 2023-01-23 [1] CRAN (R 4.3.1)\n## crayon 1.5.2 2022-09-29 [1] CRAN (R 4.3.1)\n## curl 5.1.0 2023-10-02 [1] CRAN (R 4.3.1)\n## data.table 1.14.8 2023-02-17 [1] CRAN (R 4.3.1)\n## DBI 1.1.3 2022-06-18 [1] CRAN (R 4.3.1)\n## dbplyr * 2.4.0 2023-10-26 [1] CRAN (R 4.3.1)\n## DelayedArray 0.28.0 2023-10-24 [1] Bioconductor\n## digest 0.6.33 2023-07-07 [1] CRAN (R 4.3.1)\n## dplyr * 1.1.3 2023-09-03 [1] CRAN (R 4.3.1)\n## edgeR 4.0.0 2023-10-24 [1] Bioconductor\n## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.3.1)\n## evaluate 0.22 2023-09-29 [1] CRAN (R 4.3.1)\n## ExperimentHub * 2.10.0 2023-10-24 [1] Bioconductor\n## fansi 1.0.5 2023-10-08 [1] CRAN (R 4.3.1)\n## fastmap 1.1.1 2023-02-24 [1] CRAN (R 4.3.1)\n## filelock 1.0.2 2018-10-05 [1] CRAN (R 4.3.1)\n## generics 0.1.3 2022-07-05 [1] CRAN (R 4.3.1)\n## GenomeInfoDb * 1.38.0 2023-10-24 [1] Bioconductor\n## GenomeInfoDbData 1.2.11 2023-10-30 [1] Bioconductor\n## GenomicAlignments 1.38.0 2023-10-24 [1] Bioconductor\n## GenomicRanges * 1.54.0 2023-10-24 [1] Bioconductor\n## ggplot2 * 3.4.4 2023-10-12 [1] CRAN (R 4.3.1)\n## glue 1.6.2 2022-02-24 [1] CRAN (R 4.3.1)\n## gridExtra 2.3 2017-09-09 [1] CRAN (R 4.3.1)\n## gtable 0.3.4 2023-08-21 [1] CRAN (R 4.3.1)\n## gtools 3.9.4 2022-11-27 [1] CRAN (R 4.3.1)\n## HiCcompare 1.24.0 2023-10-24 [1] Bioconductor\n## HiCExperiment * 1.2.0 2023-10-24 [1] Bioconductor\n## HiContactsData * 1.4.0 2023-10-26 [1] Bioconductor\n## hicrep * 1.12.2 2023-10-30 [1] Github (TaoYang-dev/hicrep@e485dfa)\n## htmltools 0.5.6.1 2023-10-06 [1] CRAN (R 4.3.1)\n## htmlwidgets 1.6.2 2023-03-17 [1] CRAN (R 4.3.1)\n## httpuv 1.6.12 2023-10-23 [1] CRAN (R 4.3.1)\n## httr 1.4.7 2023-08-15 [1] CRAN (R 4.3.1)\n## InteractionSet * 1.30.0 2023-10-24 [1] Bioconductor\n## interactiveDisplayBase 1.40.0 2023-10-24 [1] Bioconductor\n## IRanges * 2.36.0 2023-10-24 [1] Bioconductor\n## jsonlite 1.8.7 2023-06-29 [1] CRAN (R 4.3.1)\n## KEGGREST 1.42.0 2023-10-24 [1] Bioconductor\n## KernSmooth 2.23-22 2023-07-10 [1] CRAN (R 4.3.1)\n## knitr 1.44 2023-09-11 [1] CRAN (R 4.3.1)\n## later 1.3.1 2023-05-02 [1] CRAN (R 4.3.1)\n## lattice 0.22-5 2023-10-24 [1] CRAN (R 4.3.1)\n## lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.3.1)\n## limma 3.58.0 2023-10-24 [1] Bioconductor\n## locfit 1.5-9.8 2023-06-11 [1] CRAN (R 4.3.1)\n## magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.3.1)\n## MASS 7.3-60 2023-05-04 [2] CRAN (R 4.3.1)\n## Matrix 1.6-1.1 2023-09-18 [1] CRAN (R 4.3.1)\n## MatrixGenerics * 1.14.0 2023-10-24 [1] Bioconductor\n## matrixStats * 1.0.0 2023-06-02 [1] CRAN (R 4.3.1)\n## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.3.1)\n## mgcv 1.9-0 2023-07-11 [1] CRAN (R 4.3.1)\n## mime 0.12 2021-09-28 [1] CRAN (R 4.3.1)\n## multiHiCcompare * 1.20.0 2023-10-24 [1] Bioconductor\n## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.3.1)\n## nlme 3.1-163 2023-08-09 [1] CRAN (R 4.3.1)\n## pbapply 1.7-2 2023-06-27 [1] CRAN (R 4.3.1)\n## pheatmap 1.0.12 2019-01-04 [1] CRAN (R 4.3.1)\n## pillar 1.9.0 2023-03-22 [1] CRAN (R 4.3.1)\n## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.3.1)\n## plyr 1.8.9 2023-10-02 [1] CRAN (R 4.3.1)\n## png 0.1-8 2022-11-29 [1] CRAN (R 4.3.1)\n## promises 1.2.1 2023-08-10 [1] CRAN (R 4.3.1)\n## purrr * 1.0.2 2023-08-10 [1] CRAN (R 4.3.1)\n## qqman 0.1.9 2023-08-23 [1] CRAN (R 4.3.1)\n## R6 2.5.1 2021-08-19 [1] CRAN (R 4.3.1)\n## rappdirs 0.3.3 2021-01-31 [1] CRAN (R 4.3.1)\n## RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.3.1)\n## Rcpp 1.0.11 2023-07-06 [1] CRAN (R 4.3.1)\n## RCurl 1.98-1.12 2023-03-27 [1] CRAN (R 4.3.1)\n## reshape2 1.4.4 2020-04-09 [1] CRAN (R 4.3.1)\n## restfulr 0.0.15 2022-06-16 [1] CRAN (R 4.3.1)\n## rhdf5 2.46.0 2023-10-24 [1] Bioconductor\n## rhdf5filters 1.14.0 2023-10-24 [1] Bioconductor\n## Rhdf5lib 1.24.0 2023-10-24 [1] Bioconductor\n## rjson 0.2.21 2022-01-09 [1] CRAN (R 4.3.1)\n## rlang 1.1.1 2023-04-28 [1] CRAN (R 4.3.1)\n## rmarkdown 2.25 2023-09-18 [1] CRAN (R 4.3.1)\n## Rsamtools 2.18.0 2023-10-24 [1] Bioconductor\n## RSQLite 2.3.2 2023-10-28 [1] CRAN (R 4.3.1)\n## rstudioapi 0.15.0 2023-07-07 [1] CRAN (R 4.3.1)\n## rtracklayer 1.62.0 2023-10-24 [1] Bioconductor\n## S4Arrays 1.2.0 2023-10-24 [1] Bioconductor\n## S4Vectors * 0.40.1 2023-10-26 [1] Bioconductor\n## scales 1.2.1 2022-08-20 [1] CRAN (R 4.3.1)\n## sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.3.1)\n## shiny 1.7.5.1 2023-10-14 [1] CRAN (R 4.3.1)\n## SparseArray 1.2.0 2023-10-24 [1] Bioconductor\n## statmod 1.5.0 2023-01-06 [1] CRAN (R 4.3.1)\n## strawr 0.0.91 2023-03-29 [1] CRAN (R 4.3.1)\n## stringi 1.7.12 2023-01-11 [1] CRAN (R 4.3.1)\n## stringr 1.5.0 2022-12-02 [1] CRAN (R 4.3.1)\n## SummarizedExperiment * 1.32.0 2023-10-24 [1] Bioconductor\n## tibble 3.2.1 2023-03-20 [1] CRAN (R 4.3.1)\n## tidyr * 1.3.0 2023-01-24 [1] CRAN (R 4.3.1)\n## tidyselect 1.2.0 2022-10-10 [1] CRAN (R 4.3.1)\n## TopDom * 0.10.1 2021-05-06 [1] CRAN (R 4.3.1)\n## tzdb 0.4.0 2023-05-12 [1] CRAN (R 4.3.1)\n## utf8 1.2.4 2023-10-22 [1] CRAN (R 4.3.1)\n## vctrs 0.6.4 2023-10-12 [1] CRAN (R 4.3.1)\n## vroom 1.6.4 2023-10-02 [1] CRAN (R 4.3.1)\n## withr 2.5.1 2023-09-26 [1] CRAN (R 4.3.1)\n## xfun 0.40 2023-08-09 [1] CRAN (R 4.3.1)\n## XML 3.99-0.14 2023-03-19 [1] CRAN (R 4.3.1)\n## xtable 1.8-4 2019-04-21 [1] CRAN (R 4.3.1)\n## XVector 0.42.0 2023-10-24 [1] Bioconductor\n## yaml 2.3.7 2023-01-23 [1] CRAN (R 4.3.1)\n## zlibbioc 1.48.0 2023-10-24 [1] Bioconductor\n## \n## [1] /usr/local/lib/R/site-library\n## [2] /usr/local/lib/R/library\n## \n## ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────" }, { "objectID": "workflow-yeast.html#recovering-data-from-sra", diff --git a/sitemap.xml b/sitemap.xml index 36e09c8..6cb5d2e 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,58 +2,58 @@ https://js2264.github.io/OHCA/index.html - 2023-10-19T10:18:04.176Z + 2023-10-30T10:47:54.287Z https://js2264.github.io/OHCA/preamble.html - 2023-10-19T10:18:04.184Z + 2023-10-30T10:47:54.295Z https://js2264.github.io/OHCA/principles.html - 2023-10-19T10:18:04.224Z + 2023-10-30T10:47:54.323Z https://js2264.github.io/OHCA/data-representation.html - 2023-10-19T10:18:04.396Z + 2023-10-30T10:47:54.447Z https://js2264.github.io/OHCA/parsing.html - 2023-10-19T10:18:04.460Z + 2023-10-30T10:47:54.491Z https://js2264.github.io/OHCA/visualization.html - 2023-10-19T10:18:04.488Z + 2023-10-30T10:47:54.511Z https://js2264.github.io/OHCA/matrix-centric.html - 2023-10-19T10:18:04.564Z + 2023-10-30T10:47:54.543Z https://js2264.github.io/OHCA/interactions-centric.html - 2023-10-19T10:18:04.624Z + 2023-10-30T10:47:54.579Z https://js2264.github.io/OHCA/topological-features.html - 2023-10-19T10:18:04.676Z + 2023-10-30T10:47:54.619Z https://js2264.github.io/OHCA/disseminating.html - 2023-10-19T10:18:04.700Z + 2023-10-30T10:47:54.635Z https://js2264.github.io/OHCA/interoperability.html - 2023-10-19T10:18:04.760Z + 2023-10-30T10:47:54.699Z https://js2264.github.io/OHCA/workflow-yeast.html - 2023-10-19T10:18:04.848Z + 2023-10-30T10:47:54.791Z https://js2264.github.io/OHCA/workflow-chicken.html - 2023-10-19T10:18:04.884Z + 2023-10-30T10:47:54.815Z https://js2264.github.io/OHCA/workflow-centros.html - 2023-10-19T10:18:04.924Z + 2023-10-30T10:47:54.839Z diff --git a/topological-features.html b/topological-features.html index 5132e5d..4399a31 100644 --- a/topological-features.html +++ b/topological-features.html @@ -392,16 +392,6 @@

      ## pairsFile: N/A ## metadata(1): eigens -
      -
      -
      - -
      -
      -Note -
      -
      -

      getCompartments() is an endomorphism: it returns the original object, enriched with two new pieces of information:

      • A compartments topologicalFeatures:
      • @@ -431,63 +421,22 @@

        metadata(microC_compts)$eigens
         ##  GRanges object with 334 ranges and 9 metadata columns:
        -##                                  seqnames            ranges strand |
        -##                                     <Rle>         <IRanges>  <Rle> |
        -##             chr17.chr17_1_250000    chr17          1-250000      * |
        -##        chr17.chr17_250001_500000    chr17     250001-500000      * |
        -##        chr17.chr17_500001_750000    chr17     500001-750000      * |
        -##       chr17.chr17_750001_1000000    chr17    750001-1000000      * |
        -##      chr17.chr17_1000001_1250000    chr17   1000001-1250000      * |
        -##                              ...      ...               ...    ... .
        -##    chr17.chr17_82250001_82500000    chr17 82250001-82500000      * |
        -##    chr17.chr17_82500001_82750000    chr17 82500001-82750000      * |
        -##    chr17.chr17_82750001_83000000    chr17 82750001-83000000      * |
        -##    chr17.chr17_83000001_83250000    chr17 83000001-83250000      * |
        -##    chr17.chr17_83250001_83257441    chr17 83250001-83257441      * |
        -##                                     bin_id     weight   chr    center
        -##                                  <numeric>  <numeric> <Rle> <integer>
        -##             chr17.chr17_1_250000         0        NaN chr17    125000
        -##        chr17.chr17_250001_500000         1 0.00626903 chr17    375000
        -##        chr17.chr17_500001_750000         2 0.00567190 chr17    625000
        -##       chr17.chr17_750001_1000000         3 0.00528588 chr17    875000
        -##      chr17.chr17_1000001_1250000         4 0.00464628 chr17   1125000
        -##                              ...       ...        ...   ...       ...
        -##    chr17.chr17_82250001_82500000       329 0.00463044 chr17  82375000
        -##    chr17.chr17_82500001_82750000       330 0.00486910 chr17  82625000
        -##    chr17.chr17_82750001_83000000       331 0.00561269 chr17  82875000
        -##    chr17.chr17_83000001_83250000       332 0.00546433 chr17  83125000
        -##    chr17.chr17_83250001_83257441       333        NaN chr17  83253721
        -##                                         E1        E2        E3   phasing
        -##                                  <numeric> <numeric> <numeric> <numeric>
        -##             chr17.chr17_1_250000  0.000000  0.000000  0.000000  0.383084
        -##        chr17.chr17_250001_500000  0.450991  0.653287  0.615300  0.433972
        -##        chr17.chr17_500001_750000  0.716784  0.707461  0.845033  0.465556
        -##       chr17.chr17_750001_1000000  0.904423  0.414952  0.864288  0.503592
        -##      chr17.chr17_1000001_1250000  0.913023  0.266287  0.759016  0.547712
        -##                              ...       ...       ...       ...       ...
        -##    chr17.chr17_82250001_82500000  1.147060  0.239112  1.133498  0.550872
        -##    chr17.chr17_82500001_82750000  1.106937  0.419647  1.169464  0.513212
        -##    chr17.chr17_82750001_83000000  0.818990  0.591955  0.850340  0.522432
        -##    chr17.chr17_83000001_83250000  0.874038  0.503175  0.847926  0.528448
        -##    chr17.chr17_83250001_83257441  0.000000  0.000000  0.000000  0.000000
        -##                                      eigen
        -##                                  <numeric>
        -##             chr17.chr17_1_250000  0.000000
        -##        chr17.chr17_250001_500000  0.450991
        -##        chr17.chr17_500001_750000  0.716784
        -##       chr17.chr17_750001_1000000  0.904423
        -##      chr17.chr17_1000001_1250000  0.913023
        -##                              ...       ...
        -##    chr17.chr17_82250001_82500000  1.147060
        -##    chr17.chr17_82500001_82750000  1.106937
        -##    chr17.chr17_82750001_83000000  0.818990
        -##    chr17.chr17_83000001_83250000  0.874038
        -##    chr17.chr17_83250001_83257441  0.000000
        +##                                  seqnames            ranges strand |    bin_id     weight   chr    center        E1        E2        E3   phasing     eigen
        +##                                     <Rle>         <IRanges>  <Rle> | <numeric>  <numeric> <Rle> <integer> <numeric> <numeric> <numeric> <numeric> <numeric>
        +##             chr17.chr17_1_250000    chr17          1-250000      * |         0        NaN chr17    125000  0.000000  0.000000  0.000000  0.383084  0.000000
        +##        chr17.chr17_250001_500000    chr17     250001-500000      * |         1 0.00626903 chr17    375000  0.450991  0.653287  0.615300  0.433972  0.450991
        +##        chr17.chr17_500001_750000    chr17     500001-750000      * |         2 0.00567190 chr17    625000  0.716784  0.707461  0.845033  0.465556  0.716784
        +##       chr17.chr17_750001_1000000    chr17    750001-1000000      * |         3 0.00528588 chr17    875000  0.904423  0.414952  0.864288  0.503592  0.904423
        +##      chr17.chr17_1000001_1250000    chr17   1000001-1250000      * |         4 0.00464628 chr17   1125000  0.913023  0.266287  0.759016  0.547712  0.913023
        +##                              ...      ...               ...    ... .       ...        ...   ...       ...       ...       ...       ...       ...       ...
        +##    chr17.chr17_82250001_82500000    chr17 82250001-82500000      * |       329 0.00463044 chr17  82375000  1.147060  0.239112  1.133498  0.550872  1.147060
        +##    chr17.chr17_82500001_82750000    chr17 82500001-82750000      * |       330 0.00486910 chr17  82625000  1.106937  0.419647  1.169464  0.513212  1.106937
        +##    chr17.chr17_82750001_83000000    chr17 82750001-83000000      * |       331 0.00561269 chr17  82875000  0.818990  0.591955  0.850340  0.522432  0.818990
        +##    chr17.chr17_83000001_83250000    chr17 83000001-83250000      * |       332 0.00546433 chr17  83125000  0.874038  0.503175  0.847926  0.528448  0.874038
        +##    chr17.chr17_83250001_83257441    chr17 83250001-83257441      * |       333        NaN chr17  83253721  0.000000  0.000000  0.000000  0.000000  0.000000
         ##    -------
         ##    seqinfo: 1 sequence from an unspecified genome
        -

      -

    7.1.3 Exporting compartment tracks

    To save the eigenvector (as a bigwig file) and the compartments(as a gff file), the export function can be used:

    @@ -537,20 +486,7 @@

    -

    Here, the top-left small corner represents average O/E scores between strong B compartments and the bottom-right larger corner represents average O/E scores between strong A compartments.

    -
    -
    -
    - -
    -
    -Note -
    -
    -
    -

    Only chr17 interactions are contained in this dataset, explaining the grainy aspect of the saddle plot.

    -
    -
    +

    Here, the top-left small corner represents average O/E scores between strong B compartments and the bottom-right larger corner represents average O/E scores between strong A compartments. Note that only chr17 interactions are contained in this dataset, explaining the grainy aspect of the saddle plot.

    7.2 Topological domains

    Topological domains (a.k.a. Topologically Associating Domains, TADs, isolated neighborhoods, contact domains, …) refer to local chromosomal segments (e.b. roughly ≤ 1Mb in mammal genomes) which preferentially self-interact, in a constrained manner. They are demarcated by domain boundaries.

    @@ -587,29 +523,6 @@

    ## pairsFile: N/A ## metadata(1): insulation -
    -
    -
    - -
    -
    -Note -
    -
    -
    -

    The getDiamondInsulation function can be parallelized over multiple threads by specifying the Bioconductor generic BPPARAM argument.

    -
    -
    -
    -
    -
    - -
    -
    -Note -
    -
    -

    getDiamondInsulation() is an endomorphism: it returns the original object, enriched with two new pieces of information:

    • A borders topologicalFeatures:
    • @@ -639,48 +552,33 @@

      metadata(hic)$insulation
       ##  GRanges object with 4611 ranges and 8 metadata columns:
      -##                            seqnames            ranges strand |    bin_id
      -##                               <Rle>         <IRanges>  <Rle> | <numeric>
      -##    chr17_60100001_60105000    chr17 60100001-60105000      * |     12020
      -##    chr17_60105001_60110000    chr17 60105001-60110000      * |     12021
      -##    chr17_60110001_60115000    chr17 60110001-60115000      * |     12022
      -##    chr17_60115001_60120000    chr17 60115001-60120000      * |     12023
      -##    chr17_60120001_60125000    chr17 60120001-60125000      * |     12024
      -##                        ...      ...               ...    ... .       ...
      -##    chr17_83130001_83135000    chr17 83130001-83135000      * |     16626
      -##    chr17_83135001_83140000    chr17 83135001-83140000      * |     16627
      -##    chr17_83140001_83145000    chr17 83140001-83145000      * |     16628
      -##    chr17_83145001_83150000    chr17 83145001-83150000      * |     16629
      -##    chr17_83150001_83155000    chr17 83150001-83155000      * |     16630
      -##                               weight   chr    center     score insulation
      -##                            <numeric> <Rle> <integer> <numeric>  <numeric>
      -##    chr17_60100001_60105000 0.0406489 chr17  60102500  0.188061  -0.750142
      -##    chr17_60105001_60110000 0.0255539 chr17  60107500  0.180860  -0.806466
      -##    chr17_60110001_60115000       NaN chr17  60112500  0.196579  -0.686232
      -##    chr17_60115001_60120000       NaN chr17  60117500  0.216039  -0.550046
      -##    chr17_60120001_60125000       NaN chr17  60122500  0.230035  -0.459489
      -##                        ...       ...   ...       ...       ...        ...
      -##    chr17_83130001_83135000 0.0314684 chr17  83132500  0.262191  -0.270723
      -##    chr17_83135001_83140000 0.0307197 chr17  83137500  0.240779  -0.393632
      -##    chr17_83140001_83145000 0.0322810 chr17  83142500  0.219113  -0.529664
      -##    chr17_83145001_83150000 0.0280840 chr17  83147500  0.199645  -0.663900
      -##    chr17_83150001_83155000 0.0272775 chr17  83152500  0.180434  -0.809873
      -##                                  min prominence
      -##                            <logical>  <numeric>
      -##    chr17_60100001_60105000     FALSE         NA
      -##    chr17_60105001_60110000      TRUE    0.57476
      -##    chr17_60110001_60115000     FALSE         NA
      -##    chr17_60115001_60120000     FALSE         NA
      -##    chr17_60120001_60125000     FALSE         NA
      -##                        ...       ...        ...
      -##    chr17_83130001_83135000     FALSE         NA
      -##    chr17_83135001_83140000     FALSE         NA
      -##    chr17_83140001_83145000     FALSE         NA
      -##    chr17_83145001_83150000     FALSE         NA
      -##    chr17_83150001_83155000     FALSE         NA
      +##                            seqnames            ranges strand |    bin_id    weight   chr    center     score insulation       min prominence
      +##                               <Rle>         <IRanges>  <Rle> | <numeric> <numeric> <Rle> <integer> <numeric>  <numeric> <logical>  <numeric>
      +##    chr17_60100001_60105000    chr17 60100001-60105000      * |     12020 0.0406489 chr17  60102500  0.188061  -0.750142     FALSE         NA
      +##    chr17_60105001_60110000    chr17 60105001-60110000      * |     12021 0.0255539 chr17  60107500  0.180860  -0.806466      TRUE    0.57476
      +##    chr17_60110001_60115000    chr17 60110001-60115000      * |     12022       NaN chr17  60112500  0.196579  -0.686232     FALSE         NA
      +##    chr17_60115001_60120000    chr17 60115001-60120000      * |     12023       NaN chr17  60117500  0.216039  -0.550046     FALSE         NA
      +##    chr17_60120001_60125000    chr17 60120001-60125000      * |     12024       NaN chr17  60122500  0.230035  -0.459489     FALSE         NA
      +##                        ...      ...               ...    ... .       ...       ...   ...       ...       ...        ...       ...        ...
      +##    chr17_83130001_83135000    chr17 83130001-83135000      * |     16626 0.0314684 chr17  83132500  0.262191  -0.270723     FALSE         NA
      +##    chr17_83135001_83140000    chr17 83135001-83140000      * |     16627 0.0307197 chr17  83137500  0.240779  -0.393632     FALSE         NA
      +##    chr17_83140001_83145000    chr17 83140001-83145000      * |     16628 0.0322810 chr17  83142500  0.219113  -0.529664     FALSE         NA
      +##    chr17_83145001_83150000    chr17 83145001-83150000      * |     16629 0.0280840 chr17  83147500  0.199645  -0.663900     FALSE         NA
      +##    chr17_83150001_83155000    chr17 83150001-83155000      * |     16630 0.0272775 chr17  83152500  0.180434  -0.809873     FALSE         NA
       ##    -------
       ##    seqinfo: 1 sequence from an unspecified genome
      +
      +
      +
      + +
      +
      +Note +
      +
      +
      +

      The getDiamondInsulation function can be parallelized over multiple threads by specifying the Bioconductor generic BPPARAM argument.

    @@ -743,16 +641,6 @@

    ## pairsFile: N/A ## metadata(1): chromosight_args -
    -
    -
    - -
    -
    -Note -
    -
    -

    getLoops() is an endomorphism: it returns the original object, enriched with two new pieces of information:

    • A loops topologicalFeatures:
    • @@ -848,30 +736,11 @@

      ## $`--threads` ## [1] 1

    - - -

    -7.3.1.2 Exporting chromatin loops

    -
    -
    loops <- topologicalFeatures(hic, "loops")
    -loops <- loops[loops$score >= 0.4 & loops$qvalue <= 1e-6]
    -GenomicInteractions::export.bedpe(loops, 'loops.bedpe')
    -
    -

    -7.3.1.3 Visualizing chromatin loops

    -
    -
    -
    - -
    -
    -Chromosight users -
    -
    -
    +

    +7.3.1.2 Importing loops from files

    If you are using chromosight directly from the terminal (i.e. outside R), you can import the annotated loops in R as follows:

    -
    -
    df <- readr::read_tsv("...")
    +
    +
    df <- readr::read_tsv("...") ## Here put your loops file
     loops <- InteractionSet::GInteractions(
         anchor1 = GenomicRanges::GRanges(
             df$chrom1, IRanges::IRanges(df$start1+1, df$end1)
    @@ -886,8 +755,15 @@ 

    qvalue = df$qvalue )

    +

    +7.3.1.3 Exporting chromatin loops

    +
    +
    loops <- topologicalFeatures(hic, "loops")
    +loops <- loops[loops$score >= 0.4 & loops$qvalue <= 1e-6]
    +GenomicInteractions::export.bedpe(loops, 'loops.bedpe')
    - +

    +7.3.1.4 Visualizing chromatin loops

    plotMatrix(
         refocus(hic, 'chr17:62500001-63500000') |> zoom(5000), 
    diff --git a/visualization.html b/visualization.html
    index e478ff6..01fd853 100644
    --- a/visualization.html
    +++ b/visualization.html
    @@ -356,7 +356,7 @@ 

    hic
     ##  `HiCExperiment` object with 303,545 contacts over 289 regions 
     ##  -------
    -##  fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" 
    +##  fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" 
     ##  focus: "V" 
     ##  resolutions(5): 1000 2000 4000 8000 16000
     ##  active resolution: 2000 
    @@ -504,8 +504,7 @@ 

    # ----- `afmhotr` color map is shipped in the `HiContacts` package
     afmhotrColors() 
    -##  [1] "#ffffff" "#f8f5c3" "#f4ee8d" "#f6be35" "#ee7d32" "#c44228" "#821d19"
    -##  [8] "#381211" "#050606"
    +##  [1] "#ffffff" "#f8f5c3" "#f4ee8d" "#f6be35" "#ee7d32" "#c44228" "#821d19" "#381211" "#050606"
     plotMatrix(
         hic, 
         use.scores = 'balanced',
    @@ -597,7 +596,7 @@ 

    aggr_loops ## `AggrHiCExperiment` object over 148 targets ## ------- -## fileName: "/github/home/.cache/R/ExperimentHub/1a9a4dc30249_7752" +## fileName: "/github/home/.cache/R/ExperimentHub/1a92248c093f_7752" ## focus: 148 targets ## resolutions(5): 1000 2000 4000 8000 16000 ## active resolution: 1000 diff --git a/visualization_files/figure-html/unnamed-chunk-10-1.png b/visualization_files/figure-html/unnamed-chunk-10-1.png index ced2797ae5870c98ddcdd16ea2809193e5a46d4d..f00b751649b278b6a1efe38913e9fb25fda25225 100644 GIT binary patch delta 20497 zcmb5Wby$^aw>SDs5Kuv|=u}GS?ogC&q+3vw?nWL|6eXomN-1ejTG9Y%q@|JWMx@VR z#k=>u_IJ+p9sh7GSumeD?|Y12jj@c2Cixvr;^&X?$MVPaKUItqCyK7Hxc5~3!g+j~ zk-wW@#HqVVGiEx)?2UDNRH>P<;D{XiHosuyoYfnB%XgNR_l-9q@=HA*6BA2az}Wj4 zT9|Tl?0)!53=F#rizKNIyf1ndYBHk;s9vFM-Nm%B7 zA@HO8%!qq~v59DO#Ag~^w7$lNt(G;Og7M?AUL^_7y}NeVyHs02QeL7dmR&1f(L4H} zRT2*uVI+yH|Ax72&`;`o$?rzKg+&O?@NH_>GnO8i7}dt*tU>3b*dxVOvDT`6QMi6snL+C80ajT9@ zoVt!3u#ZA_5_E*t}5pvaU@&y<&^i zgAr+3I$PFG$G_Dd11xbj}XioX4wYRPDQ$)<$Tk#lelx9hF?s@%`%77+Zj2 zID|DmJv2>K<5x0!(6-TYWkYB;aHB)*H6FsUD3q~0gSmnJnte4!S}3rVZxhM;lYhJ= z>_&oCayUX)!<*CFyC6R6Ighc{O~Djg==S2ZX1I#YDfEo8AK|LCsJcptuuR9}uubu6 z&Ti8A(46vPrEM8_!}O&ht5#19-}8zG58}(!N#R3;l<%>32%q(Q>B=6*9aqb z+V6M2rb6;NeqUH*73k}6Hop5ShE))W#`Vj1bg9Vzzs{xNr-trX zB!7d5in9zcU13pvL5a93E>2-t@FGFvW;7mJchKF^*Si|R2-m~G1*9(eWyOl3s__N# zZ(FM}MbgEw{C!#T;!mgDO44r=-N<{~M~wv9H9pV^cII^K`-X!UDmnRIq44aFRhB`< z;_b^F&eVAbdJe{}I%3zk7R`SeI7O#RKlVbNHx~P$dEY08lGm)f1DB*I&M!!*p1$IL zUg|V@#h(vr>r~P!gS%{qpSAT{$7jbu{P)xZAJ+g!U5wLcJd++jjWbe6 z(Outomx@Ks4yiL_0u4Ty3MdBSoYK?MzxA7nql=(e{IX{OI~)6Ga|N;v&2VLt4{ zwT%JeR*4O{x=Gh)M(KYMDDxsp5o*8BAw~K}&(+DDF%De$XNp%+yra)8`_eGx`P|QG z_d&I>`}G@Aic+l!M=v9MeeDVh8Hn13XvYC1@<*ceU=PdB)rF7T`2ybkbq^%E7Nb^i zTYEl8t@viuQ&Ts4PTD{Ztb&aTu^nt$Up&tGO?BfUJ-^H})$NMgv+^IMHPf)ylbDMj z`O&qg?mUg>&Cp?!EvE9_wpEI=NQSl8BFc`mO45uv`W@>#8DuuEl-Atv#m@DDf^m!RVCs0eMv1ZBt+~*ZyP6b-;vpXw6>vn@u^Q+3-WUqmj; zwHZEn-J*u1Z2RJic{SrVpm(;dzJB%uqQ5xEoOx7@IYCy!ZM# zc8No^mdMW_kUb-JpStBZpGa}Kb6y%d>3kQNI;oe`-;I1F?ZR8n@iP@T@q&k&%Td#K zzFxAaj?u-{h%QU$3x=i=O2n?_>L)v%CY>z;L7gLmdujtAIp5Gc`a>R4WSGJI>AeLm zWZ3Cx{3ha8p-{Hd(_-j3OmX8fq8nI|ej3R)U{0_Xpg~NZNW1h#iq71;n7R>Hp+|E+ zAS-*ga5lrny0zr?!|U1lnp#z@W}oP!BKd5s8`XX%`ot8At4$^hDacza8djFLemNd9 z=gtUHyq-l{sA7pacza|Gc;F&$BNn^For|t|jzsUb&$LwWP$O}o&WpHyLBIMi8Fqwz z@ddzk%JwC?N~Gn|Vtg@Zx+fMhx?@wG z#Hp?eh~O;N`0%NGJi4r@U%c!yHo}_9%#D(_Nf4!t7ND+tSTN`^=70JT*NBBq` zgADUDio1(X%Q3-^!Ij7Nn?1NhB96>IFUh{mj%&(ogmB{3#ckK8G#?{==^Cx!gpsa7 zUdg0Wb>$djma)$~)+B3u25a#Rf*kD0#MvVPkwcYufZ_x_ZOEF~;=!8!^!7PiKgzuB zvxaS0NYP7jR?Ln2)Jbh$@sNIxt7Ew~t({uPuO}Ap+6N#1$`lf3;$Q&PZIXamLMJ9K# zjO`H9ntO$Yd8gj4@YHSZ4j@Vf0a)W+^qhI8Oe;9TA~{9G))a!K126ccD;+(uI#7OX zB7=i)M38+Wlo5Vf9-MtXZz>C;w#(`1d+JWFFhy| zF(jebmF>^vn2Z*`w#`dAcmu0UirnRKJcD~vhGJKyygX&RHpbfSCC=%NOc{?wR#z-q zAf_Bo$aG$MJ`v^(f7`84G>v2AFXoj{FY>5t3iR3HnxaN;Ru{Up@l@zxe7|{Ff^$Rt zq(X+6zI)7P5!y5k0;ILiPs>;9qgHe3%FRni23A?4$#o8`B7UXkR0x+*<%m=B$7vkf z-qCXwi>Xr6XR59cAw?32GtI6A*RT<-NJfiGUW3rZyQwDO=>dNPmkY zA{QhKu=7NCC4QT{|ie48M)nt*23;=wXgY%4>#7cwsGq)JXgM>ue*gaT=vYVIh` zN8$Vo#Qr`LfJ{;&mlqET`#FwYPWm)BI=J< z3@^&QMI)#3Nzx~Z4R&=|HNxxfp(&@YoFm{r0aB$6TslkdqKIv-DJ)Z_>V%o~YlwE< z`?5zJyYct6cCmltC$mRZ#Z3+8wmmnQmRu_5zu55r<8Y^RZjU4DYmSR!Y*oGbjTPYn zwIM;@Tv^k8=TW8^68`+M0Uc%WS$n(HE0%+zX!E#X^4){5odnKOm3zxO2W{&I7-LXp_ z;>F{WkJUoOCssq7b@MUhN=Fk{P zbOCqBqR4RITI~5Po;Z?WhUjD*zm1~Yc_Bn?Y%mWm`XI0JA>sH6zVB}Z8LPW>FQnTcbooVlERAz#?jQ;%>_ht^?QNJ zH(8LC6!X!$h}vtW*{X!=eP0CukD{9Ipyt=wn-7~h?|YsLnE6e&MrYFzF(+&IVPgKa(%(ep;Ply2-cF+oz>Ucx&xUy}SDw_G5~-3IvgR z)Fg}iZP;`&4{NtXk?v^gIt=pW#c8DKW0%j77?Ra;ODX+{@+^9^NaWN?6o%zjbtzW} z&reuU!h2y{1AvlSm2+_(2T?}-Q%zEbTiYtUkl}|H1nb&7H`uQz-X%xOWv+8_WBZ+w zBS6X;+hzi3@e#S39B+P$AcZPJb~QGq5Ml;Zek5AP&Q?)f!YnMKn-O8_XRW8vyR)kp z|C$Z)xSL+lc)E^J|7h9rkFoFd)Z8bSLI;O-Q{MR}<>98dx5s>*mTaTT=C+@$wGf9} zt5;`TB8hGih@y=ildsls{f_i2njaOEjoLE!^J(@xO9Hp>mu0X#HFpNkkp6gyOYnV$ z`;4Gl%EndXn(9(K0al%&%3C&U#5v5=7aKD^*W&d2ClM0Iik8G&*^$?_9Q3Qe6lzl8 zBJ%WJ7kGni63V0PoO-K2de?PZQ^xQ-X*_fg(|nd#IV5ImTHY@`hBrZ2CTKo|%q&p; zC_?0vU&VxpQ)|A_-9!f(q+7zO@(O7rE;id7NH*pD#8Nl#&djl z`E67ddF1`8B=|~0J1RI@COhlaRSWsADGbF(vNfjJ8VFEsf3iCP*HgnsDCFn$-bUqq zY*F8Qu0>nyG`U(Bs={1wf%1(4)_f{P5P$iopThl` zY-6z#Ddh|cn!FrYfIV&}ae4&{QR59e@@p$H3uDfSa+Z)D4d*}*L7nDA*Am-zj}Rm- zV7OO~Dm5+K8Y`!QWut|4>dwRtL60v|M#hWOxjcKRzJ67vg?#FkL!|f1oM{z|U_rjF zy?}mT2ev8k#wCxHU-*93F2kQ*8XXp9N%2cRyiOvH#+7#t{`!(fif9gx*Uw@cLIgz) z&mj3rq`!1o!Z3dIjSAEF->{gl#sxo4hs~Vxo1@Av4Qaf3RTKAvwb`AdaG+r2lv)X?H>*qoH zM?+l%Me>h494;f5n?`iwaySuVz2~eO^U~~N;VJhFcZu>7@!oniP%P96V)^NRt*XY5 zbyx&$FPL(-CW&IjW7NuG12T#Zyu)Cg0v1v z2eUIj^KQnGX|By?>u15}22SCPnT>jsb7fc{8V4 zzFa;L*7=?L3rtz#{3*>8i&YF|Et1+!-lvg{%xPTfbj|}W>>C4R?iOKFwS%g-p1J-v z2Pv2a>HPVw{cp(l>>T?7r*DZo(~68Kz$83ilw;%v0fRbNC&!x)kBQ*_!xBdIdgxZK02V?bG^l?&dcK+Q5eZ;?rvB(JjxCT% z_^3+gcAg}1hX&CN-iSMX!!rH4cXe6ZiF1sdD0i6zTbUIZ-t!Cf6mv9S z?0=GFz@wgLHE(8AmeMhWQy@92t;}UCyDN;emN2@ABU}}f+0usE(T6`LBFF|qp~{YQn;lwr3^z&33bYTD$))V(t|D`|PUjEUPUc*ALgK}dH6rKYnW2}CcMgv1gdz6v$E zt%`Vv6{)}LskeI_cOCGNZfVa0fldD1US8!OCNpu)9Aup5HVsMmgT_jW5mF47-K$y# z#(>lx&Z+etOCm^L>$5B}q%2_i-8K8FO-iJU8B6P(J`$smIvt2Xd|2xTG;qo>T!+TS zy9HMf4)H0{OD?L?C{|$kLh`gCPlgC7mUCDam*{URd_gr>c)%h7bPOQ#k8!y5GBl@3la6L&C@^lURkd0RGT3g5Ro$kM zeC_G$D(lvapNlH)uKIn-Fu-MepEzhfjbrRcgY@7i8Mw)sRT?yhJ&i}|+OT@5ZR^HZ z%$Zv2;ZGBsikVKoyoQP%j6`fiZampv?#*l_&}~L;IG@Xg46FWn_!q--Wm+2}cYLLc ze_-W4M`;C_*PAypTQP_$#+kL|Qn=QT^t*$L{5^IP=#1VSJd19A<0K5yI<4|Z`e)C1 zLF7Q@Ih9|mb7FN1ip_$l>pj)m_D=jy32$a29Ld{z-c_gzHGSUdXGxXhyU zuQ%CW^KOg=r$<`faz4+(Lb?yJjIJQYKDbCT z8uX46gV64_V^um5Bkt@0?*Yx+XY4iw-(~rew%~m^u+C3O3Dx5;o)jeTbA7^h!zhBN z&MCD=;~rvT+>+0Q?YHuLL4gpt+}z#%S^69jLE&qKG_qcH|I{YkXU~x8^I9`D2+>tw z^+-SC7udvq4##Q7Ub~#u@4E6XOVM+5OY2-f9cyziX&a*Jm`--j*yw6NT7eqoM?zjy zz7taQC0GF;(T+?1v`(C>)#=oGk0%q!>}cWFa~@|w?6_WYYGH9v^jGJQ=n4VV4?Y|6>oJIWhB z=w|7vl8t*)8@)!qaLkdBMJZad@346eyOQIh`v`T8dY}1Smfc*Z#XCQ64QN+1mB%e! zG{vqOPwUi>M+sS184o*cst+XY1s3L9Dbv4eH>0CPP8&cu{h&qZW6k}qahV5#wNXnA z9y&=_+K1%oZjPH%n$>4hZY+kHmi8%GyW^7OscQ4v-Pq1!6`f!yaGBYy4K-9oMFsc^M z^xV&tfG1zgMpEzXSiOu$zlgL_xuNob@}2C3CY*Q;Q{y?uyVsL;^mCcJHP{2FsW33;WdR&lLzoMiEXL6GTH1`b*r zLDtxk1xH=Zu{K_Ym|UGz3*Y;XzxrOPe3~_#s#npDV(nz?aAG9n=x?0!K>yqK;fnp`FW|SX({P{vMKt4i#q1q6KmK@sPBx5mG2!6g1b=9Y7ZkmuCEi?HWVd-BwCWbB zdB$mXV>*{5PkZQt`FH6c67rA+3PI1=M0Z_w9$sGi<8q4fSQFpZ+}e-O!*a(-K8lb@ zTl*}gOU%N5M(O>}KmO~GC{oT*3fK&l+8!P3hDq$rwI_;_n>)|8S5JBme7xUsM^$`U zC`=}Gez0VbdaMMy{kE$;UxFM}A->a0>uc6ri?%n@%gf@f3q1ox4@7@XEticMt1EYB zD6c9X?9@CN;q6`QSQ$YppFVk#Fr46A<22p;^QW$=YDZ>fCj3Nvn+4-`5NFL?UtWA! znY)L_ANWIDWaOk$#Kc!3$$P;@m2S#HRJ!NC`CU6}gys}qhjEiEl26sZ3boBI-^a$#jj1Mt!?;SwZRzLH;r`fq^~n)6 z1e1qux~z^G9W3M1UB7M#UxLf3o(vzh(%g~x`tlp5k}mnt?}1QiQ5M?cz5ZIam0{2N zKw=a<-XF6bnyM!?AvklULagLVQUFnMM%Y&{PQ}QT^;>jyCF{>tB z9%Bzgk2aId8-nMD%2vmYk9Jsf^4au0PN9F+CnXQoZiR?nzAPI?6A~5{795-)Xg`{D z=Y2$EWKdw>ZQjwFYrGb%9y=rMCceAVaNJ1}kGz^980Y8bMcr3!_pXZLN!_|N+ZO+z z^0{-3$NEHE92uTG0`-Dt+Lx=x!NH+`%gM?4{e6!km;Wp8kdu}<*O4IXjD?MjS}O&< zco8S&xv{)DQ8wo5Jryo%XBpWP$y{bPqQ6TqqNeSHOEK$h)SZ!{a9I-c20KoyqcE}t&OTYKKR}p3k@RWoSB&!olG3m8b5Q1 zsprpoQ!}#^{X93r9`@d;;^N}(G^lrLclV_mwvzpB97dngG_pp0HkI$U?QJiTo5SZz z*woI`7vK7EOF=_lpTc~}9^H?hWO!Fx%y;$bRXRGPt~W=gz8NYufYw*HsmQE8kYX_+ z@j;R&lbBdlTH0+NpY2|qk&zKNN2*iyd=y4TM$F1@(io~Y+eML&MMV|p*H!WF5=Va~ zU%fg%?O>(&MiQ+lD6kJx;5@?$9znra?$Y}$ zF%-PVTivRU_J41$ub(+{#&dT%Hd^9CQ&Us$hidPgzEaYmqw0jsXZWNtGBSI+yXUBc z*0$!mDMDnb#&W8X4%fb-M4V6s!xheM1xI$HRTTzhb|Q%!EG$<0zn9JKtEv5Hea#y! z_C1u^JeXR-N7sk%wbGpoCCiadu0-tN%9gw!HRi6UAB z{XyH%qlr)=a5!Yd#M7&*CvP@3CdL;kx3jZTBr#tW4WqHNv~*3Xrl9|@-6>03-_Wq& z^6ABk7xh7;&h62+;>Eq)pe>8_ZB0$b3-5ll3Cl0dqoTE}etMb1q=xFkg*+p@He7$itYNdulg4<+Z7VdHK1y*wmnJ6K$5JA`}c6alTo!9;zKYXjA#OPhTL z_92vlCS(pNxOi%6YVH1tXpiw@>PmY4fv;aD zKYXY0-fR=BbYHd8@wFwM={G_7@Ns%Q@66pmMeLLRqMHlTF6Jh zHEuOAC$}bw_J9BW9B-M*s*FTlHp# z)5`+v@-%$wmY)9Qpsn49&slYzgv1RVGBIHmewl`bhMc^@ZF!KGRr~hs+Yd_yTVgq# z+p)2+AGF53TUwm!OhtTm(P`54VIDTNrC$NGN8?Y4X4(@MS65f3r(Nf}(ihZ)uN?z# z;I1tdb>tgXIPGoC>*r~E`jSyn4rM6Elk-{_R(rWF_T^E8WWYb@Wr7=9TK0EmlW$2$ zMa`xVwkH`exB(H>lf`r0{Q}jo1qFz$TWI=N&I>LP!@z_x`EE2Z!>w7Usi|pdY9<;8 z3u(+g%{@9*lbQLj?F~Omv=#6lzp?xJDc{deaFR7kd=I_Ce}xE+u5E05a`=Tc>$5f2 z2}L;36%-qjnv!DdHJ=X9@)VEg_gp7E9o^f^%tpsnDEB<*t+ATJjp>$-B=MG<-xB5Y z{T!%>$S3cel@75@B{w%Wef>e&qcyxdZ3B2W)mTByYss43IXaxvXAY>dngRjCev04C z&-+3p=5fA`)WqlAl$i4jfuD}CXL?G?L{HY82~B*nZ=a{8?%~N#OhR2`chB?i@Z7dl zr_obQmKbSkTTTs=Xzu73E3ww;&o`p=K*uqWO;c}210!?_jPsUSYy=b|wxBhHPmlio zsi>%Ue7K74tc+CNd9PA6xI^PUIR5!5u;q$U7m)C9iFN;XT6DOjg;h+26PO4_f#WX`MSjis!Xw&y%jJAbA~2LUe13@pIKM=(?aZo9^yN9ciP`rY0A)mm#l ziXj1GDJiVnk*BspI=z)Y7F|9)d4jdBF1CEU{+-s-s4WTD6QC`|c1Las8(2G?{h-AD=nXP*PeO$ocqGfo|~htoRcb6~(akLqx*cE&OM5Tbrx1 zbCLL`KY#w<(RkcI*(7&{oi8ydsYS$anh@S7=ocN$E~T$dr<0D%{ZxA}&8a|Bsca)l zT|`Vl!NNmE@EqR630{l3Exlrxha^C|B20O%Xe6$zot zvi+S^ytOvLv7alQ9UZG3=ur{x=b$zW67N*_?=FGAzyCGPJ3Xl={voKCUMp7_ndiLn zH*emAtJ&&Oq(u+bi!HldM2vKG--eWPv9kyqtOT>({Rn6GsY6Y6(~qRY+-Q ze8=k^i$-+&JgER*`M7{9b7RD7e69=hmKiy0kXWRvEscB)K>M$WY3y`eJu z0}|tl;UESrJo-ZN35 zCW~~$FV=I`9++{F*{F7cj@>=n84H@;UhGHLKI0*vPky&>*1izMw@bAsd zMbJt~;@%6nF+irjfB(*3AD&P#6h*|nw$w_`5)t8<3Wg`;Euhp)OiX<-1EHJz6#^w% zWI8(iAjtvgx0eRGzka0`5OAyW!_?H&C@^A7xyWYP;`^Zr0s{kq8`0;_pNq&rU3Ez8 zFa3CT%fx5Be&KG_dIRMcdVFXCQn9C}he+a2-PqVMV04w!bl_93mYfoE@*bwMKyDlf73efcHcqw`St)S3sph$0{i)`Rp&3mD!IaMMf6c z4Dg_gPoLgVIBiMy@bbwfM~IfTHi_T*&Bza}K%-Ak{2 z@4*A?!o!x)p&;3ojn+_jAH7_q`kaa9bTkROzRy;t zY?$Ox`Q&7_vW<-mFfzI~|9+t($9BjZ!NS4<3Wcjte#7TjSP4Cb92^`_Els%fR5JBv zl%B<=6QE5Ymi#hE^LVE0r??(A6WC&S;o9>B#ErL!oH#4IF z2zmSVEyxMSc3Pjcn+SZ`<^BSbO1I_qBymyeKDMC@3tLnk&J6eI-QjXaU~e*Rvu|)T zsxYG2>Y8ebtgrGC_x`PU_6#8*h|}HIybq{)hM?*~Wa#a5Pm`0AlLRq}i4EUeOGb}8 z)zn@sUtUy>7jSiVuLY7$e4q0PI_IrcjyAM+A+P+z_R+_WJVQ3XA+3bt<53r-C@!Oa zIe5!lkn=u1J~e+P@b4>wRtAQ?bLS4VeK|;LfHM}_$%zRD`HQ!n;DdlFupJuQYa3M0 z>HQu?t0OUZZm$|NMsu^mhlHf08teXixaL9W=^OX%rBzn$FZAX_^8@u)!&@>mOyG^j z2U#*H2Ocy-BdZV1GkBl-TF~A&S>h3cyolGrvmrQk|Qzwr=Qcj%8lfD1n}@(s#VDng;GP`B05k)j73UOI}iBkdds zxpje+`jOO{WYG%z4}ZKp;ovjgAg(};tPGW*1#?rhq@=NL-mt9P|4CzHD{o(WSi0Os zI8FTrUIdN;>t~5|Y=p3==>Ei;ko`G*{SdNf)FK zoH%uYpp@LLTSjvbqws03tgLL#b|mvzYB)MN!riE-v^PhyGRj}%WGT@7Fj3SYVNhzL z=i*X4@;oam>k_kyrbMZAza113*dGugaP{MG5rni7Z1NF7K|v$W?d_Z6L-oZ#uThrbQDw_?9MaUB|TED6c7$we{q4+;5HouS7`3WeTPa?%)1+qlL4c!3|y$OsYOeV_VDc z@bIIfqY_5(^>3F-o^=AFf?NQxogj%y06cJV+C#hq-%(JrXLaL--%~G9NO|B`z+Z`R zbFV|=p4=SI{Xh@=x25Cs^z?W{G-B{z_^SIt&vh_IP=8S89g@dr74L)AK45bV5Z{xN zI~0-nC05&zXn-5%0~7;GSPhB7@!{ApSVMs1-;Lq)+d}sKul7^-8W|ypYkV}@dTr|q z*nx?O2{CbTkpA#}Il;4Hwu5|#_wS_-ta=6g;0Rf6J-}y*v}{ihHWOI{@vQFRaM+L5 z9@Xa%UQ9|#qM@eF>$R%?(OoK^;LMF~!?T2Dp^i?nBrw-RM6}{wE>Nh@s9oLNAbv*Q zt0qS>tA^4_N{ESxadD|BUDP($By65dD9|raXjL8o@&$$f$oU{4ARut%%FO{5kTM(` zD!b(mJFh0H%#JVhqGT^enu>MVR;zc6H8rCuD=Xv3hin9b(x^qhAPqHBQv^3?G?+L4hHb92qTuRexQ6-^YNn- z#6s{M!TYg;YLJsV?~LaZP?G5EyEgvW_i%6b&mWhSVPQr_X+0BzwS-OZ-*%7{lz?~B z&x7MCg^J4Nu^eU(k&-lTAZUnlI^E6ybS3OO1C~=Er?=F8?5F@e%=t6wa8w0ba-t3P zADD^3=5Cl|q@_)PBn}J-(Hgxn2G|8o=S_05y`aJXiYXdMh>Yw83$jlwH>quCxHLI= z5*#&wu;2Ze+x$YC-Arl{EEK_me31pupMLnNrYh_|=tLDhWdB#>T$j z&OsiWBj=f_E!ZZ!k*=Y>SRJ0dQ-Xi`^xHmB_!0NF|NLn8Lp}%r6_u1U8^XN~*1y}% z$}mCrWeEW&p+z)45z!cE!0KQ$;Cz>Z+Fx6=w_}o%(ZjuMxXtd%3MUz}rQiQZp0{8L z@UQ5Z-+HX(k%mUsVd#_dQuqE1q^DH69`ZrrQk_%z2O0d8>1oHhsChHiG*afAHr(}Uzk0(5ky>k}t> zdjnYX2MA#xIE)Yw6~Ldod=nHDjn~|}si`UWXfN{?VsD?eRQp>@LU2_MF)B|3L?El~ zbRQ3aL3%f4TVHSfxJC2`{P)DutJurvV7@w45YiH*evH%wmY6NsNNJBd<~#{)>3W27YCj%(K% z-Q3E|zlU-+0C60wef>8c`zvJ+s%r?L)Oqmh|0N{~k4i`YmZ)^M-{w+KR4n@V@i`%N zcJ4gLdItvwef>Aa1**!*5Tlhp48SJ)JK#aV^xj3*5&ZxgY#lPqDS(A`_a$#w8GP7_Wm2cg%B^8VDXd45Ux$ataCx zQc_YaG3+P2anFpN3moHx+F(sy@wU1pu%hy(G_E#1QYK=jd{rVaJ zas2ahly18l_Yu&YK)uGs#=Y*d6BAC5C=XGdg3Jj>lt^st2Ka$w#<= z2;E~8MlV8Wj{8?`d15Gf0gj4_ilkNTBb&BBX%oS*ZgxnLW?|zIF7@T1LqO`_S5b&| z;5(1!Rnd!!k&%&`o0}khbu~5l(4&LSRM`_qwdqY)jJ^Byxh-7bkGD75zx@Em329XM zr%#|dJ2|r2zrd5+S4RQIF|BX-b0E+@VfEvqLkPfxfQ~6nK8RUmYHn^WsJgwqJrxxC zny=#U@Gx3aJ_0Iw10KAwu@FAh`s^xD+{~)!wYDmJh(WJb19P*w6V@;eGeB zfB;${2RbgUA45al@ac23^B`NX?@XzOBZLSUZ~WWKOX=z9P)}OTR6O@ygoSl{eu`%= zStWwM+L;>guo@dZePSc|C=%I*O}Sd*1q&d4BqkhD`A(RzUX0&nC>qLB)D6-1^pFg*b2&;a$Y^6M9d?%K7}H}2kj zXZs3NI&jyvVz!Bm|EtP?q`&80;8h~*j`%6hpGQmqlB%+SwUD{4^cIL+p()`i#GyQ+ zqM{%;)HUc&p{%$HHQYXvGs485UF6UZcL|lXviNKKKU&^mAs>d;rX6`Df_%>KOOJg$tl{z%xJl$V5+{3L_Vgf@8k>wh$S^ zjlb))+TWTly4Mt8T&S8kL zPT04+yr)Ogu|o=8DA{Wv3w)4{wss&ta6*q&37lBIiAMEP*pg!Wch~4Z(81juyz)_+ zd}Lry(B$N#vy+o{zTtIw4LBdj)1bU$L#c$VdNP5AX+&Jmx!Gh?MP42=K07P;Xm1Nt z*4*|Uq#v!Vtq|LTqyOrbB=8RW1E^hj6_u5NqS=!%$<~}YV^dojyP%*uB=tt0T+R>> zX!ePklqW*m>I3;Y^nOriXsM!z(^MlcO-f1%37f8Ir39Gbm&{3VBCb{-WS$eDv`H{u zftePh#Hz1(>ihdiZyZLzeVZdxiDD?+y+ng z2qre*yrIfO+*hg~QW(mEnF%o^Wls0}V5x0>FX{jELo*AIyV4d<`JN2HyR0G84FXF{OL{ zliRY@5S^-uibe2A?9=dbZ)bINanTwb3OWMJfu4AGwCT^M^q-UBfTV60;1i%(HBp4$ zWljx&`vtMdZcu9Y$z>ii83eWxrgccT=kKKfNO0#M;)3Z8KD<9kCErIV-6s8I{#e8Nft9~lJ%N+E540h#Aw zUfFF8AfA)tmX{ZE3I~S~RLy#uWGSD5BsMq#_{|Z<7Q7tyzU$s4jHom;X3{nGLHYb<-KLn%9 z6#3Z{)VEqh&A~=Xj!uCH2iJc{%A#l&004Z#2}vcOVecVi0NOaIKez=wLqk~ST!Dmn zY=RrW_QJpar)Fcd^ZJA|0wmB((V#0Q*9hnY?-}C{#!7y4bTm)DB>MwZI(^>z_p@La zA`TLAWS4x3$Sblcg6VS~c`VL`1~$P#I+iD&vJodW9SG?^?#NXv#dt zr*77bjSUbmPo6wM3~PM!^h^v5eGdLOLV{dPHFOcK|04u5pkqcV-HE7#xEL83uU~K4 zef3RuYs_c!T!^Hq9JcI#S|G8pQO@0c2jm5-^}o1ZUJmj$OEVh<>v3IvbEa*v`+XRL zJOV?+6Dmjps1JH}5`{oVgLwF1RRSQT_wk;5fpIn1zeJ)eAe(pZ-T`YJf-idbM?{K( z#|!W8rIAe!MX0j?2AU+OY<^JPotBQB>~FSQ)T#V2e;r=B##fA6%+#Hj6Rsv zgHA8C8TdFiH#aC{7A(HMR0N`q0|BD!dZqr)hRG}M1sDks5E34JmpodB9S1x-yf9i+ z(s#7VGngAujOBm|o(BDJGTm5PTZ8*On&w0=7_h^fwJwmDwXeWr3~Vo48>nj!PtRxm z{x(2rF!+VWJW(9_CHf!lH39Q|(+2wwfd}g7_+j!D#Cq!|))DFqF5Z3f$C)c-&oaVc z&jfl4h2JSK{~p|l=Q;J?;rah!+omG&?Afzq=FMWu?f=-Kk<;_qmV9qOERLS+X8r#E zdO`HB{he3G(jaODnm zBRJ{=VdfI*40s)WYi+=JfSRMV0Lgpz?g`aggW%-ZKh2i*cp?Eku?2OHu|Y?oupa~s z3Iqko!R-YgTV|!WA28yBQ9OX(E+mcy#Sg>f6y)XQ<>Vehu>f!f5RiX_Nim@8wR&Ip zYL(XU^=KvV<4zZJgk$xIqx=QYp$ zW+UU6510M zy+AK>@MkhCVRLxcP*AW8gxIy$px}kA1w4KPx68G6=FG zGgFQMwyPj$5!-C#RhUVY4O58NI@(_q{aI-aEQ&xN{*aHN{>|2wONstrGi!lE`^jJi zM!DBsLoAP;j2xZY>91a8QcYs(6Ky1+rly8`-Po8T0#4(!DflbG_Lon;ig|5a^Yh%C zxh@a-9M_LgF{Z~e4FUzFM`J5gf0_966KbZWZ_CPd4t6)&EH*ExiowV$2u|ij8qCP* zO}Q8t7_PkrAAiCKSYU^4TUySeK-bY}e-GTK#5^3pS0P>y)GsfyN5HBW_$gqeXx~X# z3K0`KfI@-!UAFCNI~l)Kls^0MhY=`d*oatyR1N`v;M6{`kx)7lGg8~kqoGCHbDg(x zdIP7|)*KL-)XvYsjt+4N&d5nzTS_76dw{}LR)VC4RHOL6BBbkvr?=Nd;qkaJLJg4U6 zQ|F0sE>5FQuq$@gz!xT|y5@Q?73f4HO{_VB|no@;+!+isO2>SL$kE9;`Li{MXq5j)3Wg2RCc;2}xc#NAl0o zp&a%$kVUCw_Y7zz$kJfiuNcDymO9oWbOh$e(F!GYBO;8O5Z3@N(aUT6%ONrbCO0!Tm&V%%M%EhZYqD{p zO1OjO4$}gxn z0CPeD0-xoQegfR5+Btx&cIxWk@$o0yCNO99KB37(G0%@5A*-}aY_j=})1E`pXiO0mm2zYJHfg&2|ihk+AK#U-# z<4*o!f~)?+*ul=ewX0YD1|q42g8yN;Dk}d61^;))h5lb`+D>s;{groW+`0yl;?MsG zn&T_beS~Mvel+leWh+oo`+Ivbva+nsBk)&@Q2dh;oZqNTNlUv27Qu}*j7FS-mexc= zgU5cfDuBl8ny@gc*XpEt+VWw~jwtfC)IX}Nt_;gsN3n&DgaaICyk5N%-nx-Z&KN54 zRcPJTcJFCVu&3^~=C2uIxmUjx-X6ZRMeuw zH9I@4=CxyuJ3sfg`yb^mc9$$B9Otie99FEiz^Fan5UtpNyqBGw9fnh-SulNulpNL< z)eHLZuK*4w0{SK-EG;b^#J|B=a~*z+hakw&Hq%g z`yuawAF@@1T862JjI?x9cjb9AprE|GyyQoY$T1GV8oc>B<_HFWujts=?+p!hLuhFp zq;xQF+F2coErQqvQWJ<*47Igm!0l#h<$!GDc&~Bi4uG_oKs*HUfcS>$>KBNKx9=YU zKY;%b5f;90VbRdg0HZdgH+)%ndCI4`?=_x>#ipsLt*=bo-QBQ`Q(aXBeg%jY8UdWc zR1aWEWCR+~YT*o_9uycPpCY27(^1fv&?E2**wnTJLc-s_-B1)|i8IDS`G*OOdBUS6F9hEL$OHEWW1AE>|x zIHI|w<&u;x8;N|x0eWx%y8?{zANBK~p<$;|BL*ndAWwUCX6C4nJ6-P1ok-&XlX8c5 z5fS!<$*{l-&wzylSejH|5fRZpt*)#4(13-5qrI(7dDmlkkpIdzFmJZ~5Q@Trj&jds^OG^ncF?|CA!Y~|zD2E=E4Q>@d*o8WM?ac&TV^vqk@x!VA=h{SLj1nf#P6dl6eWMeh`}( z0tTh0*IShgx}B`>CMO>sKIxKF#rQN>mAHLiL`I%tXy7gV`G$6Oekd>Z00j$y)&APA zrvNo@!jTaXE+Qka`26fVRGK!4sHiCG_bPY~pkYonpi4`=JUt=m-)Wf$qm?9)0^aof zfBLr8kfy>g{N-g9nVh^)i+&WQScY25z)Eplu#yZ5S7KurS}el^QPcEnX|0f%myIZj zMV7W@BN7L>rL(0$CL6gqbwj%_j5%+mX*#p#Ea<2EGuSzN=R0Tb`@GNdzRwAro1Gmm zkwo)#6nBF^Yun>Ar9aDn()#ehgVWpP<2%0Q-Yu)rwJViJZztE8?RLAo!N)qD-IKDmm z8{m3EDUhN}CKJ;W@m(8=5n~7JhsY;z1MV&KLeQhhHQZb$l}g28F$7MJ(U^)vcy2+r zmMzUeX~YNF5gA2C>Cla)w&D*?NZ?1REkc-O)0@vsql1hq3=Iu|q^T@U*rT_+gZ@Gu z$?EHOqYOw~E0BbM!Jg^r>T2|z^YSJkt3E0cJ2aZ~ z)%j!nJ8fx-huml_(h^qBbD5dg60mLAI1-?bZmet1cZFfsWFO=k93)vBw*2QPT(gi? zGMK}#mV0=ZxP$+}utG0vW&5*efB<5qxU_UcTNE80-fgw=%9}Qe5{YC0kw|DSKR*dr z0Pw-r$LD)NJV13~0_L%w+C{IazAJv7+-cx&IAE6D2E)OozNHC1ai@5$Ldd`>jfr`d zMBwKMZ9-mp|3AbkCU~u!5Et>@&wP_Ykp~uV4|>AH84+z3h?tT`^Z_yYmDXX-S!tR1 YO%$)?i{^s#7<1;)!zT`@xq|C|0ZJ7df&c&j delta 20403 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 CBJ12Icg6Yyd0ORJ?R?}Ay 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 diff --git a/visualization_files/figure-html/unnamed-chunk-11-1.png b/visualization_files/figure-html/unnamed-chunk-11-1.png index bb1c991f7fc3ad00772baed373f2dda16aa97796..8ea927871404767d2176207b209a269b03999a6a 100644 GIT binary patch delta 22973 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 Dw+r+p delta 22886 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

    u|hZ@17*pFsK%NP zy8W8PU<58Kfm>|wLPNlg9{~aC8tH?`{N%L2%f=ZSd_;vfn8715lbip!iLF+6uRjxY(Q(lCx z-{Aa2!#US!3}T<`RDDFsy&sRw0>Mv?(P+RM>c$4`8W`F~OHF(XO24n$T>c zlKwkP08+mfJrRSK`@Yk$A=8MPd=2NcQcb`Vw+tq`vHcU@|&TYhBH$L?cALbb5S zWYbmq0Y+PZMPqo-d$2n?A-5f|3$Z7wrj0>Bo7J1HYwc>99thHEh<2c;xIwSzC?wwc zMh!b)cD-`EykjX)R#4m$B?00xuoQ5pKvU~8G)iN!VG7r~7OE@)GZF6LA$u(_M)xPI zIe=ollwkhgJe}Ms7T8kBjqK^g?jDUs$H%E!%)l%{jcIUUW!F@Gj-Pj#eZ?b0k^UrK zz|R3j&Vc+4B>isu2e`lKJemq&GIQWiU;*G9*ws+$D)26lHm9H-ob%(MA%|VdP{HNK zT=n!{&%>kMEgoJ@7QW@V|+JXJi6LBK6w#CY~zO{H^FwbMg!X0CM7S~$2KpnT=IhJAv z8B&>oAQ=`aX+pk8Dodiq(mkL1@s+T+3@qA=OcnRh@WuaXF|oIIBQrj^kNz@>te`8L z#>uy3f72%;JE%zM@pXm3q&=iJi5nPg9DQIAZ_Ptz3@9-!_=CrevrT0v2_NcX+$oEB z^e{R$rbzd?NjAD(9eL)FW)B{%?o*{D$9skq)CxIB)Gsp-*Z+~fEVO_6R~laS+0^%> zuKQba_k{s$uCA{411{JUdF+o&Wx>Xx0AJ1k$m(=x| zGB~&Kmqs1cZlj3eoGKgO+qiPr()PD2{jH?rztjVXDgUP{Be9C(K93Ro240bJa-?U5 zEBTlH{QqFxiGcKwqn8s-BZ-y^Q%zU|&uNLoWZ`gOKkCwDu}X(qif6!q+x-u4RK3f2 z8wpe6VNd;wkt#|xN|+~7oQY4}9^<-ePduIxo`V8JiwMK(?;{=vvXxL=-F^gJf$&&W zR?%O8UkaMOyIWS$PUEydRQYO;El1Q$%ITe6f#*u1zJ!?X$Y*?>5##}qkq+qP8}eeV z5Q8mk1i#Qe24=b!mc&B#G*o$}8Y2NWV!N_r!*L_+6s@-4F!z$ju5U`0B$~InDAnd^ zXt_Y+kVYLSUny4TVw5LE5Ff#6Y+>Ji!%&lot2*wCuXytlRv)hik9|LoeM<|imsHCG zJKenXVUbDg$OcQVlc-NS8^#|^T{LxAJla;jQfyw(pah3F^S8WhPG7uz9wPVt{hAou zF;TJz467hNCd|x%M|&ZZEWU!o`tfJ50O3jfS@7U66r_p*p(10nc#t%<1fipvJGEAk z?E$-7I3!z{+JjOnrj&_h#fA7r9xR(=vE~csLPiIPa#W-ivykW8f+o?1^YyhUQL@Kb zro^ClMN|_W_|Sw{R|aG5AoH4M;VI`^gG^^^DShG@-1s1GM-^%rbz-{I{FN2BU4g3} z((8d``iA~`e}3?bEwx3Q-A$r5wKs{67DIlnYI+mL2`w>KkitqrXgnf9zV({0=mYBk zh%*b+6HxS9)W%}@M|4CDoOIy;uU1#s#pxkY*G>viFgj=Kv0b*$cZW2b7Go2QqSl zhgBPpZlfF#8_Js#wOw!03;_UW81V#M^uz0B*$-ji(v6U^{OOwNWE+g^`-8x$R# zQqTk!vVdgOe{q`^It|$b3F2}+0w*oIu&RvwYR=}_q&(f*9R?f;E z5{kZZiTfNcAg6gY1BwCLb*^?Sq#04Ki32}ZYX7|Q3?utj4*%PHcU`^K*m?;YaACfF zHudj^_g9dN2VVkLwJ5EZznam@_VijgQxg3{d)Ec=u3tV!CnF*}Q}*oP^N)RzuS-dr z>GXKCwiK~_E)w&QG`G5aJH*feJt;PYT6rTKq zetAd8eX+cI?pI~w#Q|61J+zjJx0CspB!{0Q$L-&Z^^^29_{0#(e5c@rZLFYnt}&3J zVY3AE*8kc1KqwGuUw!s|C&a8@Lc<*)zgzjkp-81o@oWWeWO+wZ6FapzC^nmQGUN@S zBjqH6wejdlHW?HL9O%?$-=X0g-m_)fNx%#m+=*bZczgrrMtloH8n=osHvok!v+Z%U zYf_gcncz~(SyR?y@NBvNrd#;15HbyCqVEKDod}yu%l0fN`xJaq^vTsr8Q$I^uFxoLz~HF=;lPq@7!i7e%SFFCNuv<8vI6INursmf|cF2@0DzeP(7-rr@HQmn$X#zemKO7yI3mh%DUu}yQd@1J@xo)3noh1bP zkDnLtjl$xnzF*jYIUa5dr*T%4C0d4QP<6N@Y9OSWoiVU(!eVl~PkMztQTmws*kDuTt!qMSwS@Q=EPX@rt;_xF+1M~$D zQ@G4bIyieTZ35wSL3Bnb8z1>WPr?OHNU&0I83_-S9;I~R|W-YYP~dHnr;p~muB>G*d258o%Wh(p>5u!@_-2KOvR!Zf8Gabv%w z5oe^Tm5SX%yLT__3S~M;rTYRxoDoNb(FtX>Y^GNBz zb^FlQ@pf0Xj$1yigZ^WHtgmK)kL;_vqu34~@KRKBhm{+aYHYRuvoa(G_D=VHT8Ik8 zRQxMCHCx}O*3~dt4^Ws(D$}KLXYFz2)eI<#LcJ1AQQ-qQR0GHjpx;SYb_2;PzfwTh zDotHidH(0d(?HLuERUau~4EOd5WO1ll`fbXWNwa~Nm6dF`^kQ<<)k zW2)i&rr+FV32QVKwo1tx3j1z z?#iFXv1s?iGmO^{WqDmta#4bIm-HnG&)p-E`nRB$K1&w{P~@Z7Jsj$n#1YTcV@Vj6 zG$Dqzvj)(4)z9oQyRgG4xpVG7U(B+k8&dE;%z^MZ`(hmW8$(xKki28@rR{*omLQ!^ zlLH1lHA6X8V>x&K1UP)!1eBf5GJ_X$&ob5lL#cIx(2A$U`?WLI1O?gMU4Q~NVr=kI+?lamx3H_bnH%z7E-6f1W+fwv)i$f_6o<2;glBIaxT zg`{Z8IZljjXo@HHu3vj9A&l5^BFH-_KozOenq`!<8$@l%9=)wxP!Bk;xXXi~$(JT( z?x1F@zq$K_R(SN5Rs0KnkGlP~%lUhq&s;XRsrGKBwgHe&0MGX77^hO;KSX!$(Y5F?f_HrJup&1QVyG6ZIg%cg zisCe?t;KMTU4(DE>mk%KS_p+*Y&Ks@o3r0Rg{s)iBAYm~2-^v4z8%>Ei}o$a8x+Z| z*`WTMz3JBxe(srd0xAHKg6$xbaMZM7X`{^6(K2fiq8*_j(H^4B^b6{?X#R3Y8B9=3 z8unRkD)hmR#bmn}f#KU@AZ|N}l7hLtf#>28x7C-=)I8)@HOPDL6$ajR@#{n8G_nD{syV={MJfJWmdY`ojZHq64PTeyt ze(Kn_u+Wv-Y-$CZ>neU?4<96zR8)$QnW^eaL9hpNeE1eN!?TMuHWs3Ha?}M|tMmX_ zT(^<5Tv11v$2*?B-^xWkW7jB{$Y=Y59f;_9F9rMEEj%ZYb!QvvOKHsSoA2enLu#f4 z33)8{LL8Y$1NaHUg5BP=kKpHgiKoK2C8r#jz;}3e{QuO}S3X~Pz6e4qI!!AtrYAR;m;3{GQ%d7moC42dS8%6y7 z&Vl6b#3>gvY%Xk>E^BY?2g5$Cq{0JPrvGYIT1FZ2^wuP$J#O3`S}((Ro)sgR+>4z2 z7o6_L#A$_WuCn4?yW)MeFA1>TgipIFZ9^W~39eM;UPSnOGn<*82b-DP)i47E6U9Wa z#8VI)A>r+$wd(VG%?Z50%aQt`m?<~)@dxAtPez04QykNl=QN?t{+~rDH>o;WGTTH+ z+eM1@0)Ndmbv(K4ba3u*x*g2?LKv(8KPyb75cu7a&F=f89i97-GwaYV_ru{fon}6Lwm}6C(E>?0tPyWi|k;Qkad618jgj85{u(&;`lPY5iEz2<#o~Q3j7c+nBh< zl&+Z{MP?eHWuJ~UK_3WOPFdg~bhwoqko;3pdrG#5ib+-EZy@(DyUw#TcUc!4_9kL#;MoLEwm41KsSM+2Ez@ z>5q)9Ij)p@99onggV%;Lf@jO9<=*1E9jjDe3tMxj}`$wFuQi-4rzrE&Sp zP#2&1#h4)!**nJoR4r$5{dfouGA+8~Xo&uuigo1k{UTQcGoqhY+~2&KbP2gTyfn`M zQOBdrW-^EY>~zfE1N5|`b%JAi(?OHt=7kJczln&`Z83~1?Q&hXaPm>?9BUlPSPEBm z7v9VJ!1t!@G)$>QR#J_lma*82Cd3dm0OuSV(*akPFiI9p{!4I_2cJTEE#4?iPNy;z z3O9!y`)A17PgQ9XYR0%!+fP1Z`SxUEP4ZCB%rmhFugg9t(Ck6I+<=lVvSVG^`0iPy ztY<|)6z$_^jcp1KE&bSj9$z92tDa7ERe5y?;LE=>H?OvEM_M*AwYt znDo@2bE)!W*UVNV~)hC)ORUT?Im@OE~XT-rL3ip`2h@SOfukmC)w&_Dsn63d8k zF}V2@lE^MB6l-l-o9rB9~%_KgkvYTVa>;4GWwF1-VtCy>3gb{tsb|KQ-=88Wp73-mFv<= z%MfvP_4$up4t$kg9`B?bF|)XePC$p+=yqa4XWw&Ta|-*waKk5kIdTuu3}mMShKOD< z3r12-8Y+W!qUKt#GD?^)m)@4)vqmhjKVAF9f53U7pvSVZaQmS%!kKN|4A1RH$Q6Z7MjHt&<(5h34u6WyS)+=)i z3B08f1@d8x|2A}mF<69r$Cysq1$}o%+l$|`$i(laFqXS&X=3c4LYol;f$n$k}ryD zt~JZ9?w32+-O^G=U)i{nFqgh&!CsgS-#Jbv%!_@n+rlJMFiXD`8dPnvZrrqP}xPCBM%aa17Kc9Zs1<3vT=OXhz|4D7&l1RRo_C2{jlR19U24M

    6;0HHqh3Plk*>G@9%~E*Ijc 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 s|KN7<4gU*K|E||MR=& zjPvb|aX-CZ_E>wxvz})@bI!G%Kp2@o2>%561pS2Y39$-k`z0u&ykR5iV7j5bGj5>2 zFyX_uP&`lw|491xR|eM`fx$nH!NiiOyI$=w zEo@^k_eP7VJ+d@Zj@7_@6?5|M(e?-D9x5Yn?rWfNjW``L^Q3QW_ zhBga{R8weP5B+|R^?pRC!U9SMHZn&E5AoRDPq;;@Jm+Ww1$uV@o-2loRoNEZmuxP^60!2lz@+N@2H>uomS`ll-5Vo!(hzL3?CN9dKOcu7~ z-Oq#IUe2|Z`|o}DoPZo(L6Ec*LqjZ);-?A3$GACm_B5T0;&W<2zVgO;z z$tCSxeZXfAnR*~0%izPom?-wVeG@5;f&xui7=>lRu{Wq-32FpgFf za58B(Y1Oi050gM>`{*U6iB8x<7J$q z^DS_y^Ev}Fr~){y(}g)Ga&2`o8tH4pZCfjb0YlR1`@kOyt;sdE*E=80q;fL9Lm9f+ zz+aTG4Ef4tsNlREscRl2OQDGtI{_@O(7i7^5PZP^b^1m1<85&67SW1uS_hJ7z@_KL z7b6iEhe3MjEOrfTp-C7s21yrI5|WF34`@n?yb2 z6`WtwoU{cX+U4rpJ1fESkF|RSk9z6YC}wY^IVL%q1th5cMCeqAs>_%p!a>H<0 z9GJRf5vEH`D#s1)b`f9I2e*XD!@F0HJ%t_z3e+%gBvhLel9Qy--iKkA(QY|lA3RL8 zEhwuVw3CAFZMC5HN;2C)k=lcKciedn|5)d_r%*7xKhokVKL_%|1exm{4=f>eaviXg z1fg2BGVnM)VDz5Pjo^($X0uhjqo@Lj;#t4$((9r-RnNgG)fsVcS)}z$BM{?TaRd5} z@Mc~+#$(h9GCX&ThEGO8zztfk?M|b^w>{f{%UMai;PP%0bd_kuvOE=VMp7gLO7wwC9AB!w&?+4U!41-=9<*M7tPjjV#IqR@wmyu6f)@^Y@f}EHaL(MbEdffs#jHJRmlauM zf9q#Bhdbf7HxO=>)fbhNDy?B;JORjnunwarC$f0AfJcIn3?U^(`)~c$i({04-``x6 zExKxQW}}ye2m&YapFutb4F+aalmiLQ@-hf*QFK%Bz8KPOkdmEv`|91Q5J}A8k+ro$ zFo}8a(e&pUmJSu<7k}OD(r0%mg?c{U!%ev%?^j2?HZ5pEcYzKqX18%e7c4$$&V=UF z2$mg3`GB3Dy;^YkpE>vB&0sk37rf@?Y>QPA)J6#?k5_~+`OvHGvQ{6V|G8Wb$u7Q1 zSXToM{*_8OU)Qe|2RiE2em0#B--1KB2mRp>bHfLevEE~k^%H}O5apfNDgV>DspfLg zQoV)R{b8N0W6v~=JM^Y*ZYhiF-Fh@7juNZyC#ZW0 zrTgSaQ;@n!(o}!^jz9YT0pUj>)YWZ z#w2T&8^5rC%^4;6riD%fIC=xB_eSpETb>VhRp}AjpflNz}fZk$g z`piwqedYVZy5|ub)QK8EEcFz}gI@dA;YbG%(8$=oMF-#ept6m8Euo$GIt%0XEg&<+ z&aM<*V9RU%GQuc8zERXL9-KnR^x*SlAQ3ia;^FLaGb3|i*lM`*9%oG~++H!_efzOs zw4^a0drE$iGD3yj8y~j6d-7S9T(-PuhHe-AogmN<=4|y_3b)`liF}2D&Xk9hToXOh zfs?g21rjP17c0OTGHu!?OA<9MX%`b;SbPu6UL#5Mg^;3t8mW<|0l&rOpcz!J=f7W5ibDwRK`O z4eUWe`lvbt{K*Zy&qh}iP^`W{$foj%jCZdiQFB2}X>Mq)tURrmv)|p{*Z*nM{sT5D z%lZXA&M0Rm>$R!~fFaDumv>7(?qT>VQ|Y6rSokxoL7<#qwCgM6Y{m#_Ko>is;VrQL zc1*p7#(tmoy)UKs+lpRHd?vO+Jspe)#l}C*#<*Jk#cMixFSf_zr!&W;3#tx?9z903 z@xm*X?UFs_FQtsc60{ASryQkh0i;PU80N(1d2W1U6H0;?;4U>T{qbU84Gv`tjcmH% z$4gHvqC3QY3BAyu_};!tdh@sH`U2m|uX`4TYEj_j9yOC6YwE?dCOiXqf`oWI}5h3 zsm}TNoI^SK(lbq_y>?0w-@wi3h@x$1dVm_+^;(FwG^E-R}X5R7%&mEH!26O!U3s zc}RNF-IDkK{jaKxrFKl79JORJN$!Vq%UjpN&@ZLW?2F!BAc>Dj7(1q&^2l8LFx49v zC<}neHp*W^;HlxxciqNR=E2jcQr&dt<6Y75VVct2%tk9;d5#kVHD4m5s%kx+F0)n~ zl>nT{ zp?nOroq8^dJGAAmkV-eic}@bJ4{JwFxe}r*u>*2Gs_=^VPB^NA!!zqiHPMQx;}Kth zQO1zBjt~3lZ)u4PeUCRqF6+a6*QgC|M&s!~0h}+rh_K=97{R{Xg_vp~ou(TpB>;4p zq=LPrjr=Hca_pUn3*+j^>P=HxX{}^TY;F7+x-aJzuCG@f^u3~N0XkK=lf^Dg(vO@H zp`hPlIkRN9bP~+&OH~>()O<76dNes8dR0k;Z8zijp<#WZK23QQ-E@x>LHun`aAo=cb zS4v5w#$``J%A@J-(|u^y$(f_C!2Nn!P6<=pZNt#K|GCfSTKk6wq)jY)@15(JIKCPd z6&LdQw$!WIk$?fr21PZE*UNFmeY+IAZ&C}3;Fbo zR>0joZoG3i&N0!ahdt!W;4}zGnw3;G_ZCa$hPuUz5a7u8ikp4L;lX9??ixo=eXXqL z{IDrzZLi@$tImy|>sd?MJnn?}4YHl~c8x_?0)9;V#Z)J;xdSH)#nlYNgPVTL7h~9~ zx3#&`ynrPc2>A_ekF0m^2UNs2?BH5K#rJJsf_5tg7Aik+hLLJ_CnU|L8kX?=v8C(Y zwoAa-=Fy~u7`*W#93w+l4mi9THHw*aqiN7ahmf;7&@0i5L!(<<8)Mb=uTpIUR9Dds z<+*hBqV$GY3wYpXDRyA@M9wHx#c=`h&qG>K1cDhS%@#ULGV{Utne4uGc!{T2s zVMGeB5+;g8CL=n8m>!96n!%EkUKJlNhRIz*Ri@c;L|Utar$BXWXOZhDK?+KbTxO0t zKab%XB6)B4RxdArC-+ze`6#Vp2v{};u3*6=DVzx0^`Y;z3FQ*2^8mt17*9FWJGy7&ru=&!kZg6sZHz|mp`a{-#nv!~ukW2(6K z``rswX!g1`h*$zgE9BfkilDSHd0EJc4Rq4FVnoQ97xDvR6*?MCXp}s^r#_8TxFEo? zP0uCZR?f8{_%}f60jC&NgxgZZc40H-u!)KJCJrTYnEQ5P4Ui9K!2GmHl#o^WOB{tz~g^A?{&ARFp4e2{9&pi*JmMLDv&1*G&hgMRij1R%jxpc`EN5PA9{DTE=Tm4lN1nwP z9}B4Ce0)*jVR)H{(sFt}`sYY{ChpRWO%E5c5iX(mlNu9;x&w&8@x$*c*eZuWS*t0u#UcMozsN6cbb-`?fj-EJeu5PRSyZYS#cm&xOBFt&)h+Um zopqLFs2aE04lj<(h2<#s!U<+iu@g#8HP7}0iuB3gpXc$Z96raTem2rPKjIK#tS`Y? zL~Vgf340S>*Jc2QJw-~vW_OjPn56V`$Ta#I(0=jeiliMrDim8R((YhFTW)ENKT&i?_8LaKFp6@41T zT24K*@xJ>uhK)AoOfj*UQ0a9{nqXSe2+p z(fqur^)(hV9lw2ps~9`w2E2rZ5dT&6MC#&h^T0E8KvJ{%8;PVsE!aEZLtU_%(N*ni zxG=Ihn)M!8txiRanX+E9B0d9OeM%3l#HKml3%6vJdFtW4Md8f$cwqJ>2#uLa9E}Fr zJ~pqi@`)3r9+t|cBT1)zn2}HL%qz8ph*uYC+snWClaM)cZ05u8ZLyky;L8rG${6FP zp;std{Dx)+BG1+@etyl#a4B+9B|01Ir}9Ed|ta%W<r;tt|zWxhxQb&Xh|3_M|&uZsWqN)2h;j*7CHgK7X!yK!OvG^^7*iilT5R z{>7U(#fF#K^2B1cehQS-LzXu$chXdZx%0r59JX4Ln_V&KORL%sA@UOH?u{<24)8Tn z$cOc&##Cu-5O?KQgCg4u(L29vZ_VBmmENj{QX=9a4CWoFld3p;#= z9}J|r2$E&{&>B@dlbLHK7|fjcN<*B5cWI-^ZvCl&6EzxU0D2`avjJIVBP3 zqU9Rqp*WiPF~I3x3cYHJhJE_=xrKXDHbw-~(M%N(w#|DPiojVtdI1`I0~QIzy_Ljmd|J zv91FQHIRx%{t(Iw&Cg^B$t2pyMEQo!V0mrw{O?(n&-Rg}1msl}62Rm%%l;ccX54_N z1e6!LOH5&{e+6c~aI_*$C;;T)o5QR0NB@h*NV6a$BO^<{Tca0!I1Yb&pf~hc%VoDG zWyy{VvMU&iuO$aZmua;(pD2&$V?6K)2(%1m;i&oo6K|`~IS>@h=$}_Rzqo8LDBLA> zlUwSN;BH4(NOY!Zf8D4s)rB8=fMj}wrulQ2(-}P(KSZddA zDZ7`RnFNTb@UUp3rnWO5M&{fmNQC8AcvsrH;1CbGR~3RAwnS$b3SlJCC@(;d<*b~U zl4#PRAr!7GlJ>FhJ=0rG6A3ERxo7mScG`TxC_$b6t2W(VB#+dvs#Zi+xO6U)QGNJ0 zOWTg8E>G*YJfHJhQwo-(m08KW*m9qRbIYg?>2c;v>_*%XEHUPJ`^rthqsTzdtlg2o zB9>8amzyHJ1}2TB!x-Hzw&_zjs}M8x zN*ztGF>*5@1>foGqiK(=)%a-P#Oz(`FF25hh!kh3;|(Ed1b<_mPOb_OPOf-TD+#PH zsp%`0Djm8jQW?8}7LB2ksLAA8|fQCZhu)ekiqca@~?-03j&D&$=QoHGiMmG-BP3=Q@Md zR3K@H9j9`hQifX+XUU_1CbZbYLU%Oj;@=XPL7yNqcZfs1eSew)l7!suZ!#FSiY2y^ z3fuQ{PAfJnKkm{08~3TaecR$mKUwj+0W2fBhzSK9%5G( zaGeU)Fq2paZS9=>z8PTj%V%&ayFH^3;r60aU@jh=w@dct>lv=GT7sgt6o{}UZZA=C z`Q!UtML9p$%V{HmYR zq3PSi+k8EL8)X~QlM~_ z^&#gu$?W@-?ZUw&rR7&}Oa6gqXTr(EWkV<;+30z0mxjXD+&w}DpI`e!(MB^4<(^_1 z>v`mw#kW(Hf`syPgnW&V+@lnV>mP!aUM33ObuVzT_PMOi10q1z49fLTps=Sp$NXxK zMw9x&>f$b{Z3*%^o#xqt?aHUGsLAx2423uFiniK?*mV&elkDkd3H@AZ=rFghy#Uui z%;HbxBQg2{^@G+)+jO1l5{!AQ{8Dk3*UjkoImYC5{W&S#tgXW>GmjrRh(pJF;53G` z2OqFzX??gdy8OY_o2u@DtmPC%DzpvbW@Ov$&$ZftYTe54$nV6Bi9LpxKK1~rZciG( zF;vgL_2|n@$*ia%%nVWK;rlp%6F0D>0nev$8=Q%&%RFpBh`>veJB)|O(CR-MgIlFa z31Fh`XZrxvo7nJekuDZd^oaAG!7mI5(w8c3XNhp~8E|_v-Ek$7?(5Gb$0vO#2R(<% zD9yJ&bf;n+PENvMvI@6$A_AMb>j_@#)kMK)NTJ>qD@^G%jrDqLXu>U`D-)cnYq+jFO3`3#f7)Pf{64nl%0_ zC2SA_%h-O;1s&ODR}vs#gbVo0a=_5gQHNu%UhaiKpv#>xkOwvQYm-`hcHT@sqFH1( zHg3A_ZM0bx)jNU_g%~VDTL17(;^6eB8*v+CEe7SndzF!MN`T2N>w0#^L-yDGL*#dY z>e8h&x*yp}_U|*if6a?#+1<)C7$_SKj1GB$Vd96vN+`H&0@JL88kR_w1z;uh@^WTW z#JsqZdh>^`7$}kRGkdq@0nL%)P5_-lZ!#n&_)^^orV?ssGnpk9l{mqmaGsF*oaY;S zlLr&&bpPzdK`H-p)>nm2M748I^{pU%VQuhZ#7}I0&PGBT-t&CV2uEU|#UaJeOky7# z(x;3yR_R747FwhgzNQGREUiPOeB|hOtfs)^FiDPpfS2S<5Al3a6{_QbbK-AkSN#o$d|ipm2J@GAAaRmnw(0J}zEJ_-GMX-oQ9b8n(`` z)Hi}$v`^=i51YYZ=JBAVhPx10!|RFS`=q-veeaF_F2!4FQD+oZB53Xve9lFgU~4jG zCc(6(F<~)xtUyy%C<@<~pmhtx!3G5OH9jwNC$)_AYDEcz^;^9Jk1$K0wFJMh%5=iH z^_B!NGML?UA!2+3>`3y5Zg4bR`O{YyWJ zA_ypy%b5hsyNN&u6RoTX!1_$D?LaP~@a1$&Li<9(a~S&IyTxo=ioJQ}nRumv{ZQ!k zgHP)jNTiCGeNG_$&1lr)tJ~0Uh@AVA0yTEajePhK4NU+q2Qtda#D`6pAXOTP>6GTf zh9ED6Er$AD{^f|~FML>h>fH~TM*f;bNCF2{73b&zG77lhP11TKIpM+A>RT(=BeZuQ z6*~ZQC3tSKQED})janrP`!fq)G2pNqV9h24jCKsN)9D;Ed9I~^cEdq!C|Z|18Fw*_ zM(q~qXbI)VCuANb6MMGDdJI3H?VG>ekzJBxxOVgfcv`e!Xu>H&cF9>B5YDuEzT*d+ z%&yg7B7q!cCi+|Iji;YtCtG=5=R%x&zfKbzPOoykrWH9hL%`u*7GBsi-9fo{k%7Za z!kiJ~YM)0)$*cA1&O%~P+q6;{&TGpEDV8QCo%>bKG=u`vkf&)X5x%@pRq~lSU$W%z zekxfRt4|f`zoBZufRuIGb?9{I8TR51B!8j~wtpPadqnW(vMnC6aON2M{9XJ^q@Un1 zdj8QMm=rghL>OKAecFUvyEDbQL2JH74+{!|@U~(O*3E8XhC*n z&AF|e5?$m_ah^zh%=hlK^j5+}`x{P+1TqS*%(bP=TJd=YQtZ<6XPcA~xXf&1z?HJR zZ_|G_#WdA_S2`(sJQfj4=JVR~OR731nVNGH(rkP`MWoMRa?l9VQ7qy&qu9%IONiT=JeN@a?V079My3Mh+fQiKK2KZ21wc@OzDjHD)5S=8VN?H|B zdN8N^o)(B^`Kj4a5nTF;X9#I|tWgeb3MCyb)st^RaCFbjs&q}E$kHT!H z-!tj+)$voGL>`z48#ASTj|}zAg9UP09{$`te#v`<_D`=G_a01+>_p;gcJ4(zYF$h_ zRY&)+ejrm)1I_sZ;>ST2;Z1tkmkFD9;==3xBkzEMm11;!-h@a|z*OT2L9Tk#s}4=0 zHTCwFZ~7ASkO>W4xBDF!QP3Z`tn-VS1etdhxXA1y8knUSMmyM+5Z4iK6p*je9W_QX z1mxhcqOdZ!`cbf(uA|xa;rMdmY_Ip1wml<>rB^yQqbo7v}I4*bf{2<@xWY^ zL*fKeaAZ_qr?l)=lYdO*Ar60V9B2ul-0IBZ zI3kQhw?sTKd$dou0$iQP_0%s~av&X1+g^dgJ26 zUKueH8O@tbHygMjaj@FQ6Rr!vjIqD5nXsF-U9-HQ;As41uc~&L<6~h1XAmH2>i=$`ZejgIcfJ&Cy_QWgnT*J+2sp@VSj`CBnNkgYbIYSAihiAgKsbI7&V z^@u50tC$T$=a0$F-ut7*3-aHbSYk-Cy;pekzP~Y~8uN%eAhjj96qCezzV zPBPKkQIAruRYUB~*r5xDSq-)Uy;1N<4p8~m(^VSAco@l=5AlT%%I)@%nxaOxYD!*k zXQ-;-sekzkpZF^|k3OWve5$x5_qI6D>?cfR?3zG{>5AKjvi=m(j`iUdU6hBpbU zHd?gSfT~*!lX0vMnp(;f9RAbpt(FamTHN?sILEeff}Z~%srGKB3#syUlAA;Ge&r-q z4+{j@M$Toh2)2IO#se3UL{+^`1+PBK?Qhx?+Xx%uqAW7~MoO3la+a_g z?)tcEBqm-$*D<~5i5Wv0d!i3k_^w}Ytd{2@zGepfmn9IV zBlM8&*H=U@?8&~bsl@p3+hoD?xBcXVh%F&WHk|uQX=wWp{%Ia!gvr*^vmos&8nQMpOu$>8Rt9)8E>W_Jw-eSl*Y*{cNFkNUrf5v0sih=@!Yqw1|O4B zPukn4d}l148hT5nIjm~dq4zbKU(nd04$+B_%zt z|20F!x1zxuJf|O(n?S=}Ot88u24X@c+v2{;&RO}Hk&1;Nh!am<@rYCq4bh*meDcyD zo~qZSAi$&s6Ni7*j;-f?Cx(n?=mthzJ0N{uG$}?T>r$IUVA4Z+A#Ay_4@4<1D`VQE z$rdYVPB!LtsQaYz9P`#kJ=O(I@+q=!m-Q(Y8A=2rVf>8#3A*AxO$BI~5U0Q6Cuh3?kEDz9J0gL_Pt8*=qxf`@-M*Bfjr`lV`8* zj~j8KQE�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 uZ(ce4>wjshBmax{{{MI@=z0_$Y4h{Qm$4`PL=? diff --git a/visualization_files/figure-html/unnamed-chunk-4-1.png b/visualization_files/figure-html/unnamed-chunk-4-1.png index f58ad23e916396890e435348dc6167adb2820756..bd60fffc44f7a74d71aec5fab2e2d0cea5f3f24a 100644 GIT binary patch delta 18253 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¨5F%fGao=0qw?dU#fFeTR%@Lgn<1xJTwF>y89#OB^V_v zsn`SiRVhY5rB$cU`~(7{hYG5|;b2ym8CAGU8vsG>21=pZ81{lv=J8~6Sn-jYSxNuK z0IYJY28$M;kk~mmfaR!C@MC-&0}P<92sdyA>@1y|f z4A@sTe*c`Sd6-k#Q$qsW@*lu%@)y{H=r3Np$VVGcLIsq1_r4f{{X5mqi3#NE z9M;^Akp$>248Xy}i5FuZ7nP}QrkKqZxP*K%AxSVi_k8{aDosHa|L0NiaWNPx>_~m$ z#KLGb3O){yPC)Ej2RoPp$_@u5Dri3&+H@~HGxKF&;8ofHaOn9?l1;V8#{*|wh{DIi zLtvV-(emCrq{eCbxS<>%q6N3Uw6t{2VSzD(BthBY8+IrcgW?Z^?QLJaplY`vxJ>i3 zz+9!JKS4EY^|uan=Yo9(ZvzP_GIw^qfI}db}-sqM;8Wh{XuB17#mBg4CUVOj(Sf%?jo8+#qI~~H%u-tYse}mD40Nq$u0{*m-Us$v zYvk+i-_qO+1K%nzKLh>=2gyf}L9atXAelX|8HRL1cGK`i0(%+o2(h`DPBf*VzMh;x zOa#b2cnrW}q5GS$dLB9JVn)AP@drqQO28cw!*<;U2O7quz{TU#$W$)4K-~fs5d#&~ z_r*mn7$3YEJ(&q;4DA<~2!J6SXXxL;U>{K6m3GW5!Ad^lIh>G_i_0u_`|)`FsBmV}(V=z9B`}eQE p#rGdh`TzW-pseTr-!G3H;6Hu3!jk>@%L)RQf{dbc_BA7~{{<2;3)KJs delta 18166 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

    $p-s9~4t= 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 diff --git a/visualization_files/figure-html/unnamed-chunk-5-1.png b/visualization_files/figure-html/unnamed-chunk-5-1.png index 554b584b0815c0c3cc6632244e99221d3ee50d17..42073018271b8cd46070f2388994f7280806ca78 100644 GIT binary patch delta 16815 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 z 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 F{{ulZ91;Kk delta 16709 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 diff --git a/visualization_files/figure-html/unnamed-chunk-7-1.png b/visualization_files/figure-html/unnamed-chunk-7-1.png index e5003a1a565eb6f0f61242e654c3e90e5029eedc..7bad5dbce801c3ff8d74fa5889cfb402381c1420 100644 GIT binary patch delta 14438 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 KFd4!RpZ-5%t4!1Y delta 14343 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 diff --git a/visualization_files/figure-html/unnamed-chunk-8-1.png b/visualization_files/figure-html/unnamed-chunk-8-1.png index 9b46ae4850659f2d23394c97bf6e9fa64b70d24f..40f2c67a3f37fd47996760b6b816d578330e0c80 100644 GIT binary patch delta 15885 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 R3Kzaz`ksP#*4-x_{|82y=*Iv6 delta 15791 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 diff --git a/visualization_files/figure-html/unnamed-chunk-8-2.png b/visualization_files/figure-html/unnamed-chunk-8-2.png index a4c13a38fe84522596db952df8f034d6a11867ec..5ab66b841bb1f3b885c37898e107e87bc710974a 100644 GIT binary patch delta 18635 zcmb7scRW{Z{P(d(_9od$A{s`SeUl_xh=h!k5fL)aSDD$HY_bwUR(57&WMqX@_RQX% zk9+*a^ZcII>v{a4@;%Nu*L8iydwlLYK3{SzUlQwu;~X{1oPyY&qHb5S8-D3DW5!eq-w02Rvsl8 zc6(0M`C{@y{pFIrPkA3OP5M1V=NJ|4L~1eUn#E0aeqY=B_0yWwi06`bP4ZUmKyF;| zsC}2zCA+C4*Wg2xW1;7}-NQ@Nx_+XaWE{KEP~V`lRAk!n{Su*Nf#^(GgeKg=hJC;84S(>-!C`@+d`77KBkk^rU) z(f--}-G4e)u+_L6oN@#lG`C*fi)U6DvTRh7S1OTRAT~Ke_o)@*KWZy4jWD^U@LFs$ z-|0GVd`+YC1AV<%*~usS^VSe6qBxYBkSK=uWh?QJARLjeb5fHG_v4t_w_mE67-)KC zVp2`pTKTxAmBbM2uOo|?3Q_lrh|FT2w%clG5K|l0`d3^~XeRD2@-^3nE1PMv1vL2o5TyVy4*S&?nlt!8k}*j{p5>hKRLCpU+#A z%PNcI{JAJ%ka?#oZuP7y!5jWh3J5lA-B@nPEpb`t9ToL`&Y35xz4GFk2ED!k>YA0Z z7W?#m2_b3yzOoC1Dfnx7Q@*@rGMee0iU~N_ZyrP&WjQ%%k6j&~GNv(o;v>XCDxz+Y zJ(Op_Z9{QV{4*J9$#D?m=Caa>Gl48vtkMm#sOYXLVISk3P!ii|(TW?CS^9$JA9wCO za0w8sr&qnW>Zv_1PE#7FMvJ2v5VEAnkuXbWCWMD@Q%?V`@1A9r-(z7v7cND?QEI>x z-u37U!vz-MJ1=U;u+~pQTt>40*quoB)}}J!xx0iqs$8+S;6sG`2>dqwcvq?0{7@S+ z&0N=YzwE8g1lQ!VlyfhAxa2p>-*Zdl?UZ_79bo@eCP){j$P{*R{K@{ArTk%yh}L)9 zuQ)$BCN=6S5B5ZN266|oAmaY#%)g|*O$}@e3ERd|U~0xem~{E_B*=HqA+jtdml$zfq%d zZO7y0d#3_$GkjbSBPKCpfpqC~*$E7fW1}^1>;0Wvyp4gn8X{YKmbWIkQ4!_g zXmhR?C&x1Wrj%?iJ(6PY)V=;AaHH=o?6aZCo4ub+}k!xr?^ zuE^ZDaf7}yp)YFCRd!TRm>CCY)ZmYLsh}7npmR^z!iGBIMQ&b(z-?XHfovjN4m0sY zYVqK~c3J*3x^j8ir(poVSY>1l~v zKW`S0T|xF`lH(+qex3pgNBCxmB(X>gUTt6TRhGW5(du&4*A|jW^eQU}J~7pyZtX7b zjQMf%DG;W|$x|}qRAzKx&$0x`ZLo9o`Z!44Se2!Uh*`b<(1%}PT;aHC`Qdg^eflI* zia*|Z+C}E#t|@bUqp389q(+S7MiII`eH<%JkRllcLBDyBv*Uj#h(~2`GncSlpy&K~Yz02tfy%ah*QUtfzZ8(%XlS^3lLwrTJIvFQQ-egqcZcb@WYo2dx`hZJa z$M$(x*e2)h)$SPDLK#FYpAh@vOVTT|zVF1c*j!^dHluPCDtj{eMo&EJ??2SIXNDPh+LFAtGvkool$4D3<@@svB@kK?TU5U{X#2!!W(j-5E zD4ErXyr{q}xA*}KJIlp$Q0lhnq4xOgK7AGCGONG||Lb(Ktgh3x^!p#5_UYf?6Ygo@ zJJK?#IUT4+Hco6C=b$8CwxZ>Tz*B8u|_nag6VUe9fhw$k*45-sxOYxt|;#bpT zZYW14{VF_TEj$G|UnvOFAv)x;#3D3>(XVqoa|y#v*}7HsdlupkYP5|qXR_q0_X_?L z4M58~aDQNn5G0d^`d6!;KA+Bw4tgZ=wGGZaWK~#E7x@(1cB98AtZ}O|iJDdIRKFpf z1%9Cv;@2p}l%G@^Le5ng!ub6a2HC>V+7;H=lh{kRGuIwc%4Y8{&=1izhrM@*tRy$S zqQ*Tb&Sgi`rrxR05oGlC^v|S}TEZd~_$-r9?YU=~n6TYX$!O6-QhjnYybH6bHLnNB z&E%3&a_OG3gkHs=LU37cD@R3!U7#@x{fMn0Ehn`2lAg(*LMN_xSIYJwR|!!e%1Vq( z@N+E+B~ljDbgc2Vfe&&gr}$oQI@x!)OZa@1M+~c0m(?|rG6PKOeVtOcNd?_Ml>NkBS;mlmDzHMZ`+rgY`;{q`~FNe7wYr6N<~n?4ok>vazr_-{tsw zd%wB7*hpCGxYvnV8@5ly`^n)T-Juk_h6vJVAUCL-cPK&F7x<1n%v(!83jV5I}sW6ul#u@{o0)6xq>$>_bF*kd@;L& zvLKH-aDI5W&QL#+>Q6SKQ(aw_>){A{SF7;NkOxhe>(V&5f}|@je0qPQJC@V*Cp4gw zOgpr4U*o7R1YRt9T<_e!hIU&W%82aae(((QzVs?fw=C9t6tUvV;K&+a(AXD=*>6P%#*Y!7Oy+5ojiw-ag>~Cla-dh;YLos%3{)GihBN{H5l#G zQNz=1N<;f0T4_Id0uraT%KkJJo<%8{Qe7;;mlGYdSn_Bx z=kfly$ME^mJ{H2=H!GsOg~z;ugjQk|NIyoTNZgWpvhQQ>#p0t-vk@Pu!B{*jys#zST=CtgY*$`AYIp=_DQo{*~bxUUsk zej@8A?ovXQ2vPO~%9y>!K<4zsP%~JK`{-$A{~q)GE7x`3cHtXO1u`zNZn5?!PpU4K z<)--Y^hm$aBzqc%BR6*Ev(GbO`WJ_E{mGT~yLrZR*Rj#+|k%^^gBW0i9earYx;_X3ud#MRLBeKjF$|tiO_^er1D~d_E9cfK5lkg))RfiMm%-6RG}Y{7Mc#GHrqQ#GMy`z zbkJ7})|^IkpD{Uu-aYc6{Qh_4XKZ48kQ4ldYDDVxIAKmGR~sL$d|2a2rPKNy6egpxk@fgG0VJ)yNclQJOpQ@% zmWW|QID197wb8)K%To~_4gKFzsyn~v^S)$Y#N!^fbmE$b&rEKe8p%U$TLFAGSsv1~ z8M(eOjwK9wg&XV1;=wSx<|lVeP6NRXYm~>~?dsVQbL?LIakqPbimLZj!J{!=T=^e& z%L}9WqQm0NWerIJiNzV1d=&K+hC=EJIqW%%slzCJ<}ey|K98Ei(~6avlra+5t(hzC z%b#C_V*A}KwUmY!Pu8>l+K?7sB`NvFkKcq|YMuD##%ZOA3)xi|mM5C7=2W-p8fhZJ zVs*KqkPMD+wZtTajKFmHH&2b|Nb}od=XH&)gay2;DEFLGmir{ke?i9r{}L7Rb(?tE zF6tb=Sso&8BK_Vj-1W`|6&mCWNkWyf)bHPyb8ULhFmkTH{~>BeJQ~swFLtz5dz2{Q zluw13M}ui^uv1Blv~I-vM5L@_DPKw>2@_rHyfLr(;tRQ74RDBp?)M6;Dmw?Bhks#y?B$NssYFbnY&3+z8T@ z&dL773DUvAihF7H zDs%lwUC>H-Xw)b7E@R40Scm4ZkjoyQIwcNQTC*VzRw%k9Zj~gROQ}84v&b3o$&5>& zG3-vp3(lY+N2m%JMaFr2G~S==e)d8cRi+k>)VLw$BZzlPNAVsMKlZD(Z@x&A z;M+EvuGCyp_E5%YGr&pX5p@}L?@lCW8m+ASD&K8LgPU{V1VStmk>Su6tK7J+F(+HW zBCJE|j=eOAC#-btM3(xRpvRPgrdamA4+%?a}5PwZdQ=CiR^E>8;es0 zlD=jMO1EOGt>G0JMU4E)Pcqqj9lnG%PTD9pv4D2qr;pA3dGBSBj$byduu7jk?wy;B zA?hX!u=WKlj!jvcac8@D0waNwp>}2U`YJqQk=3{f)N`bD^^}MJ<2L^25mtRIU;;guR{tQcGWV`HWOFFiJ2$Sf3EC&iw*Zp@))dw|9ZZSon8b*B#I}Y%Hic# zsjewKe!%BS@J!58gKESx5*7ExX~X>`*O=d@Psm!!fOoq2-km8zIf@`LEDl#`@ki1R zORP-o{%gc~u5^(}jdxWtg6V$C@=es*59Z4KB$s`CNJ8b1X+=$+!&JyPb4X;&82VgY zlO#455f}bOC69m6hRP{3NCthG!|+8QThgzB!t_v?Q3qunyeB8cgv>0O$e#5}lzofq zer4vIe+`>tb8nkXofQ|wDDwK_RkH#rf1x}H3S-8!nH%I{b$19a>O2xaFbdXZ61nFv|gwG7VShR4cR!}w%*aHuppiLJQN9R5s;GipxW zbMqWp2=bH|&t0_ozT)?m?$raMi!U^V5QZ;TLoF24d39Xl*Jp0?lV&TC7@t*m!x2sE zkITQ7BS+Ck7DR4znaVq1_{xh^&sg2Jy-$O#az$O(v`FcDR;>Tq%I177AvNAZ(uaz= z6iReF_)3wvqCndC-bdz&pfAE+#9b2Ac_uoshI7j%rhRR+@a-`Qj69 zUo{C&yysp^EmIxwGW#nHH}9YDqQVfT%8Z^XsCogP3?F07XEK5E=>{PYZEC)6dS`#z zU8zs>TQU}*y9!~O6P)XhCJ;8x<2%5&ITW#_miXr%m~6Z{9Lc|a z4&VB4e*Bl~5L+bV?_a?XJ0RlNo5#O>eCbsL9{%qQP9YROsQ35GjGCHW=d|WAGmx(#8siDz2N=JGlSsHcM&eLluvI@{0Lyz2h zUVZ=mUB<&;@q2DTjUw@5HffV)GJiQ^iRI)4L!(Di zRmx#|+IX9){k!Iu?25x(w=K%dqd7q!@>IdCIsO?ZpmG{vus4Eymn~6KBMmB zv?cm5EAq)$)fFBdxjbzmLc;U9MU7UXCkhSS{@ge^JUGS5Dk&v(M)~!fyLShp`RZ@7 zyUP*hyn9E7aa{V&%);_kJGZ*Jdi?pXpyA=+(mSi`v%P4854rubXJn+LiYh8kZci%n z_P(M&x4XG$X>LBfxOj@4-B44r;ij&~@{ssU+$D3p{r=A_EiLkN$o_h-YDfC3fPj&) zC&Z~Y751~wVc~#F-oAg|Jv8LpnQ#SByL0EV_3(!W4L(vU>8#?m92YKpb$tE)z3`!p zA>tPjB4hglt?SR#VSlddVe=n5w9|82Xk)hb=JUPH5gQ_We5>!}e+-Xybu4vxm0!Q< zw_sPXjxSy?LQ8#nJqffI^>uX2H*UYOKEWVxx6rt$FGth7D=9H5s>HbImE}Ob`{s~2 z@*bMltq9(OMH@8!iv2@f-Jy>T^F6)2LI!Bn%)){dw<6!p&!&KVr+^=|M+eJr4{mPm zqm2S|^rM62;&91ySMt$P<+5HvDo5*=FM+RKt!`}@*0}9t+>W84p|P;A*nUtI)OLoK zH{YOow_nGQoSeMcZD)13#Im@!n37$Z%n4l{>MpSym~4-^=cA@L@J^SOmDP%y6hZUv zR}vxtj6%_h85mqwSJx3`i^_{2{P}W0x-9nhWZWM8{#`F{b!{#Fl6fb)Oruck{_5`t z)x&%N`>8K~Ha8i@2nh(3lcf)wqSW;CNRdjX(ZnZjOzY<22npxV&`@L#o0N;>pGI2D9c^s}&fken zV}+-hatjK!*4FGD90;(lUXe-*3k%z>{HVvg1~gGR81pXhq*!NfFIt?RAB^tp&KI1E zYJ2^fvO2LbrKn4tESD{w&nLBr3RH zxd}(99dfudRGft#9r8!<3k$}JR_>+U2=KZ*-I>Vkm2k!02erHyH|DmcY-6+B znJ5v$BJ!$M@LQF(Xd4k$@Ls8xw|7qe+*q}1SG<^NR_~t)G&MD~Jz8*YCOrff4=*t> z5mLDc4ya3dPk@h4Awz?lNtol@x%s5L0b^wWNT#!p`xzQLJ3D#0#XcJR3B%#1Z@am< z(UE$`$KQMQ?8D?xNp$;W+?dm8=gG-Q4-XGVM@Q?fPZI9CAMOf_eRxcJR0>~^7@Aos zlZLb?CYW7D8a;F~G&I!F87MSqVW6iUE$*zZuV1d&TMA^pBq=Fb`ec;UN#^KCHvhh@ z?Fv*mC?{7;Td7L)PSMe=cZiM4&Yv1ACF+S-Tv$l**q!x0!RX`dts6D2=eskTmHg%5 z+W6t780YCD@q@#Iz4`h10>fJAhhLaD-$GuD-T(OPb6Z;x^=Yp!uSIU3kAbb}Dq`8# z*kEI0`*iQn!QEZzsI8miRIWzOwkf>5wUyQPGMnU}wwUN>LLwrWt?%|2 zI+>%i{QS;2*MiCUui^6p1zm{}TfM3>)*fZw`RCve1y!~l-9C<*>YICeI2dB+Kd<-q z_sh%0q2Aq&Ij^Oq_2*aGhYy#fzpYa2CrP<7`7n!E^tG^~RaQe6gXDWFooo_SZk|=X zb&G_O@(5O^C!q+NvN1ofGw|onAF_roNm6?es?u@74_@fy@p`Q|F?z>03=|k9i$6{C z^=*NYVPR>x!>6jMilRq(=)JNh-^;&tb*ZMRMaINvDnho?(9(LFm_2-mTNfg8*g9Ue zzOuq3`FzEf-J=}d0Xmt4K=jc7qs(CWDBvJ~=sHX}yVW~|Dn9@iVg`CW#LgalsY zmXgxD?Ce39_FSOB2=WddsVgG6)$c5yxGzpUPB@H-I*R zKoKQiFR`7#AhFW!yT=QMzeDe-tE+RJDtek}U0}K`sg17w5^u=XqIbJj>Iyy5e%h$(8dUMc(H{!E= z?c{A0Wo7zcGtqcvALp%6C+j<7tKT7r(Zii-&g(wwiz6|jdt>R=oBL~BA*Uot1=U{? zQBshTpSob|1?@H~Yx?)+h}(*ad>LC-VqR*le_f=1S`N(kuPeFh z?)q#)kpO#CVxk~Jz)tOgpru**{@k2Jl%j}P8y)9q^tuDo!N{J_P^xxJT3Q+_D=W*% zlRIS)Bcsa7`-8nLA}k3l@7<`l`1twh>FJr7yLazC zl9*eaZ0C=fgLKbuatRQ|ip6)N%Lmb@j1LXP9c|Rh*GfJ8iH|Id*N(6Hsi>$FKkTr$ zjZW??Ajb*edv?i$^uV9?Or!Br`0!rZ_t8-}Z;02!wdA8O$ufo+8qUw3uhdR`D7-}t z9Y-YVCnUHTE|8C8aWcr(8RG7CpPqy85l?GD>K0 z7rn(_$XLlqsB z{FvQiJGHoY4H$sa{5Qdq2hn2(h#wYhJ4lLJ9w}Qc8~3P$4F*s}!6cmW=FJJy?3fuEj+e>_>X!>kNgbqzNWX^a=DLhlJ3%A=^yw26@Dn6fm(OBm!Wy(@fW$ah zLD43{4i4VUU4cF@cF9IhZ}_cN?)CsQUoWcm(Y)ar-U?{C_ri4#^2Rf6Gq#t(J^&oj zE-6x%mN{Kt6z)Zpr+rUNt*(~dUoLt!Z*0}7%wX*`@#^X-QnxDPN<>72K9GAIAAb@; z9Kgun;9#|@6F{5N-+!N!c5Zj==CCDHzj#q=7N{qSYZl513az1>*MnKF^z3_-OoHOB zfB$}QQPI+npoGJm=`UM!e;5ZF5fKq|eV=-3^siIEL7>+ddhARB$j!*efFw-3>Y!KS zR$+@aLMK&Dyt)Cf4mSGRNt-IpcTc@Fp!G>^A7rj1Y$OhaIoYb{t_@_bVMI<3Bk@aCr^mRpA}OI+I@m zVbUJ^<^2Z@*L^95I`7`UpBNLO$_dwYPhR0s~r`?utj1c&iQAX=pwbS-H4; zRLQEen|viaQxewRd<>xoG;%I;aA0j#L?0Fw*^Ji&1_nME{a6i0qOGny@TWQGWPX1B z)p>5wlRM08apv;+7Azb#jt%-@Tl%{-=eV2n#oY zI=Q(pgs#o?=K}mMWwj_}(9+aQADB1)5_`d8fBVm`mSdfg0IOr*YzAymm? zPN3|`Xuf`har(I9Y|jm@uoaoRD{xri!E5X5AJlicWR9SCjoJk`FfuY`Xy|HbIdn}~ zEHzNdEPPFG0oXc1(JS9!a4iBD3SQwF*4LrPlFO zML?ST{D^%XT)cG2(!%2BuV2?OnC-ZJh?H9Md>JTRZ!{j?zklj-<&yQ&`EPm5mmYor zAs4{+IC^vdSjCFD5>$bStA{`+ZicX(0*3DH)Ly#B?fb}th+#iRYDnG}Knt`57O^J@ zYKso&{5NM;*PHV4s}cLKu-=}Y?eU8OUHK*1TVt+Wt1T20%-gv-1-pBDc(M>6q2fY9 z%W&+6hlirOd6?Aa6W)w)irgRS0PNF~HbKd^NnfpY-8wHQI9iL=su{`4%U{2K-N?x3 zp5B-6A*(S!*s&K(ULP6s8sE8oy#a-yUv2uChVwTBi?g%yahd!Ie0mcvs~cpMxxq+9 zGmsb-hKemMEz{G|01t`TjC~O%J4#uF_mJ6JD2B>KL_nZxrgZyuKtKTP7`%@?=pQ5` zB&ScGhT?x5NnHt78iWJy@Rzjl#k9j!lx&iN1%@&s5$N>Z)^e@W@|c&G7o4=m!N$OT zk0EZfS+d*e=h)a-09zuK-^wd0I$)pY`f{R6it0aqeq8^8z~A5hYT|jIj$&d?lWkFW zgk}j6f5Pj?iUbn@53W?U0q$k$k1FhG&N~yX(4>r2MtQCbd{CS zApP^>)vjVkA6B5^0Ep|=%O}$M{Ed(9RZovb@sO3nD8WdXjg9nl6%a4@DyUk0_3~u{ zkPtf3Cd-2A&E}IfWbD%VgEsHpy$h@jhSJ0Cw&E$D?mVAYX64jQ^s|QY>n4T3wx(;* zBE==ArSD?nZuXF34Zf5z&t}kWAb3uT!%a5E@Vx{;F8w*}yU|m?1s4{+>-80PNss7> zxNI&k)6z!3ek3Qev#}XyXoQD{|6EwuhcK)B_;GlqY;CF|z|W5fL?IAWgbb=;BO}+R z;%!z{aXx4}L-CzXMh}4~ed+2tZc}h%19|rtnV7awNbzbx!H2UDyzg>y9{<^N4N!-T zi@p4~2R1}eQ8CG7E(b8#(bmzSA(VdD+)ijm?2A5BE`zTNbYC26F0|IV-brPyTT3e| zwk3Lb{T5lu@x1S*C4tu=;*JZkTA!~b=0kV=)H5U*@%h8ESq%?~d1$YHXi@#+BJ;J9 zk)*4$6JWRoAKiXWZ?t-(hR4wy6kK&hK&}u?>0cj#w3MY37akMCNKGA7SoX&?14&h>3}LM7(DJ=;@|73qa@7vhw2mJajfFGnk#>Sr-8obML zwevJ`?uhE41x>H-itx5Pg+se$WR#+j^V_LeG`_>F59;HKmoK4gjMuowoWDOjILHK{ z!^Ct~PtSroX7Q4>$?13-?v{HWpPfYn3~Q>KqrYjV5@EG+wE@Gd##gWT14gf|sscPM zzx)o9{QC9ouw{Y6{I`y#rb%x`gVy%;;;-*f!KAa+rKAV!6^?>zFOIfBrNWBN*X_GG z41a->^wyeTS5RfRZ0J4a=&M`p;t;|n1?U;>*(~%%^=wHM`;)W0yv_2FTFURVQ^i<< zV3Wzo$N=fAt**ZE_n+9Jcq8g6k+BYv66|LGqsurrIG;a%#yq!-%8DGTaYtRps+`Bh z#z?(C4Ge5;3>Y$s2JPL??FKE02IHmq=ys$*f#JtzkKwtXS3=hv^VqXKbWLA8K7TLb zgGBpm2!PbuHy=NKq&?uL~`MHe$PKFiDnLc@Le$^0)37eOlYLH-Q4JCARbXcpoz0_{{cKxLVBM6QE?>bMs-YiwdZ(+x{ zWpb>Qm~<ajbfzIo}Rok}oB@N9@KmVzh)v-1}IL{&*YE9dt`*ZMG*)A4|n0=l+|_ z>_+&HYJJaTV~(Dk{V3bglM3_iB{QlVf2*yXh0?n-+!zHjvkWRbAVwfQUb%V|Br@H_ zsOP9URM!8HrKJ$yKYyg9r9X|lfB(M5eNWo!mqFF@r_gMpIpgBu)Ya7;92`IlLVx<7 z0iACORKS~QpvvLrA1h9vZ6A_?{z<|K3WjqZ{bReIjsCv2kv={?Pk%LE5f=yQ!f6Yo zv9q&t+C4Y24ij5)Q-< zkOn64LRhcRFf-?Tee^+Z5kzVJFM>jRe6gS+yV7yZ*#F&zyiANg9i^RNca4nPpJ3n2I{&CRPOCe;S2 z=-E@!Zrh(D&X|~(Ko55hQ=mI_3e?*s#_)s$R$AI#=%tXez=5uwK5e$WGEtjLL3>68 zB$0BcVs~Kr`rYEE+MTI*(Df_;5x_d1Iyr>|2cH)bB0?xBL!ctUBfn8VG5sdxy6Fa_ z-L68PSm5m03oJo6I4BNA0SXMW&*!eL+S=?=F~!9o+6qkVg6$KS1CKtso?oY&qzXgF_JlK|x<1l@m0sj8sBCn&fGp|7m044pgj ztfutNZ(3=cT91RY^z^O85iyIt?9#qesMY|&(eTfvK%5I-eKend_79jvi;oU@|NPHS z96UnUF(FWHp!CCd@4L*{PnCMOA^WZXz^5e&| z2RBM4*Qqg-L}Q+Rdo-s;fGv1Uf3UZ=hnnO=aq6|buVTjP`nsg^>YI2pJ|4&%yeCv_ z4L!ZN$;lFvmSCv8xOJf7&CSmrcaq2}F6)nietujePy5`PGhUBMhF`qE9r1l){oQgl$y?&emC<6V zb8z78pFhV*xr)ks{Q>cdtW3rj0w!+i>Y_y6=H?2X(*;P~Zvkj{nR{;Q8#(9tbp3w> zDAQD#E}8)d9AlK0)5oSd)o8_@y3aq7U8`?~%gxd4lt#-IheBf+LDs>!UDAn%#%Gz4*qst)tdQ*i*L|n4{QTO4)2cX}>EiKca z1CV-iad8;~IC)7({?qpzU?9beiy|UgttJ0rY1`b@CgVRlYt!Ck`!CjBFxa$~Rj-t~ zE>~}5dy}6OMPzT>Xo92ze0oBt>OGY3^slXF#wzTyFsbNsNQh;jxteqSR4zYODE_wp zcIVajqd?h%a-W}<7xd~CzktB^D(6cL!XN{HE&&{pmRBhj6d7==z$-wvCwzbZHbrdh z?DXCnT{AXLQ^^W=^{TC-<9>zRBuE5M&`h*Ez@pk(8jTMP6^1p!0Ock$}Gl#~>Bqk9BPW7QIplKOetmLZg&Hn7qoX@{d|U#laoKHZD2r5TDm4R)sqsO3-DVgjy}G5V+vpqG^^fTd(bi= zN2#f)|MEN*78X)cIJ_~108FRoE%R)1P51HEh$vW7B0H01*pXm(*DiUgrMeTGph>b^ zeU>esPC`tqprTT$ci#6!NJf z0^|*_-?9V=V2Y9AA9FXg_BE{L*upz|b{3$8OP|BzW%*#%9E}{10nF$5$2zu|5tuumWJ2jY$hPpNvY`0KVV)71te8#$C9aVNKBqh4vwCN})f z@S9*NyQweC2;YBiu+i7Yp873VG7&yeL$(2nZl&5innMINR#$Q=!8OMsrJ^EYQyF z?d^3(-Q0fu{0VZ2yPF$>pk7~h_sVqQr|TRv{$PeQ9Ygm1{!^0AL(O#E5VllD;(r6K zAdvlIOl0I;Lg)&QO7xtZoDe=CA;wR@(m@Haxfu64#zYqbJ)eS25+o~km`niig!jxD zFwc*4&#b&(vHZF`UdxUiZ_|_i+@_tqJupK1`tER=0xSVMJTWl=K!ed=Zlu(jHZ5An zkd2zUUYHE=Yx)UI@`O65s}qK9K-&SwGM?90o5xX`rpCrggOPxOf^9~?Dgx{v9Ya`KmHF50noFXCw%>18ilkYgjO}08L_WB>@R!4guBh;ETm+1y?||~VQ?G;k0c6s| z#-;%6w}5|?1KxuE^|HP@{bmRRJ233{uBhZ>6c9ZKg?ri4?4S2!U$Mw|?1NnAx-r*O zkR3v0VdM9nh3K#1jhXqXsHEgJ6=zOJ&eE6v>X?&nll?PGvxqS;7=wxmNPXn5kJz6R z{mo@k9Z^nh?uM~3X>sxL`}9!JWd2<#L@&(Q{6&radcuEJ{qC1K+S>BO)Q%xGm48pa z95HL{R`bw&hErv85TwG?{)=(oH~%kVJcr9*`PVqFp;PJk1n{;b{|xS^x$3B?2|xV_ z^CjT3!uSdRR&(Y`XrN#ofxj_5UG}hprTu<%snrk-14E{EE)-)an=#2ml@?#nvjLS> zf+z?2-rz@vbL`InC%3jL1jz#kgX8Ll&~asx`qzBd>rh5{dx2}rE-sEjW~-;mA161l zVUekSNJt1K)z;oVAUK#I?Ojn>v;d6t3>BF{F*|l3^zuNg*ad}UxQ90{G4r#j9uPOE z^oa=xNzPMoz#T>y2{_kR{>`is%g7!my2+Bx7ez%k!8e190+T}*)zx)d01N#g@FNzM zk03;2u~>MOe7%xaAutjX?C(E2R=o#1D<8s^7#@DnZQC|=P*vt&9jY^wNWb7Z0qp$DH=g-T*3AKz$hQbJ>Yus(E1O7<9>hRXE)&ul8 z6nXz_w#RAA`3zt@!1}-&Kqg)Xo)K?embd_Wvon`l00z7ZbS7|NXJ%$rSM5fudxjt5 z);0RmLgXJd(yCS+9qvIR1B7@nzGDj=qQanrul{NQY7&meHmHKK^5pnf`BM`p(!jH% zGCq`--#s652Ib`?^#@(?*z!|+?BGzMnDP3e*(<6hA!1Mk4HO@%sfEg?1G=3^zZ<== zx_T^|hKgUh6!9PykmaEGM{7uNq&rKMJ=$z16h>(Z@9u-lqON%CHo&|PsXxqGA+lM$ z>WT;Z`=IYN_>L$r(9!*#n*&9s^(G1&h!lYiW|gjNmGJQ4L*8RCN8ir{)H}ooK<}2M zrdRiMZV%I1R*t_QULWC;Cr>CSC;*;5EZ!M1PlmS|E;J!x-}n_GGq}V7q&X|~(&`^#qCv|e}0Hryjngm{>o#joN z0N|woP0Fa<)?EKQSpCwjn*xZ{cugWDXpL1a8~jJVFl!QHr4cZsA)BhUQXnNIg@ZNI zJ!x(H>+;zQgo=^z%V@D*(|Io(8 z`~P$E!oyZpN+2tg9&0eh@OP`*PL(*Ss{pr6j;ZI;7aNoWBvITtP@VH0=CWOV*4q4a z%afBC1M{Hi-;GvQRUMdpri13|!|=hwwW=*8dE&=O?eg)1;>tkVK|}!q zo0IW;XNa1_zi6^A-~E4VbW|vNC4g`kOM)he`3XZ-H|6An$$l*_7u?|o8_GM|eQy(b zskg7Mn2gtdvp3Lx{S9%Kdsah5O^+_G7QoCFKm(WnyYydO2$IcXzbdIL=<~b3Ht!0M zU}UiTX*yL2?4xKBH;5ng|A3I}`zOfA1Ox>Wg&%x^I&oiLA6(G`FkpDjoWYX?Ee|jU zpbeOoLK#?D-Jr|#_4PG2%K1D15Djx|p|P>qy|bYD+S%Jf4}(Wx0ZCq#@zTfv-t$_@ z)zRA88rt)N2NU4iG5h!j2EHpOuvwfz-U9@O*&(Zg-3@U01htdQhJe{$0i zO;7uJdndx0? zJ$?E|D&%-P=~%|TyLMGaOAA<_e%12}qN3m6kUBb!Q76<=Nz ztFEgb<_+tlM&6Y4n(8`!O}kO;vSEkX+CGO-5b#d{78gM;8+XWn;>nLW>)uz(`FF+f zI?Vn{AkERvWp}s%pECTnk=OIazJG)5|F_B5-Ck%C=YVEP(Y=8A+wy-Ke)rK8z@`pP zPGzK$&;dYJVm);Vu#s2w5;bO#=-9E zQepn?7g2lyZ3nBTXw44LjLlW6wdFyR14 z5S14gcz*x>y>hJ3^!BbnK|LPbF(HRYP%|`? zu^zt6X$t&`C1?s<7EtU3+V#E(^YZeFi1a&pu6Jr8VCY$!L{VWVasJJsj{$mlDypi6 zRp|4l`uYj=Mk{{}$nEd%ticT9@q9)Ka43v1Ale6UWiS-Jy}b>deRFd&6ex+SS4D;P z|5Y*R$3P`39eDr0v(C-UO_&l9{3#Go;-hMK|GuD?nj#SJ;c)m*k^XagP+b^O90%<& zH#Zmh!c~|)g{5w9KQF)3EeM2CBZTNU4Y=xW>EDUu8u+gJnY;*S{yax zD|TmX`O`kBnlG3^-=>xRB^gh&w+F*)r)0;gk)HIs?iHplGD;&YQCybvwDPTR)<^O@ z!F(lnH*b%qeB(jURr92mxzQu;<2`HN*}5{e<{!DE^8;JML*{#ndwcWKiBKEyudVF3 z*{C!>v9@-vk~*zJ^s;`S$w-*5y-1)PCM_mx#SPGdT_-5}Agy(Eb^W5R9cK?{f>EB9 zO5Bwp;uQoz>L^9U#MaiRGbEk#8d{QBv&gDQYQ>Mkz3ZEcEGKezVIojW)1?VI%2gIl-!!R&Px_JBE2 z8vnb%Tl)E5{rvO^<962L{n4p#9uZMd(0HXKCHbNzC(Uk!v#_v8kI`ehnyFn71Vw%j z@kX4bBP{{VwWP$%)RdKtZE0~4AQQ=p(3qHk{(ccjNmdHqj)!ZYyuzqxcXue?D^L}} zd4d81<a9fFL2c04@w86nJ=e^+xaCz56n~ z22!VgT5Ndu>Y?V=#>S9UDNLS$5LH}!DW<)DWMr=$#X+_&9vys_gx&suK7mg1@uOZ= z@8c2}ADeNk{B^tVt`*p?rWYSyW|?H$o}M;0dyHCIwp)o>UVaU=BdZriAx6f=^4(5R zv2zrxJeSnY6%iCvjy9_t^>B91>D$}eBe=HWQeC?+*TD;|q|IR+HiE+U*VL4Jj*OJl zl|+@7^`UWbL&L)?#Q6Bv#HFP@s{7;5u7hL$5)8`q^=Ii{#esiO%19u|yc3gRc<31% zc-!nwSbS$^aFelrSMr)mHF%V%YJ8V2ty#L_tq4*7fNQYJzyADDkDi2FjEiG_S#Rs; z_^@o`#EBD85{pPS%k>4g4R)FP$`xl5lV692kT9_B-2S%%^P^9;bhZe7Q2tj}5pVDb?|#5kw8=-%Dh%M8`jn zCHO0*;mr{ow&Ncl^c;0~$A6~a;vYZe|Me!P|GM@+@3MW8!6bj=$z;f>;}34#P?5{W H7`^yknG%_G delta 18546 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

    ?PBx@gWD z=~cPhF)Ru*;Jj|!xRF;-@UwB}X5!^=29aeobg!p3_tvJD zuZ~Xt(cyk)isZuNcm6XJR5RRo>b4y(udb3Rfs~nrwibJqQ)3 zowz~FbfpY7`1oK}8UlI1h;U^o((TIV_bS(=TT(j{Sb?&uP^LURJcQ!0k$3^q2d=Jn zT`X^fhF`~%ye}GXk~s`(-(5TTjVg=E(6U&v62C()sotR~SL+xC7Evd&dVdUqe4Xr` z8aTHGvtD=tSw&S{0@eO++U3u+lGs^Jr;X@|z z2R=u;v%7}o;f6CAe#l^v`85@lFoXQ%v6}t2`lVqC9I4DqOf@!LueZlhX$gt%jg3D( z(U`u?%iG`i5y8REuEl$j8<5e465co8HI2P@TX_BYHT=}c>GxBrb3B<1X^`ZsJUohN z>K@+S++1A4EXJ;xNi67`q)4=`jt(^=ut-UGZ!J2EzW4O>45z&?1^L1MPVC~vwWW&jl#6$srlyX=k0zIAk5}5tL&L(1 z%51vg_zm~AR|<9V;2CT8=Fi#GVu`z(dX>i7&zLwA!Y0z)kr$%Q7QViR1;*9$^YaBJHCKFgoYJ%)4}5)n zmjq0Ipww5Sr*+b&UjGQ z!QnjOb9}g+nVE@9%+3xJn$|(bcIsQF)=Zzy*qF|M2>=%Rumc)?A`v*X%y3yaV1kC2bhE*cse4f$rK6%EI~^yTSd)mORB z20YNw)pZ;!y2?p$#}c&^@*Lgm>VWdOJK>P(vxZ;yG10MhZhqcCOH1x-vY`2+x;kle zZa4c?V`HPK-|h@V0gLzpzVqih+S>BozaREYgxJEw!n!6a+y7SIb*}r&KFNc+0%JMY zMwPE$qBsZ%2s%=wk2iYM&YdQxF&VGKf+VCuq--)A$7@l5E#qCjb1jc@Z)JOVdyixb z4VXV;630QHG36G`d+g<π6hb+W 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 o83-bSg?DlnL0_3z&VE_OC diff --git a/visualization_files/figure-html/unnamed-chunk-9-1.png b/visualization_files/figure-html/unnamed-chunk-9-1.png index 103a57ba75089ae338a1d29f2f3d6fe200aecb44..a0eaa4502657b7264a2ebfdbcd85cc73c984035b 100644 GIT binary patch delta 29659 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