Ogata, Jonathan D, Wancen Mu, Eric S Davis, Bingjie Xue, J Chuck Harrell, Nathan C Sheffield, Douglas H Phanstiel, Michael I Love, and Mikhail G Dozmorov. “Excluderanges: Exclusion Sets for T2T-CHM13, GRCm39, and Other Genome Assemblies.” Bioinformatics, April 3, 2023, PMID: 37067481, DOI: 10.1093/bioinformatics/btad198

Coordinates of problematic genomic regions that should be avoided when working with genomic data. For human, mouse, and selected model organisms. Package on Bioconductor: excluderanges.

New (2022-09-20) - Exclusion sets for human T2T-CHM13 and mouse GRCm39/mm39 genome assemblies are available. Download all data from Google Drive.

TL;DR - For human hg38 genome assembly, Anshul and we recommend ENCFF356LFX exclusion list regions. Also available as hg38.Kundaje.GRCh38_unified_Excludable excluderanges object (AnnotationHub ID: AH95917) .

BED files of exclusion regions are available on the ENCODE project website and scattered across various websites, such as Blacklist (Amemiya, Kundaje, and Boyle 2019), Peakpass (Wimberley and Heber 2019), Greenscreen (Klasfeld and Wagner 2022). Human and mouse genome assemblies have the largest number of exclusion sets generated by multiple labs. These exclusion sets frequently lack annotation and curation methods, creating uncertainty what to use. The purpose of this package is to provide a unified place for informed retrieval of exclusion regions.

Naming convention: <genome assembly>.<lab>.<original file name>, e.g., hg19.Birney.wgEncodeDacMapabilityConsensusExcludable.

See make-data.R how we created excluderanges objects.

Installation instructions

Install the latest release of R, then get the latest version of Bioconductor by starting R and entering the commands:

# if (!require("BiocManager", quietly = TRUE))
#     install.packages("BiocManager")
# BiocManager::install(version = "3.16")

Then, install additional packages using the following code:

# BiocManager::install("AnnotationHub", update = FALSE) 
# BiocManager::install("GenomicRanges", update = FALSE)
# BiocManager::install("plyranges", update = FALSE)

Use excluderanges

Get an overview of what’s available

suppressMessages(library(GenomicRanges))
suppressMessages(library(AnnotationHub))
ah <- AnnotationHub()
query_data <- subset(ah, preparerclass == "excluderanges")
# You can search for multiple terms
# query_data <- query(ah, c("excluderanges", "Kundaje", "hg38"))
query_data
#> AnnotationHub with 90 records
#> # snapshotDate(): 2025-06-23
#> # $dataprovider: UCSC, GitHub, ENCODE, GreyListChIP, UCSChub, excluderanges,...
#> # $species: Homo sapiens, Mus musculus, Drosophila melanogaster, Danio rerio...
#> # $rdataclass: GRanges
#> # additional mcols(): taxonomyid, genome, description,
#> #   coordinate_1_based, maintainer, rdatadateadded, preparerclass, tags,
#> #   rdatapath, sourceurl, sourcetype 
#> # retrieve records with, e.g., 'object[["AH107304"]]' 
#> 
#>              title                                 
#>   AH107304 | T2T.excluderanges                     
#>   AH107305 | hg38.Kundaje.GRCh38_unified_Excludable
#>   AH107306 | hg38.Bernstein.Mint_Excludable_GRCh38 
#>   AH107307 | hg38.Boyle.hg38-Excludable.v2         
#>   AH107308 | hg38.Kundaje.GRCh38.Excludable        
#>   ...        ...                                   
#>   AH119513 | T2T.GreyListChIP.STAR_101bp_1000merge 
#>   AH119514 | mm10.GreyListChIP.STAR_36bp_1000merge 
#>   AH119515 | mm10.GreyListChIP.STAR_50bp_1000merge 
#>   AH119516 | mm39.GreyListChIP.STAR_36bp_1000merge 
#>   AH119517 | mm39.GreyListChIP.STAR_50bp_1000merge

hg38.Kundaje.GRCh38_unified_Excludable object recommended by Anshul

library(GenomeInfoDb)  # for keepStandardChromosomes()
excludeGR.hg38.Kundaje.1 <- query_data[["AH107305"]]
#> loading from cache
# Always a good idea to sort GRanges and keep standard chromosomes
excludeGR.hg38.Kundaje.1 <- excludeGR.hg38.Kundaje.1 %>% 
  sort() %>% keepStandardChromosomes(pruning.mode = "tidy")
excludeGR.hg38.Kundaje.1
#> GRanges object with 910 ranges and 0 metadata columns:
#>         seqnames            ranges strand
#>            <Rle>         <IRanges>  <Rle>
#>     [1]     chr1     628903-635104      *
#>     [2]     chr1   5850087-5850571      *
#>     [3]     chr1   8909610-8910014      *
#>     [4]     chr1   9574580-9574997      *
#>     [5]     chr1 32043823-32044203      *
#>     ...      ...               ...    ...
#>   [906]     chrY 11290797-11334278      *
#>   [907]     chrY 11493053-11592850      *
#>   [908]     chrY 11671014-11671046      *
#>   [909]     chrY 11721528-11749472      *
#>   [910]     chrY 56694632-56889743      *
#>   -------
#>   seqinfo: 24 sequences from hg38 genome

Save the data in a BED file, if needed.

