/
create_master_peaks
executable file
·59 lines (40 loc) · 1.12 KB
/
create_master_peaks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#! /usr/bin/env ruby
# Vivek Rai
# vivekrai@umich.edu
# (c) Parker Lab
#
# GPLv3
require 'optparse'
require 'ostruct'
def gzip?(x)
File.extname(x) == '.gz'
end
options = OpenStruct.new
options.q = 0.05
options.nomerge = false
pargs = OptionParser.new do |opts|
opts.banner = <<~BANNER
USAGE: create_master_peaks [BroadPeak] [-q FDR]
Filters broadPeaks for FDR (default 0.05), SORTS and MERGES to produce BED output
Accepts FILE (.gz allowed) or STDIN. Prints to STDOUT.
BANNER
opts.on('-q', '--fdr [FDR]', Float, "Q-value threshold") do |v|
options.q = v
end
opts.on('--nomerge', "Whether to not merge peaks") do |v|
options.nomerge = v
end
opts.on_tail("-h", "--help", "Show this message") do
puts opts
exit
end
end.parse!
input = if (pargs.empty? or pargs.nil?) then '/dev/stdin' else pargs.join ' ' end
prog = if gzip? input then 'zcat' else 'cat' end
COMMAND = <<~CMD
#{prog} #{input} \
| awk '{if($9>=#{-Math.log10(options.q)}){print}}' \
| sortBed #{unless options.nomerge then "| mergeBed" end}
CMD
STDERR.syswrite "Using FDR: #{options.q}\n"
STDOUT.syswrite `#{COMMAND}`