--- a +++ b/singlecellmultiomics/utils/bigWigDiff.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import argparse +import pyBigWig +import numpy as np +import pandas as pd + + +if __name__=='__main__': + + argparser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + description='Calculate absolute difference between two bigwig files') + + argparser.add_argument( + 'file_A', + type=str) + + argparser.add_argument( + 'file_B', + type=str) + + argparser.add_argument( + '-o', + type=str, + help="Output path (.bw)", required=True) + + + args = argparser.parse_args() + + with pyBigWig.open(args.o,'w') as out, \ + pyBigWig.open(args.file_A) as a, \ + pyBigWig.open(args.file_B) as b: + + out.addHeader(list( a.chroms().items())) + for contig in a.chroms(): + try: + diff = pd.DataFrame( np.array( a.intervals(contig) )).set_index([0,1] ) - \ + pd.DataFrame( np.array( b.intervals(contig) )).set_index([0,1] ) + except ValueError: + continue + + chroms = [contig]*diff.shape[0] + starts = list([int(i) for i in diff.index.get_level_values(0)] ) + ends = list([int(i) for i in diff.index.get_level_values(1)] ) + values = list(diff.iloc[:,0].values) + out.addEntries(chroms,starts,ends=ends,values=values)