Source

bx-python / scripts / interval_join.py

#!/usr/bin/env python2.4

"""
Match up intersecting intervals from two files. This performs a "full join", 
any pair of intervals with any basewise overlap will be printed side-by-side.

usage: %prog bed1 bed2
"""

from __future__ import division

import psyco_full

import string
import sys

import bx.intervals.io
import bx.intervals.intersection

def main():

    intersecters = {}

    # Read second set into intersecter
    for interval in bx.intervals.io.GenomicIntervalReader( open( sys.argv[2] ) ):
        if not intersecters.has_key( interval.chrom ): 
            intersecters[ interval.chrom ] = bx.intervals.Intersecter()
        intersecters[ interval.chrom ].add_interval( interval )

    # Join with first set    
    for interval in bx.intervals.io.GenomicIntervalReader( open( sys.argv[1] ) ):
        if intersecters.has_key( interval.chrom ):
            intersection = intersecters[ interval.chrom ].find( interval.start, interval.end )
            for interval2 in intersection:
                print "\t".join( [ str( interval ), str( interval2 ) ] )


if __name__ == "__main__":
    main()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.