def __call__(self, **kw): # Set assembly assembly_id = kw.get('assembly') chrmeta = "guess" if assembly_id: assembly = genrep.Assembly(assembly_id) chrmeta = assembly.chrmeta # Set features track features = track(kw['features'], chrmeta=chrmeta or None) chrmeta = features.chrmeta # Set filter track filter = track(kw.get('filter'), chrmeta=chrmeta or None) # Main format = kw.get('format', features.format) output = self.temporary_path(fname=features.name + '_filtered.' + format) tout = track(output, format, fields=filter.fields, chrmeta=chrmeta, info={'datatype': 'qualitative'}) for chrom in chrmeta: tout.write(overlap(features.read(chrom), filter.read(chrom)), chrom=chrom, clip=True) tout.close() self.new_file(output, 'filtered') return self.display_time()
def test_overlap(self): s1 = [('chr',0,4,'n',1.), ('chr',7,12,'n',2.), ('chr',16,19,'n',3.), ('chr',22,27,'n',4.)] s2 = [('chr',2,9,'m'), ('chr',13,14,'m'), ('chr',22,23,'m'), ('chr',26,27,'m')] stream1 = fstream(s1, fields=['chr','start','end','name','score']) stream2 = fstream(s2, fields=['chr','start','end','name']) res = overlap(stream1,stream2) expected = [('chr',0,4,'n',1.),('chr',7,12,'n',2.),('chr',22,27,'n',4.)] self.assertListEqual(list(res),expected) # Stranded s1 = [('chr',0,3,'+'), ('chr',7,12,'+'), ('chr',16,19,'+'), ('chr',22,27,'+')] s2 = [('chr',2,9,'+'), ('chr',13,14,'-'), ('chr',25,30,'-')] stream1 = fstream(s1, fields=['chr','start','end','strand']) stream2 = fstream(s2, fields=['chr','start','end','strand']) res = overlap(stream1,stream2) expected = [('chr',0,3,'+'),('chr',7,12,'+')] self.assertListEqual(list(res),expected)
def test_overlap(self): s1 = [('chr', 0, 4, 'n', 1.), ('chr', 7, 12, 'n', 2.), ('chr', 16, 19, 'n', 3.), ('chr', 22, 27, 'n', 4.)] s2 = [('chr', 2, 9, 'm'), ('chr', 13, 14, 'm'), ('chr', 22, 23, 'm'), ('chr', 26, 27, 'm')] stream1 = fstream(s1, fields=['chr', 'start', 'end', 'name', 'score']) stream2 = fstream(s2, fields=['chr', 'start', 'end', 'name']) res = overlap(stream1, stream2) expected = [('chr', 0, 4, 'n', 1.), ('chr', 7, 12, 'n', 2.), ('chr', 22, 27, 'n', 4.)] self.assertListEqual(list(res), expected) # Stranded s1 = [('chr', 0, 3, '+'), ('chr', 7, 12, '+'), ('chr', 16, 19, '+'), ('chr', 22, 27, '+')] s2 = [('chr', 2, 9, '+'), ('chr', 13, 14, '-'), ('chr', 25, 30, '-')] stream1 = fstream(s1, fields=['chr', 'start', 'end', 'strand']) stream2 = fstream(s2, fields=['chr', 'start', 'end', 'strand']) res = overlap(stream1, stream2) expected = [('chr', 0, 3, '+'), ('chr', 7, 12, '+')] self.assertListEqual(list(res), expected)
def __call__(self, **kw): # Set assembly assembly_id = kw.get('assembly') chrmeta = "guess" if assembly_id: assembly = genrep.Assembly(assembly_id) chrmeta = assembly.chrmeta # Set features track features = track(kw['features'], chrmeta=chrmeta or None ) chrmeta = features.chrmeta # Set filter track filter = track(kw.get('filter'), chrmeta=chrmeta or None) # Main format = kw.get('output',features.format) output = self.temporary_path(fname=features.name+'_filtered.'+format) tout = track(output, format, fields=filter.fields, chrmeta=chrmeta, info={'datatype':'qualitative'}) for chrom in chrmeta: tout.write(overlap(features.read(chrom),filter.read(chrom)), chrom=chrom,clip=True) tout.close() self.new_file(output, 'filtered') return self.display_time()