|
a |
|
b/singlecellmultiomics/utils/bigWigDiff.py |
|
|
1 |
#!/usr/bin/env python |
|
|
2 |
# -*- coding: utf-8 -*- |
|
|
3 |
|
|
|
4 |
import argparse |
|
|
5 |
import pyBigWig |
|
|
6 |
import numpy as np |
|
|
7 |
import pandas as pd |
|
|
8 |
|
|
|
9 |
|
|
|
10 |
if __name__=='__main__': |
|
|
11 |
|
|
|
12 |
argparser = argparse.ArgumentParser( |
|
|
13 |
formatter_class=argparse.ArgumentDefaultsHelpFormatter, |
|
|
14 |
description='Calculate absolute difference between two bigwig files') |
|
|
15 |
|
|
|
16 |
argparser.add_argument( |
|
|
17 |
'file_A', |
|
|
18 |
type=str) |
|
|
19 |
|
|
|
20 |
argparser.add_argument( |
|
|
21 |
'file_B', |
|
|
22 |
type=str) |
|
|
23 |
|
|
|
24 |
argparser.add_argument( |
|
|
25 |
'-o', |
|
|
26 |
type=str, |
|
|
27 |
help="Output path (.bw)", required=True) |
|
|
28 |
|
|
|
29 |
|
|
|
30 |
args = argparser.parse_args() |
|
|
31 |
|
|
|
32 |
with pyBigWig.open(args.o,'w') as out, \ |
|
|
33 |
pyBigWig.open(args.file_A) as a, \ |
|
|
34 |
pyBigWig.open(args.file_B) as b: |
|
|
35 |
|
|
|
36 |
out.addHeader(list( a.chroms().items())) |
|
|
37 |
for contig in a.chroms(): |
|
|
38 |
try: |
|
|
39 |
diff = pd.DataFrame( np.array( a.intervals(contig) )).set_index([0,1] ) - \ |
|
|
40 |
pd.DataFrame( np.array( b.intervals(contig) )).set_index([0,1] ) |
|
|
41 |
except ValueError: |
|
|
42 |
continue |
|
|
43 |
|
|
|
44 |
chroms = [contig]*diff.shape[0] |
|
|
45 |
starts = list([int(i) for i in diff.index.get_level_values(0)] ) |
|
|
46 |
ends = list([int(i) for i in diff.index.get_level_values(1)] ) |
|
|
47 |
values = list(diff.iloc[:,0].values) |
|
|
48 |
out.addEntries(chroms,starts,ends=ends,values=values) |