NucTools is a software package for the analysis of chromatin feature occupancy profiles from high-throughput sequencing data

Biomedical applications of high-throughput sequencing methods generate a vast amount of data in which numerous chromatin features are mapped along the genome. The results are frequently analysed by creating binary data sets that link the presence/absence of a given feature to specific genomic loci. However, the nucleosome occupancy or chromatin accessibility landscape is essentially continuous. It is currently a challenge in the field to cope with continuous distributions of deep sequencing chromatin readouts and to integrate the different types of discrete chromatin features to reveal linkages between them. Here we introduce the NucTools suite of Perl scripts as well as MATLAB- and R-based visualization programs for a nucleosome-centred downstream analysis of deep sequencing data. NucTools accounts for the continuous distribution of nucleosome occupancy. It allows calculations of nucleosome occupancy profiles averaged over several replicates, comparisons of nucleosome occupancy landscapes between different experimental conditions, and the estimation of the changes of integral chromatin properties such as the nucleosome repeat length. Furthermore, NucTools facilitates the annotation of nucleosome occupancy with other chromatin features like binding of transcription factors or architectural proteins, and epigenetic marks like histone modifications or DNA methylation.

NucTools scheme


Linux (2.6 kernel or later), Windows 7 x32/64 or Mac (OSX 10.6 Snow Leopard or later) operating system with minimum 64 GB of RAM is recommended*. Perl v5.8 or above is required.

The C/C++ compiling environment might be required for installing dependencies, such as bedtools. Systems may vary. Please assure that your system has the essential software building packages (e.g. build-essential for Fedora, XCODE for Mac…etc) installed properly.

NucTools was tested successfully on our Linux servers (CentOS release 6.7 w/ Perl v5.10.1; Fedora release 22 w/ Perl v5.20.3), Macbook Pro laptops (MAC OSX 10.11 w/ XCODE v5.1, 8GB RAM, 4 cores processor), Lenovo ThinkPad laptop (Windows 7, 8Gb RAM, 4 cores processor)

*Memory requirements depend on the experimental system. For big genomes the performance will increase greatly on machines with more memory. For example, the processing of all mouse chromosomes, with the sequencing library size about 30 000 000 reads occupy at the peak load around 60-70 Gb of RAM. It is important to mention that the performance is very dependent on the HDD read-write speed. Therefore the running of many samples in parallel is recommended only on the server-like system or computational clusters with RAID arrays, allowing real multithreaded read-write access to HDDs array. script memory usage.

NucTools memory requirments

We used occupancy values from 7 mouse chromosomes with the length from 95 millions of bps (chromosome 17) to 195 millions bps (chromosome 1). With the average sequence coverage of 67% and sequencing depth 4.5 folds, computer used 440 Mb of RAM per 1 million bases of a mapped bps.


