I have performed peak calling on a number of separate ChIP-seq experiments and would like to harmonise the peaks from each of the experiments in order to convert my data into a matrix for further analysis. I would like to do this by taking the union of the called peaks (available in BED / narrowPeak / MACS2 format) and retrieving the enrichment score / q-value for all of the experiments on each peak. Is this possible without writing my own extension to MACS2?

  • 1
    $\begingroup$ This is going to be an custom script so you're not going to touch MACS2 itself. The only question is how you want to summarize q-values from different samples. Other than that this is a job for bedtools/bedops. $\endgroup$
    – Devon Ryan
    Nov 26, 2018 at 11:34
  • $\begingroup$ Here's why I think I still need MACS - say Sample A has a peak at chrN:100-200, but Sample B does not. In order to avoid missing values, I would like to get the (not significant) enrichment score from that peak for Sample B using the MACS2 algorithm. $\endgroup$ Nov 27, 2018 at 14:51
  • $\begingroup$ Ah, if you really want that then yes you'll need to use the (undocumented) MACS2 API. $\endgroup$
    – Devon Ryan
    Nov 27, 2018 at 15:04

1 Answer 1


You could try setting a high p-value threshold when you're calling peaks to retain the "non-significant" values. Something like:

macs2 callpeak -t <ChIP>.bam -c <Control>.bam -f BED -g hs -n test -B -p 0.7

You probably don't want to set the threshold to 1, since you'll likely want to avoid some noise.

But you can then use these "non-significant" values in combination with a bedtools map command, to map them to your predefined union of "actual" peaks.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.