# Note that rtracklayer::import and rtracklayer::export perform unexplained
# start coordinate conversion, likely related to 0- and 1-based coordinate
# system. We recommend converting GRanges to a data frame and save tab-separated
write.table(as.data.frame(excludeGR.hg38.Kundaje.1), 
            file = "hg38.Kundaje.GRCh38_unified_Excludable.bed",
            sep = "\t", row.names = FALSE, col.names = FALSE, quote = FALSE)

We can load other excludable regions for the hg38 genome assembly and compare them.

query_data <- query(ah, c("excluderanges", "hg38"))
query_data
#> AnnotationHub with 19 records
#> # snapshotDate(): 2025-06-23
#> # $dataprovider: UCSC, ENCODE, GitHub, GreyListChIP, UCSChub
#> # $species: Homo sapiens
#> # $rdataclass: GRanges
#> # additional mcols(): taxonomyid, genome, description,
#> #   coordinate_1_based, maintainer, rdatadateadded, preparerclass, tags,
#> #   rdatapath, sourceurl, sourcetype 
#> # retrieve records with, e.g., 'object[["AH107305"]]' 
#> 
#>              title                                 
#>   AH107305 | hg38.Kundaje.GRCh38_unified_Excludable
#>   AH107306 | hg38.Bernstein.Mint_Excludable_GRCh38 
#>   AH107307 | hg38.Boyle.hg38-Excludable.v2         
#>   AH107308 | hg38.Kundaje.GRCh38.Excludable        
#>   AH107309 | hg38.Lareau.hg38.full.Excludable      
#>   ...        ...                                   
#>   AH107357 | hg38.UCSC.heterochromatin             
#>   AH107358 | hg38.UCSC.contig                      
#>   AH107359 | hg38.UCSC.scaffold                    
#>   AH119510 | hg38.GreyListChIP.STAR_36bp_1000merge 
#>   AH119511 | hg38.GreyListChIP.STAR_101bp_1000merge
excludeGR.hg38.Bernstein <- query_data[["AH107306"]]
#> loading from cache
excludeGR.hg38.Boyle     <- query_data[["AH107307"]]
#> loading from cache
excludeGR.hg38.Kundaje.2 <- query_data[["AH107308"]]
#> loading from cache
excludeGR.hg38.Lareau    <- query_data[["AH107309"]]
#> loading from cache
excludeGR.hg38.Reddy     <- query_data[["AH107310"]]
#> loading from cache
excludeGR.hg38.Wimberley <- query_data[["AH107311"]]
#> loading from cache
excludeGR.hg38.Wold      <- query_data[["AH107312"]]
#> loading from cache
excludeGR.hg38.Yeo       <- query_data[["AH107313"]]
#> loading from cache

Compare the number of excludable regions

library(ggplot2)
mtx_to_plot <- data.frame(Count = c(length(excludeGR.hg38.Bernstein), 
                                    length(excludeGR.hg38.Boyle),
                                    length(excludeGR.hg38.Kundaje.1), 
                                    length(excludeGR.hg38.Kundaje.2), 
                                    length(excludeGR.hg38.Lareau),
                                    length(excludeGR.hg38.Reddy), 
                                    length(excludeGR.hg38.Wimberley),
                                    length(excludeGR.hg38.Wold), 
                                    length(excludeGR.hg38.Yeo)),
                          Source = c("Bernstein.Mint_Excludable_GRCh38", 
                                     "Boyle.hg38-Excludable.v2",
                                     "Kundaje.GRCh38_unified_Excludable", 
                                     "Kundaje.GRCh38.Excludable", 
                                     "Lareau.hg38.full.Excludable",
                                     "Reddy.wgEncodeDacMapabilityConsensusExcludable", 
                                     "Wimberley.peakPass60Perc_sorted",
                                     "Wold.hg38mitoExcludable", 
                                     "Yeo.eCLIP_Excludableregions.hg38liftover.bed"))
# Order Source by the number of regions
mtx_to_plot$Source <- factor(mtx_to_plot$Source, levels = mtx_to_plot$Source[order(mtx_to_plot$Count)])

