# Paired-end Interaction Tracks

Paul Shannon

#### 2026-05-18

#### Package

igvR 1.33.2

# Contents

# 1 Overview

With the popularity and wide availability of Hi-C data - a high throughput chromatin confirmation capture technology - an appropriate display format was needed. The igv.js team created the Interact track, supporint the bedpe data file format.

# 2 Example

We demonstrate this track with a few lines extracted from the Encode project’s ENCFF110BUX experiment, from Michael Snyder’s lab, showing the boundaries and extent of two topologically-associated domains (TADS), typically small genomic regions which are somewhat isolated from neighboring regions, which is believed to play a role in restricting enhancer/promoter interactions.

An equally important, and perhaps more common use of paired-end interaction data is to represent Hi-C maps of enhancer-promoter interactions. These data also rely upon the bedpe file format.

igv.js provides several visualization parameters not yet supported in igvR.

To define a TAD, two genomic locations are required, as shown here and in the code below:

          chrom1    start1      end1 chrom2    start2      end2
               2 105780000 105790000      2 105890000 105900000
               2 105575000 105600000      2 106075000 106100000

# 3 Code

These few lines provide a complete, if minimal introduction to the BedpeInteractionsTrack.

    library(igvR)
    igv <- igvR()
    setBrowserWindowTitle(igv, "Paired-end demo")
    setGenome(igv, "hg38")
    tbl.bedpe <- data.frame(chrom1 = c("2", "2"),
                            start1 = c(105780000, 105575000),
                            end1 = c(105790000, 105600000),
                            chrom2 = c("2", "2"),
                            start2 = c(105890000, 106075000),
                            end2 = c(105900000, 106100000),
                            stringsAsFactors = FALSE)

      # construct a "region of interest" (roi) string from tbl.bedpe
      # this is where our two features are found.

    shoulder <- 300000
    roi <- sprintf("%s:%d-%d", tbl.bedpe$chrom1[1],
                               min(tbl.bedpe$start1) - shoulder,
                               max(tbl.bedpe$end2) + shoulder)

    showGenomicRegion(igv, roi)
    track <- BedpeInteractionsTrack("ENCFF110BUX", tbl.bedpe)
    displayTrack(igv, track)

# 4 Display

# 5 Session Info

    sessionInfo()
    #> R version 4.6.0 Patched (2026-05-01 r89994)
    #> Platform: aarch64-apple-darwin23
    #> Running under: macOS Tahoe 26.3.1
    #>
    #> Matrix products: default
    #> BLAS:   /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRblas.0.dylib
    #> LAPACK: /Library/Frameworks/R.framework/Versions/4.6/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1
    #>
    #> locale:
    #> [1] C/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
    #>
    #> time zone: America/New_York
    #> tzcode source: internal
    #>
    #> attached base packages:
    #> [1] stats     graphics  grDevices utils     datasets  methods   base
    #>
    #> other attached packages:
    #> [1] BiocStyle_2.41.0
    #>
    #> loaded via a namespace (and not attached):
    #>  [1] digest_0.6.39       R6_2.6.1            bookdown_0.46       fastmap_1.2.0       xfun_0.57
    #>  [6] cachem_1.1.0        knitr_1.51          htmltools_0.5.9     rmarkdown_2.31      lifecycle_1.0.5
    #> [11] cli_3.6.6           sass_0.4.10         jquerylib_0.1.4     compiler_4.6.0      tools_4.6.0
    #> [16] evaluate_1.0.5      bslib_0.11.0        yaml_2.3.12         otel_0.2.0          BiocManager_1.30.27
    #> [21] jsonlite_2.0.0      rlang_1.2.0