Source code for bsPlugins.Overlap

from bsPlugins import *
from bbcflib.gfminer.stream import overlap
from bbcflib.track import track
from bbcflib import genrep

class OverlapForm(BaseForm):
    child = twd.HidingTableLayout()
    features = twb.BsFileField(label='Features file: ',
        help_text='Upload your own file',
        validator=twb.BsFileFieldValidator(required=True))
    filter = twb.BsFileField(label='Filter file: ',
        help_text='Upload your own file',
        validator=twb.BsFileFieldValidator(required=True))
    format = twf.SingleSelectField(label='Output format: ',
        options=["txt","bed","sql","bedGraph","bigWig"],
        validator=twc.Validator(required=True),
        help_text='Format of the output file')
    assembly = twf.SingleSelectField(label='Assembly: ',
        options=genrep.GenRep().assemblies_available(),
        help_text='Reference genome')
    submit = twf.SubmitButton(id="submit", value="Submit")


meta = {'version': "1.0.0",
        'author': "BBCF",
        'contact': "webmaster-bbcf@epfl.ch"}

in_parameters = [{'id': 'filter', 'type': 'userfile', 'required': True},
                 {'id': 'features', 'type': 'track', 'required': True},
                 {'id': 'format', 'type': 'text'},
                 {'id': 'assembly', 'type': 'assembly'}]
out_parameters = [{'id': 'filtered', 'type': 'track'}]


[docs]class OverlapPlugin(BasePlugin): """Returns only the regions of the first input file that overlap (or contain) some feature from the second ('filter').""" info = { 'title': 'Overlap', 'description': __doc__, 'path': ['Intervals', 'Overlap'], 'output': OverlapForm, 'in': in_parameters, 'out': out_parameters, 'meta': meta, } 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 assert os.path.exists(str(kw.get('features'))), "Features file not found: '%s'"%kw.get("features") features = track(kw['features'], chrmeta=chrmeta or None ) chrmeta = features.chrmeta # Set filter track assert os.path.exists(str(kw.get('filter'))), "Filter file not found: '%s'"%kw.get("filter") 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()

Other BBCF projects