ggplot(mtx_to_plot, aes(x = Source, y = Count, fill = Source)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  theme_bw() + theme(legend.position = "none")

# ggsave("man/figures/excluderanges_hg38_count.png", width = 5.5, height = 2)

Compare the width of excludable regions

log2 scale because of heavy right tail distributions.

library(ggridges)
library(dplyr)
mtx_to_plot <- data.frame(Width = c(width(excludeGR.hg38.Bernstein), 
                                    width(excludeGR.hg38.Boyle),
                                    width(excludeGR.hg38.Kundaje.1), 
                                    width(excludeGR.hg38.Kundaje.2), 
                                    width(excludeGR.hg38.Lareau),
                                    width(excludeGR.hg38.Reddy), 
                                    width(excludeGR.hg38.Wimberley),
                                    width(excludeGR.hg38.Wold), 
                                    width(excludeGR.hg38.Yeo)),
                          Source = c(rep("Bernstein.Mint_Excludable_GRCh38", length(excludeGR.hg38.Bernstein)),
                                     rep("Boyle.hg38-Excludable.v2", length(excludeGR.hg38.Boyle)),
                                     rep("Kundaje.GRCh38_unified_Excludable", length(excludeGR.hg38.Kundaje.1)),
                                     rep("Kundaje.GRCh38.Excludable", length(excludeGR.hg38.Kundaje.2)),
                                     rep("Lareau.hg38.full.Excludable", length(excludeGR.hg38.Lareau)),
                                     rep("Reddy.wgEncodeDacMapabilityConsensusExcludable", length(excludeGR.hg38.Reddy)),
                                     rep("Wimberley.peakPass60Perc_sorted", length(excludeGR.hg38.Wimberley)),
                                     rep("Wold.hg38mitoExcludable", length(excludeGR.hg38.Wold)),
                                     rep("Yeo.eCLIP_Excludableregions.hg38liftover.bed", length(excludeGR.hg38.Yeo))))

# Order objects by decreasing width
mtx_to_plot$Source <- factor(mtx_to_plot$Source, levels = mtx_to_plot %>% 
                               group_by(Source) %>% summarise(Mean = mean(Width)) %>% 
                               arrange(Mean) %>% pull(Source))
ggplot(mtx_to_plot, aes(x = log2(Width), y = Source, fill = Source)) +
  geom_density_ridges() +
  theme_bw() + theme(legend.position = "none")

# ggsave("man/figures/excluderanges_hg38_width.png", width = 5.5, height = 2)

We can investigate the total width of each set of excludable ranges.

mtx_to_plot <- data.frame(TotalWidth = c(sum(width(excludeGR.hg38.Bernstein)), 
                                         sum(width(excludeGR.hg38.Boyle)),
                                         sum(width(excludeGR.hg38.Kundaje.1)), 
                                         sum(width(excludeGR.hg38.Kundaje.2)), 
                                         sum(width(excludeGR.hg38.Lareau)),
                                         sum(width(excludeGR.hg38.Reddy)), 
                                         sum(width(excludeGR.hg38.Wimberley)),
                                         sum(width(excludeGR.hg38.Wold)), 
                                         sum(width(excludeGR.hg38.Yeo))), 
                          Source = c("Bernstein.Mint_Excludable_GRCh38", 
                                     "Boyle.hg38-Excludable.v2",
                                     "Kundaje.GRCh38_unified_Excludable", 
                                     "Kundaje.GRCh38.Excludable", 
                                     "Lareau.hg38.full.Excludable",
                                     "Reddy.wgEncodeDacMapabilityConsensusExcludable", 
                                     "Wimberley.peakPass60Perc_sorted",
                                     "Wold.hg38mitoExcludable", 
                                     "Yeo.eCLIP_Excludableregions.hg38liftover.bed"))
# Order objects by decreasing width
mtx_to_plot$Source <- factor(mtx_to_plot$Source, levels = mtx_to_plot %>% 
                               group_by(Source) %>% arrange(TotalWidth) %>% pull(Source))

ggplot(mtx_to_plot, aes(x = TotalWidth, y = Source, fill = Source)) + 
  geom_bar(stat="identity") + scale_x_log10() + scale_y_discrete(label=abbreviate, limits=rev) +
  xlab("log10 total width")

# ggsave("man/figures/excluderanges_hg38_sumwidth.png", width = 6.5, height = 2)

Compare overlaps among sets

We can compare overlap coefficients between those sets of excludable regions.

library(pheatmap)
library(stringr)
# Overlap coefficient calculations
overlap_coefficient <- function(gr_a, gr_b) {
  intersects <- GenomicRanges::intersect(gr_a, gr_b, ignore.strand = TRUE)
  intersection_width <- sum(width(intersects))
  min_width <- min(sum(width(gr_a)), sum(width(gr_b)))
  DataFrame(intersection_width, min_width, 
            overlap_coefficient = intersection_width/min_width,
             n_intersections = length(intersects))
}
# List and names of all excludable regions
all_excludeGR_list <- list(excludeGR.hg38.Bernstein, 
                            excludeGR.hg38.Boyle,
                            excludeGR.hg38.Kundaje.1, 
                            excludeGR.hg38.Kundaje.2,
                            excludeGR.hg38.Lareau,
                            excludeGR.hg38.Reddy,
                            excludeGR.hg38.Wimberley,
                            excludeGR.hg38.Wold,
                            excludeGR.hg38.Yeo)
all_excludeGR_name <- c("Bernstein.Mint_Excludable_GRCh38", 
                         "Boyle.hg38-Excludable.v2",
                         "Kundaje.GRCh38_unified_Excludable", 
                         "Kundaje.GRCh38.Excludable", 
                         "Lareau.hg38.full.Excludable",
                         "Reddy.wgEncodeDacMapabilityConsensusExcludable", 
                         "Wimberley.peakPass60Perc_sorted",
                         "Wold.hg38mitoExcludable", 
                         "Yeo.eCLIP_Excludableregions.hg38liftover.bed")
# Correlation matrix, empty
mtx_to_plot <- matrix(data = 0, nrow = length(all_excludeGR_list), ncol = length(all_excludeGR_list))
# Fill it in
for (i in 1:length(all_excludeGR_list)) {
  for (j in 1:length(all_excludeGR_list)) {
    # If diagonal, set to zero
    if (i == j) mtx_to_plot[i, j] <- 0
    # Process only one half, the other is symmetric
    if (i > j) {
      mtx_to_plot[i, j] <- mtx_to_plot[j, i] <- overlap_coefficient(all_excludeGR_list[[i]], all_excludeGR_list[[j]])[["overlap_coefficient"]]
    }
  }
}
# Trim row/colnames
rownames(mtx_to_plot) <- colnames(mtx_to_plot) <- str_trunc(all_excludeGR_name, width = 25) 
# Save the plot
# png("man/figures/excluderanges_hg38_jaccard.png", width = 1000, height = 900, res = 200)
pheatmap(data.matrix(mtx_to_plot), clustering_method = "ward.D")

# dev.off()

Metadata analysis

Note that some excludable ranges objects contain six columns, implying there may be some interesting metadata. Let’s explore one.

mcols(excludeGR.hg38.Reddy)
#> DataFrame with 396 rows and 2 columns
#>                       name     score
#>                <character> <numeric>
#> 1   High_Mappability_isl..      1000
#> 2         Satellite_repeat      1000
#> 3                 BSR/Beta      1000
#> 4   Low_mappability_island      1000
#> 5                 (CATTC)n      1000
#> ...                    ...       ...
#> 392       Satellite_repeat      1000
#> 393               (CATTC)n      1000
#> 394               (CATTC)n      1000
#> 395                   TAR1      1000
#> 396                   chrM      1000
mtx_to_plot <- table(mcols(excludeGR.hg38.Reddy)[["name"]]) %>%
  as.data.frame()
colnames(mtx_to_plot) <- c("Type", "Number")
mtx_to_plot <- mtx_to_plot[order(mtx_to_plot$Number), ]
mtx_to_plot$Type <- factor(mtx_to_plot$Type, 
                           levels = mtx_to_plot$Type)
ggplot(mtx_to_plot, aes(x = Number, y = Type, fill = Type)) +
  geom_bar(stat="identity") +
  theme_bw() + theme(legend.position = "none")

# ggsave("man/figures/excluderanges_hg38_Reddy_metadata.png", width = 5, height = 2.5)

One may decide to combine the excludable ranges from all labs, although from previous results we may decide to follow Anshul’s advice about the ENCFF356LFX exclusion list regions and use the excludeGR.hg38.Kundaje.1 object.

excludeGR.hg38.all <- reduce(c(excludeGR.hg38.Bernstein, 
                               excludeGR.hg38.Boyle,
                               excludeGR.hg38.Kundaje.1, 
                               excludeGR.hg38.Kundaje.2, 
                               excludeGR.hg38.Lareau,
                               excludeGR.hg38.Reddy, 
                               excludeGR.hg38.Wimberley,
                               excludeGR.hg38.Wold, 
                               excludeGR.hg38.Yeo))
# Sort and Keep only standard chromosomes
excludeGR.hg38.all <- excludeGR.hg38.all %>% sort %>% 
  keepStandardChromosomes(pruning.mode = "tidy")
print(length(excludeGR.hg38.all))
#> [1] 15998
summary(width(excludeGR.hg38.all))
#>     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
#>        5     1703     2294    17713     3001 30739401

Mitochondrial DNA sequences, NUMTs

Mitochondrial DNA sequences (mtDNA, 100-600K mitochondria per human cell) transferred to the nucleus give rise to the so-called mitochondrial DNA sequences in the nuclear genome (NUMTs). In the settings of DNA/chromatin sequencing (e.g., ATAC-seq), we may observe up to 80% of mitochondrial sequencing reads that may pile up in the NUMT sequences. Similar to exclusion sets, genomic regions highly homologous to mtDNA can be masked to improve biological signal.

The reference human nuclear mitochondrial sequences have been available in the UCSC genome browser for hg19 and mm8 human/mouse genome assemblies. We collected NUMT sets for hg38, T2T-CHM13, mm10, generated by Caleb Lareau in the mitoblacklist GitHub repository. These NUMT sets can be combined with exclusion sets.

Example of the hg38.Lareau.hg38_peaks object

query_data[grepl("mito", query_data$description, ignore.case = TRUE), ]
#> AnnotationHub with 1 record
#> # snapshotDate(): 2025-06-23
#> # names(): AH107343
#> # $dataprovider: GitHub
#> # $species: Homo sapiens
#> # $rdataclass: GRanges
#> # $rdatadateadded: 2022-10-19
#> # $title: hg38.Lareau.hg38_peaks
#> # $description: Regions of high homology to mtDNA (NUMT regions) defined by ...
#> # $taxonomyid: 9606
#> # $genome: hg38
#> # $sourcetype: RDS
#> # $sourceurl: https://drive.google.com/drive/folders/1sF9m8Y3eZouTZ3IEEywjs2...
#> # $sourcesize: NA
#> # $tags: c("FunctionalAnnotation", "GenomicSequence",
#> #   "hg38;Lareau;NUMTs") 
#> # retrieve record with 'object[["AH107343"]]'
hg38.Lareau.hg38_peaks <- query_data[["AH107343"]]
#> loading from cache

Centromeres, telomeres, etc.

Besides the ENCODE-produced excludable regions, we may want to exclude centromeres, telomeres, and other gap locations. The “Gap Locations” track for Homo Sapiens is available for the GRcH37/hg19 genome assembly as a UCSC ‘gap’ table. It can be retrieved from AnnotationHub, but lacks the metadata columns needed to decide the type of gaps.

# Search for the gap track
# ahData <- query(ah, c("gap", "Homo sapiens", "hg19"))
# ahData[ahData$title == "Gap"]
gaps <- ahData[["AH6444"]]

The UCSC ‘gap’ table provides better granularity about the types of gaps available. E.g., for human, hg19, we have the following types and the number of gaps.

Those objects are provided as individual GRanges.

Naming convention: <genome assembly>.UCSC.<gap type>, e.g., hg38.UCSC.gap_centromere. We can similarly load any gap type object.

query_data <- query(ah, c("excluderanges", "UCSC", "Homo Sapiens", "hg38"))
query_data
#> AnnotationHub with 7 records
#> # snapshotDate(): 2025-06-23
#> # $dataprovider: UCSC, UCSChub
#> # $species: Homo sapiens
#> # $rdataclass: GRanges
#> # additional mcols(): taxonomyid, genome, description,
#> #   coordinate_1_based, maintainer, rdatadateadded, preparerclass, tags,
#> #   rdatapath, sourceurl, sourcetype 
#> # retrieve records with, e.g., 'object[["AH107353"]]' 
#> 
#>              title                    
#>   AH107353 | T2T.UCSC.hgUnique.hg38   
#>   AH107354 | hg38.UCSC.centromere     
#>   AH107355 | hg38.UCSC.telomere       
#>   AH107356 | hg38.UCSC.short_arm      
#>   AH107357 | hg38.UCSC.heterochromatin
#>   AH107358 | hg38.UCSC.contig         
#>   AH107359 | hg38.UCSC.scaffold

gapsGR_hg38_centromere <- query_data[["AH107354"]]
#> loading from cache
gapsGR_hg38_centromere
#> GRanges object with 109 ranges and 2 metadata columns:
#>         seqnames              ranges strand |       bin        name
#>            <Rle>           <IRanges>  <Rle> | <numeric> <character>
#>     [1]     chr1 122026459-122224535      * |       189  GJ211836.1
#>     [2]     chr1 122224635-122503147      * |       189  GJ211837.1
#>     [3]     chr1 122503247-124785432      * |        23  GJ212202.1
#>     [4]     chr1 124785532-124849129      * |      1537  GJ211855.1
#>     [5]     chr1 124849229-124932724      * |       192  GJ211857.1
#>     ...      ...                 ...    ... .       ...         ...
#>   [105]    chr22   14419994-14420334      * |       695  GJ212209.1
#>   [106]    chr22   14420434-14421632      * |       695  GJ212186.2
#>   [107]    chr22   14421732-15054318      * |        10  GJ212191.2
#>   [108]     chrX   58605579-62412542      * |         1  GJ212192.1
#>   [109]     chrY   10316944-10544039      * |        10  GJ212193.1
#>   -------
#>   seqinfo: 24 sequences from hg38 genome

CUT&RUN excludable sets

Nordin et al. 2022 (Nordin et al. 2022) generated excludable regions for the CUT&RUN technology. They are available as Supplementary Material. We uniformly processed them and made available on Google Drive

# hg38 CUT&RUN exclusion set, BED
download.file("https://drive.google.com/uc?export=download&id=1rKIu7kdiEySTi-cq3nYxXJP4VQX1IPcS",
              destfile = "hg38.Nordin.CandRblacklist_hg38.bed")
# hg38 CUT&RUN exclusion set, RDS
download.file("https://drive.google.com/uc?export=download&id=1JuB1h-QQUw1mddBavI7CIuH7R-lwwczU",
              destfile = "hg38.Nordin.CandRblacklist_hg38.rds")
# And then load the GRanges object
mtx <- readRDS("hg38.Nordin.CandRblacklist_hg38.rds")
# mm10 CUT&RUN exclusion set, BED
download.file("https://drive.google.com/uc?export=download&id=1CRAojdphMbAzd3MnW_UmO1WtsDrHsrU1",
              destfile = "mm10.Nordin.CandRblacklist_mm10.bed")
# mm10 CUT&RUN exclusion set, RDS
download.file("https://drive.google.com/uc?export=download&id=1orPXLWUZ4-C4n_Jt2gH-WERLpY9Kn0t_",
              destfile = "mm10.Nordin.CandRblacklist_mm10.rds")

Summary table

Full summary table.

Name Ahub.IDs.BioC.3.16.and.above Description Filtered.Region.count
T2T.excluderanges AH107304 Defined by the Boyle-Lab/Blacklist software, High Signal and Low Mappability regions 3565
hg38.Kundaje.GRCh38_unified_Excludable AH107305 Defined as a combination of hg38.Lareau.hg38_peaks, hg38.Boyle.hg38-Excludable.v2, and hg38.Wimberley.peakPass60Perc_sorted, followed by manual curation. Supersedes hg38.Kundaje.GRCh38.Excludable. 910
hg38.Bernstein.Mint_Excludable_GRCh38 AH107306 Defined from Mint-ChIP (low input, multiplexed ChIP-seq) data 12052
hg38.Boyle.hg38-Excludable.v2 AH107307 Defined by the Boyle-Lab/Blacklist software, High Signal and Low Mappability regions 636
hg38.Kundaje.GRCh38.Excludable AH107308 Defined by Anshul Kundaje as a part of ENCODE and modENCODE consortia 38
hg38.Lareau.hg38.full.Excludable AH107309 ENCODE excludable regions combined with regions of high homology to mtDNA (NUMT regions) 820
hg38.Reddy.wgEncodeDacMapabilityConsensusExcludable.hg38 AH107310 Defined by the ENCODE consortium, includes satellite repeats (CATTC, GAATG, GAGTG, ACRO1), RepeatMasker repeats (ALR/Alpha, BSR/Beta), centromeric repeats, chrM, High/Low mappability islands. Has extra chromosomes, use keepStandardChromosomes() filtering 396
hg38.Wimberley.peakPass60Perc_sorted AH107311 Defined by the ewimberley/peakPass software 5078
hg38.Wold.hg38mitoExcludable AH107312 Definition method unknown 299
hg38.Yeo.eCLIP_Excludableregions.hg38liftover.bed.fixed AH107313 Defined from eCLIP data 56
hg38.Nordin.CandRblacklist_hg38 NA Defined from CUT&RUN negative controls as 0.1% top significant SEACR peaks in over 30% of samples 885
hg19.Boyle.hg19-Excludable.v2 AH107314 Defined by the Boyle-Lab/Blacklist software, High Signal and Low Mappability regions 834
hg19.Bernstein.Mint_Excludable_hg19 AH107315 Defined from Mint-ChIP (low input, multiplexed ChIP-seq) data 9035
hg19.Birney.wgEncodeDacMapabilityConsensusExcludable AH107316 Defined by the ENCODE consortium, includes satellite repeats (CATTC, GAATG, GAGTG, ACRO1), RepeatMasker repeats (ALR/Alpha, BSR/Beta), centromeric repeats, chrM, High/Low mappability islands 411
hg19.Crawford.wgEncodeDukeMapabilityRegionsExcludable AH107317 Defined by the ENCODE consortium, includes satellite repeats (CATTC, GAATG, GAGTG, ACRO1), RepeatMasker repeats (ALR/Alpha, BSR/Beta), human satellite repeat HSATII, chrM, ribosomal subunit consensus sequences LSU-rRNA_Hsa, SSU-rRNA_Hsa. Has extra chromosomes, use keepStandardChromosomes() filtering 1566
hg19.Lareau.hg19.full.Excludable AH107318 ENCODE excludable regions combined with regions of high homology to mtDNA (NUMT regions) 902
hg19.Wold.hg19mitoExcludable AH107319 Definition method unknown 295
hg19.Yeo.eCLIP_Excludableregions.hg19 AH107320 Defined from eCLIP data, includes skyscraper, rRNA pseudogene, unreliably mapped satellite repeat, and low complexity skyscraper peak regions 57
mm39.excluderanges AH107321 Defined by the Boyle-Lab/Blacklist software, High Signal and Low Mappability regions 3147
mm10.Boyle.mm10-Excludable.v2 AH107322 Defined by the Boyle-Lab/Blacklist software, High Signal and Low Mappability regions 3435
mm10.Hardison.Excludable.full AH107323 Definition method unknown 7865
mm10.Hardison.psuExcludable.mm10 AH107324 Definition method unknown 5552
mm10.Kundaje.anshul.Excludable.mm10 AH107325 Defined by Anshul Kundaje as a part of ENCODE and modENCODE consortia 3010
mm10.Kundaje.mm10.Excludable AH107326 Defined by Anshul Kundaje as a part of ENCODE and modENCODE consortia 164
mm10.Lareau.mm10.full.Excludable AH107327 ENCODE excludable regions combined with regions of high homology to mtDNA (NUMT regions) 523
mm10.Wold.mm10mitoExcludable AH107328 Definition method unknown 123
mm10.Nordin.CandRblacklist_mm10 NA Defined from CUT&RUN negative controls as 0.1% top significant SEACR peaks in over 30% of samples 559
mm9.Lareau.mm9.full.Excludable AH107329 ENCODE excludable regions combined with regions of high homology to mtDNA (NUMT regions) 3415
mm9.Wold.mm9mitoExcludable AH107330 Definition method unknown 123
ce11.Boyle.ce11-Excludable.v2 AH107331 Defined by the Boyle-Lab/Blacklist software, High Signal and Low Mappability regions 97
ce10.Boyle.ce10-Excludable.v2 AH107332 Defined by the Boyle-Lab/Blacklist software, High Signal and Low Mappability regions 100
ce10.Kundaje.ce10-Excludable AH107333 Defined by Anshul Kundaje, superseded by ce10.Boyle.ce10-Excludable.v2 122
danRer10.Domingues.Excludableed AH107334 Defined manually using total RNA-seq. 57
danRer10.Yang.Supplemental_Table_19.ChIP-seq_black_list_in_the_zebrafish_genome AH107335 Defined via MACS2 peak calling using ChIP-seq (PMID: 33239788) 853
dm6.Boyle.dm6-Excludable.v2 AH107336 Defined by the Boyle-Lab/Blacklist software, High Signal and Low Mappability regions 182
dm3.Boyle.dm3-Excludable.v2 AH107337 Defined by the Boyle-Lab/Blacklist software, High Signal and Low Mappability regions 248
dm3.Kundaje.dm3-Excludable AH107338 Defined by Anshul Kundaje. Contains heterochromatin chromosomes chr2LHet. Superseded by dm3.Boyle.dm3-Excludable.v2 306
TAIR10.Wimberley.predicted_excluded_list_sorted_0.6 AH107339 Defined by the ewimberley/peakPass software 887
TAIR10.Klasfeld.arabidopsis_Excludable_20inputs AH107340 Defined by the Boyle-Lab/Blacklist software, High Signal and Low Mappability regions (DOI: 10.1101/2022.02.27.482177) 83
TAIR10.Klasfeld.arabidopsis_greenscreen_20inputs AH107341 Defined by the green screen pipeline (DOI: 10.1101/2022.02.27.482177) 36
T2T.Lareau.chm13v2.0_peaks AH107342 Regions of high homology to mtDNA (NUMT regions) defined by caleblareau/mitoblacklist 817
hg38.Lareau.hg38_peaks AH107343 Regions of high homology to mtDNA (NUMT regions) defined by caleblareau/mitoblacklist 784
hg19.Lareau.hg19_peaks AH107344 Regions of high homology to mtDNA (NUMT regions) defined by caleblareau/mitoblacklist 779
mm10.Lareau.mm10_peaks AH107345 Regions of high homology to mtDNA (NUMT regions) defined by caleblareau/mitoblacklist 387
mm9.Lareau.mm9_peaks AH107346 Regions of high homology to mtDNA (NUMT regions) defined by caleblareau/mitoblacklist 395
hg19.UCSC.numtS AH107347 Human NumtS mitochondrial sequence 766
mm9.UCSC.numtS AH107348 Mouse NumtS mitochondrial sequence 172
T2T.CHM13.chm13.draft_v2.0.cen_mask AH107349 Centromeric satellite masking bed file (v2.0) 23
T2T.CHM13.chm13.draft_v1.1.telomere AH107350 Telomere identified by the VGP pipeline (v1.1) 48
T2T.UCSC.censat AH107351 T2T peri/centromeric satellite annotation (v2.0, 20220329, CHM13 v2.0) 2523
T2T.UCSC.gap AH107352 Locations of assembly gaps, as determine by strings of ‘N’ characters (v1.0) 5
T2T.UCSC.hgUnique.hg38 AH107353 Regions unique to the T2T-CHM13 v2.0 assembly compared to the GRCh38/hg38 and GRCh37/hg19 reference assemblies 615
hg38.UCSC.centromere AH107354 Gaps from centromeres 109
hg38.UCSC.telomere AH107355 Gaps from telomeres 48
hg38.UCSC.short_arm AH107356 Gaps on the short arm of the chromosome 5
hg38.UCSC.heterochromatin AH107357 Gaps from large blocks of heterochromatin 11
hg38.UCSC.contig AH107358 Gaps between contigs in scaffolds 285
hg38.UCSC.scaffold AH107359 Gaps between scaffolds in chromosome assemblies. Has extra chromosomes, use keepStandardChromosomes() filtering 254
hg19.UCSC.centromere AH107360 Gaps from centromeres 24
hg19.UCSC.telomere AH107361 Gaps from telomeres 46
hg19.UCSC.short_arm AH107362 Gaps on the short arm of the chromosome 5
hg19.UCSC.heterochromatin AH107363 Gaps from large blocks of heterochromatin 12
hg19.UCSC.clone AH107364 Gaps between clones in the same map contig. Has extra chromosomes, use keepStandardChromosomes() filtering 107
hg19.UCSC.contig AH107365 Gaps between contigs in scaffolds 163
hg19.UCSC.scaffold AH107366 Gaps between scaffolds in chromosome assemblies. Only non-autosomal chromosomes 0
mm39.UCSC.centromere AH107367 Gaps from centromeres 20
mm39.UCSC.telomere AH107368 Gaps from telomeres 42
mm39.UCSC.short_arm AH107369 Gaps on the short arm of the chromosome 21
mm39.UCSC.contig AH107370 Gaps between contigs in scaffolds 60
mm39.UCSC.scaffold AH107371 Gaps between scaffolds in chromosome assemblies 115
mm10.UCSC.centromere AH107372 Gaps from centromeres 20
mm10.UCSC.telomere AH107373 Gaps from telomeres 42
mm10.UCSC.short_arm AH107374 Gaps on the short arm of the chromosome 21
mm10.UCSC.clone AH107375 Gaps between clones in the same map contig. Has extra chromosomes, use keepStandardChromosomes() filtering 4
mm10.UCSC.contig AH107376 Gaps between contigs in scaffolds 104
mm10.UCSC.scaffold AH107377 Gaps between scaffolds in chromosome assemblies 0
mm10.UCSC.other AH107378 Sequence of Ns in the assembly that were not marked as gaps in the AGP (A Golden Path) assembly definition file. Has extra chromosomes, use keepStandardChromosomes() filtering 383
mm10.UCSC.fragment AH107379 A single gap of 31 bases in chrX_GL456233_random 0
mm9.UCSC.centromere AH107380 Gaps from centromeres 21
mm9.UCSC.fragment AH107381 Gaps between the contigs of a draft clone. (In this context, a contig is a set of overlapping sequence reads). Has extra chromosomes, use keepStandardChromosomes() filtering 436
mm9.UCSC.contig AH107382 Gaps between contigs in scaffolds. Has extra chromosomes, use keepStandardChromosomes() filtering 105
danRer10.UCSC.contig AH107383 Gaps between contigs in scaffolds 2338
danRer10.UCSC.scaffold AH107384 Gaps between scaffolds in chromosome assemblies 16496
dm6.UCSC.other AH107385 Sequence of Ns in the assembly that were not marked as gaps in the AGP (A Golden Path) assembly definition file 268
dm3.UCSC.contig NA Gaps between contigs in scaffolds 7
dm3.UCSC.scaffold NA Gaps between scaffolds in chromosome assemblies 1
TAIR10.UCSC.araTha1.gap NA Gaps in the May 2011 Arabidopsis thaliana genome assembly 357

Citation

Below is the citation output from using citation('excluderanges') in R. Please run this yourself to check for any updates on how to cite excluderanges.

print(citation("excluderanges"), bibtex = TRUE)

Code of Conduct

Please note that the excluderanges project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

This package was developed using biocthis.

Session information

sessionInfo()
#> R version 4.5.1 (2025-06-13)
#> Platform: aarch64-unknown-linux-gnu
#> Running under: Ubuntu 24.04.2 LTS
#> 
#> Matrix products: default
#> BLAS:   /usr/lib/aarch64-linux-gnu/openblas-pthread/libblas.so.3 
#> LAPACK: /usr/lib/aarch64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#>  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
#>  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
#>  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
#> 
#> time zone: Etc/UTC
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats4    stats     graphics  grDevices utils     datasets  methods  
#> [8] base     
#> 
#> other attached packages:
#>  [1] rtracklayer_1.69.1   stringr_1.5.1        pheatmap_1.0.13     
#>  [4] dplyr_1.1.4          ggridges_0.5.6       ggplot2_3.5.2       
#>  [7] GenomeInfoDb_1.45.10 AnnotationHub_3.99.6 BiocFileCache_2.99.5
#> [10] dbplyr_2.5.0         GenomicRanges_1.61.1 Seqinfo_0.99.2      
#> [13] IRanges_2.43.0       S4Vectors_0.47.0     BiocGenerics_0.55.1 
#> [16] generics_0.1.4       BiocStyle_2.37.1    
#> 
#> loaded via a namespace (and not attached):
#>  [1] tidyselect_1.2.1            farver_2.1.2               
#>  [3] blob_1.2.4                  filelock_1.0.3             
#>  [5] Biostrings_2.77.2           bitops_1.0-9               
#>  [7] fastmap_1.2.0               RCurl_1.98-1.17            
#>  [9] GenomicAlignments_1.45.2    XML_3.99-0.18              
#> [11] digest_0.6.37               lifecycle_1.0.4            
#> [13] KEGGREST_1.49.1             RSQLite_2.4.2              
#> [15] magrittr_2.0.3              compiler_4.5.1             
#> [17] rlang_1.1.6                 tools_4.5.1                
#> [19] yaml_2.3.10                 knitr_1.50                 
#> [21] S4Arrays_1.9.1              labeling_0.4.3             
#> [23] bit_4.6.0                   curl_7.0.0                 
#> [25] DelayedArray_0.35.2         RColorBrewer_1.1-3         
#> [27] abind_1.4-8                 BiocParallel_1.43.4        
#> [29] withr_3.0.2                 purrr_1.1.0                
#> [31] grid_4.5.1                  scales_1.4.0               
#> [33] SummarizedExperiment_1.39.1 cli_3.6.5                  
#> [35] rmarkdown_2.29              crayon_1.5.3               
#> [37] rstudioapi_0.17.1           httr_1.4.7                 
#> [39] rjson_0.2.23                DBI_1.2.3                  
#> [41] cachem_1.1.0                parallel_4.5.1             
#> [43] AnnotationDbi_1.71.1        BiocManager_1.30.26        
#> [45] XVector_0.49.0              restfulr_0.0.16            
#> [47] matrixStats_1.5.0           vctrs_0.6.5                
#> [49] Matrix_1.7-3                jsonlite_2.0.0             
#> [51] bit64_4.6.0-1               glue_1.8.0                 
#> [53] codetools_0.2-20            stringi_1.8.7              
#> [55] gtable_0.3.6                BiocVersion_3.22.0         
#> [57] BiocIO_1.19.0               UCSC.utils_1.5.0           
#> [59] tibble_3.3.0                pillar_1.11.0              
#> [61] rappdirs_0.3.3              htmltools_0.5.8.1          
#> [63] R6_2.6.1                    httr2_1.2.1                
#> [65] lattice_0.22-7              evaluate_1.0.4             
#> [67] Biobase_2.69.0              png_0.1-8                  
#> [69] Rsamtools_2.25.2            memoise_2.0.1              
#> [71] SparseArray_1.9.1           xfun_0.53                  
#> [73] MatrixGenerics_1.21.0       pkgconfig_2.0.3

References

Amemiya, Haley M, Anshul Kundaje, and Alan P Boyle. 2019. “The ENCODE Blacklist: Identification of Problematic Regions of the Genome.” Sci Rep 9 (1): 9354. https://doi.org/10.1038/s41598-019-45839-z.
Klasfeld, Sammy, and Doris Wagner. 2022. “Greenscreen Decreases Type I Errors and Increases True Peak Detection in Genomic Datasets Including ChIP-seq.” bioRxiv.
Nordin, Anna, Gianluca Zambanini, Pierfrancesco Pagella, and Claudio Cantu. 2022. “The CUT&RUN Blacklist of Problematic Regions of the Genome.” bioRxiv.
Wimberley, Charles E, and Steffen Heber. 2019. “PeakPass: Automating ChIP-Seq Blacklist Creation.” J Comput Biol, December. https://doi.org/10.1089/cmb.2019.0295.