This is an example of profiling a “test.bed” file using NucTools. The test BED file comes along with the NucTools package in the “test” directory. More details can be found in the INSTRUCTION section.

  1. Obtaining NucTools package:

     $ git clone NucTools
  2. Installing NucTools:

    the NucTools package does not require installation. It is a collection of individual scripts which can be executed individually.

  3. Generate a genome annotation table using the provided R script:

     $ Rscript misc/LoadAnnotation.BioMart.R
  4. Prepare BED files from BAM files with external application (optionally)

    a. merge multiple replicates to one BAM file and sort by read names:

     $ samtools merge -n /Path_to_folder_with/BAM/test_sorted.bam /Path_to_folder_with/BAM/test.rp1.bam /Path_to_folder_with/BAM/test.rp2.bam /Path_to_folder_with/BAM/test.rp3.bam

    b. convert sorted BAM files to BED using script (or alternatively with an external package bedTools):

     $ perl -w -i /Path_to_folder_with/BAM/test_sorted.bam -verbose > /Path_to_folder_with/BED/test_sorted.bed
     $ bedtools bamtobed -i /Path_to_folder_with/BAM/test_sorted.bam | pigz > /Path_to_folder_with/BED/test_sorted.bed.gz
  5. Running NucTools: a. Extend single-end reads to the average DNA fragment size

     $ -in test.bed -out test.ext.bed -fL 147

    b. Extract individual chromosomes from the whole-genome BED file

     $ -in test.ext.bed -out test -d /Path_to_folder_with/BED/ -p chr 

    c. Convert all BED files to occupancy OCC files averaging nucleosomes occupancy values over the window of size 10

     $ -in /Path_to_folder_with/BED/ -odir /Path_to_folder_with/OCC -dir -use -w 10

    d. Calculate aggregate profiles and aligned occupancy matrices for each chromosome individually

     $ -reg -idC 0 -chrC 4 --strC 7 -sC 8 -eC 9 -pbN -lsN -lS <SeqLibSize> \
     -chr 1 -al /Path_to_folder_with/OCC/chr1.test.occ_matrix -av /Path_to_folder_with/OCC/chr1.test.aggregate \
     -in /Path_to_folder_with/OCC/chr1.test.w10.occ -upD 1000 -downD 1000

    e. Paste together aggregate profiles of each chromosome in one file and add a header

     $ ls /Path_to_folder_with/OCC/*1000_1000.txt | perl -n -e 'if(/.*(chr.*)\.test.*/gm) { print $1, "\t"; }' | \
     perl -n -e 'if( /(.*)\t$/g )  { print $1}' > /Path_to_folder_with/OCC/test.all.occ.txt
     $ echo "" >> /Path_to_folder_with/OCC/test.all.occ.txt
     $ paste /Path_to_folder_with/OCC/*1000_1000.txt >> /Path_to_folder_with/OCC/test.all.occ.txt
  6. Optionally: Visualize aggregate profiles and run K-mean cluster analysis on aligned occupancy matrixes with the MatLab-based ClusterMaps Building Tool (provided as a part of NucTools package). Download link


the NucTools suite for a nucleosome-centered downstream analysis of deep sequencing data is primarily Perl-based, and requires at least Perl v5.8 with dependencies installed properly (listed in A visualisation program that comes with NucTools is written on MatLab and requires either full MatLab installation or can be provided as a standalone application with web-installer compiled for Windows 7. NucTools utilize whole genome BED files.

Optional external applications:

Running NucTools

A typical analysis workflow using NucTools consists of the following steps (see the figure): BAM/SAM files with raw mapped reads are converted to BED format (, processed to obtain nucleosome-sized reads ( or, and split into chromosomes ( Usually, a separate directory with chromosome bed files is created for each sample similarly to the HOMER’s approach. Then chromosome-wide occupancies are calculated and average using a window size suitable for the following analysis (bed2occupancy_average). Then for each cell type/state, an average profile is calculated based on the individual replicate profiles ( After this point several types of analysis can be performed in parallel: Finding stable/unstable regions (; comparing replicate-averaged profiles in different cell states/types (; calculating nucleosome occupancy profiles at individual regions identified based on the intersection of stable/unstable regions or regions with differential occupancy with genomic features such as promoters, enhancers, etc (; calculating the nucleosome repeat length ( and plotNRL.R); calculating aggregate profiles or visualizing heat maps of nucleosome occupancy at different genomic features (ClusterMap_Builder). The next types of analysis usually involve gene ontology, multiple-dataset correlations and DNA sequence motif analysis, which can be conducted for the genomic regions of interest identified at the previous steps using external software packages.

The examples below refer to an artificially created input BAM file “test.bam” which we use to run through a NucTools pipeline:

    $ samtools sort -n ./test/test.bam ./test/test_sorted
    $ -i ./test/test_sorted.bam --verbose > ./test/test_sorted.bed.gz
    $ -in ./test/test.bed -out ./test/test.ext.bed.gz -fL 150
    $ -in ./test/test.ext.bed.gz -out test/BED -d ./test -p chr 
    $ -in ./test/BED -odir ./test/OCC -dir -use -w 10
    $ -reg genome_annotation.txt -idC 0 -chrC 4 -strC 7 -sC 8 -eC 9 -pbN -lsN -lS 75000000 -chr 1 -al ./test/OCC/chr1.test.occ_matrix -av ./test/OCC/chr1.test.aggregate -in ./test/OCC/chr1.test.w10.occ.gz -upD 1000 -downD 1000

In this example the test.bam file is sorted by the reads names and converted to test_sorted.bed.gz file. In this case we are dealing with single-end ilumina sequencing reads with the read length of 100 bp and average expected DNA fragment length 150 bp. The reads are extended using, then the resulting whole-genome BED file is divided to chromosomes with and all per-chromosome BED files are converted to OCC files with using a running window 10bp. ON the last step an aggregate profile around regions specific in genome_annotation.txt is generated using script

NucTools scripts

Initial data transformation

Core scripts

Vizualization and additional scripts

Additional information

Additional information, publications references and short description of each script from the toolbox can be found here:

How to cite

Vainshtein, Y., Rippe, K. & Teif, V.B. BMC Genomics (2017) 18: 158. doi:10.1186/s12864-017-3580-2

Future possible modifications


Yevhen Vainshtein and Vladimir B. Teif