Repository 'flanking_features'
hg clone https://toolshed.g2.bx.psu.edu/repos/devteam/flanking_features

Changeset 0:90100b587723 (2014-04-01)
Next changeset 1:8307665c4b6c (2015-11-11)
Commit message:
Imported from capsule None
added:
flanking_features.py
flanking_features.xml
test-data/4_windows.bed
test-data/4_windows.gff
test-data/4_windows_2.bed
test-data/4_windows_2.gff
test-data/4_windows_3.bed
test-data/closest_features.interval
test-data/closest_features_both.gff
test-data/closest_features_both.interval
test-data/closest_features_both2.gff
test-data/closest_features_down.interval
test-data/closest_features_either.interval
test-data/closest_features_up.interval
tool_dependencies.xml
utils/__init__.py
utils/gff_util.py
utils/odict.py
b
diff -r 000000000000 -r 90100b587723 flanking_features.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flanking_features.py Tue Apr 01 10:52:59 2014 -0400
[
b'@@ -0,0 +1,212 @@\n+#!/usr/bin/env python\n+#By: Guruprasad Ananda\n+"""\n+Fetch closest up/downstream interval from features corresponding to every interval in primary\n+\n+usage: %prog primary_file features_file out_file direction\n+    -1, --cols1=N,N,N,N: Columns for start, end, strand in first file\n+    -2, --cols2=N,N,N,N: Columns for start, end, strand in second file\n+    -G, --gff1: input 1 is GFF format, meaning start and end coordinates are 1-based, closed interval\n+    -H, --gff2: input 2 is GFF format, meaning start and end coordinates are 1-based, closed interval\n+"""\n+\n+import sys, traceback, fileinput\n+from warnings import warn\n+from bx.cookbook import doc_optparse\n+from galaxy.tools.util.galaxyops import *\n+from bx.intervals.io import *\n+from bx.intervals.operations import quicksect\n+from utils.gff_util import *\n+\n+assert sys.version_info[:2] >= ( 2, 4 )\n+\n+def get_closest_feature (node, direction, threshold_up, threshold_down, report_func_up, report_func_down):\n+    #direction=1 for +ve strand upstream and -ve strand downstream cases; and it is 0 for +ve strand downstream and -ve strand upstream cases\n+    #threhold_Up is equal to the interval start for +ve strand, and interval end for -ve strand\n+    #threhold_down is equal to the interval end for +ve strand, and interval start for -ve strand\n+    if direction == 1: \n+        if node.maxend <= threshold_up:\n+            if node.end == node.maxend:\n+                report_func_up(node)\n+            elif node.right and node.left:\n+                if node.right.maxend == node.maxend:\n+                    get_closest_feature(node.right, direction, threshold_up, threshold_down, report_func_up, report_func_down)\n+                elif node.left.maxend == node.maxend:\n+                    get_closest_feature(node.left, direction, threshold_up, threshold_down, report_func_up, report_func_down)\n+            elif node.right and node.right.maxend == node.maxend:\n+                get_closest_feature(node.right, direction, threshold_up, threshold_down, report_func_up, report_func_down)\n+            elif node.left and node.left.maxend == node.maxend:\n+                get_closest_feature(node.left, direction, threshold_up, threshold_down, report_func_up, report_func_down)\n+        elif node.minend <= threshold_up:\n+            if node.end <= threshold_up:\n+                report_func_up(node)\n+            if node.left and node.right:\n+                if node.right.minend <= threshold_up:\n+                    get_closest_feature(node.right, direction, threshold_up, threshold_down, report_func_up, report_func_down)\n+                if node.left.minend <= threshold_up:\n+                    get_closest_feature(node.left, direction, threshold_up, threshold_down, report_func_up, report_func_down)\n+            elif node.left:\n+                if node.left.minend <= threshold_up:\n+                    get_closest_feature(node.left, direction, threshold_up, threshold_down, report_func_up, report_func_down)\n+            elif node.right:\n+                if node.right.minend <= threshold_up:\n+                    get_closest_feature(node.right, direction, threshold_up, threshold_down, report_func_up, report_func_down)\n+    elif direction == 0:\n+        if node.start > threshold_down:\n+            report_func_down(node)\n+            if node.left:\n+                get_closest_feature(node.left, direction, threshold_up, threshold_down, report_func_up, report_func_down)\n+        else:\n+            if node.right:\n+                get_closest_feature(node.right, direction, threshold_up, threshold_down, report_func_up, report_func_down)\n+\n+def proximal_region_finder(readers, region, comments=True):\n+    """\n+    Returns an iterator that yields elements of the form [ <original_interval>, <closest_feature> ]. \n+    Intervals are GenomicInterval objects. \n+    """\n+    primary = readers[0]\n+    features = readers[1]\n+    either = False\n+    if region == \'Upstream\':\n+        up, down = True, False\n+    e'..b't_up[res_ind].end)) <= abs(end - int(result_down[-1].start)):\n+                            iter_val = [ interval, result_up[res_ind].other ]\n+                        else:\n+                            #The last element of result_down will be the closest element to the given interval\n+                            iter_val = [ interval, result_down[-1].other ]\n+                    elif result_up:\n+                        iter_val = [ interval, result_up[res_ind].other ]\n+                    elif result_down:\n+                        #The last element of result_down will be the closest element to the given interval\n+                        iter_val = [ interval, result_down[-1].other ]\n+                    yield iter_val\n+                        \n+def main():\n+    options, args = doc_optparse.parse( __doc__ )\n+    try:\n+        chr_col_1, start_col_1, end_col_1, strand_col_1 = parse_cols_arg( options.cols1 )\n+        chr_col_2, start_col_2, end_col_2, strand_col_2 = parse_cols_arg( options.cols2 )\n+        in1_gff_format = bool( options.gff1 )\n+        in2_gff_format = bool( options.gff2 )\n+        in_fname, in2_fname, out_fname, direction = args\n+    except:\n+        doc_optparse.exception()\n+        \n+    # Set readers to handle either GFF or default format.\n+    if in1_gff_format:\n+        in1_reader_wrapper = GFFIntervalToBEDReaderWrapper\n+    else:\n+        in1_reader_wrapper = NiceReaderWrapper\n+    if in2_gff_format:\n+        in2_reader_wrapper = GFFIntervalToBEDReaderWrapper\n+    else:\n+        in2_reader_wrapper = NiceReaderWrapper\n+\n+    g1 = in1_reader_wrapper( fileinput.FileInput( in_fname ),\n+                            chrom_col=chr_col_1,\n+                            start_col=start_col_1,\n+                            end_col=end_col_1,\n+                            strand_col=strand_col_1,\n+                            fix_strand=True )\n+    g2 = in2_reader_wrapper( fileinput.FileInput( in2_fname ),\n+                            chrom_col=chr_col_2,\n+                            start_col=start_col_2,\n+                            end_col=end_col_2,\n+                            strand_col=strand_col_2,\n+                            fix_strand=True )\n+\n+    # Find flanking features.\n+    out_file = open( out_fname, "w" )\n+    try:\n+        for result in proximal_region_finder([g1,g2], direction):\n+            if type( result ) is list:\n+                line, closest_feature = result\n+                # Need to join outputs differently depending on file types.\n+                if in1_gff_format:\n+                    # Output is GFF with added attribute \'closest feature.\'\n+\n+                    # Invervals are in BED coordinates; need to convert to GFF.\n+                    line = convert_bed_coords_to_gff( line )\n+                    closest_feature = convert_bed_coords_to_gff( closest_feature )\n+                    \n+                    # Replace double quotes with single quotes in closest feature\'s attributes.\n+                    out_file.write( "%s closest_feature \\"%s\\" \\n" % \n+                                    ( "\\t".join( line.fields ), \\\n+                                      "\\t".join( closest_feature.fields ).replace( "\\"", "\\\\\\"" )\n+                                     ) )\n+                else:\n+                    # Output is BED + closest feature fields.\n+                    output_line_fields = []\n+                    output_line_fields.extend( line.fields )\n+                    output_line_fields.extend( closest_feature.fields )\n+                    out_file.write( "%s\\n" % ( "\\t".join( output_line_fields ) ) )\n+            else:\n+                out_file.write( "%s\\n" % result )\n+    except ParseError, exc:\n+        fail( "Invalid file format: %s" % str( exc ) )\n+\n+    print "Direction: %s" %(direction)\n+    if g1.skipped > 0:\n+        print skipped( g1, filedesc=" of 1st dataset" )\n+    if g2.skipped > 0:\n+        print skipped( g2, filedesc=" of 2nd dataset" )\n+\n+if __name__ == "__main__":\n+    main()\n'
b
diff -r 000000000000 -r 90100b587723 flanking_features.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/flanking_features.xml Tue Apr 01 10:52:59 2014 -0400
b
@@ -0,0 +1,131 @@
+<tool id="flanking_features_1" name="Fetch closest non-overlapping feature" version="4.0.1">
+  <description>  for every interval</description>
+  <requirements>
+    <requirement type="package" version="0.7.1">bx-python</requirement>
+    <requirement type="package" version="1.0.0">galaxy-ops</requirement>
+  </requirements>
+  <command interpreter="python">
+      flanking_features.py $input1 $input2 $out_file1 $direction
+      
+      #if isinstance( $input1.datatype, $__app__.datatypes_registry.get_datatype_by_extension('gff').__class__):
+          -1 1,4,5,7 --gff1
+      #else:
+          -1 ${input1.metadata.chromCol},${input1.metadata.startCol},${input1.metadata.endCol},${input1.metadata.strandCol}
+      #end if
+          
+      #if isinstance( $input2.datatype, $__app__.datatypes_registry.get_datatype_by_extension('gff').__class__):
+          -2 1,4,5,7 --gff2
+      #else:
+          -2 ${input2.metadata.chromCol},${input2.metadata.startCol},${input2.metadata.endCol},${input2.metadata.strandCol}
+      #end if
+  </command>
+  <inputs>
+    <param format="interval,gff" name="input1" type="data" label="For every interval in"/>
+    <param format="interval,gff" name="input2" type="data" label="Fetch closest feature(s) from"/>
+    <param name="direction" type="select" label="Located">
+      <option value="Either">Either Upstream or Downstream</option>
+      <option value="Both">Both Upstream and Downstream</option>
+      <option value="Upstream">Upstream</option>
+      <option value="Downstream">Downstream</option>
+    </param>
+  </inputs>
+  <outputs>
+    <data format="input" name="out_file1" metadata_source="input1"/>
+  </outputs>
+  <tests>
+    <test>
+      <param name="input1" value="4_windows.bed"/>
+      <param name="input2" value="4_windows_2.bed"/>
+      <param name="direction" value="Either"/>
+      <output name="out_file1" file="closest_features_either.interval"/>
+    </test>
+    <test>
+      <param name="input1" value="4_windows.bed"/>
+      <param name="input2" value="4_windows_2.bed"/>
+      <param name="direction" value="Both"/>
+      <output name="out_file1" file="closest_features.interval"/>
+    </test>
+    <test>
+      <param name="input1" value="4_windows.bed"/>
+      <param name="input2" value="4_windows_2.bed"/>
+      <param name="direction" value="Upstream"/>
+      <output name="out_file1" file="closest_features_up.interval"/>
+    </test>
+    <test>
+      <param name="input1" value="4_windows.bed"/>
+      <param name="input2" value="4_windows_2.bed"/>
+      <param name="direction" value="Downstream"/>
+      <output name="out_file1" file="closest_features_down.interval"/>
+    </test>
+    <test>
+      <param name="input1" value="4_windows.bed"/>
+      <param name="input2" value="4_windows_3.bed"/>
+      <param name="direction" value="Both"/>
+      <output name="out_file1" file="closest_features_both.interval"/>
+    </test>
+    <!-- Tests for GFF functionality. -->
+
+    <test>
+      <param name="input1" value="4_windows.bed"/>
+      <param name="input2" value="4_windows_2.gff"/>
+      <param name="direction" value="Either"/>
+      <output name="out_file1" file="closest_features_both.gff"/>
+    </test>
+    <test>
+      <param name="input1" value="4_windows.gff"/>
+      <param name="input2" value="4_windows_2.gff"/>
+      <param name="direction" value="Either"/>
+      <output name="out_file1" file="closest_features_both2.gff"/>
+    </test>
+    
+  </tests>
+ <help> 
+
+.. class:: infomark
+
+**What it does**
+
+For every interval in the **interval** dataset, this tool fetches the **closest non-overlapping** upstream and / or downstream features from the **features** dataset.
+
+-----
+
+.. class:: warningmark
+
+**Note:** 
+
+Every line should contain at least 3 columns: chromosome number, start and stop coordinates. If any of these columns is missing or if start and stop coordinates are not numerical, the lines will be treated as invalid and skipped. The number of skipped lines is documented in the resulting history item as a "data issue".
+
+If the strand column is missing from your input interval dataset, the intervals will be considered to be on positive strand. You can add a strand column to your input dataset by using the *Text Manipulation->Add column* tool.
+
+For GFF files, features are added as a GTF-style attribute at the end of the line.
+
+-----
+
+**Example**
+
+If the **intervals** are::
+
+   chr1 10   100  Query1.1
+   chr1 500  1000 Query1.2
+   chr1 1100 1250 Query1.3
+
+and the **features** are::
+
+   chr1 120  180  Query2.1
+   chr1 140  200  Query2.2
+   chr1 580  1050 Query2.3
+   chr1 2000 2204 Query2.4
+   chr1 2500 3000 Query2.5
+
+Running this tool for **Both Upstream and Downstream** will return::
+
+   chr1 10   100  Query1.1 chr1 120  180  Query2.1
+   chr1 500  1000 Query1.2 chr1 140  200  Query2.2
+   chr1 500  1000 Query1.2 chr1 2000 2204 Query2.4
+   chr1 1100 1250 Query1.3 chr1 580  1050 Query2.3
+   chr1 1100 1250 Query1.3 chr1 2000 2204 Query2.4
+
+</help>  
+
+
+</tool>
\ No newline at end of file
b
diff -r 000000000000 -r 90100b587723 test-data/4_windows.bed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/4_windows.bed Tue Apr 01 10:52:59 2014 -0400
b
b'@@ -0,0 +1,424 @@\n+chr22\t30128507\t30133507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30132507\t30137507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30200507\t30205507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30204507\t30209507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30208507\t30213507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30212507\t30217507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30216507\t30221507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30220507\t30225507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30224507\t30229507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30228507\t30233507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30232507\t30237507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30236507\t30241507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30240507\t30245507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30244507\t30249507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30248507\t30253507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30252507\t30257507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30256507\t30261507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30260507\t30265507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30264507\t30269507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30268507\t30273507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30272507\t30277507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30276507\t30281507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30280507\t30285507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30284507\t30289507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30288507\t30293507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30292507\t30297507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30296507\t30301507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30300507\t30305507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30304507\t30309507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30308507\t30313507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30312507\t30317507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30316507\t30321507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30320507\t30325507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30324507\t30329507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30328507\t30333507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30332507\t30337507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30336507\t30341507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30340507\t30345507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30344507\t30349507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30348507\t30353507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30352507\t30357507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30356507\t30361507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30360507\t30365507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30364507\t30369507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30368507\t30373507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30372507\t30377507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30376507\t30381507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30380507\t30385507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t303845'..b'nx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31568507\t31573507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31572507\t31577507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31576507\t31581507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31580507\t31585507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31584507\t31589507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31588507\t31593507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31592507\t31597507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31596507\t31601507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31600507\t31605507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31604507\t31609507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31608507\t31613507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31612507\t31617507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31616507\t31621507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31620507\t31625507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31624507\t31629507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31628507\t31633507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31632507\t31637507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31636507\t31641507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31640507\t31645507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31644507\t31649507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31648507\t31653507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31652507\t31657507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31656507\t31661507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31660507\t31665507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31664507\t31669507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31668507\t31673507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31672507\t31677507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31676507\t31681507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31680507\t31685507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31684507\t31689507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31688507\t31693507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31692507\t31697507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31696507\t31701507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31700507\t31705507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31704507\t31709507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31708507\t31713507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31712507\t31717507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31716507\t31721507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31720507\t31725507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31724507\t31729507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31728507\t31733507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31732507\t31737507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31736507\t31741507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31740507\t31745507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31744507\t31749507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31748507\t31753507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31752507\t31757507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31816507\t31821507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31820507\t31825507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n'
b
diff -r 000000000000 -r 90100b587723 test-data/4_windows.gff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/4_windows.gff Tue Apr 01 10:52:59 2014 -0400
b
b'@@ -0,0 +1,427 @@\n+##gff-version 2\n+##bed_to_gff_converter.py\n+\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30128508\t30133507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30132508\t30137507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30136508\t30141507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30140508\t30145507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30144508\t30149507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30148508\t30153507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30152508\t30157507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30156508\t30161507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30160508\t30165507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30164508\t30169507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30168508\t30173507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30172508\t30177507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30176508\t30181507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30180508\t30185507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30184508\t30189507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30188508\t30193507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30192508\t30197507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30196508\t30201507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30200508\t30205507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30204508\t30209507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30208508\t30213507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30212508\t30217507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30216508\t30221507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30220508\t30225507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30224508\t30229507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30228508\t30233507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30232508\t30237507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30236508\t30241507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30240508\t30245507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30244508\t30249507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30248508\t30253507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30252508\t30257507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30256508\t30261507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30260508\t30265507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30264508\t30269507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30268508\t30273507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30272508\t30277507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gf'..b'_2_0_chr22_29227_f\t31672508\t31677507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31676508\t31681507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31680508\t31685507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31684508\t31689507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31688508\t31693507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31692508\t31697507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31696508\t31701507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31700508\t31705507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31704508\t31709507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31708508\t31713507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31712508\t31717507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31716508\t31721507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31720508\t31725507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31724508\t31729507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31728508\t31733507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31732508\t31737507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31736508\t31741507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31740508\t31745507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31744508\t31749507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31748508\t31753507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31752508\t31757507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31756508\t31761507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31760508\t31765507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31764508\t31769507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31768508\t31773507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31772508\t31777507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31776508\t31781507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31780508\t31785507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31784508\t31789507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31788508\t31793507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31792508\t31797507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31796508\t31801507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31800508\t31805507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31804508\t31809507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31808508\t31813507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31812508\t31817507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31816508\t31821507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31820508\t31825507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n'
b
diff -r 000000000000 -r 90100b587723 test-data/4_windows_2.bed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/4_windows_2.bed Tue Apr 01 10:52:59 2014 -0400
b
b'@@ -0,0 +1,424 @@\n+chr22\t30128507\t30133507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30132507\t30137507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30200507\t30205507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30204507\t30209507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30208507\t30213507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30212507\t30217507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30216507\t30221507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30220507\t30225507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30224507\t30229507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30228507\t30233507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30232507\t30237507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30236507\t30241507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30240507\t30245507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30244507\t30249507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30248507\t30253507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30252507\t30257507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30256507\t30261507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30260507\t30265507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30264507\t30269507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30268507\t30273507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30272507\t30277507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30276507\t30281507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30280507\t30285507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30284507\t30289507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30288507\t30293507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30292507\t30297507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30296507\t30301507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30300507\t30305507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30304507\t30309507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30308507\t30313507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30312507\t30317507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30316507\t30321507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30320507\t30325507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30324507\t30329507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30328507\t30333507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30332507\t30337507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30336507\t30341507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30340507\t30345507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30344507\t30349507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30348507\t30353507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30352507\t30357507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30356507\t30361507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30360507\t30365507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30364507\t30369507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30368507\t30373507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30372507\t30377507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30376507\t30381507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30380507\t30385507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t303845'..b'nx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31568507\t31573507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31572507\t31577507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31576507\t31581507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31580507\t31585507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31584507\t31589507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31588507\t31593507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31592507\t31597507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31596507\t31601507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31600507\t31605507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31604507\t31609507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31608507\t31613507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31612507\t31617507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31616507\t31621507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31620507\t31625507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31624507\t31629507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31628507\t31633507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31632507\t31637507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31636507\t31641507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31640507\t31645507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31644507\t31649507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31648507\t31653507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31652507\t31657507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31656507\t31661507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31660507\t31665507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31664507\t31669507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31668507\t31673507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31672507\t31677507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31676507\t31681507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31680507\t31685507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31684507\t31689507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31688507\t31693507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31692507\t31697507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31696507\t31701507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31700507\t31705507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31704507\t31709507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31708507\t31713507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31712507\t31717507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31716507\t31721507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31720507\t31725507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31724507\t31729507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31728507\t31733507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31732507\t31737507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31736507\t31741507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31740507\t31745507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31744507\t31749507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31748507\t31753507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31752507\t31757507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31816507\t31821507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31820507\t31825507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n'
b
diff -r 000000000000 -r 90100b587723 test-data/4_windows_2.gff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/4_windows_2.gff Tue Apr 01 10:52:59 2014 -0400
b
b'@@ -0,0 +1,427 @@\n+##gff-version 2\n+##bed_to_gff_converter.py\n+\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30128508\t30133507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30132508\t30137507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30136508\t30141507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30140508\t30145507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30144508\t30149507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30148508\t30153507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30152508\t30157507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30156508\t30161507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30160508\t30165507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30164508\t30169507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30168508\t30173507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30172508\t30177507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30176508\t30181507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30180508\t30185507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30184508\t30189507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30188508\t30193507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30192508\t30197507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30196508\t30201507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30200508\t30205507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30204508\t30209507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30208508\t30213507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30212508\t30217507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30216508\t30221507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30220508\t30225507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30224508\t30229507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30228508\t30233507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30232508\t30237507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30236508\t30241507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30240508\t30245507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30244508\t30249507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30248508\t30253507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30252508\t30257507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30256508\t30261507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30260508\t30265507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30264508\t30269507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30268508\t30273507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30272508\t30277507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gf'..b'_2_0_chr22_29227_f\t31672508\t31677507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31676508\t31681507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31680508\t31685507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31684508\t31689507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31688508\t31693507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31692508\t31697507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31696508\t31701507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31700508\t31705507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31704508\t31709507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31708508\t31713507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31712508\t31717507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31716508\t31721507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31720508\t31725507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31724508\t31729507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31728508\t31733507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31732508\t31737507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31736508\t31741507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31740508\t31745507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31744508\t31749507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31748508\t31753507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31752508\t31757507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31756508\t31761507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31760508\t31765507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31764508\t31769507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31768508\t31773507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31772508\t31777507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31776508\t31781507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31780508\t31785507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31784508\t31789507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31788508\t31793507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31792508\t31797507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31796508\t31801507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31800508\t31805507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31804508\t31809507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31808508\t31813507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31812508\t31817507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31816508\t31821507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31820508\t31825507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n'
b
diff -r 000000000000 -r 90100b587723 test-data/4_windows_3.bed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/4_windows_3.bed Tue Apr 01 10:52:59 2014 -0400
b
@@ -0,0 +1,4 @@
+chr22 30127507 30128507
+chr22 30133507 30136507
+chr22 30139507 30140507
+chr22 30145507 30146507
b
diff -r 000000000000 -r 90100b587723 test-data/closest_features.interval
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/closest_features.interval Tue Apr 01 10:52:59 2014 -0400
b
b'@@ -0,0 +1,844 @@\n+chr22\t30128507\t30133507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30132507\t30137507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30128507\t30133507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30132507\t30137507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30200507\t30205507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_c'..b'+\tchr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31748507\t31753507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31752507\t31757507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31816507\t31821507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31820507\t31825507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31816507\t31821507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31820507\t31825507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n'
b
diff -r 000000000000 -r 90100b587723 test-data/closest_features_both.gff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/closest_features_both.gff Tue Apr 01 10:52:59 2014 -0400
b
b'@@ -0,0 +1,424 @@\n+chr22\t30128507\t30133507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30136507\t30141507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30132507\t30137507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30140507\t30145507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30128507\t30133507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30132507\t30137507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30136507\t30141507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30140507\t30145507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30144507\t30149507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30148507\t30153507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30152507\t30157507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30156507\t30161507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30160507\t30165507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30164507\t30169507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30168507\t30173507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30172507\t30177507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30176507\t30181507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30180507\t30185507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30184507\t30189507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30188507\t30193507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30200507\t30205507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30192507\t30197507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30204507\t30209507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30196507\t30201507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30208507\t30213507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30200507\t30205507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30212507\t30217507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30204507\t30209507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30216507\t30221507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30208507\t30213507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t30220507\t30225507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30212507\t30217507\t0\t+\t.\tuc003bn'..b'728507\t31733507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31720507\t31725507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31732507\t31737507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31724507\t31729507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31736507\t31741507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31728507\t31733507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31740507\t31745507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31732507\t31737507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31744507\t31749507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31736507\t31741507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31748507\t31753507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31740507\t31745507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31752507\t31757507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31744507\t31749507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31748507\t31753507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31752507\t31757507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31756507\t31761507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31760507\t31765507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31764507\t31769507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31768507\t31773507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31772507\t31777507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31776507\t31781507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31780507\t31785507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31784507\t31789507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31788507\t31793507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31792507\t31797507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31796507\t31801507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31800507\t31805507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31804507\t31809507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31816507\t31821507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31808507\t31813507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n+chr22\t31820507\t31825507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31812507\t31817507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;\n'
b
diff -r 000000000000 -r 90100b587723 test-data/closest_features_both.interval
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/closest_features_both.interval Tue Apr 01 10:52:59 2014 -0400
b
b'@@ -0,0 +1,428 @@\n+chr22\t30128507\t30133507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30127507\t30128507\n+chr22\t30128507\t30133507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30133507\t30136507\n+chr22\t30132507\t30137507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30127507\t30128507\n+chr22\t30132507\t30137507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30139507\t30140507\n+chr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30133507\t30136507\n+chr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30139507\t30140507\n+chr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30139507\t30140507\n+chr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30200507\t30205507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30204507\t30209507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30208507\t30213507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30212507\t30217507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30216507\t30221507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30220507\t30225507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30224507\t30229507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30228507\t30233507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30232507\t30237507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30236507\t30241507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30240507\t30245507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30244507\t30249507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30248507\t30253507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30252507\t30257507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30256507\t30261507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30260507\t30265507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30264507\t30269507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30268507\t30273507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30272507\t30277507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30276507\t30281507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30280507\t30285507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30284507\t30289507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30288507\t30293507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30292507\t30297507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t30296507\t30301507\t'..b'_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31640507\t31645507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31644507\t31649507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31648507\t31653507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31652507\t31657507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31656507\t31661507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31660507\t31665507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31664507\t31669507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31668507\t31673507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31672507\t31677507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31676507\t31681507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31680507\t31685507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31684507\t31689507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31688507\t31693507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31692507\t31697507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31696507\t31701507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31700507\t31705507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31704507\t31709507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31708507\t31713507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31712507\t31717507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31716507\t31721507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31720507\t31725507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31724507\t31729507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31728507\t31733507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31732507\t31737507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31736507\t31741507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31740507\t31745507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31744507\t31749507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31748507\t31753507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31752507\t31757507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31816507\t31821507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n+chr22\t31820507\t31825507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30145507\t30146507\n'
b
diff -r 000000000000 -r 90100b587723 test-data/closest_features_both2.gff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/closest_features_both2.gff Tue Apr 01 10:52:59 2014 -0400
b
b'@@ -0,0 +1,427 @@\n+##gff-version 2\n+##bed_to_gff_converter.py\n+#\n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30128508\t30133507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30136508\t30141507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30132508\t30137507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30140508\t30145507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30136508\t30141507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30128508\t30133507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30140508\t30145507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30132508\t30137507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30144508\t30149507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30136509\t30141507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30148508\t30153507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30140509\t30145507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30152508\t30157507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30144508\t30149507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30156508\t30161507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30148508\t30153507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30160508\t30165507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30152508\t30157507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30164508\t30169507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30156508\t30161507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30168508\t30173507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30160508\t30165507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30172508\t30177507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30164508\t30169507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30176508\t30181507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30168508\t30173507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30180508\t30185507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30172508\t30177507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30184508\t30189507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30176508\t30181507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30188508\t30193507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30180508\t30185507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30192508\t30197507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t30184508\t30189507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.'..b'3bnx.1_cds_2_0_chr22_29227_f\t31744508\t31749507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31756508\t31761507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31748508\t31753507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31760508\t31765507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31752508\t31757507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31764508\t31769507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31756508\t31761507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31768508\t31773507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31760508\t31765507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31772508\t31777507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31764508\t31769507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31776508\t31781507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31768508\t31773507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31780508\t31785507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31772508\t31777507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31784508\t31789507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31776508\t31781507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31788508\t31793507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31780508\t31785507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31792508\t31797507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31784508\t31789507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31796508\t31801507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31788508\t31793507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31800508\t31805507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31792508\t31797507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31804508\t31809507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31796508\t31801507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31808508\t31813507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31800508\t31805507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31812508\t31817507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31804508\t31809507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31816508\t31821507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31808508\t31813507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n+chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31820508\t31825507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f; closest_feature "chr22\tbed2gff\tuc003bnx.1_cds_2_0_chr22_29227_f\t31812508\t31817507\t0\t+\t.\tuc003bnx.1_cds_2_0_chr22_29227_f;" \n'
b
diff -r 000000000000 -r 90100b587723 test-data/closest_features_down.interval
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/closest_features_down.interval Tue Apr 01 10:52:59 2014 -0400
b
b'@@ -0,0 +1,422 @@\n+chr22\t30128507\t30133507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30132507\t30137507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30200507\t30205507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30204507\t30209507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30200507\t30205507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30208507\t30213507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30204507\t30209507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30212507\t30217507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30208507\t30213507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30216507\t30221507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30212507\t30217507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30220507\t30225507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30216507\t30221507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30224507\t30229507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30220507\t30225507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30228507\t30233507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30224507\t30229507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30232507\t30237507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30228507\t30233507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30236507\t30241507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30232507\t30237507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30240507\t30245507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30236507\t30241507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30244507\t30249507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30240507\t30245507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30248507\t30253507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30244507\t30249507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30252507\t30257507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30248507\t30253507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30256507\t30261507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30252507\t30257507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30260507\t30265507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30256507\t30261507\tuc003bnx.1_cds_2_0_c'..b'+\tchr22\t31692507\t31697507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31688507\t31693507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31696507\t31701507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31692507\t31697507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31700507\t31705507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31696507\t31701507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31704507\t31709507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31700507\t31705507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31708507\t31713507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31704507\t31709507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31712507\t31717507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31708507\t31713507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31716507\t31721507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31712507\t31717507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31720507\t31725507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31716507\t31721507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31724507\t31729507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31720507\t31725507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31728507\t31733507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31724507\t31729507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31732507\t31737507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31728507\t31733507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31736507\t31741507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31732507\t31737507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31740507\t31745507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31736507\t31741507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31744507\t31749507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31740507\t31745507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31748507\t31753507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31744507\t31749507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31752507\t31757507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31748507\t31753507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31752507\t31757507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31816507\t31821507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31820507\t31825507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n'
b
diff -r 000000000000 -r 90100b587723 test-data/closest_features_either.interval
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/closest_features_either.interval Tue Apr 01 10:52:59 2014 -0400
b
b'@@ -0,0 +1,424 @@\n+chr22\t30128507\t30133507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30132507\t30137507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30128507\t30133507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30132507\t30137507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30200507\t30205507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30204507\t30209507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30208507\t30213507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30200507\t30205507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30212507\t30217507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30204507\t30209507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30216507\t30221507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30208507\t30213507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30220507\t30225507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30212507\t30217507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30224507\t30229507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30216507\t30221507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30228507\t30233507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30220507\t30225507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30232507\t30237507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30224507\t30229507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30236507\t30241507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30228507\t30233507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30240507\t30245507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30232507\t30237507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30244507\t30249507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30236507\t30241507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30248507\t30253507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30240507\t30245507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30252507\t30257507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30244507\t30249507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30256507\t30261507\tuc003bnx.1_cds_2_0_c'..b'+\tchr22\t31684507\t31689507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31696507\t31701507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31688507\t31693507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31700507\t31705507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31692507\t31697507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31704507\t31709507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31696507\t31701507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31708507\t31713507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31700507\t31705507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31712507\t31717507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31704507\t31709507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31716507\t31721507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31708507\t31713507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31720507\t31725507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31712507\t31717507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31724507\t31729507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31716507\t31721507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31728507\t31733507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31720507\t31725507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31732507\t31737507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31724507\t31729507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31736507\t31741507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31728507\t31733507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31740507\t31745507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31732507\t31737507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31744507\t31749507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31736507\t31741507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31748507\t31753507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31740507\t31745507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31752507\t31757507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31744507\t31749507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31748507\t31753507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31752507\t31757507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31816507\t31821507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31820507\t31825507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n'
b
diff -r 000000000000 -r 90100b587723 test-data/closest_features_up.interval
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/closest_features_up.interval Tue Apr 01 10:52:59 2014 -0400
b
b'@@ -0,0 +1,422 @@\n+chr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30128507\t30133507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30132507\t30137507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30136507\t30141507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30140507\t30145507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30144507\t30149507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30148507\t30153507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30152507\t30157507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30156507\t30161507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30160507\t30165507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30164507\t30169507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30168507\t30173507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30172507\t30177507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30176507\t30181507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30180507\t30185507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30184507\t30189507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30188507\t30193507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30200507\t30205507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30192507\t30197507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30204507\t30209507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30196507\t30201507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30208507\t30213507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30200507\t30205507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30212507\t30217507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30204507\t30209507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30216507\t30221507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30208507\t30213507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30220507\t30225507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30212507\t30217507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30224507\t30229507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30216507\t30221507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30228507\t30233507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30220507\t30225507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30232507\t30237507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30224507\t30229507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30236507\t30241507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30228507\t30233507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30240507\t30245507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30232507\t30237507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30244507\t30249507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30236507\t30241507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30248507\t30253507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30240507\t30245507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30252507\t30257507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30244507\t30249507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30256507\t30261507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30248507\t30253507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30260507\t30265507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t30252507\t30257507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t30264507\t30269507\tuc003bnx.1_cds_2_0_c'..b'+\tchr22\t31684507\t31689507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31696507\t31701507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31688507\t31693507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31700507\t31705507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31692507\t31697507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31704507\t31709507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31696507\t31701507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31708507\t31713507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31700507\t31705507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31712507\t31717507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31704507\t31709507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31716507\t31721507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31708507\t31713507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31720507\t31725507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31712507\t31717507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31724507\t31729507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31716507\t31721507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31728507\t31733507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31720507\t31725507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31732507\t31737507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31724507\t31729507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31736507\t31741507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31728507\t31733507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31740507\t31745507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31732507\t31737507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31744507\t31749507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31736507\t31741507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31748507\t31753507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31740507\t31745507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31752507\t31757507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31744507\t31749507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31748507\t31753507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31752507\t31757507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31756507\t31761507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31760507\t31765507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31764507\t31769507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31768507\t31773507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31772507\t31777507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31776507\t31781507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31780507\t31785507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31784507\t31789507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31788507\t31793507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31792507\t31797507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31796507\t31801507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31800507\t31805507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31804507\t31809507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31816507\t31821507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31808507\t31813507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n+chr22\t31820507\t31825507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\tchr22\t31812507\t31817507\tuc003bnx.1_cds_2_0_chr22_29227_f\t0\t+\n'
b
diff -r 000000000000 -r 90100b587723 tool_dependencies.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_dependencies.xml Tue Apr 01 10:52:59 2014 -0400
b
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<tool_dependency>
+  <package name="bx-python" version="0.7.1">
+      <repository changeset_revision="41eb9d9f667d" name="package_bx_python_0_7" owner="devteam" prior_installation_required="False" toolshed="http://toolshed.g2.bx.psu.edu" />
+    </package>
+    <package name="galaxy-ops" version="1.0.0">
+      <repository changeset_revision="4e39032e4ec6" name="package_galaxy_ops_1_0_0" owner="devteam" prior_installation_required="False" toolshed="http://toolshed.g2.bx.psu.edu" />
+    </package>
+</tool_dependency>
b
diff -r 000000000000 -r 90100b587723 utils/gff_util.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/utils/gff_util.py Tue Apr 01 10:52:59 2014 -0400
[
b'@@ -0,0 +1,430 @@\n+"""\n+Provides utilities for working with GFF files.\n+"""\n+\n+import copy\n+from bx.intervals.io import *\n+from bx.tabular.io import Header, Comment\n+from utils.odict import odict\n+\n+class GFFInterval( GenomicInterval ):\n+    """\n+    A GFF interval, including attributes. If file is strictly a GFF file,\n+    only attribute is \'group.\'\n+    """\n+    def __init__( self, reader, fields, chrom_col=0, feature_col=2, start_col=3, end_col=4, \\\n+                  strand_col=6, score_col=5, default_strand=\'.\', fix_strand=False ):\n+        # HACK: GFF format allows \'.\' for strand but GenomicInterval does not. To get around this,\n+        # temporarily set strand and then unset after initing GenomicInterval.\n+        unknown_strand = False\n+        if not fix_strand and fields[ strand_col ] == \'.\':\n+            unknown_strand = True\n+            fields[ strand_col ] = \'+\'\n+        GenomicInterval.__init__( self, reader, fields, chrom_col, start_col, end_col, strand_col, \\\n+                                  default_strand, fix_strand=fix_strand )\n+        if unknown_strand:\n+            self.strand = \'.\'\n+            self.fields[ strand_col ] = \'.\'\n+\n+        # Handle feature, score column.\n+        self.feature_col = feature_col\n+        if self.feature_col >= self.nfields:\n+            raise MissingFieldError( "No field for feature_col (%d)" % feature_col )\n+        self.feature = self.fields[ self.feature_col ]\n+        self.score_col = score_col\n+        if self.score_col >= self.nfields:\n+            raise MissingFieldError( "No field for score_col (%d)" % score_col )\n+        self.score = self.fields[ self.score_col ]\n+\n+        # GFF attributes.\n+        self.attributes = parse_gff_attributes( fields[8] )\n+\n+    def copy( self ):\n+        return GFFInterval(self.reader, list( self.fields ), self.chrom_col, self.feature_col, self.start_col,\n+                           self.end_col, self.strand_col, self.score_col, self.strand)\n+\n+class GFFFeature( GFFInterval ):\n+    """\n+    A GFF feature, which can include multiple intervals.\n+    """\n+    def __init__( self, reader, chrom_col=0, feature_col=2, start_col=3, end_col=4, \\\n+                  strand_col=6, score_col=5, default_strand=\'.\', fix_strand=False, intervals=[], \\\n+                  raw_size=0 ):\n+        # Use copy so that first interval and feature do not share fields.\n+        GFFInterval.__init__( self, reader, copy.deepcopy( intervals[0].fields ), chrom_col, feature_col, \\\n+                              start_col, end_col, strand_col, score_col, default_strand, \\\n+                              fix_strand=fix_strand )\n+        self.intervals = intervals\n+        self.raw_size = raw_size\n+        # Use intervals to set feature attributes.\n+        for interval in self.intervals:\n+            # Error checking. NOTE: intervals need not share the same strand.\n+            if interval.chrom != self.chrom:\n+                raise ValueError( "interval chrom does not match self chrom: %s != %s" % \\\n+                                  ( interval.chrom, self.chrom ) )\n+            # Set start, end of interval.\n+            if interval.start < self.start:\n+                self.start = interval.start\n+            if interval.end > self.end:\n+                self.end = interval.end\n+\n+    def name( self ):\n+        """ Returns feature\'s name. """\n+        name = None\n+        # Preference for name: GTF, GFF3, GFF.\n+        for attr_name in [\n+                           # GTF:\n+                           \'gene_id\', \'transcript_id\',\n+                           # GFF3:\n+                           \'ID\', \'id\',\n+                           # GFF (TODO):\n+                           \'group\' ]:\n+            name = self.attributes.get( attr_name, None )\n+            if name is not None:\n+                break\n+        return name\n+\n+    def copy( self ):\n+        intervals_copy = []\n+        for interval in self.intervals:\n+            intervals_copy.append( interval.copy() )\n+   '..b'  if pair == \'\':\n+            continue\n+        name = pair[0].strip()\n+        if name == \'\':\n+            continue\n+        # Need to strip double quote from values\n+        value = pair[1].strip(" \\"")\n+        attributes[ name ] = value\n+\n+    if len( attributes ) == 0:\n+        # Could not split attributes string, so entire string must be\n+        # \'group\' attribute. This is the case for strictly GFF files.\n+        attributes[\'group\'] = attr_str\n+    return attributes\n+\n+def gff_attributes_to_str( attrs, gff_format ):\n+    """\n+    Convert GFF attributes to string. Supported formats are GFF3, GTF.\n+    """\n+    if gff_format == \'GTF\':\n+        format_string = \'%s "%s"\'\n+        # Convert group (GFF) and ID, parent (GFF3) attributes to transcript_id, gene_id\n+        id_attr = None\n+        if \'group\' in attrs:\n+            id_attr = \'group\'\n+        elif \'ID\' in attrs:\n+            id_attr = \'ID\'\n+        elif \'Parent\' in attrs:\n+            id_attr = \'Parent\'\n+        if id_attr:\n+            attrs[\'transcript_id\'] = attrs[\'gene_id\'] = attrs[id_attr]\n+    elif gff_format == \'GFF3\':\n+        format_string = \'%s=%s\'\n+    attrs_strs = []\n+    for name, value in attrs.items():\n+        attrs_strs.append( format_string % ( name, value ) )\n+    return " ; ".join( attrs_strs )\n+\n+def read_unordered_gtf( iterator, strict=False ):\n+    """\n+    Returns GTF features found in an iterator. GTF lines need not be ordered\n+    or clustered for reader to work. Reader returns GFFFeature objects sorted\n+    by transcript_id, chrom, and start position.\n+    """\n+\n+    # -- Get function that generates line/feature key. --\n+\n+    get_transcript_id = lambda fields: parse_gff_attributes( fields[8] )[ \'transcript_id\' ]\n+    if strict:\n+        # Strict GTF parsing uses transcript_id only to group lines into feature.\n+        key_fn = get_transcript_id\n+    else:\n+        # Use lenient parsing where chromosome + transcript_id is the key. This allows\n+        # transcripts with same ID on different chromosomes; this occurs in some popular\n+        # datasources, such as RefGenes in UCSC.\n+        key_fn = lambda fields: fields[0] + \'_\' + get_transcript_id( fields )\n+\n+\n+    # Aggregate intervals by transcript_id and collect comments.\n+    feature_intervals = odict()\n+    comments = []\n+    for count, line in enumerate( iterator ):\n+        if line.startswith( \'#\' ):\n+            comments.append( Comment( line ) )\n+            continue\n+\n+        line_key = key_fn( line.split(\'\\t\') )\n+        if line_key in feature_intervals:\n+            feature = feature_intervals[ line_key ]\n+        else:\n+            feature = []\n+            feature_intervals[ line_key ] = feature\n+        feature.append( GFFInterval( None, line.split( \'\\t\' ) ) )\n+\n+    # Create features.\n+    chroms_features = {}\n+    for count, intervals in enumerate( feature_intervals.values() ):\n+        # Sort intervals by start position.\n+        intervals.sort( lambda a,b: cmp( a.start, b.start ) )\n+        feature = GFFFeature( None, intervals=intervals )\n+        if feature.chrom not in chroms_features:\n+            chroms_features[ feature.chrom ] = []\n+        chroms_features[ feature.chrom ].append( feature )\n+\n+    # Sort features by chrom, start position.\n+    chroms_features_sorted = []\n+    for chrom_features in chroms_features.values():\n+        chroms_features_sorted.append( chrom_features )\n+    chroms_features_sorted.sort( lambda a,b: cmp( a[0].chrom, b[0].chrom ) )\n+    for features in chroms_features_sorted:\n+        features.sort( lambda a,b: cmp( a.start, b.start ) )\n+\n+    # Yield comments first, then features.\n+    # FIXME: comments can appear anywhere in file, not just the beginning.\n+    # Ideally, then comments would be associated with features and output\n+    # just before feature/line.\n+    for comment in comments:\n+        yield comment\n+\n+    for chrom_features in chroms_features_sorted:\n+        for feature in chrom_features:\n+            yield feature\n+\n'
b
diff -r 000000000000 -r 90100b587723 utils/odict.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/utils/odict.py Tue Apr 01 10:52:59 2014 -0400
[
@@ -0,0 +1,85 @@
+"""
+Ordered dictionary implementation.
+"""
+
+from UserDict import UserDict
+
+class odict(UserDict):
+    """
+    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747
+
+    This dictionary class extends UserDict to record the order in which items are
+    added. Calling keys(), values(), items(), etc. will return results in this
+    order.
+    """
+    def __init__( self, dict = None ):
+        self._keys = []
+        UserDict.__init__( self, dict )
+
+    def __delitem__( self, key ):
+        UserDict.__delitem__( self, key )
+        self._keys.remove( key )
+
+    def __setitem__( self, key, item ):
+        UserDict.__setitem__( self, key, item )
+        if key not in self._keys:
+            self._keys.append( key )
+
+    def clear( self ):
+        UserDict.clear( self )
+        self._keys = []
+
+    def copy(self):
+        new = odict()
+        new.update( self )
+        return new
+
+    def items( self ):
+        return zip( self._keys, self.values() )
+
+    def keys( self ):
+        return self._keys[:]
+
+    def popitem( self ):
+        try:
+            key = self._keys[-1]
+        except IndexError:
+            raise KeyError( 'dictionary is empty' )
+        val = self[ key ]
+        del self[ key ]
+        return ( key, val )
+
+    def setdefault( self, key, failobj=None ):
+        if key not in self._keys:
+            self._keys.append( key )
+        return UserDict.setdefault( self, key, failobj )
+
+    def update( self, dict ):
+        for ( key, val ) in dict.items():
+            self.__setitem__( key, val )
+
+    def values( self ):
+        return map( self.get, self._keys )
+
+    def iterkeys( self ):
+        return iter( self._keys )
+
+    def itervalues( self ):
+        for key in self._keys:
+            yield self.get( key )
+
+    def iteritems( self ):
+        for key in self._keys:
+            yield key, self.get( key )
+
+    def __iter__( self ):
+        for key in self._keys:
+            yield key
+
+    def reverse( self ):
+        self._keys.reverse()
+
+    def insert( self, index, key, item ):
+        if key not in self._keys:
+            self._keys.insert( index, key )
+            UserDict.__setitem__( self, key, item )