Mercurial > repos > fubar > bigwig_outlier_bed
annotate bigwig_outlier_bed.py @ 5:68cb8e7e266b draft
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
author | fubar |
---|---|
date | Mon, 01 Jul 2024 05:02:05 +0000 |
parents | c71db540eb38 |
children | eb17eb8a3658 |
rev | line source |
---|---|
0
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
1 """ |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
2 Ross Lazarus June 2024 for VGP |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
3 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
4 Bigwigs are great, but hard to reliably "see" small low coverage or small very high coverage regions. |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
5 Colouring in JB2 tracks will need a new plugin, so this code will find bigwig regions above and below a chosen percentile point. |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
6 0.99 and 0.01 work well in testing with a minimum span of 10 bp. |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
7 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
8 Multiple bigwigs **with the same reference** can be combined - bed segments will be named appropriately |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
9 Combining multiple references works but is silly because only display will rely on one reference so others will not be shown... |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
10 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
11 Tricksy numpy method from http://gregoryzynda.com/python/numpy/contiguous/interval/2019/11/29/contiguous-regions.html |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
12 takes about 95 seconds for a 17MB test wiggle |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
13 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
14 JBrowse2 bed normally displays ignore the score, so could provide separate low/high bed file outputs as an option. |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
15 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
16 Update june 30 2024: wrote a 'no-build' plugin for beds to display red/blue if >0/<0 so those are used for scores |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
17 Bed interval naming must be short for JB2 but needs input bigwig name and (lo or hi). |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
18 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
19 """ |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
20 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
21 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
22 import argparse |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
23 import numpy as np |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
24 import pybigtools |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
25 import sys |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
26 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
27 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
28 from pathlib import Path |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
29 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
30 class findOut(): |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
31 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
32 def __init__(self, args): |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
33 self.bwnames=args.bigwig |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
34 self.bwlabels=args.bigwiglabels |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
35 self.bedwin=args.minwin |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
36 self.qlo=args.qlo |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
37 self.qhi=args.qhi |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
38 self.bedouthilo=args.bedouthilo |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
39 self.bedouthi=args.bedouthi |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
40 self.bedoutlo=args.bedoutlo |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
41 self.tableout = args.tableout |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
42 self.bedwin = args.minwin |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
43 self.qhi = args.qhi |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
44 self.qlo = args.qlo |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
45 self.makeBed() |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
46 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
47 def processVals(self, bw, isTop): |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
48 # http://gregoryzynda.com/python/numpy/contiguous/interval/2019/11/29/contiguous-regions.html |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
49 if isTop: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
50 bwex = np.r_[False, bw >= self.bwtop, False] # extend with 0s |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
51 else: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
52 bwex = np.r_[False, bw <= self.bwbot, False] |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
53 bwexd = np.diff(bwex) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
54 bwexdnz = bwexd.nonzero()[0] |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
55 bwregions = np.reshape(bwexdnz, (-1,2)) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
56 return bwregions |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
57 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
58 def writeBed(self, bed, bedfname): |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
59 """ |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
60 potentially multiple |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
61 """ |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
62 bed.sort() |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
63 beds = ['%s\t%d\t%d\t%s\t%d' % x for x in bed] |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
64 with open(bedfname, "w") as bedf: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
65 bedf.write('\n'.join(beds)) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
66 bedf.write('\n') |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
67 print('Wrote %d bed regions to %s' % (len(bed), bedfname)) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
68 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
69 def makeBed(self): |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
70 bedhi = [] |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
71 bedlo = [] |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
72 bwlabels = self.bwlabels |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
73 bwnames = self.bwnames |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
74 print('bwnames=', bwnames, "bwlabs=", bwlabels) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
75 for i, bwname in enumerate(bwnames): |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
76 bwlabel = bwlabels[i].replace(" ",'') |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
77 p = Path('in.bw') |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
78 p.symlink_to( bwname ) # required by pybigtools (!) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
79 bwf = pybigtools.open('in.bw') |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
80 chrlist = bwf.chroms() |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
81 chrs = list(chrlist.keys()) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
82 chrs.sort() |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
83 restab = ["contig\tn\tmean\tstd\tmin\tmax\tqtop\tqbot"] |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
84 for chr in chrs: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
85 bw = bwf.values(chr) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
86 bw = bw[~np.isnan(bw)] # some have NaN if parts of a contig not covered |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
87 if self.qhi is not None: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
88 self.bwtop = np.quantile(bw, self.qhi) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
89 bwhi = self.processVals(bw, isTop=True) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
90 for i, seg in enumerate(bwhi): |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
91 if seg[1] - seg[0] >= self.bedwin: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
92 bedhi.append((chr, seg[0], seg[1], '%s_hi' % (bwlabel), 1)) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
93 if self.qlo is not None: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
94 self.bwbot = np.quantile(bw, self.qlo) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
95 bwlo = self.processVals(bw, isTop=False) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
96 for i, seg in enumerate(bwlo): |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
97 if seg[1] - seg[0] >= self.bedwin: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
98 bedlo.append((chr, seg[0], seg[1], '%s_lo' % (bwlabel), -1)) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
99 bwmean = np.mean(bw) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
100 bwstd = np.std(bw) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
101 bwmax = np.max(bw) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
102 nrow = np.size(bw) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
103 bwmin = np.min(bw) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
104 restab.append('%s\t%d\t%f\t%f\t%f\t%f\t%f\t%f' % (chr,nrow,bwmean,bwstd,bwmin,bwmax,self.bwtop,self.bwbot)) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
105 print('\n'.join(restab), '\n') |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
106 if self.tableout: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
107 with open(self.tableout) as t: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
108 t.write('\n'.join(restab)) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
109 t.write('\n') |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
110 if self.bedoutlo: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
111 if self.qlo: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
112 self.writeBed(bedlo, self.bedoutlo) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
113 if self.bedouthi: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
114 if self.qhi: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
115 self.writeBed(bedhi, self.bedouthi) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
116 if self.bedouthilo: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
117 allbed = bedlo + bedhi |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
118 self.writeBed(allbed, self.bedouthilo) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
119 return restab |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
120 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
121 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
122 if __name__ == "__main__": |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
123 parser = argparse.ArgumentParser() |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
124 a = parser.add_argument |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
125 a('-m', '--minwin',default=10, type=int) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
126 a('-l', '--qlo',default=None, type=float) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
127 a('-i', '--qhi',default=None, type=float) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
128 a('-w', '--bigwig', nargs='+') |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
129 a('-n', '--bigwiglabels', nargs='+') |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
130 a('-o', '--bedouthilo', default=None, help="optional high and low combined bed") |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
131 a('-u', '--bedouthi', default=None, help="optional high only bed") |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
132 a('-b', '--bedoutlo', default=None, help="optional low only bed") |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
133 a('-t', '--tableout', default=None) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
134 args = parser.parse_args() |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
135 print('args=', args) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
136 if not (args.bedouthilo or args.bedouthi or args.bedoutlo): |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
137 sys.stderr.write("bigwig_outlier_bed.py cannot usefully run - need a bed output choice - must be one of low only, high only or both combined") |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
138 sys.exit(2) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
139 if not (args.qlo or args.qhi): |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
140 sys.stderr.write("bigwig_outlier_bed.py cannot usefully run - need one or both of quantile cutpoints qhi and qlo") |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
141 sys.exit(2) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
142 restab = findOut(args) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
143 if args.tableout: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
144 with open(args.tableout, 'w') as tout: |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
145 tout.write('\n'.join(restab)) |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
146 tout.write('\n') |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
147 |
c71db540eb38
planemo upload for repository https://github.com/jackh726/bigtools commit ce6b9f638ebcebcad5a5b10219f252962f30e5cc-dirty
fubar
parents:
diff
changeset
|
148 |