I have had great success using genrich as peak caller for ATAC-Seq upstream of csaw. I recommend you consider it.
With genrich, replicates are jointly analyzed, allow you to produce a single peak-set for each experimental condition (note: I believe that using genrich parameters -q .05 -a 0.0 are arguably sensible and find they produced empirically plausible results).
In your case, you would produce 6 peak-sets, one for each combination of time-point and condition. (drag&drop them into IGV to visualize!)
These peak-sets are in narrowPeak format, with each peak attributed with values used in its calling, along with a final pValue and qValue, allowing subsequent filtering, if so desired.
You can then merge your 6 (possibly filtered) condition-specific peak sets into a single reference peak-set. (note: I prefer the term reference since consensus connotes agreement, whereas you may well find peaks in one condition that are absent in another, lacking consensus, which will undoubtedly be quite interesting to your analysis).
You may implement the merge using bedtools, but I found it valuable (e.g. for visualization in IGV) to instead use the capabilities provided by R/BioConductor's GenomicRanges::reduce to merge proximal (e.g. within 100bp) peaks and carry forward, as narrowPeak attributes of each resultant reference peak, the narrowPeak attributes of the input merged peak having the smallest pValue. (again: drag&drop into IGV to visualize!)
If you do this, I bet your reference set has far fewer than your current 300K. Let us know!
I then use csaw to (a) test for differential accessibility every 50bp window overlapping any peak in the reference peak-set (specifically using csaw's glmQLFTest with adjusted p value=.05) and (b) combine the test results at the reference peak level (thus controlling the overall false discovery rate), using csaw::overlapResults.
The results seem quite plausible in terms of downstream interpretations (e.g. motif enrichment, GO analysis, etc) recapitulating know players.
Let us know how it goes for you!
FWIW: some un-discussed aspects:
- read mapping - I use STAR
- use of a "blacklist" bed file - I make one from INPUT ChIP-Seq loosely following https://www.nature.com/articles/s41598-019-45839-z - depending on your organism/genome version you may find one from another lab readily available
- production of 50bp window coverage matrix - I used
bedtools makewindows and featureCounts for tabulation followed by quantile normalization (because my sample preps seemed so disparate in dynamic range for historical reasons)
- QA
Your reasoning makes sense to me. I do something similar. Usually I am stringent on per-sample peak calls by fording a minimum peak width and FDR cutoff, and then I only keep peaks shared between at least two/three/... (depends on group size) samples. That massively reduces the total number of peaks and helps with multiple testing burden. It also eliminates a lot of noisy/nonsense peaks.
Hi, I have almost the same dataset then you. Is it possible to share the commands for the points 3,4,5 please ? Thanks.