changeset 5:b95d7c323cc9 draft default tip

Uploaded
author dave
date Thu, 12 Jun 2014 10:33:20 -0400
parents 46aee6903d8f
children
files join.py joiner.xml jøin.py j♥in.py pho test-data/1.bed test-data/2.bed test-data/joiner_out1.bed test-data/joiner_out2.bed test-data/joiner_out3.bed test-data/joiner_out4.bed tool_dependencies.xml
diffstat 11 files changed, 929 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/join.py	Thu Jun 12 10:33:20 2014 -0400
@@ -0,0 +1,1 @@
+#øæå♥
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/joiner.xml	Thu Jun 12 10:33:20 2014 -0400
@@ -0,0 +1,180 @@
+<tool id="join1" name="Join two Datasets" version="2.0.2">
+  <description>side by side on a specified field</description>
+  <command interpreter="python">join.py $input1 $input2 $field1 $field2 $out_file1 $unmatched $partial --index_depth=3 --buffer=50000000 --fill_options_file=$fill_options_file</command>
+  <inputs>
+    <param format="tabular" name="input1" type="data" label="Join"/>
+    <param name="field1" label="using column" type="data_column" data_ref="input1" />
+    <param format="tabular" name="input2" type="data" label="with" />
+    <param name="field2" label="and column" type="data_column" data_ref="input2" />
+    <param name="unmatched" type="select" label="Keep lines of first input that do not join with second input">
+      <option value="-u">Yes</option>
+      <option value="" selected="true">No</option>
+    </param>
+    <param name="partial" type="select" label="Keep lines of first input that are incomplete">
+      <option value="-p">Yes</option>
+      <option value="" selected="true">No</option>
+    </param>
+    <conditional name="fill_empty_columns">
+      <param name="fill_empty_columns_switch" type="select" label="Fill empty columns">
+        <option value="no_fill" selected="True">No</option>
+        <option value="fill_empty">Yes</option>
+      </param>
+     <when value="no_fill">
+        <!-- do nothing -->
+     </when>
+     <when value="fill_empty">
+       <param type="select" name="fill_columns_by" label="Only fill unjoined rows">
+         <option value="fill_unjoined_only" selected="True">Yes</option>
+         <option value="fill_all">No</option>
+       </param>
+       <conditional name="do_fill_empty_columns">
+         <param name="column_fill_type" type="select" label="Fill Columns by">
+           <option value="single_fill_value" selected="True">Single fill value</option>
+           <option value="fill_value_by_column">Values by column</option>
+         </param>
+         <when value="single_fill_value">
+           <param type="text" name="fill_value" label="Fill value" value="."/>
+         </when>
+         <when value="fill_value_by_column">
+           <repeat name="column_fill1" title="Fill Column for Input 1">
+             <param name="column_number1" label="Column" type="data_column" data_ref="input1" />
+             <param type="text" name="fill_value1" value="."/>
+           </repeat>
+           <repeat name="column_fill2" title="Fill Column for Input 2">
+             <param name="column_number2" label="Column" type="data_column" data_ref="input2" />
+             <param type="text" name="fill_value2" value="."/>
+           </repeat>
+         </when>
+       </conditional>
+     </when>
+   </conditional>
+  </inputs>
+  <configfiles>
+    <configfile name="fill_options_file">&lt;%
+import simplejson
+%&gt;
+#set $__fill_options = {}
+#if $fill_empty_columns['fill_empty_columns_switch'] == 'fill_empty':
+    #set $__fill_options['fill_unjoined_only'] = $fill_empty_columns['fill_columns_by'].value == 'fill_unjoined_only'
+    #if $fill_empty_columns['do_fill_empty_columns']['column_fill_type'] == 'single_fill_value':
+        #set $__start_fill = $fill_empty_columns['do_fill_empty_columns']['fill_value'].value
+    #else:
+        #set $__start_fill = ""
+    #end if
+    #set $__fill_options['file1_columns'] = [ __start_fill for i in range( int( $input1.metadata.columns ) ) ]
+    #set $__fill_options['file2_columns'] = [ __start_fill for i in range( int( $input2.metadata.columns ) ) ]
+    #if $fill_empty_columns['do_fill_empty_columns']['column_fill_type'] == 'fill_value_by_column':
+        #for column_fill1 in $fill_empty_columns['do_fill_empty_columns']['column_fill1']:
+            #set $__fill_options['file1_columns'][ int( column_fill1['column_number1'].value ) - 1 ] = column_fill1['fill_value1'].value
+        #end for
+        #for column_fill2 in $fill_empty_columns['do_fill_empty_columns']['column_fill2']:
+            #set $__fill_options['file2_columns'][ int( column_fill2['column_number2'].value ) - 1 ] = column_fill2['fill_value2'].value
+        #end for
+    #end if
+#end if
+${simplejson.dumps( __fill_options )}
+    </configfile>
+  </configfiles>
+  <outputs>
+     <data format="input" name="out_file1" metadata_source="input1" />
+  </outputs>
+  <tests>
+    <test>
+      <param name="input1" value="1.bed"/>
+      <param name="input2" value="2.bed"/>
+      <param name="field1" value="2"/>
+      <param name="field2" value="2"/>
+      <param name="unmatched" value=""/>
+      <param name="partial" value=""/>
+      <param name="fill_empty_columns_switch" value="no_fill"/>
+      <output name="out_file1" file="joiner_out1.bed"/>
+    </test>
+    <test>
+      <param name="input1" value="1.bed"/>
+      <param name="input2" value="2.bed"/>
+      <param name="field1" value="2"/>
+      <param name="field2" value="2"/>
+      <param name="unmatched" value="Yes"/>
+      <param name="partial" value="Yes"/>
+      <param name="fill_empty_columns_switch" value="no_fill"/>
+      <output name="out_file1" file="joiner_out2.bed"/>
+    </test>
+    <test>
+      <param name="input1" value="1.bed"/>
+      <param name="input2" value="2.bed"/>
+      <param name="field1" value="2"/>
+      <param name="field2" value="2"/>
+      <param name="unmatched" value="Yes"/>
+      <param name="partial" value="Yes"/>
+      <param name="fill_empty_columns_switch" value="fill_empty"/>
+      <param name="fill_columns_by" value="fill_all"/>
+      <param name="column_fill_type" value="single_fill_value"/>
+      <param name="fill_value" value="~"/>
+      <output name="out_file1" file="joiner_out3.bed"/>
+    </test>
+    <test>
+      <param name="input1" value="1.bed"/>
+      <param name="input2" value="2.bed"/>
+      <param name="field1" value="2"/>
+      <param name="field2" value="2"/>
+      <param name="unmatched" value="Yes"/>
+      <param name="partial" value="Yes"/>
+      <param name="fill_empty_columns_switch" value="fill_empty"/>
+      <param name="fill_columns_by" value="fill_all"/>
+      <param name="column_fill_type" value="fill_value_by_column"/>
+      <param name="column_number1" value="6"/>
+      <param name="fill_value1" value="+"/>
+      <param name="column_number2" value="1"/>
+      <param name="fill_value2" value="NoChrom"/>
+      <output name="out_file1" file="joiner_out4.bed"/>
+    </test>
+  </tests>
+  <help>
+
+.. class:: warningmark
+
+**This tool will attempt to reuse the metadata from your first input.** To change metadata assignments click on the "edit attributes" link of the history item generated by this tool.
+
+.. class:: infomark
+
+**TIP:** If your data is not TAB delimited, use *Text Manipulation-&gt;Convert*
+
+-----
+
+**Syntax**
+
+This tool joins lines of two datasets on a common field. An empty string ("") is not a valid identifier.
+You may choose to include lines of your first input that do not join with your second input.
+
+- Columns are referenced with a **number**. For example, **3** refers to the 3rd column of a tab-delimited file.
+
+-----
+
+**Example**
+
+Dataset1::
+
+  chr1 10 20 geneA 
+  chr1 50 80 geneB
+  chr5 10 40 geneL
+
+Dataset2::
+
+  geneA tumor-supressor
+  geneB Foxp2
+  geneC Gnas1
+  geneE INK4a
+
+Joining the 4th column of Dataset1 with the 1st column of Dataset2 will yield::
+
+  chr1 10 20 geneA geneA tumor-suppressor
+  chr1 50 80 geneB geneB Foxp2
+
+Joining the 4th column of Dataset1 with the 1st column of Dataset2, while keeping all lines from Dataset1, will yield::
+
+  chr1 10 20 geneA geneA tumor-suppressor
+  chr1 50 80 geneB geneB Foxp2
+  chr5 10 40 geneL
+
+</help>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jøin.py	Thu Jun 12 10:33:20 2014 -0400
@@ -0,0 +1,370 @@
+#!/usr/bin/env python
+#Dan Blankenberg
+"""
+Script to Join Two Files on specified columns.
+
+Takes two tab delimited files, two column numbers (base 1) and outputs a new tab delimited file with lines joined by tabs.
+User can also opt to have have non-joining rows of file1 echoed.
+
+"""
+
+import optparse, os, sys, tempfile, struct
+import psyco_full
+
+try:
+    simple_json_exception = None
+    from galaxy import eggs
+    from galaxy.util.bunch import Bunch
+    from galaxy.util import stringify_dictionary_keys
+    import pkg_resources
+    pkg_resources.require("simplejson")
+    import simplejson
+except Exception, e:
+    simplejson_exception = e
+    simplejson = None
+
+
+class OffsetList:
+    def __init__( self, filesize = 0, fmt = None ):
+        self.file = tempfile.NamedTemporaryFile( 'w+b' )
+        if fmt:
+            self.fmt = fmt
+        elif filesize and filesize <= sys.maxint * 2:
+            self.fmt = 'I'
+        else:
+            self.fmt = 'Q'
+        self.fmt_size = struct.calcsize( self.fmt )
+    @property
+    def size( self ):
+        self.file.flush()
+        return self.file_size / self.fmt_size
+    @property
+    def file_size( self ):
+        self.file.flush()
+        return os.stat( self.file.name ).st_size
+    def add_offset( self, offset ):
+        if not isinstance( offset, list ):
+            offset = [offset]
+        self.file.seek( self.file_size )
+        for off in offset:
+            self.file.write( struct.pack( self.fmt, off ) )
+    def get_offsets( self, start = 0 ):
+        self.file.seek( start * self.fmt_size )
+        while True:
+            packed = self.file.read( self.fmt_size )
+            if not packed: break
+            yield struct.unpack( self.fmt, packed )[0]
+    def get_offset_by_index( self, index ):
+        self.file.seek( index * self.fmt_size )
+        return struct.unpack( self.fmt, self.file.read( self.fmt_size ) )[0]
+    def set_offset_at_index( self, index, offset ):
+        if not isinstance( offset, list ):
+            offset = [offset]
+        if index >= self.size:
+            self.add_offset( offset )
+        else:
+            temp_file = tempfile.NamedTemporaryFile( 'w+b' )
+            self.file.seek( 0 )
+            temp_file.write( self.file.read( ( index ) * self.fmt_size ) )
+            for off in offset:
+                temp_file.write( struct.pack( self.fmt, off ) )
+            temp_file.write( self.file.read() )
+            self.file = temp_file
+
+class SortedOffsets( OffsetList ):
+    def __init__( self, indexed_filename, column, split = None ):
+        OffsetList.__init__( self, os.stat( indexed_filename ).st_size )
+        self.indexed_filename = indexed_filename
+        self.indexed_file = open( indexed_filename, 'rb' )
+        self.column = column
+        self.split = split
+        self.last_identifier = None
+        self.last_identifier_merged = None
+        self.last_offset_merged = 0
+    def merge_with_dict( self, new_offset_dict ):
+        if not new_offset_dict: return #no items to merge in
+        keys = new_offset_dict.keys()
+        keys.sort()
+        identifier2 = keys.pop( 0 )
+        
+        result_offsets = OffsetList( fmt = self.fmt )
+        offsets1 = enumerate( self.get_offsets() )
+        try:
+            index1, offset1 = offsets1.next()
+            identifier1 = self.get_identifier_by_offset( offset1 )
+        except StopIteration:
+            offset1 = None
+            identifier1 = None
+            index1 = 0
+        
+        while True:
+            if identifier1 is None and identifier2 is None:
+                self.file = result_offsets.file #self is now merged results
+                return
+            elif identifier1 is None or ( identifier2 and identifier2 < identifier1 ):
+                result_offsets.add_offset( new_offset_dict[identifier2] )
+                if keys:
+                    identifier2 = keys.pop( 0 )
+                else:
+                    identifier2 = None
+            elif identifier2 is None:
+                result_offsets.file.seek( result_offsets.file_size )
+                self.file.seek( index1 * self.fmt_size )
+                result_offsets.file.write( self.file.read() )
+                identifier1 = None
+                offset1 = None
+            else:
+                result_offsets.add_offset( offset1 )
+                try:
+                    index1, offset1 = offsets1.next()
+                    identifier1 = self.get_identifier_by_offset( offset1 )
+                except StopIteration:
+                    offset1 = None
+                    identifier1 = None
+                    index1 += 1
+#methods to help link offsets to lines, ids, etc
+    def get_identifier_by_line( self, line ):
+        if isinstance( line, str ):
+            fields = line.rstrip( '\r\n' ).split( self.split )
+            if self.column < len( fields ):
+                return fields[self.column]
+        return None
+    def get_line_by_offset( self, offset ):
+        self.indexed_file.seek( offset )
+        return self.indexed_file.readline()
+    def get_identifier_by_offset( self, offset ):
+        return self.get_identifier_by_line( self.get_line_by_offset( offset ) )
+
+#indexed set of offsets, index is built on demand
+class OffsetIndex:
+    def __init__( self, filename, column, split = None, index_depth = 3 ):
+        self.filename = filename
+        self.file = open( filename, 'rb' )
+        self.column = column
+        self.split = split
+        self._offsets = {}
+        self._index = None
+        self.index_depth = index_depth
+    def _build_index( self ):
+        self._index = {}
+        for start_char, sorted_offsets in self._offsets.items():
+            self._index[start_char]={}
+            for i, offset in enumerate( sorted_offsets.get_offsets() ):
+                identifier = sorted_offsets.get_identifier_by_offset( offset )
+                if identifier[0:self.index_depth] not in self._index[start_char]:
+                    self._index[start_char][identifier[0:self.index_depth]] = i
+    def get_lines_by_identifier( self, identifier ):
+        if not identifier: return
+        #if index doesn't exist, build it
+        if self._index is None: self._build_index()
+        
+        #identifier cannot exist
+        if identifier[0] not in self._index or identifier[0:self.index_depth] not in self._index[identifier[0]]:
+            return
+        #identifier might exist, search for it
+        offset_index = self._index[identifier[0]][identifier[0:self.index_depth]]
+        while True:
+            if offset_index >= self._offsets[identifier[0]].size:
+                return
+            offset = self._offsets[identifier[0]].get_offset_by_index( offset_index )
+            identifier2 = self._offsets[identifier[0]].get_identifier_by_offset( offset )
+            if not identifier2 or identifier2 > identifier:
+                return
+            if identifier2 == identifier:
+                yield self._offsets[identifier[0]].get_line_by_offset( offset )
+            offset_index += 1
+    def get_offsets( self ):
+        keys = self._offsets.keys()
+        keys.sort()
+        for key in keys:
+            for offset in self._offsets[key].get_offsets():
+                yield offset
+    def get_line_by_offset( self, offset ):
+        self.file.seek( offset )
+        return self.file.readline()
+    def get_identifiers_offsets( self ):
+        keys = self._offsets.keys()
+        keys.sort()
+        for key in keys:
+            for offset in self._offsets[key].get_offsets():
+                yield self._offsets[key].get_identifier_by_offset( offset ), offset
+    def get_identifier_by_line( self, line ):
+        if isinstance( line, str ):
+            fields = line.rstrip( '\r\n' ).split( self.split )
+            if self.column < len( fields ):
+                return fields[self.column]
+        return None
+    def merge_with_dict( self, d ):
+        if not d: return #no data to merge
+        self._index = None
+        keys = d.keys()
+        keys.sort()
+        identifier = keys.pop( 0 )
+        first_char = identifier[0]
+        temp = { identifier: d[identifier] }
+        while True:
+            if not keys:
+                if first_char not in self._offsets:
+                    self._offsets[first_char] = SortedOffsets( self.filename, self.column, self.split )
+                self._offsets[first_char].merge_with_dict( temp )
+                return
+            identifier = keys.pop( 0 )
+            if identifier[0] == first_char:
+                temp[identifier] = d[identifier]
+            else:
+                if first_char not in self._offsets:
+                    self._offsets[first_char] = SortedOffsets( self.filename, self.column, self.split )
+                self._offsets[first_char].merge_with_dict( temp )
+                temp = { identifier: d[identifier] }
+                first_char = identifier[0]
+
+class BufferedIndex:
+    def __init__( self, filename, column, split = None, buffer = 1000000, index_depth = 3 ):
+        self.index = OffsetIndex( filename, column, split, index_depth )
+        self.buffered_offsets = {}
+        f = open( filename, 'rb' )
+        offset = f.tell()
+        identified_offset_count = 1
+        while True:
+            offset = f.tell()
+            line = f.readline()
+            if not line: break #EOF
+            identifier = self.index.get_identifier_by_line( line )
+            if identifier:
+                #flush buffered offsets, if buffer size reached
+                if buffer and identified_offset_count % buffer == 0:
+                    self.index.merge_with_dict( self.buffered_offsets )
+                    self.buffered_offsets = {}
+                if identifier not in self.buffered_offsets:
+                    self.buffered_offsets[identifier] = []
+                self.buffered_offsets[identifier].append( offset )
+                identified_offset_count += 1
+        f.close()
+     
+    def get_lines_by_identifier( self, identifier ):
+        for line in self.index.get_lines_by_identifier( identifier ):
+            yield line
+        if identifier in self.buffered_offsets:
+            for offset in self.buffered_offsets[identifier]:
+                yield self.index.get_line_by_offset( offset )
+
+
+def fill_empty_columns( line, split, fill_values ):
+    if not fill_values:
+        return line
+    filled_columns = []
+    for i, field in enumerate( line.split( split ) ):
+        if field or i >= len( fill_values ):
+            filled_columns.append( field )
+        else:
+            filled_columns.append( fill_values[i] )
+    if len( fill_values ) > len( filled_columns ):
+        filled_columns.extend( fill_values[ len( filled_columns ) : ] )
+    return split.join( filled_columns )
+
+
+def join_files( filename1, column1, filename2, column2, out_filename, split = None, buffer = 1000000, keep_unmatched = False, keep_partial = False, index_depth = 3, fill_options = None ):
+    #return identifier based upon line
+    def get_identifier_by_line( line, column, split = None ):
+        if isinstance( line, str ):
+            fields = line.rstrip( '\r\n' ).split( split )
+            if column < len( fields ):
+                return fields[column]
+        return None
+    if fill_options is None:
+        fill_options = Bunch( fill_unjoined_only = True, file1_columns = None, file2_columns = None )
+    out = open( out_filename, 'w+b' )
+    index = BufferedIndex( filename2, column2, split, buffer, index_depth )
+    for line1 in open( filename1, 'rb' ):
+        identifier = get_identifier_by_line( line1, column1, split )
+        if identifier:
+            written = False
+            for line2 in index.get_lines_by_identifier( identifier ):
+                if not fill_options.fill_unjoined_only:
+                    out.write( "%s%s%s\n" % ( fill_empty_columns( line1.rstrip( '\r\n' ), split, fill_options.file1_columns ), split, fill_empty_columns( line2.rstrip( '\r\n' ), split, fill_options.file2_columns ) ) )
+                else:
+                    out.write( "%s%s%s\n" % ( line1.rstrip( '\r\n' ), split, line2.rstrip( '\r\n' ) ) )
+                written = True
+            if not written and keep_unmatched:
+                out.write( fill_empty_columns( line1.rstrip( '\r\n' ), split, fill_options.file1_columns ) )
+                if fill_options:
+                    if fill_options.file2_columns:
+                        out.write( "%s%s" % ( split,  fill_empty_columns( "", split, fill_options.file2_columns ) ) )
+                out.write( "\n" )
+        elif keep_partial:
+            out.write( fill_empty_columns( line1.rstrip( '\r\n' ), split, fill_options.file1_columns ) )
+            if fill_options:
+                if fill_options.file2_columns:
+                    out.write( "%s%s" % ( split,  fill_empty_columns( "", split, fill_options.file2_columns ) ) )
+            out.write( "\n" )
+    out.close()
+
+def main():
+    parser = optparse.OptionParser()
+    parser.add_option(
+        '-b','--buffer',
+        dest='buffer',
+        type='int',default=1000000,
+        help='Number of lines to buffer at a time. Default: 1,000,000 lines. A buffer of 0 will attempt to use memory only.'
+    )
+    parser.add_option(
+        '-d','--index_depth',
+        dest='index_depth',
+        type='int',default=3,
+        help='Depth to use on filebased offset indexing. Default: 3.'
+    )
+    parser.add_option(
+        '-p','--keep_partial',
+        action='store_true',
+        dest='keep_partial',
+        default=False,
+        help='Keep rows in first input which are missing identifiers.')
+    parser.add_option(
+        '-u','--keep_unmatched',
+        action='store_true',
+        dest='keep_unmatched',
+        default=False,
+        help='Keep rows in first input which are not joined with the second input.')
+    parser.add_option(
+        '-f','--fill_options_file',
+        dest='fill_options_file',
+        type='str',default=None,
+        help='Fill empty columns with a values from a JSONified file.')
+    
+    
+    options, args = parser.parse_args()
+    
+    fill_options = None
+    if options.fill_options_file is not None:
+        try:
+            if simplejson is None:
+                raise simplejson_exception
+            fill_options = Bunch( **stringify_dictionary_keys( simplejson.load( open( options.fill_options_file ) ) ) ) #simplejson.load( open( options.fill_options_file ) )
+        except Exception, e:
+            print "Warning: Ignoring fill options due to simplejson error (%s)." % e
+    if fill_options is None:
+        fill_options = Bunch()
+    if 'fill_unjoined_only' not in fill_options:
+        fill_options.fill_unjoined_only = True
+    if 'file1_columns' not in fill_options:
+        fill_options.file1_columns = None
+    if 'file2_columns' not in fill_options:
+        fill_options.file2_columns = None
+    
+    
+    try:
+        filename1 = args[0]
+        filename2 = args[1]
+        column1 = int( args[2] ) - 1
+        column2 = int( args[3] ) - 1
+        out_filename = args[4]
+    except:
+        print >> sys.stderr, "Error parsing command line."
+        sys.exit()
+    
+    #Character for splitting fields and joining lines
+    split = "\t"
+    
+    return join_files( filename1, column1, filename2, column2, out_filename, split, options.buffer, options.keep_unmatched, options.keep_partial, options.index_depth, fill_options = fill_options )
+
+if __name__ == "__main__": main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/j♥in.py	Thu Jun 12 10:33:20 2014 -0400
@@ -0,0 +1,1 @@
+#øæå♥
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/1.bed	Thu Jun 12 10:33:20 2014 -0400
@@ -0,0 +1,65 @@
+chr1	147962192	147962580	CCDS989.1_cds_0_0_chr1_147962193_r	0	-
+chr1	147984545	147984630	CCDS990.1_cds_0_0_chr1_147984546_f	0	+
+chr1	148078400	148078582	CCDS993.1_cds_0_0_chr1_148078401_r	0	-
+chr1	148185136	148185276	CCDS996.1_cds_0_0_chr1_148185137_f	0	+
+chr10	55251623	55253124	CCDS7248.1_cds_0_0_chr10_55251624_r	0	-
+chr11	116124407	116124501	CCDS8374.1_cds_0_0_chr11_116124408_r	0	-
+chr11	116206508	116206563	CCDS8377.1_cds_0_0_chr11_116206509_f	0	+
+chr11	116211733	116212337	CCDS8378.1_cds_0_0_chr11_116211734_r	0	-
+chr11	1812377	1812407	CCDS7726.1_cds_0_0_chr11_1812378_f	0	+
+chr12	38440094	38440321	CCDS8736.1_cds_0_0_chr12_38440095_r	0	-
+chr13	112381694	112381953	CCDS9526.1_cds_0_0_chr13_112381695_f	0	+
+chr14	98710240	98712285	CCDS9949.1_cds_0_0_chr14_98710241_r	0	-
+chr15	41486872	41487060	CCDS10096.1_cds_0_0_chr15_41486873_r	0	-
+chr15	41673708	41673857	CCDS10097.1_cds_0_0_chr15_41673709_f	0	+
+chr15	41679161	41679250	CCDS10098.1_cds_0_0_chr15_41679162_r	0	-
+chr15	41826029	41826196	CCDS10101.1_cds_0_0_chr15_41826030_f	0	+
+chr16	142908	143003	CCDS10397.1_cds_0_0_chr16_142909_f	0	+
+chr16	179963	180135	CCDS10401.1_cds_0_0_chr16_179964_r	0	-
+chr16	244413	244681	CCDS10402.1_cds_0_0_chr16_244414_f	0	+
+chr16	259268	259383	CCDS10403.1_cds_0_0_chr16_259269_r	0	-
+chr18	23786114	23786321	CCDS11891.1_cds_0_0_chr18_23786115_r	0	-
+chr18	59406881	59407046	CCDS11985.1_cds_0_0_chr18_59406882_f	0	+
+chr18	59455932	59456337	CCDS11986.1_cds_0_0_chr18_59455933_r	0	-
+chr18	59600586	59600754	CCDS11988.1_cds_0_0_chr18_59600587_f	0	+
+chr19	59068595	59069564	CCDS12866.1_cds_0_0_chr19_59068596_f	0	+
+chr19	59236026	59236146	CCDS12872.1_cds_0_0_chr19_59236027_r	0	-
+chr19	59297998	59298008	CCDS12877.1_cds_0_0_chr19_59297999_f	0	+
+chr19	59302168	59302288	CCDS12878.1_cds_0_0_chr19_59302169_r	0	-
+chr2	118288583	118288668	CCDS2120.1_cds_0_0_chr2_118288584_f	0	+
+chr2	118394148	118394202	CCDS2121.1_cds_0_0_chr2_118394149_r	0	-
+chr2	220190202	220190242	CCDS2441.1_cds_0_0_chr2_220190203_f	0	+
+chr2	220229609	220230869	CCDS2443.1_cds_0_0_chr2_220229610_r	0	-
+chr20	33330413	33330423	CCDS13249.1_cds_0_0_chr20_33330414_r	0	-
+chr20	33513606	33513792	CCDS13255.1_cds_0_0_chr20_33513607_f	0	+
+chr20	33579500	33579527	CCDS13256.1_cds_0_0_chr20_33579501_r	0	-
+chr20	33593260	33593348	CCDS13257.1_cds_0_0_chr20_33593261_f	0	+
+chr21	32707032	32707192	CCDS13614.1_cds_0_0_chr21_32707033_f	0	+
+chr21	32869641	32870022	CCDS13615.1_cds_0_0_chr21_32869642_r	0	-
+chr21	33321040	33322012	CCDS13620.1_cds_0_0_chr21_33321041_f	0	+
+chr21	33744994	33745040	CCDS13625.1_cds_0_0_chr21_33744995_r	0	-
+chr22	30120223	30120265	CCDS13897.1_cds_0_0_chr22_30120224_f	0	+
+chr22	30160419	30160661	CCDS13898.1_cds_0_0_chr22_30160420_r	0	-
+chr22	30665273	30665360	CCDS13901.1_cds_0_0_chr22_30665274_f	0	+
+chr22	30939054	30939266	CCDS13903.1_cds_0_0_chr22_30939055_r	0	-
+chr5	131424298	131424460	CCDS4149.1_cds_0_0_chr5_131424299_f	0	+
+chr5	131556601	131556672	CCDS4151.1_cds_0_0_chr5_131556602_r	0	-
+chr5	131621326	131621419	CCDS4152.1_cds_0_0_chr5_131621327_f	0	+
+chr5	131847541	131847666	CCDS4155.1_cds_0_0_chr5_131847542_r	0	-
+chr6	108299600	108299744	CCDS5061.1_cds_0_0_chr6_108299601_r	0	-
+chr6	108594662	108594687	CCDS5063.1_cds_0_0_chr6_108594663_f	0	+
+chr6	108640045	108640151	CCDS5064.1_cds_0_0_chr6_108640046_r	0	-
+chr6	108722976	108723115	CCDS5067.1_cds_0_0_chr6_108722977_f	0	+
+chr7	113660517	113660685	CCDS5760.1_cds_0_0_chr7_113660518_f	0	+
+chr7	116512159	116512389	CCDS5771.1_cds_0_0_chr7_116512160_r	0	-
+chr7	116714099	116714152	CCDS5773.1_cds_0_0_chr7_116714100_f	0	+
+chr7	116945541	116945787	CCDS5774.1_cds_0_0_chr7_116945542_r	0	-
+chr8	118881131	118881317	CCDS6324.1_cds_0_0_chr8_118881132_r	0	-
+chr9	128764156	128764189	CCDS6914.1_cds_0_0_chr9_128764157_f	0	+
+chr9	128787519	128789136	CCDS6915.1_cds_0_0_chr9_128787520_r	0	-
+chr9	128882427	128882523	CCDS6917.1_cds_0_0_chr9_128882428_f	0	+
+chr9	128937229	128937445	CCDS6919.1_cds_0_0_chr9_128937230_r	0	-
+chrX	122745047	122745924	CCDS14606.1_cds_0_0_chrX_122745048_f	0	+
+chrX	152648964	152649196	CCDS14733.1_cds_0_0_chrX_152648965_r	0	-
+chrX	152691446	152691471	CCDS14735.1_cds_0_0_chrX_152691447_f	0	+
+chrX	152694029	152694263	CCDS14736.1_cds_0_0_chrX_152694030_r	0	-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/2.bed	Thu Jun 12 10:33:20 2014 -0400
@@ -0,0 +1,68 @@
+chr1	147962192	147962580	NM_005997_cds_0_0_chr1_147962193_r	0	-
+chr1	147984545	147984630	BC007833_cds_0_0_chr1_147984546_f	0	+
+chr1	148078400	148078582	AJ011123_cds_0_0_chr1_148078401_r	0	-
+chr1	148185136	148185276	NM_002796_cds_0_0_chr1_148185137_f	0	+
+chr10	55251623	55253124	AY029205_cds_0_0_chr10_55251624_r	0	-
+chr11	116124407	116124501	AK057832_cds_0_0_chr11_116124408_r	0	-
+chr11	116206508	116206563	NM_000040_cds_1_0_chr11_116206509_f	0	+
+chr11	116211733	116212337	BC005380_cds_0_0_chr11_116211734_r	0	-
+chr11	130745911	130745993	AY358331_cds_0_0_chr11_130745912_f	0	+
+chr12	38440094	38440321	NM_052885_cds_0_0_chr12_38440095_r	0	-
+chr12	38905200	38905351	AY792511_cds_0_0_chr12_38905201_f	0	+
+chr13	112381694	112381953	NM_207440_cds_1_0_chr13_112381695_f	0	+
+chr13	29680676	29680875	NM_032116_cds_0_0_chr13_29680677_r	0	-
+chr14	98521864	98521922	U88895_cds_0_0_chr14_98521865_f	0	+
+chr14	98710240	98712285	NM_022898_cds_0_0_chr14_98710241_r	0	-
+chr15	41486872	41487060	BX537418_cds_0_0_chr15_41486873_r	0	-
+chr15	41673708	41673857	AK223365_cds_0_0_chr15_41673709_f	0	+
+chr15	41679161	41679250	NM_153700_cds_0_0_chr15_41679162_r	0	-
+chr15	41773540	41773689	AK223365_cds_0_0_chr15_41773541_f	0	+
+chr16	142908	143003	NM_005332_cds_0_0_chr16_142909_f	0	+
+chr16	179197	179339	BC065198_cds_0_0_chr16_179198_r	0	-
+chr16	244413	244681	AK057165_cds_2_0_chr16_244414_f	0	+
+chr16	259268	259383	AB016929_cds_0_0_chr16_259269_r	0	-
+chr18	23786114	23786321	NM_001792_cds_0_0_chr18_23786115_r	0	-
+chr18	59406881	59407046	NM_012397_cds_1_0_chr18_59406882_f	0	+
+chr18	59455932	59456337	AB046400_cds_0_0_chr18_59455933_r	0	-
+chr18	59528407	59528575	AY792326_cds_0_0_chr18_59528408_f	0	+
+chr19	59068595	59069564	BC013995_cds_1_0_chr19_59068596_f	0	+
+chr19	59236026	59236146	NM_198481_cds_0_0_chr19_59236027_r	0	-
+chr19	59297998	59298008	NM_004542_cds_0_0_chr19_59297999_f	0	+
+chr19	59318205	59318718	AK128544_cds_3_0_chr19_59318206_r	0	-
+chr2	118288583	118288668	NM_006773_cds_0_0_chr2_118288584_f	0	+
+chr2	118390395	118390500	BC005078_cds_0_0_chr2_118390396_r	0	-
+chr2	220108689	220109267	AY125465_cds_0_0_chr2_220108690_f	0	+
+chr2	220229609	220230869	NM_024536_cds_0_0_chr2_220229610_r	0	-
+chr20	33330413	33330423	NM_181466_cds_0_0_chr20_33330414_r	0	-
+chr20	33485370	33486123	BC085019_cds_1_0_chr20_33485371_f	0	+
+chr20	33488491	33489122	NM_000557_cds_1_0_chr20_33488492_r	0	-
+chr20	33513606	33513792	AF022655_cds_1_0_chr20_33513607_f	0	+
+chr21	32687402	32687588	NM_032910_cds_0_0_chr21_32687403_f	0	+
+chr21	32869641	32870022	NM_018277_cds_3_0_chr21_32869642_r	0	-
+chr21	33321040	33322012	NM_005806_cds_1_0_chr21_33321041_f	0	+
+chr21	33728358	33728724	AK129657_cds_0_0_chr21_33728359_r	0	-
+chr22	30120223	30120265	NM_004147_cds_0_0_chr22_30120224_f	0	+
+chr22	30160419	30160661	BC032941_cds_0_0_chr22_30160420_r	0	-
+chr22	30228824	30228916	NM_001007467_cds_1_0_chr22_30228825_f	0	+
+chr22	30340151	30340376	CR456540_cds_0_0_chr22_30340152_r	0	-
+chr5	131311206	131311254	AF099740_cds_11_0_chr5_131311207_r	0	-
+chr5	131424298	131424460	NM_000588_cds_0_0_chr5_131424299_f	0	+
+chr5	131556601	131556672	BC035813_cds_0_0_chr5_131556602_r	0	-
+chr5	131621326	131621419	BC003096_cds_0_0_chr5_131621327_f	0	+
+chr6	108299600	108299744	NM_007214_cds_0_0_chr6_108299601_r	0	-
+chr6	108594662	108594687	NM_003269_cds_0_0_chr6_108594663_f	0	+
+chr6	108640045	108640151	NM_003795_cds_0_0_chr6_108640046_r	0	-
+chr6	108722976	108723115	NM_145315_cds_0_0_chr6_108722977_f	0	+
+chr7	113660517	113660685	AF467257_cds_1_0_chr7_113660518_f	0	+
+chr7	116512159	116512389	NM_003391_cds_0_0_chr7_116512160_r	0	-
+chr7	116714099	116714152	NM_000492_cds_0_0_chr7_116714100_f	0	+
+chr7	116945541	116945787	AF377960_cds_0_0_chr7_116945542_r	0	-
+chr8	118881131	118881317	NM_000127_cds_0_0_chr8_118881132_r	0	-
+chr9	128764156	128764189	BC051300_cds_0_0_chr9_128764157_f	0	+
+chr9	128787519	128789136	NM_014908_cds_0_0_chr9_128787520_r	0	-
+chr9	128789552	128789584	NM_015354_cds_0_0_chr9_128789553_f	0	+
+chr9	128850516	128850624	AB058751_cds_0_0_chr9_128850517_r	0	-
+chrX	122745047	122745924	NM_001167_cds_1_0_chrX_122745048_f	0	+
+chrX	152648964	152649196	NM_000425_cds_0_0_chrX_152648965_r	0	-
+chrX	152691446	152691471	AF101728_cds_0_0_chrX_152691447_f	0	+
+chrX	152694029	152694263	BC052303_cds_0_0_chrX_152694030_r	0	-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/joiner_out1.bed	Thu Jun 12 10:33:20 2014 -0400
@@ -0,0 +1,49 @@
+chr1	147962192	147962580	CCDS989.1_cds_0_0_chr1_147962193_r	0	-	chr1	147962192	147962580	NM_005997_cds_0_0_chr1_147962193_r	0	-
+chr1	147984545	147984630	CCDS990.1_cds_0_0_chr1_147984546_f	0	+	chr1	147984545	147984630	BC007833_cds_0_0_chr1_147984546_f	0	+
+chr1	148078400	148078582	CCDS993.1_cds_0_0_chr1_148078401_r	0	-	chr1	148078400	148078582	AJ011123_cds_0_0_chr1_148078401_r	0	-
+chr1	148185136	148185276	CCDS996.1_cds_0_0_chr1_148185137_f	0	+	chr1	148185136	148185276	NM_002796_cds_0_0_chr1_148185137_f	0	+
+chr10	55251623	55253124	CCDS7248.1_cds_0_0_chr10_55251624_r	0	-	chr10	55251623	55253124	AY029205_cds_0_0_chr10_55251624_r	0	-
+chr11	116124407	116124501	CCDS8374.1_cds_0_0_chr11_116124408_r	0	-	chr11	116124407	116124501	AK057832_cds_0_0_chr11_116124408_r	0	-
+chr11	116206508	116206563	CCDS8377.1_cds_0_0_chr11_116206509_f	0	+	chr11	116206508	116206563	NM_000040_cds_1_0_chr11_116206509_f	0	+
+chr11	116211733	116212337	CCDS8378.1_cds_0_0_chr11_116211734_r	0	-	chr11	116211733	116212337	BC005380_cds_0_0_chr11_116211734_r	0	-
+chr12	38440094	38440321	CCDS8736.1_cds_0_0_chr12_38440095_r	0	-	chr12	38440094	38440321	NM_052885_cds_0_0_chr12_38440095_r	0	-
+chr13	112381694	112381953	CCDS9526.1_cds_0_0_chr13_112381695_f	0	+	chr13	112381694	112381953	NM_207440_cds_1_0_chr13_112381695_f	0	+
+chr14	98710240	98712285	CCDS9949.1_cds_0_0_chr14_98710241_r	0	-	chr14	98710240	98712285	NM_022898_cds_0_0_chr14_98710241_r	0	-
+chr15	41486872	41487060	CCDS10096.1_cds_0_0_chr15_41486873_r	0	-	chr15	41486872	41487060	BX537418_cds_0_0_chr15_41486873_r	0	-
+chr15	41673708	41673857	CCDS10097.1_cds_0_0_chr15_41673709_f	0	+	chr15	41673708	41673857	AK223365_cds_0_0_chr15_41673709_f	0	+
+chr15	41679161	41679250	CCDS10098.1_cds_0_0_chr15_41679162_r	0	-	chr15	41679161	41679250	NM_153700_cds_0_0_chr15_41679162_r	0	-
+chr16	142908	143003	CCDS10397.1_cds_0_0_chr16_142909_f	0	+	chr16	142908	143003	NM_005332_cds_0_0_chr16_142909_f	0	+
+chr16	244413	244681	CCDS10402.1_cds_0_0_chr16_244414_f	0	+	chr16	244413	244681	AK057165_cds_2_0_chr16_244414_f	0	+
+chr16	259268	259383	CCDS10403.1_cds_0_0_chr16_259269_r	0	-	chr16	259268	259383	AB016929_cds_0_0_chr16_259269_r	0	-
+chr18	23786114	23786321	CCDS11891.1_cds_0_0_chr18_23786115_r	0	-	chr18	23786114	23786321	NM_001792_cds_0_0_chr18_23786115_r	0	-
+chr18	59406881	59407046	CCDS11985.1_cds_0_0_chr18_59406882_f	0	+	chr18	59406881	59407046	NM_012397_cds_1_0_chr18_59406882_f	0	+
+chr18	59455932	59456337	CCDS11986.1_cds_0_0_chr18_59455933_r	0	-	chr18	59455932	59456337	AB046400_cds_0_0_chr18_59455933_r	0	-
+chr19	59068595	59069564	CCDS12866.1_cds_0_0_chr19_59068596_f	0	+	chr19	59068595	59069564	BC013995_cds_1_0_chr19_59068596_f	0	+
+chr19	59236026	59236146	CCDS12872.1_cds_0_0_chr19_59236027_r	0	-	chr19	59236026	59236146	NM_198481_cds_0_0_chr19_59236027_r	0	-
+chr19	59297998	59298008	CCDS12877.1_cds_0_0_chr19_59297999_f	0	+	chr19	59297998	59298008	NM_004542_cds_0_0_chr19_59297999_f	0	+
+chr2	118288583	118288668	CCDS2120.1_cds_0_0_chr2_118288584_f	0	+	chr2	118288583	118288668	NM_006773_cds_0_0_chr2_118288584_f	0	+
+chr2	220229609	220230869	CCDS2443.1_cds_0_0_chr2_220229610_r	0	-	chr2	220229609	220230869	NM_024536_cds_0_0_chr2_220229610_r	0	-
+chr20	33330413	33330423	CCDS13249.1_cds_0_0_chr20_33330414_r	0	-	chr20	33330413	33330423	NM_181466_cds_0_0_chr20_33330414_r	0	-
+chr20	33513606	33513792	CCDS13255.1_cds_0_0_chr20_33513607_f	0	+	chr20	33513606	33513792	AF022655_cds_1_0_chr20_33513607_f	0	+
+chr21	32869641	32870022	CCDS13615.1_cds_0_0_chr21_32869642_r	0	-	chr21	32869641	32870022	NM_018277_cds_3_0_chr21_32869642_r	0	-
+chr21	33321040	33322012	CCDS13620.1_cds_0_0_chr21_33321041_f	0	+	chr21	33321040	33322012	NM_005806_cds_1_0_chr21_33321041_f	0	+
+chr22	30120223	30120265	CCDS13897.1_cds_0_0_chr22_30120224_f	0	+	chr22	30120223	30120265	NM_004147_cds_0_0_chr22_30120224_f	0	+
+chr22	30160419	30160661	CCDS13898.1_cds_0_0_chr22_30160420_r	0	-	chr22	30160419	30160661	BC032941_cds_0_0_chr22_30160420_r	0	-
+chr5	131424298	131424460	CCDS4149.1_cds_0_0_chr5_131424299_f	0	+	chr5	131424298	131424460	NM_000588_cds_0_0_chr5_131424299_f	0	+
+chr5	131556601	131556672	CCDS4151.1_cds_0_0_chr5_131556602_r	0	-	chr5	131556601	131556672	BC035813_cds_0_0_chr5_131556602_r	0	-
+chr5	131621326	131621419	CCDS4152.1_cds_0_0_chr5_131621327_f	0	+	chr5	131621326	131621419	BC003096_cds_0_0_chr5_131621327_f	0	+
+chr6	108299600	108299744	CCDS5061.1_cds_0_0_chr6_108299601_r	0	-	chr6	108299600	108299744	NM_007214_cds_0_0_chr6_108299601_r	0	-
+chr6	108594662	108594687	CCDS5063.1_cds_0_0_chr6_108594663_f	0	+	chr6	108594662	108594687	NM_003269_cds_0_0_chr6_108594663_f	0	+
+chr6	108640045	108640151	CCDS5064.1_cds_0_0_chr6_108640046_r	0	-	chr6	108640045	108640151	NM_003795_cds_0_0_chr6_108640046_r	0	-
+chr6	108722976	108723115	CCDS5067.1_cds_0_0_chr6_108722977_f	0	+	chr6	108722976	108723115	NM_145315_cds_0_0_chr6_108722977_f	0	+
+chr7	113660517	113660685	CCDS5760.1_cds_0_0_chr7_113660518_f	0	+	chr7	113660517	113660685	AF467257_cds_1_0_chr7_113660518_f	0	+
+chr7	116512159	116512389	CCDS5771.1_cds_0_0_chr7_116512160_r	0	-	chr7	116512159	116512389	NM_003391_cds_0_0_chr7_116512160_r	0	-
+chr7	116714099	116714152	CCDS5773.1_cds_0_0_chr7_116714100_f	0	+	chr7	116714099	116714152	NM_000492_cds_0_0_chr7_116714100_f	0	+
+chr7	116945541	116945787	CCDS5774.1_cds_0_0_chr7_116945542_r	0	-	chr7	116945541	116945787	AF377960_cds_0_0_chr7_116945542_r	0	-
+chr8	118881131	118881317	CCDS6324.1_cds_0_0_chr8_118881132_r	0	-	chr8	118881131	118881317	NM_000127_cds_0_0_chr8_118881132_r	0	-
+chr9	128764156	128764189	CCDS6914.1_cds_0_0_chr9_128764157_f	0	+	chr9	128764156	128764189	BC051300_cds_0_0_chr9_128764157_f	0	+
+chr9	128787519	128789136	CCDS6915.1_cds_0_0_chr9_128787520_r	0	-	chr9	128787519	128789136	NM_014908_cds_0_0_chr9_128787520_r	0	-
+chrX	122745047	122745924	CCDS14606.1_cds_0_0_chrX_122745048_f	0	+	chrX	122745047	122745924	NM_001167_cds_1_0_chrX_122745048_f	0	+
+chrX	152648964	152649196	CCDS14733.1_cds_0_0_chrX_152648965_r	0	-	chrX	152648964	152649196	NM_000425_cds_0_0_chrX_152648965_r	0	-
+chrX	152691446	152691471	CCDS14735.1_cds_0_0_chrX_152691447_f	0	+	chrX	152691446	152691471	AF101728_cds_0_0_chrX_152691447_f	0	+
+chrX	152694029	152694263	CCDS14736.1_cds_0_0_chrX_152694030_r	0	-	chrX	152694029	152694263	BC052303_cds_0_0_chrX_152694030_r	0	-
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/joiner_out2.bed	Thu Jun 12 10:33:20 2014 -0400
@@ -0,0 +1,65 @@
+chr1	147962192	147962580	CCDS989.1_cds_0_0_chr1_147962193_r	0	-	chr1	147962192	147962580	NM_005997_cds_0_0_chr1_147962193_r	0	-
+chr1	147984545	147984630	CCDS990.1_cds_0_0_chr1_147984546_f	0	+	chr1	147984545	147984630	BC007833_cds_0_0_chr1_147984546_f	0	+
+chr1	148078400	148078582	CCDS993.1_cds_0_0_chr1_148078401_r	0	-	chr1	148078400	148078582	AJ011123_cds_0_0_chr1_148078401_r	0	-
+chr1	148185136	148185276	CCDS996.1_cds_0_0_chr1_148185137_f	0	+	chr1	148185136	148185276	NM_002796_cds_0_0_chr1_148185137_f	0	+
+chr10	55251623	55253124	CCDS7248.1_cds_0_0_chr10_55251624_r	0	-	chr10	55251623	55253124	AY029205_cds_0_0_chr10_55251624_r	0	-
+chr11	116124407	116124501	CCDS8374.1_cds_0_0_chr11_116124408_r	0	-	chr11	116124407	116124501	AK057832_cds_0_0_chr11_116124408_r	0	-
+chr11	116206508	116206563	CCDS8377.1_cds_0_0_chr11_116206509_f	0	+	chr11	116206508	116206563	NM_000040_cds_1_0_chr11_116206509_f	0	+
+chr11	116211733	116212337	CCDS8378.1_cds_0_0_chr11_116211734_r	0	-	chr11	116211733	116212337	BC005380_cds_0_0_chr11_116211734_r	0	-
+chr11	1812377	1812407	CCDS7726.1_cds_0_0_chr11_1812378_f	0	+
+chr12	38440094	38440321	CCDS8736.1_cds_0_0_chr12_38440095_r	0	-	chr12	38440094	38440321	NM_052885_cds_0_0_chr12_38440095_r	0	-
+chr13	112381694	112381953	CCDS9526.1_cds_0_0_chr13_112381695_f	0	+	chr13	112381694	112381953	NM_207440_cds_1_0_chr13_112381695_f	0	+
+chr14	98710240	98712285	CCDS9949.1_cds_0_0_chr14_98710241_r	0	-	chr14	98710240	98712285	NM_022898_cds_0_0_chr14_98710241_r	0	-
+chr15	41486872	41487060	CCDS10096.1_cds_0_0_chr15_41486873_r	0	-	chr15	41486872	41487060	BX537418_cds_0_0_chr15_41486873_r	0	-
+chr15	41673708	41673857	CCDS10097.1_cds_0_0_chr15_41673709_f	0	+	chr15	41673708	41673857	AK223365_cds_0_0_chr15_41673709_f	0	+
+chr15	41679161	41679250	CCDS10098.1_cds_0_0_chr15_41679162_r	0	-	chr15	41679161	41679250	NM_153700_cds_0_0_chr15_41679162_r	0	-
+chr15	41826029	41826196	CCDS10101.1_cds_0_0_chr15_41826030_f	0	+
+chr16	142908	143003	CCDS10397.1_cds_0_0_chr16_142909_f	0	+	chr16	142908	143003	NM_005332_cds_0_0_chr16_142909_f	0	+
+chr16	179963	180135	CCDS10401.1_cds_0_0_chr16_179964_r	0	-
+chr16	244413	244681	CCDS10402.1_cds_0_0_chr16_244414_f	0	+	chr16	244413	244681	AK057165_cds_2_0_chr16_244414_f	0	+
+chr16	259268	259383	CCDS10403.1_cds_0_0_chr16_259269_r	0	-	chr16	259268	259383	AB016929_cds_0_0_chr16_259269_r	0	-
+chr18	23786114	23786321	CCDS11891.1_cds_0_0_chr18_23786115_r	0	-	chr18	23786114	23786321	NM_001792_cds_0_0_chr18_23786115_r	0	-
+chr18	59406881	59407046	CCDS11985.1_cds_0_0_chr18_59406882_f	0	+	chr18	59406881	59407046	NM_012397_cds_1_0_chr18_59406882_f	0	+
+chr18	59455932	59456337	CCDS11986.1_cds_0_0_chr18_59455933_r	0	-	chr18	59455932	59456337	AB046400_cds_0_0_chr18_59455933_r	0	-
+chr18	59600586	59600754	CCDS11988.1_cds_0_0_chr18_59600587_f	0	+
+chr19	59068595	59069564	CCDS12866.1_cds_0_0_chr19_59068596_f	0	+	chr19	59068595	59069564	BC013995_cds_1_0_chr19_59068596_f	0	+
+chr19	59236026	59236146	CCDS12872.1_cds_0_0_chr19_59236027_r	0	-	chr19	59236026	59236146	NM_198481_cds_0_0_chr19_59236027_r	0	-
+chr19	59297998	59298008	CCDS12877.1_cds_0_0_chr19_59297999_f	0	+	chr19	59297998	59298008	NM_004542_cds_0_0_chr19_59297999_f	0	+
+chr19	59302168	59302288	CCDS12878.1_cds_0_0_chr19_59302169_r	0	-
+chr2	118288583	118288668	CCDS2120.1_cds_0_0_chr2_118288584_f	0	+	chr2	118288583	118288668	NM_006773_cds_0_0_chr2_118288584_f	0	+
+chr2	118394148	118394202	CCDS2121.1_cds_0_0_chr2_118394149_r	0	-
+chr2	220190202	220190242	CCDS2441.1_cds_0_0_chr2_220190203_f	0	+
+chr2	220229609	220230869	CCDS2443.1_cds_0_0_chr2_220229610_r	0	-	chr2	220229609	220230869	NM_024536_cds_0_0_chr2_220229610_r	0	-
+chr20	33330413	33330423	CCDS13249.1_cds_0_0_chr20_33330414_r	0	-	chr20	33330413	33330423	NM_181466_cds_0_0_chr20_33330414_r	0	-
+chr20	33513606	33513792	CCDS13255.1_cds_0_0_chr20_33513607_f	0	+	chr20	33513606	33513792	AF022655_cds_1_0_chr20_33513607_f	0	+
+chr20	33579500	33579527	CCDS13256.1_cds_0_0_chr20_33579501_r	0	-
+chr20	33593260	33593348	CCDS13257.1_cds_0_0_chr20_33593261_f	0	+
+chr21	32707032	32707192	CCDS13614.1_cds_0_0_chr21_32707033_f	0	+
+chr21	32869641	32870022	CCDS13615.1_cds_0_0_chr21_32869642_r	0	-	chr21	32869641	32870022	NM_018277_cds_3_0_chr21_32869642_r	0	-
+chr21	33321040	33322012	CCDS13620.1_cds_0_0_chr21_33321041_f	0	+	chr21	33321040	33322012	NM_005806_cds_1_0_chr21_33321041_f	0	+
+chr21	33744994	33745040	CCDS13625.1_cds_0_0_chr21_33744995_r	0	-
+chr22	30120223	30120265	CCDS13897.1_cds_0_0_chr22_30120224_f	0	+	chr22	30120223	30120265	NM_004147_cds_0_0_chr22_30120224_f	0	+
+chr22	30160419	30160661	CCDS13898.1_cds_0_0_chr22_30160420_r	0	-	chr22	30160419	30160661	BC032941_cds_0_0_chr22_30160420_r	0	-
+chr22	30665273	30665360	CCDS13901.1_cds_0_0_chr22_30665274_f	0	+
+chr22	30939054	30939266	CCDS13903.1_cds_0_0_chr22_30939055_r	0	-
+chr5	131424298	131424460	CCDS4149.1_cds_0_0_chr5_131424299_f	0	+	chr5	131424298	131424460	NM_000588_cds_0_0_chr5_131424299_f	0	+
+chr5	131556601	131556672	CCDS4151.1_cds_0_0_chr5_131556602_r	0	-	chr5	131556601	131556672	BC035813_cds_0_0_chr5_131556602_r	0	-
+chr5	131621326	131621419	CCDS4152.1_cds_0_0_chr5_131621327_f	0	+	chr5	131621326	131621419	BC003096_cds_0_0_chr5_131621327_f	0	+
+chr5	131847541	131847666	CCDS4155.1_cds_0_0_chr5_131847542_r	0	-
+chr6	108299600	108299744	CCDS5061.1_cds_0_0_chr6_108299601_r	0	-	chr6	108299600	108299744	NM_007214_cds_0_0_chr6_108299601_r	0	-
+chr6	108594662	108594687	CCDS5063.1_cds_0_0_chr6_108594663_f	0	+	chr6	108594662	108594687	NM_003269_cds_0_0_chr6_108594663_f	0	+
+chr6	108640045	108640151	CCDS5064.1_cds_0_0_chr6_108640046_r	0	-	chr6	108640045	108640151	NM_003795_cds_0_0_chr6_108640046_r	0	-
+chr6	108722976	108723115	CCDS5067.1_cds_0_0_chr6_108722977_f	0	+	chr6	108722976	108723115	NM_145315_cds_0_0_chr6_108722977_f	0	+
+chr7	113660517	113660685	CCDS5760.1_cds_0_0_chr7_113660518_f	0	+	chr7	113660517	113660685	AF467257_cds_1_0_chr7_113660518_f	0	+
+chr7	116512159	116512389	CCDS5771.1_cds_0_0_chr7_116512160_r	0	-	chr7	116512159	116512389	NM_003391_cds_0_0_chr7_116512160_r	0	-
+chr7	116714099	116714152	CCDS5773.1_cds_0_0_chr7_116714100_f	0	+	chr7	116714099	116714152	NM_000492_cds_0_0_chr7_116714100_f	0	+
+chr7	116945541	116945787	CCDS5774.1_cds_0_0_chr7_116945542_r	0	-	chr7	116945541	116945787	AF377960_cds_0_0_chr7_116945542_r	0	-
+chr8	118881131	118881317	CCDS6324.1_cds_0_0_chr8_118881132_r	0	-	chr8	118881131	118881317	NM_000127_cds_0_0_chr8_118881132_r	0	-
+chr9	128764156	128764189	CCDS6914.1_cds_0_0_chr9_128764157_f	0	+	chr9	128764156	128764189	BC051300_cds_0_0_chr9_128764157_f	0	+
+chr9	128787519	128789136	CCDS6915.1_cds_0_0_chr9_128787520_r	0	-	chr9	128787519	128789136	NM_014908_cds_0_0_chr9_128787520_r	0	-
+chr9	128882427	128882523	CCDS6917.1_cds_0_0_chr9_128882428_f	0	+
+chr9	128937229	128937445	CCDS6919.1_cds_0_0_chr9_128937230_r	0	-
+chrX	122745047	122745924	CCDS14606.1_cds_0_0_chrX_122745048_f	0	+	chrX	122745047	122745924	NM_001167_cds_1_0_chrX_122745048_f	0	+
+chrX	152648964	152649196	CCDS14733.1_cds_0_0_chrX_152648965_r	0	-	chrX	152648964	152649196	NM_000425_cds_0_0_chrX_152648965_r	0	-
+chrX	152691446	152691471	CCDS14735.1_cds_0_0_chrX_152691447_f	0	+	chrX	152691446	152691471	AF101728_cds_0_0_chrX_152691447_f	0	+
+chrX	152694029	152694263	CCDS14736.1_cds_0_0_chrX_152694030_r	0	-	chrX	152694029	152694263	BC052303_cds_0_0_chrX_152694030_r	0	-
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/joiner_out3.bed	Thu Jun 12 10:33:20 2014 -0400
@@ -0,0 +1,65 @@
+chr1	147962192	147962580	CCDS989.1_cds_0_0_chr1_147962193_r	0	-	chr1	147962192	147962580	NM_005997_cds_0_0_chr1_147962193_r	0	-
+chr1	147984545	147984630	CCDS990.1_cds_0_0_chr1_147984546_f	0	+	chr1	147984545	147984630	BC007833_cds_0_0_chr1_147984546_f	0	+
+chr1	148078400	148078582	CCDS993.1_cds_0_0_chr1_148078401_r	0	-	chr1	148078400	148078582	AJ011123_cds_0_0_chr1_148078401_r	0	-
+chr1	148185136	148185276	CCDS996.1_cds_0_0_chr1_148185137_f	0	+	chr1	148185136	148185276	NM_002796_cds_0_0_chr1_148185137_f	0	+
+chr10	55251623	55253124	CCDS7248.1_cds_0_0_chr10_55251624_r	0	-	chr10	55251623	55253124	AY029205_cds_0_0_chr10_55251624_r	0	-
+chr11	116124407	116124501	CCDS8374.1_cds_0_0_chr11_116124408_r	0	-	chr11	116124407	116124501	AK057832_cds_0_0_chr11_116124408_r	0	-
+chr11	116206508	116206563	CCDS8377.1_cds_0_0_chr11_116206509_f	0	+	chr11	116206508	116206563	NM_000040_cds_1_0_chr11_116206509_f	0	+
+chr11	116211733	116212337	CCDS8378.1_cds_0_0_chr11_116211734_r	0	-	chr11	116211733	116212337	BC005380_cds_0_0_chr11_116211734_r	0	-
+chr11	1812377	1812407	CCDS7726.1_cds_0_0_chr11_1812378_f	0	+	~	~	~	~	~	~
+chr12	38440094	38440321	CCDS8736.1_cds_0_0_chr12_38440095_r	0	-	chr12	38440094	38440321	NM_052885_cds_0_0_chr12_38440095_r	0	-
+chr13	112381694	112381953	CCDS9526.1_cds_0_0_chr13_112381695_f	0	+	chr13	112381694	112381953	NM_207440_cds_1_0_chr13_112381695_f	0	+
+chr14	98710240	98712285	CCDS9949.1_cds_0_0_chr14_98710241_r	0	-	chr14	98710240	98712285	NM_022898_cds_0_0_chr14_98710241_r	0	-
+chr15	41486872	41487060	CCDS10096.1_cds_0_0_chr15_41486873_r	0	-	chr15	41486872	41487060	BX537418_cds_0_0_chr15_41486873_r	0	-
+chr15	41673708	41673857	CCDS10097.1_cds_0_0_chr15_41673709_f	0	+	chr15	41673708	41673857	AK223365_cds_0_0_chr15_41673709_f	0	+
+chr15	41679161	41679250	CCDS10098.1_cds_0_0_chr15_41679162_r	0	-	chr15	41679161	41679250	NM_153700_cds_0_0_chr15_41679162_r	0	-
+chr15	41826029	41826196	CCDS10101.1_cds_0_0_chr15_41826030_f	0	+	~	~	~	~	~	~
+chr16	142908	143003	CCDS10397.1_cds_0_0_chr16_142909_f	0	+	chr16	142908	143003	NM_005332_cds_0_0_chr16_142909_f	0	+
+chr16	179963	180135	CCDS10401.1_cds_0_0_chr16_179964_r	0	-	~	~	~	~	~	~
+chr16	244413	244681	CCDS10402.1_cds_0_0_chr16_244414_f	0	+	chr16	244413	244681	AK057165_cds_2_0_chr16_244414_f	0	+
+chr16	259268	259383	CCDS10403.1_cds_0_0_chr16_259269_r	0	-	chr16	259268	259383	AB016929_cds_0_0_chr16_259269_r	0	-
+chr18	23786114	23786321	CCDS11891.1_cds_0_0_chr18_23786115_r	0	-	chr18	23786114	23786321	NM_001792_cds_0_0_chr18_23786115_r	0	-
+chr18	59406881	59407046	CCDS11985.1_cds_0_0_chr18_59406882_f	0	+	chr18	59406881	59407046	NM_012397_cds_1_0_chr18_59406882_f	0	+
+chr18	59455932	59456337	CCDS11986.1_cds_0_0_chr18_59455933_r	0	-	chr18	59455932	59456337	AB046400_cds_0_0_chr18_59455933_r	0	-
+chr18	59600586	59600754	CCDS11988.1_cds_0_0_chr18_59600587_f	0	+	~	~	~	~	~	~
+chr19	59068595	59069564	CCDS12866.1_cds_0_0_chr19_59068596_f	0	+	chr19	59068595	59069564	BC013995_cds_1_0_chr19_59068596_f	0	+
+chr19	59236026	59236146	CCDS12872.1_cds_0_0_chr19_59236027_r	0	-	chr19	59236026	59236146	NM_198481_cds_0_0_chr19_59236027_r	0	-
+chr19	59297998	59298008	CCDS12877.1_cds_0_0_chr19_59297999_f	0	+	chr19	59297998	59298008	NM_004542_cds_0_0_chr19_59297999_f	0	+
+chr19	59302168	59302288	CCDS12878.1_cds_0_0_chr19_59302169_r	0	-	~	~	~	~	~	~
+chr2	118288583	118288668	CCDS2120.1_cds_0_0_chr2_118288584_f	0	+	chr2	118288583	118288668	NM_006773_cds_0_0_chr2_118288584_f	0	+
+chr2	118394148	118394202	CCDS2121.1_cds_0_0_chr2_118394149_r	0	-	~	~	~	~	~	~
+chr2	220190202	220190242	CCDS2441.1_cds_0_0_chr2_220190203_f	0	+	~	~	~	~	~	~
+chr2	220229609	220230869	CCDS2443.1_cds_0_0_chr2_220229610_r	0	-	chr2	220229609	220230869	NM_024536_cds_0_0_chr2_220229610_r	0	-
+chr20	33330413	33330423	CCDS13249.1_cds_0_0_chr20_33330414_r	0	-	chr20	33330413	33330423	NM_181466_cds_0_0_chr20_33330414_r	0	-
+chr20	33513606	33513792	CCDS13255.1_cds_0_0_chr20_33513607_f	0	+	chr20	33513606	33513792	AF022655_cds_1_0_chr20_33513607_f	0	+
+chr20	33579500	33579527	CCDS13256.1_cds_0_0_chr20_33579501_r	0	-	~	~	~	~	~	~
+chr20	33593260	33593348	CCDS13257.1_cds_0_0_chr20_33593261_f	0	+	~	~	~	~	~	~
+chr21	32707032	32707192	CCDS13614.1_cds_0_0_chr21_32707033_f	0	+	~	~	~	~	~	~
+chr21	32869641	32870022	CCDS13615.1_cds_0_0_chr21_32869642_r	0	-	chr21	32869641	32870022	NM_018277_cds_3_0_chr21_32869642_r	0	-
+chr21	33321040	33322012	CCDS13620.1_cds_0_0_chr21_33321041_f	0	+	chr21	33321040	33322012	NM_005806_cds_1_0_chr21_33321041_f	0	+
+chr21	33744994	33745040	CCDS13625.1_cds_0_0_chr21_33744995_r	0	-	~	~	~	~	~	~
+chr22	30120223	30120265	CCDS13897.1_cds_0_0_chr22_30120224_f	0	+	chr22	30120223	30120265	NM_004147_cds_0_0_chr22_30120224_f	0	+
+chr22	30160419	30160661	CCDS13898.1_cds_0_0_chr22_30160420_r	0	-	chr22	30160419	30160661	BC032941_cds_0_0_chr22_30160420_r	0	-
+chr22	30665273	30665360	CCDS13901.1_cds_0_0_chr22_30665274_f	0	+	~	~	~	~	~	~
+chr22	30939054	30939266	CCDS13903.1_cds_0_0_chr22_30939055_r	0	-	~	~	~	~	~	~
+chr5	131424298	131424460	CCDS4149.1_cds_0_0_chr5_131424299_f	0	+	chr5	131424298	131424460	NM_000588_cds_0_0_chr5_131424299_f	0	+
+chr5	131556601	131556672	CCDS4151.1_cds_0_0_chr5_131556602_r	0	-	chr5	131556601	131556672	BC035813_cds_0_0_chr5_131556602_r	0	-
+chr5	131621326	131621419	CCDS4152.1_cds_0_0_chr5_131621327_f	0	+	chr5	131621326	131621419	BC003096_cds_0_0_chr5_131621327_f	0	+
+chr5	131847541	131847666	CCDS4155.1_cds_0_0_chr5_131847542_r	0	-	~	~	~	~	~	~
+chr6	108299600	108299744	CCDS5061.1_cds_0_0_chr6_108299601_r	0	-	chr6	108299600	108299744	NM_007214_cds_0_0_chr6_108299601_r	0	-
+chr6	108594662	108594687	CCDS5063.1_cds_0_0_chr6_108594663_f	0	+	chr6	108594662	108594687	NM_003269_cds_0_0_chr6_108594663_f	0	+
+chr6	108640045	108640151	CCDS5064.1_cds_0_0_chr6_108640046_r	0	-	chr6	108640045	108640151	NM_003795_cds_0_0_chr6_108640046_r	0	-
+chr6	108722976	108723115	CCDS5067.1_cds_0_0_chr6_108722977_f	0	+	chr6	108722976	108723115	NM_145315_cds_0_0_chr6_108722977_f	0	+
+chr7	113660517	113660685	CCDS5760.1_cds_0_0_chr7_113660518_f	0	+	chr7	113660517	113660685	AF467257_cds_1_0_chr7_113660518_f	0	+
+chr7	116512159	116512389	CCDS5771.1_cds_0_0_chr7_116512160_r	0	-	chr7	116512159	116512389	NM_003391_cds_0_0_chr7_116512160_r	0	-
+chr7	116714099	116714152	CCDS5773.1_cds_0_0_chr7_116714100_f	0	+	chr7	116714099	116714152	NM_000492_cds_0_0_chr7_116714100_f	0	+
+chr7	116945541	116945787	CCDS5774.1_cds_0_0_chr7_116945542_r	0	-	chr7	116945541	116945787	AF377960_cds_0_0_chr7_116945542_r	0	-
+chr8	118881131	118881317	CCDS6324.1_cds_0_0_chr8_118881132_r	0	-	chr8	118881131	118881317	NM_000127_cds_0_0_chr8_118881132_r	0	-
+chr9	128764156	128764189	CCDS6914.1_cds_0_0_chr9_128764157_f	0	+	chr9	128764156	128764189	BC051300_cds_0_0_chr9_128764157_f	0	+
+chr9	128787519	128789136	CCDS6915.1_cds_0_0_chr9_128787520_r	0	-	chr9	128787519	128789136	NM_014908_cds_0_0_chr9_128787520_r	0	-
+chr9	128882427	128882523	CCDS6917.1_cds_0_0_chr9_128882428_f	0	+	~	~	~	~	~	~
+chr9	128937229	128937445	CCDS6919.1_cds_0_0_chr9_128937230_r	0	-	~	~	~	~	~	~
+chrX	122745047	122745924	CCDS14606.1_cds_0_0_chrX_122745048_f	0	+	chrX	122745047	122745924	NM_001167_cds_1_0_chrX_122745048_f	0	+
+chrX	152648964	152649196	CCDS14733.1_cds_0_0_chrX_152648965_r	0	-	chrX	152648964	152649196	NM_000425_cds_0_0_chrX_152648965_r	0	-
+chrX	152691446	152691471	CCDS14735.1_cds_0_0_chrX_152691447_f	0	+	chrX	152691446	152691471	AF101728_cds_0_0_chrX_152691447_f	0	+
+chrX	152694029	152694263	CCDS14736.1_cds_0_0_chrX_152694030_r	0	-	chrX	152694029	152694263	BC052303_cds_0_0_chrX_152694030_r	0	-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/joiner_out4.bed	Thu Jun 12 10:33:20 2014 -0400
@@ -0,0 +1,65 @@
+chr1	147962192	147962580	CCDS989.1_cds_0_0_chr1_147962193_r	0	-	chr1	147962192	147962580	NM_005997_cds_0_0_chr1_147962193_r	0	-
+chr1	147984545	147984630	CCDS990.1_cds_0_0_chr1_147984546_f	0	+	chr1	147984545	147984630	BC007833_cds_0_0_chr1_147984546_f	0	+
+chr1	148078400	148078582	CCDS993.1_cds_0_0_chr1_148078401_r	0	-	chr1	148078400	148078582	AJ011123_cds_0_0_chr1_148078401_r	0	-
+chr1	148185136	148185276	CCDS996.1_cds_0_0_chr1_148185137_f	0	+	chr1	148185136	148185276	NM_002796_cds_0_0_chr1_148185137_f	0	+
+chr10	55251623	55253124	CCDS7248.1_cds_0_0_chr10_55251624_r	0	-	chr10	55251623	55253124	AY029205_cds_0_0_chr10_55251624_r	0	-
+chr11	116124407	116124501	CCDS8374.1_cds_0_0_chr11_116124408_r	0	-	chr11	116124407	116124501	AK057832_cds_0_0_chr11_116124408_r	0	-
+chr11	116206508	116206563	CCDS8377.1_cds_0_0_chr11_116206509_f	0	+	chr11	116206508	116206563	NM_000040_cds_1_0_chr11_116206509_f	0	+
+chr11	116211733	116212337	CCDS8378.1_cds_0_0_chr11_116211734_r	0	-	chr11	116211733	116212337	BC005380_cds_0_0_chr11_116211734_r	0	-
+chr11	1812377	1812407	CCDS7726.1_cds_0_0_chr11_1812378_f	0	+	NoChrom					
+chr12	38440094	38440321	CCDS8736.1_cds_0_0_chr12_38440095_r	0	-	chr12	38440094	38440321	NM_052885_cds_0_0_chr12_38440095_r	0	-
+chr13	112381694	112381953	CCDS9526.1_cds_0_0_chr13_112381695_f	0	+	chr13	112381694	112381953	NM_207440_cds_1_0_chr13_112381695_f	0	+
+chr14	98710240	98712285	CCDS9949.1_cds_0_0_chr14_98710241_r	0	-	chr14	98710240	98712285	NM_022898_cds_0_0_chr14_98710241_r	0	-
+chr15	41486872	41487060	CCDS10096.1_cds_0_0_chr15_41486873_r	0	-	chr15	41486872	41487060	BX537418_cds_0_0_chr15_41486873_r	0	-
+chr15	41673708	41673857	CCDS10097.1_cds_0_0_chr15_41673709_f	0	+	chr15	41673708	41673857	AK223365_cds_0_0_chr15_41673709_f	0	+
+chr15	41679161	41679250	CCDS10098.1_cds_0_0_chr15_41679162_r	0	-	chr15	41679161	41679250	NM_153700_cds_0_0_chr15_41679162_r	0	-
+chr15	41826029	41826196	CCDS10101.1_cds_0_0_chr15_41826030_f	0	+	NoChrom					
+chr16	142908	143003	CCDS10397.1_cds_0_0_chr16_142909_f	0	+	chr16	142908	143003	NM_005332_cds_0_0_chr16_142909_f	0	+
+chr16	179963	180135	CCDS10401.1_cds_0_0_chr16_179964_r	0	-	NoChrom					
+chr16	244413	244681	CCDS10402.1_cds_0_0_chr16_244414_f	0	+	chr16	244413	244681	AK057165_cds_2_0_chr16_244414_f	0	+
+chr16	259268	259383	CCDS10403.1_cds_0_0_chr16_259269_r	0	-	chr16	259268	259383	AB016929_cds_0_0_chr16_259269_r	0	-
+chr18	23786114	23786321	CCDS11891.1_cds_0_0_chr18_23786115_r	0	-	chr18	23786114	23786321	NM_001792_cds_0_0_chr18_23786115_r	0	-
+chr18	59406881	59407046	CCDS11985.1_cds_0_0_chr18_59406882_f	0	+	chr18	59406881	59407046	NM_012397_cds_1_0_chr18_59406882_f	0	+
+chr18	59455932	59456337	CCDS11986.1_cds_0_0_chr18_59455933_r	0	-	chr18	59455932	59456337	AB046400_cds_0_0_chr18_59455933_r	0	-
+chr18	59600586	59600754	CCDS11988.1_cds_0_0_chr18_59600587_f	0	+	NoChrom					
+chr19	59068595	59069564	CCDS12866.1_cds_0_0_chr19_59068596_f	0	+	chr19	59068595	59069564	BC013995_cds_1_0_chr19_59068596_f	0	+
+chr19	59236026	59236146	CCDS12872.1_cds_0_0_chr19_59236027_r	0	-	chr19	59236026	59236146	NM_198481_cds_0_0_chr19_59236027_r	0	-
+chr19	59297998	59298008	CCDS12877.1_cds_0_0_chr19_59297999_f	0	+	chr19	59297998	59298008	NM_004542_cds_0_0_chr19_59297999_f	0	+
+chr19	59302168	59302288	CCDS12878.1_cds_0_0_chr19_59302169_r	0	-	NoChrom					
+chr2	118288583	118288668	CCDS2120.1_cds_0_0_chr2_118288584_f	0	+	chr2	118288583	118288668	NM_006773_cds_0_0_chr2_118288584_f	0	+
+chr2	118394148	118394202	CCDS2121.1_cds_0_0_chr2_118394149_r	0	-	NoChrom					
+chr2	220190202	220190242	CCDS2441.1_cds_0_0_chr2_220190203_f	0	+	NoChrom					
+chr2	220229609	220230869	CCDS2443.1_cds_0_0_chr2_220229610_r	0	-	chr2	220229609	220230869	NM_024536_cds_0_0_chr2_220229610_r	0	-
+chr20	33330413	33330423	CCDS13249.1_cds_0_0_chr20_33330414_r	0	-	chr20	33330413	33330423	NM_181466_cds_0_0_chr20_33330414_r	0	-
+chr20	33513606	33513792	CCDS13255.1_cds_0_0_chr20_33513607_f	0	+	chr20	33513606	33513792	AF022655_cds_1_0_chr20_33513607_f	0	+
+chr20	33579500	33579527	CCDS13256.1_cds_0_0_chr20_33579501_r	0	-	NoChrom					
+chr20	33593260	33593348	CCDS13257.1_cds_0_0_chr20_33593261_f	0	+	NoChrom					
+chr21	32707032	32707192	CCDS13614.1_cds_0_0_chr21_32707033_f	0	+	NoChrom					
+chr21	32869641	32870022	CCDS13615.1_cds_0_0_chr21_32869642_r	0	-	chr21	32869641	32870022	NM_018277_cds_3_0_chr21_32869642_r	0	-
+chr21	33321040	33322012	CCDS13620.1_cds_0_0_chr21_33321041_f	0	+	chr21	33321040	33322012	NM_005806_cds_1_0_chr21_33321041_f	0	+
+chr21	33744994	33745040	CCDS13625.1_cds_0_0_chr21_33744995_r	0	-	NoChrom					
+chr22	30120223	30120265	CCDS13897.1_cds_0_0_chr22_30120224_f	0	+	chr22	30120223	30120265	NM_004147_cds_0_0_chr22_30120224_f	0	+
+chr22	30160419	30160661	CCDS13898.1_cds_0_0_chr22_30160420_r	0	-	chr22	30160419	30160661	BC032941_cds_0_0_chr22_30160420_r	0	-
+chr22	30665273	30665360	CCDS13901.1_cds_0_0_chr22_30665274_f	0	+	NoChrom					
+chr22	30939054	30939266	CCDS13903.1_cds_0_0_chr22_30939055_r	0	-	NoChrom					
+chr5	131424298	131424460	CCDS4149.1_cds_0_0_chr5_131424299_f	0	+	chr5	131424298	131424460	NM_000588_cds_0_0_chr5_131424299_f	0	+
+chr5	131556601	131556672	CCDS4151.1_cds_0_0_chr5_131556602_r	0	-	chr5	131556601	131556672	BC035813_cds_0_0_chr5_131556602_r	0	-
+chr5	131621326	131621419	CCDS4152.1_cds_0_0_chr5_131621327_f	0	+	chr5	131621326	131621419	BC003096_cds_0_0_chr5_131621327_f	0	+
+chr5	131847541	131847666	CCDS4155.1_cds_0_0_chr5_131847542_r	0	-	NoChrom					
+chr6	108299600	108299744	CCDS5061.1_cds_0_0_chr6_108299601_r	0	-	chr6	108299600	108299744	NM_007214_cds_0_0_chr6_108299601_r	0	-
+chr6	108594662	108594687	CCDS5063.1_cds_0_0_chr6_108594663_f	0	+	chr6	108594662	108594687	NM_003269_cds_0_0_chr6_108594663_f	0	+
+chr6	108640045	108640151	CCDS5064.1_cds_0_0_chr6_108640046_r	0	-	chr6	108640045	108640151	NM_003795_cds_0_0_chr6_108640046_r	0	-
+chr6	108722976	108723115	CCDS5067.1_cds_0_0_chr6_108722977_f	0	+	chr6	108722976	108723115	NM_145315_cds_0_0_chr6_108722977_f	0	+
+chr7	113660517	113660685	CCDS5760.1_cds_0_0_chr7_113660518_f	0	+	chr7	113660517	113660685	AF467257_cds_1_0_chr7_113660518_f	0	+
+chr7	116512159	116512389	CCDS5771.1_cds_0_0_chr7_116512160_r	0	-	chr7	116512159	116512389	NM_003391_cds_0_0_chr7_116512160_r	0	-
+chr7	116714099	116714152	CCDS5773.1_cds_0_0_chr7_116714100_f	0	+	chr7	116714099	116714152	NM_000492_cds_0_0_chr7_116714100_f	0	+
+chr7	116945541	116945787	CCDS5774.1_cds_0_0_chr7_116945542_r	0	-	chr7	116945541	116945787	AF377960_cds_0_0_chr7_116945542_r	0	-
+chr8	118881131	118881317	CCDS6324.1_cds_0_0_chr8_118881132_r	0	-	chr8	118881131	118881317	NM_000127_cds_0_0_chr8_118881132_r	0	-
+chr9	128764156	128764189	CCDS6914.1_cds_0_0_chr9_128764157_f	0	+	chr9	128764156	128764189	BC051300_cds_0_0_chr9_128764157_f	0	+
+chr9	128787519	128789136	CCDS6915.1_cds_0_0_chr9_128787520_r	0	-	chr9	128787519	128789136	NM_014908_cds_0_0_chr9_128787520_r	0	-
+chr9	128882427	128882523	CCDS6917.1_cds_0_0_chr9_128882428_f	0	+	NoChrom					
+chr9	128937229	128937445	CCDS6919.1_cds_0_0_chr9_128937230_r	0	-	NoChrom					
+chrX	122745047	122745924	CCDS14606.1_cds_0_0_chrX_122745048_f	0	+	chrX	122745047	122745924	NM_001167_cds_1_0_chrX_122745048_f	0	+
+chrX	152648964	152649196	CCDS14733.1_cds_0_0_chrX_152648965_r	0	-	chrX	152648964	152649196	NM_000425_cds_0_0_chrX_152648965_r	0	-
+chrX	152691446	152691471	CCDS14735.1_cds_0_0_chrX_152691447_f	0	+	chrX	152691446	152691471	AF101728_cds_0_0_chrX_152691447_f	0	+
+chrX	152694029	152694263	CCDS14736.1_cds_0_0_chrX_152694030_r	0	-	chrX	152694029	152694263	BC052303_cds_0_0_chrX_152694030_r	0	-
--- a/tool_dependencies.xml	Wed Jul 24 09:15:52 2013 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!-- Generic repository_depencencies.xml file for misc sequence tools -->
-<repositories description="This requires Biopython as a dependency.">
-<!-- Leave out the tool shed and revision to get the current tool shed and latest revision at the time of upload -->
-<repository owner="biopython" name="package_biopython_1_61" />
-</repositories>
-