Switch to unified view

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)