Mercurial > repos > iuc > extract_genomic_dna
changeset 0:8dd8e89c0603 draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/extract_genomic_dna commit b'67cff25a50ba173b0468819204d0999496f68ea9'
author | iuc |
---|---|
date | Tue, 19 Jan 2016 09:34:23 -0500 |
parents | |
children | 9af3f57e50b9 |
files | extract_genomic_dna.py extract_genomic_dna.xml extract_genomic_dna_utils.py test-data/1.bed test-data/cufflinks_out1.gtf test-data/droPer1.bed test-data/extract_genomic_dna_out1.fasta test-data/extract_genomic_dna_out2.fasta test-data/extract_genomic_dna_out3.interval test-data/extract_genomic_dna_out4.gff test-data/extract_genomic_dna_out5.fasta test-data/extract_genomic_dna_out6.fasta test-data/extract_genomic_dna_out7.fasta test-data/gff_filter_by_attribute_out1.gff test-data/tophat_in1.fasta tool_data_table_conf.xml.sample tool_dependencies.xml twobit.loc.sample |
diffstat | 18 files changed, 1128 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extract_genomic_dna.py Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,207 @@ +#!/usr/bin/env python +import argparse +import os + +import extract_genomic_dna_utils as egdu +import bx.seq.nib +import bx.seq.twobit +from bx.intervals.io import Header, Comment + + +parser = argparse.ArgumentParser() +parser.add_argument('--input_format', dest='input_format', help="Input dataset format") +parser.add_argument('--input', dest='input', help="Input dataset") +parser.add_argument('--genome', dest='genome', help="Input dataset genome build") +parser.add_argument('--interpret_features', dest='interpret_features', default=None, help="Interpret features if input format is gff") +parser.add_argument('--columns', dest='columns', help="Columns to use in input file") +parser.add_argument('--reference_genome_source', dest='reference_genome_source', help="Source of reference genome file") +parser.add_argument('--reference_genome', dest='reference_genome', help="Reference genome file") +parser.add_argument('--output_format', dest='output_format', help="Output format") +parser.add_argument('--output', dest='output', help="Output dataset") +args = parser.parse_args() + +input_is_gff = args.input_format == 'gff' +interpret_features = input_is_gff and args.interpret_features == "yes" +if len(args.columns.split(',')) == 5: + # Bed file. + chrom_col, start_col, end_col, strand_col, name_col = egdu.parse_cols_arg(args.columns) +else: + # Gff file. + chrom_col, start_col, end_col, strand_col = egdu.parse_cols_arg(args.columns) + name_col = False + +if args.reference_genome_source == "history": + seq_path = egdu.convert_to_twobit(args.reference_genome) +else: + seq_path = args.reference_genome +seq_dir = os.path.split(seq_path)[0] + +includes_strand_col = strand_col >= 0 +strand = None +nibs = {} +skipped_lines = 0 +first_invalid_line = 0 +invalid_lines = [] +warnings = [] +warning = '' +twobitfile = None +line_count = 1 +file_iterator = open(args.input) +if interpret_features: + file_iterator = egdu.GFFReaderWrapper(file_iterator, fix_strand=False) +out = open(args.output, 'wt') + +for feature in file_iterator: + # Ignore comments, headers. + if isinstance(feature, (Header, Comment)): + line_count += 1 + continue + name = "" + if interpret_features: + # Processing features. + egdu.convert_gff_coords_to_bed(feature) + chrom = feature.chrom + start = feature.start + end = feature.end + strand = feature.strand + else: + # Processing lines, either interval or GFF format. + line = feature.rstrip('\r\n') + if line and not line.startswith("#"): + fields = line.split('\t') + try: + chrom = fields[chrom_col] + start = int(fields[start_col]) + end = int(fields[end_col]) + if name_col: + name = fields[name_col] + if input_is_gff: + start, end = egdu.convert_gff_coords_to_bed([start, end]) + if includes_strand_col: + strand = fields[strand_col] + except: + warning = "Invalid chrom, start or end column values. " + warnings.append(warning) + if not invalid_lines: + invalid_lines = egdu.get_lines(feature) + first_invalid_line = line_count + skipped_lines += len(invalid_lines) + continue + if start > end: + warning = "Invalid interval, start '%d' > end '%d'. " % (start, end) + warnings.append(warning) + if not invalid_lines: + invalid_lines = egdu.get_lines(feature) + first_invalid_line = line_count + skipped_lines += len(invalid_lines) + continue + if strand not in ['+', '-']: + strand = '+' + sequence = '' + else: + continue + # Open sequence file and get sequence for feature/interval. + if os.path.exists("%s/%s.nib" % (seq_dir, chrom)): + if chrom in nibs: + nib = nibs[chrom] + else: + nibs[chrom] = nib = bx.seq.nib.NibFile(open("%s/%s.nib" % (seq_path, chrom))) + try: + sequence = nib.get(start, end - start) + except Exception, e: + warning = "Unable to fetch the sequence from '%d' to '%d' for build '%s'. " % (start, end - start, args.genome) + warnings.append(warning) + if not invalid_lines: + invalid_lines = egdu.get_lines(feature) + first_invalid_line = line_count + skipped_lines += len(invalid_lines) + continue + elif os.path.isfile(seq_path): + if not(twobitfile): + twobitfile = bx.seq.twobit.TwoBitFile(open(seq_path)) + try: + if interpret_features: + # Create sequence from intervals within a feature. + sequence = '' + for interval in feature.intervals: + sequence += twobitfile[interval.chrom][interval.start:interval.end] + else: + sequence = twobitfile[chrom][start:end] + except: + warning = "Unable to fetch the sequence from '%d' to '%d' for chrom '%s'. " % (start, end - start, chrom) + warnings.append(warning) + if not invalid_lines: + invalid_lines = egdu.get_lines(feature) + first_invalid_line = line_count + skipped_lines += len(invalid_lines) + continue + else: + warning = "Chromosome by name '%s' was not found for build '%s'. " % (chrom, args.genome) + warnings.append(warning) + if not invalid_lines: + invalid_lines = egdu.get_lines(feature) + first_invalid_line = line_count + skipped_lines += len(invalid_lines) + continue + if sequence == '': + warning = "Chrom: '%s', start: '%d', end: '%d' is either invalid or not present in build '%s'. " % (chrom, start, end, args.genome) + warnings.append(warning) + if not invalid_lines: + invalid_lines = egdu.get_lines(feature) + first_invalid_line = line_count + skipped_lines += len(invalid_lines) + continue + if includes_strand_col and strand == "-": + sequence = egdu.reverse_complement(sequence) + if args.output_format == "fasta": + l = len(sequence) + c = 0 + if input_is_gff: + start, end = egdu.convert_bed_coords_to_gff([start, end]) + fields = [args.genome, str(chrom), str(start), str(end), strand] + meta_data = "_".join(fields) + if name.strip(): + out.write(">%s %s\n" % (meta_data, name)) + else: + out.write(">%s\n" % meta_data) + while c < l: + b = min(c + 50, l) + out.write("%s\n" % str(sequence[c:b])) + c = b + else: + # output_format == "interval". + if interpret_features: + meta_data = "\t".join([feature.chrom, + "galaxy_extract_genomic_dna", + "interval", + str(feature.start), + str(feature.end), + feature.score, + feature.strand, + ".", + egdu.gff_attributes_to_str(feature.attributes, "GTF")]) + else: + # Where is fields being set here? + meta_data = "\t".join(fields) + if input_is_gff: + format_str = "%s seq \"%s\";\n" + else: + format_str = "%s\t%s\n" + out.write(format_str % (meta_data, str(sequence))) + # Update line count. + if isinstance(feature, egdu.GFFFeature): + line_count += len(feature.intervals) + else: + line_count += 1 +out.close() + +if warnings: + warn_msg = "%d warnings, 1st is: " % len(warnings) + warn_msg += warnings[0] + print warn_msg +if skipped_lines: + # Error message includes up to the first 10 skipped lines. + print 'Skipped %d invalid lines, 1st is #%d, "%s"' % (skipped_lines, first_invalid_line, '\n'.join(invalid_lines[:10])) + +if args.reference_genome_source == "history": + os.remove(seq_path)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extract_genomic_dna.xml Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,202 @@ +<tool id="Extract genomic DNA 1" name="Extract Genomic DNA" version="3.0.0"> + <description>using coordinates from assembled/unassembled genomes</description> + <requirements> + <requirement type="package" version="0.7.1">bx-python</requirement> + <requirement type="package" version="35x1">faToTwoBit</requirement> + </requirements> + <command> + <![CDATA[ + #set genome = $input.metadata.dbkey + #set datatype = $input.datatype + mkdir -p output_dir && + python $__tool_directory__/extract_genomic_dna.py + --input "$input" + --genome "$genome" + #if $input.is_of_type("gff"): + --input_format "gff" + --columns "1,4,5,7" + --interpret_features $interpret_features + #else: + --input_format "interval" + --columns "${input.metadata.chromCol},${input.metadata.startCol},${input.metadata.endCol},${input.metadata.strandCol},${input.metadata.nameCol}" + #end if + --reference_genome_source $reference_genome_cond.reference_genome_source + #if str($reference_genome_cond.reference_genome_source) == "cached" + --reference_genome $reference_genome_cond.reference_genome.fields.path + #else: + --reference_genome $reference_genome_cond.reference_genome + #end if + --output_format $output_format + --output $output + ]]> + </command> + <inputs> + <param name="input" type="data" format="gff,interval" label="Fetch sequences for intervals in"> + <validator type="unspecified_build" /> + </param> + <param name="interpret_features" type="select" label="Interpret features when possible" help="Applicable only when input dataset format is in the gff family"> + <option value="yes">Yes</option> + <option value="no">No</option> + </param> + <conditional name="reference_genome_cond"> + <param name="reference_genome_source" type="select" label="Choose the source for the reference genome"> + <option value="cached">locally cached</option> + <option value="history">from history</option> + </param> + <when value="cached"> + <param name="reference_genome" type="select" label="Using reference genome"> + <options from_data_table="twobit"> + <filter type="data_meta" key="dbkey" ref="input" column="0"/> + </options> + <validator type="no_options" message="A built-in reference genome is not available for the build associated with the selected input file"/> + </param> + </when> + <when value="history"> + <param name="reference_genome" type="data" format="fasta" label="Using reference genome"> + <options> + <filter type="data_meta" key="dbkey" ref="input"/> + </options> + <validator type="no_options" message="The current history does not include a fasta dataset with the build associated with the selected input file"/> + </param> + </when> + </conditional> + <param name="output_format" type="select" label="Select output format"> + <option value="fasta" selected="True">fasta</option> + <option value="interval">interval</option> + </param> + </inputs> + <outputs> + <data name="output" format="gff"> + <change_format> + <when output_format="interval" format="interval" /> + </change_format> + </data> + </outputs> + <tests> + <test> + <param name="input" value="1.bed" dbkey="hg17" ftype="bed" /> + <param name="interpret_features" value="yes"/> + <param name="index_source" value="cached"/> + <param name="out_format" value="fasta"/> + <output name="out_file1" file="extract_genomic_dna_out1.fasta" compare="contains" /> + </test> + <test> + <param name="input" value="droPer1.bed" dbkey="droPer1" ftype="bed" /> + <param name="interpret_features" value="yes"/> + <param name="index_source" value="cached"/> + <param name="out_format" value="fasta"/> + <output name="out_file1" file="extract_genomic_dna_out2.fasta" compare="contains" /> + </test> + <test> + <param name="input" value="1.bed" dbkey="hg17" ftype="bed" /> + <param name="interpret_features" value="yes"/> + <param name="index_source" value="cached"/> + <param name="out_format" value="interval"/> + <output name="out_file1" file="extract_genomic_dna_out3.interval" compare="contains" /> + </test> + <!-- Test GFF file support. --> + <test> + <param name="input" value="gff_filter_by_attribute_out1.gff" dbkey="mm9" ftype="gff" /> + <param name="interpret_features" value="no"/> + <param name="index_source" value="cached"/> + <param name="out_format" value="interval"/> + <output name="out_file1" file="extract_genomic_dna_out4.gff" compare="contains" /> + </test> + <test> + <param name="input" value="gff_filter_by_attribute_out1.gff" dbkey="mm9" ftype="gff" /> + <param name="interpret_features" value="no"/> + <param name="out_format" value="fasta"/> + <param name="index_source" value="cached"/> + <output name="out_file1" file="extract_genomic_dna_out5.fasta" compare="contains" /> + </test> + <!-- Test custom sequences support and GFF feature interpretation. --> + <test> + <param name="input" value="cufflinks_out1.gtf" dbkey="mm9" ftype="gff" /> + <param name="interpret_features" value="no"/> + <param name="index_source" value="history"/> + <param name="ref_file" value="tophat_in1.fasta"/> + <param name="out_format" value="fasta"/> + <output name="out_file1" file="extract_genomic_dna_out6.fasta" compare="contains" /> + </test> + <test> + <param name="input" value="cufflinks_out1.gtf" dbkey="mm9" ftype="gff" /> + <param name="interpret_features" value="yes"/> + <param name="index_source" value="history"/> + <param name="ref_file" value="tophat_in1.fasta"/> + <param name="out_format" value="fasta"/> + <output name="out_file1" file="extract_genomic_dna_out7.fasta" compare="contains" /> + </test> + </tests> + <help> + +.. class:: warningmark + +This tool requires interval or gff (special tabular formatted data). If your data is not TAB delimited, first use *Text Manipulation->Convert*. + +.. class:: warningmark + +Make sure that the genome build is specified for the dataset from which you are extracting sequences (click the pencil icon in the history item if it is not specified). + +.. class:: warningmark + +All of the following will cause a line from the input dataset to be skipped and a warning generated. The number of warnings and skipped lines is documented in the resulting history item. + - Any lines that do not contain at least 3 columns, a chromosome and numerical start and end coordinates. + - Sequences that fall outside of the range of a line's start and end coordinates. + - Chromosome, start or end coordinates that are invalid for the specified build. + - Any lines whose data columns are not separated by a **TAB** character ( other white-space characters are invalid ). + +.. class:: infomark + + **Extract genomic DNA using coordinates from ASSEMBLED genomes and UNassembled genomes** previously were achieved by two separate tools. + +----- + +**What it does** + +This tool uses coordinate, strand, and build information to fetch genomic DNAs in FASTA or interval format. + +If strand is not defined, the default value is "+". + +----- + +**Example** + +If the input dataset is:: + + chr7 127475281 127475310 NM_000230 0 + + chr7 127485994 127486166 NM_000230 0 + + chr7 127486011 127486166 D49487 0 + + +Extracting sequences with **FASTA** output data type returns:: + + >hg17_chr7_127475281_127475310_+ NM_000230 + GTAGGAATCGCAGCGCCAGCGGTTGCAAG + >hg17_chr7_127485994_127486166_+ NM_000230 + GCCCAAGAAGCCCATCCTGGGAAGGAAAATGCATTGGGGAACCCTGTGCG + GATTCTTGTGGCTTTGGCCCTATCTTTTCTATGTCCAAGCTGTGCCCATC + CAAAAAGTCCAAGATGACACCAAAACCCTCATCAAGACAATTGTCACCAG + GATCAATGACATTTCACACACG + >hg17_chr7_127486011_127486166_+ D49487 + TGGGAAGGAAAATGCATTGGGGAACCCTGTGCGGATTCTTGTGGCTTTGG + CCCTATCTTTTCTATGTCCAAGCTGTGCCCATCCAAAAAGTCCAAGATGA + CACCAAAACCCTCATCAAGACAATTGTCACCAGGATCAATGACATTTCAC + ACACG + +Extracting sequences with **Interval** output data type returns:: + + chr7 127475281 127475310 NM_000230 0 + GTAGGAATCGCAGCGCCAGCGGTTGCAAG + chr7 127485994 127486166 NM_000230 0 + GCCCAAGAAGCCCATCCTGGGAAGGAAAATGCATTGGGGAACCCTGTGCGGATTCTTGTGGCTTTGGCCCTATCTTTTCTATGTCCAAGCTGTGCCCATCCAAAAAGTCCAAGATGACACCAAAACCCTCATCAAGACAATTGTCACCAGGATCAATGACATTTCACACACG + chr7 127486011 127486166 D49487 0 + TGGGAAGGAAAATGCATTGGGGAACCCTGTGCGGATTCTTGTGGCTTTGGCCCTATCTTTTCTATGTCCAAGCTGTGCCCATCCAAAAAGTCCAAGATGACACCAAAACCCTCATCAAGACAATTGTCACCAGGATCAATGACATTTCACACACG + + </help> + <citations> + <citation type="bibtex"> + @unpublished{None, + author = {Guru Ananda,Greg Von Kuster}, + title = {None}, + year = {None}, + eprint = {None}, + url = {http://www.bx.psu.edu/~anton/labSite/} + }</citation> + </citations> +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extract_genomic_dna_utils.py Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,391 @@ +import copy +import os +import subprocess +import sys +import tempfile + +from bx.intervals.io import Comment, Header, GenomicInterval +from bx.intervals.io import GenomicIntervalReader, NiceReaderWrapper, ParseError + +# Default chrom, start, end, strand cols for a bed file +BED_DEFAULT_COLS = 0, 1, 2, 5 + + +class GFFInterval(GenomicInterval): + """ + A GFF interval, including attributes. If file is strictly a GFF file, + only attribute is 'group.' + """ + + def __init__(self, reader, fields, chrom_col=0, feature_col=2, start_col=3, end_col=4, + strand_col=6, score_col=5, default_strand='.', fix_strand=False): + # GFF format allows '.' for strand but GenomicInterval does not. To get around this, + # temporarily set strand and then unset after initing GenomicInterval. + unknown_strand = False + if not fix_strand and fields[strand_col] == '.': + unknown_strand = True + fields[strand_col] = '+' + GenomicInterval.__init__(self, reader, fields, chrom_col, start_col, end_col, + strand_col, default_strand, fix_strand=fix_strand) + if unknown_strand: + self.strand = '.' + self.fields[strand_col] = '.' + # Handle feature, score column. + self.feature_col = feature_col + if self.feature_col >= self.nfields: + stop_err("No field for feature_col (%d)" % feature_col) + self.feature = self.fields[self.feature_col] + self.score_col = score_col + if self.score_col >= self.nfields: + stop_err("No field for score_col (%d)" % score_col) + self.score = self.fields[self.score_col] + # GFF attributes. + self.attributes = parse_gff_attributes(fields[8]) + + def copy(self): + return GFFInterval(self.reader, list(self.fields), self.chrom_col, self.feature_col, + self.start_col, self.end_col, self.strand_col, self.score_col, self.strand) + + +class GFFFeature(GFFInterval): + """ + A GFF feature, which can include multiple intervals. + """ + + def __init__(self, reader, chrom_col=0, feature_col=2, start_col=3, end_col=4, strand_col=6, + score_col=5, default_strand='.', fix_strand=False, intervals=[], raw_size=0): + # Use copy so that first interval and feature do not share fields. + GFFInterval.__init__(self, reader, copy.deepcopy(intervals[0].fields), chrom_col, feature_col, + start_col, end_col, strand_col, score_col, default_strand, fix_strand=fix_strand) + self.intervals = intervals + self.raw_size = raw_size + # Use intervals to set feature attributes. + for interval in self.intervals: + # Error checking. NOTE: intervals need not share the same strand. + if interval.chrom != self.chrom: + stop_err("interval chrom does not match self chrom: %s != %s" % (interval.chrom, self.chrom)) + # Set start, end of interval. + if interval.start < self.start: + self.start = interval.start + if interval.end > self.end: + self.end = interval.end + + def name(self): + """ + Returns feature's name. + """ + name = None + # Preference for name: + # GTF: 'gene_id', 'transcript_id' + # GFF3: 'ID', 'id' + # GFF: 'group' + for attr_name in ['gene_id', 'transcript_id', 'ID', 'id', 'group']: + name = self.attributes.get(attr_name, None) + if name is not None: + break + return name + + def copy(self): + intervals_copy = [] + for interval in self.intervals: + intervals_copy.append(interval.copy()) + return GFFFeature(self.reader, self.chrom_col, self.feature_col, self.start_col, self.end_col, + self.strand_col, self.score_col, self.strand, intervals=intervals_copy) + + def lines(self): + lines = [] + for interval in self.intervals: + lines.append('\t'.join(interval.fields)) + return lines + + +class GFFReaderWrapper(NiceReaderWrapper): + """ + Reader wrapper for GFF files which has two major functions: + 1. group entries for GFF file (via group column), GFF3 (via id attribute), + or GTF (via gene_id/transcript id); + 2. convert coordinates from GFF format--starting and ending coordinates + are 1-based, closed--to the 'traditional'/BED interval format--0 based, + half-open. This is useful when using GFF files as inputs to tools that + expect traditional interval format. + """ + + def __init__(self, reader, chrom_col=0, feature_col=2, start_col=3, end_col=4, strand_col=6, + score_col=5, fix_strand=False, convert_to_bed_coord=False, **kwargs): + NiceReaderWrapper.__init__(self, reader, chrom_col=chrom_col, start_col=start_col, end_col=end_col, + strand_col=strand_col, fix_strand=fix_strand, **kwargs) + self.feature_col = feature_col + self.score_col = score_col + self.convert_to_bed_coord = convert_to_bed_coord + self.last_line = None + self.cur_offset = 0 + self.seed_interval = None + self.seed_interval_line_len = 0 + + def parse_row(self, line): + interval = GFFInterval(self, line.split("\t"), self.chrom_col, self.feature_col, self.start_col, + self.end_col, self.strand_col, self.score_col, self.default_strand, + fix_strand=self.fix_strand) + return interval + + def next(self): + """ + Returns next GFFFeature. + """ + + def handle_parse_error(parse_error): + """ + Actions to take when ParseError found. + """ + if self.outstream: + if self.print_delegate and hasattr(self.print_delegate, "__call__"): + self.print_delegate(self.outstream, e, self) + self.skipped += 1 + # No reason to stuff an entire bad file into memory. + if self.skipped < 10: + self.skipped_lines.append((self.linenum, self.current_line, str(e))) + # Get next GFFFeature + raw_size = self.seed_interval_line_len + # If there is no seed interval, set one. Also, if there are no more + # intervals to read, this is where iterator dies. + if not self.seed_interval: + while not self.seed_interval: + try: + self.seed_interval = GenomicIntervalReader.next(self) + except ParseError as e: + handle_parse_error(e) + finally: + raw_size += len(self.current_line) + # If header or comment, clear seed interval and return it with its size. + if isinstance(self.seed_interval, (Header, Comment)): + return_val = self.seed_interval + return_val.raw_size = len(self.current_line) + self.seed_interval = None + self.seed_interval_line_len = 0 + return return_val + # Initialize feature identifier from seed. + # For GFF. + feature_group = self.seed_interval.attributes.get('group', None) + # For GFF3 + feature_id = self.seed_interval.attributes.get('ID', None) + # For GTF. + feature_transcript_id = self.seed_interval.attributes.get('transcript_id', None) + # Read all intervals associated with seed. + feature_intervals = [] + feature_intervals.append(self.seed_interval) + while True: + try: + interval = GenomicIntervalReader.next(self) + raw_size += len(self.current_line) + except StopIteration as e: + # No more intervals to read, but last feature needs to be + # returned. + interval = None + raw_size += len(self.current_line) + break + except ParseError as e: + handle_parse_error(e) + raw_size += len(self.current_line) + continue + # Ignore comments. + if isinstance(interval, Comment): + continue + # Determine if interval is part of feature. + part_of = False + group = interval.attributes.get('group', None) + # GFF test: + if group and feature_group == group: + part_of = True + # GFF3 test: + parent_id = interval.attributes.get('Parent', None) + cur_id = interval.attributes.get('ID', None) + if (cur_id and cur_id == feature_id) or (parent_id and parent_id == feature_id): + part_of = True + # GTF test: + transcript_id = interval.attributes.get('transcript_id', None) + if transcript_id and transcript_id == feature_transcript_id: + part_of = True + # If interval is not part of feature, clean up and break. + if not part_of: + # Adjust raw size because current line is not part of feature. + raw_size -= len(self.current_line) + break + # Interval associated with feature. + feature_intervals.append(interval) + # Last interval read is the seed for the next interval. + self.seed_interval = interval + self.seed_interval_line_len = len(self.current_line) + # Return feature. + feature = GFFFeature(self, self.chrom_col, self.feature_col, self.start_col, + self.end_col, self.strand_col, self.score_col, + self.default_strand, fix_strand=self.fix_strand, + intervals=feature_intervals, raw_size=raw_size) + # Convert to BED coords? + if self.convert_to_bed_coord: + convert_gff_coords_to_bed(feature) + return feature + + +def convert_bed_coords_to_gff(interval): + """ + Converts an interval object's coordinates from BED format to GFF format. + Accepted object types include GenomicInterval and list (where the first + element in the list is the interval's start, and the second element is + the interval's end). + """ + if isinstance(interval, GenomicInterval): + interval.start += 1 + if isinstance(interval, GFFFeature): + for subinterval in interval.intervals: + convert_bed_coords_to_gff(subinterval) + elif isinstance(interval, list): + interval[0] += 1 + return interval + + +def convert_gff_coords_to_bed(interval): + """ + Converts an interval object's coordinates from GFF format to BED format. + Accepted object types include GFFFeature, GenomicInterval, and list (where + the first element in the list is the interval's start, and the second + element is the interval's end). + """ + if isinstance(interval, GenomicInterval): + interval.start -= 1 + if isinstance(interval, GFFFeature): + for subinterval in interval.intervals: + convert_gff_coords_to_bed(subinterval) + elif isinstance(interval, list): + interval[0] -= 1 + return interval + + +def convert_to_twobit(reference_genome): + """ + Create 2bit file history fasta dataset. + """ + try: + seq_path = tempfile.NamedTemporaryFile(dir=".").name + cmd = "faToTwoBit %s %s" % (reference_genome, seq_path) + tmp_name = tempfile.NamedTemporaryFile(dir=".").name + tmp_stderr = open(tmp_name, 'wb') + proc = subprocess.Popen(args=cmd, shell=True, stderr=tmp_stderr.fileno()) + returncode = proc.wait() + tmp_stderr.close() + if returncode != 0: + # Get stderr, allowing for case where it's very large. + tmp_stderr = open(tmp_name, 'rb') + stderr = '' + buffsize = 1048576 + try: + while True: + stderr += tmp_stderr.read(buffsize) + if not stderr or len(stderr) % buffsize != 0: + break + except OverflowError: + pass + tmp_stderr.close() + os.remove(tmp_name) + stop_err(stderr) + return seq_path + except Exception, e: + stop_err('Error running faToTwoBit. ' + str(e)) + + +def get_lines(feature): + # Get feature's line(s). + if isinstance(feature, GFFFeature): + return feature.lines() + else: + return [feature.rstrip('\r\n')] + + +def gff_attributes_to_str(attrs, gff_format): + """ + Convert GFF attributes to string. Supported formats are GFF3, GTF. + """ + if gff_format == 'GTF': + format_string = '%s "%s"' + # Convert group (GFF) and ID, parent (GFF3) attributes to + # transcript_id, gene_id. + id_attr = None + if 'group' in attrs: + id_attr = 'group' + elif 'ID' in attrs: + id_attr = 'ID' + elif 'Parent' in attrs: + id_attr = 'Parent' + if id_attr: + attrs['transcript_id'] = attrs['gene_id'] = attrs[id_attr] + elif gff_format == 'GFF3': + format_string = '%s=%s' + attrs_strs = [] + for name, value in attrs.items(): + attrs_strs.append(format_string % (name, value)) + return " ; ".join(attrs_strs) + + +def parse_cols_arg(cols): + """ + Parse a columns command line argument into a four-tuple. + """ + if cols: + # Handle case where no strand column included - in this case, cols + # looks something like 1,2,3, + if cols.endswith(','): + cols += '0' + col_list = map(lambda x: int(x) - 1, cols.split(",")) + return col_list + else: + return BED_DEFAULT_COLS + + +def parse_gff_attributes(attr_str): + """ + Parses a GFF/GTF attribute string and returns a dictionary of name-value + pairs. The general format for a GFF3 attributes string is + name1=value1;name2=value2 + The general format for a GTF attribute string is + name1 "value1" ; name2 "value2" + The general format for a GFF attribute string is a single string that + denotes the interval's group; in this case, method returns a dictionary + with a single key-value pair, and key name is 'group'. + """ + attributes_list = attr_str.split(";") + attributes = {} + for name_value_pair in attributes_list: + # Try splitting by '=' (GFF3) first because spaces are allowed in GFF3 + # attribute; next, try double quotes for GTF. + pair = name_value_pair.strip().split("=") + if len(pair) == 1: + pair = name_value_pair.strip().split("\"") + if len(pair) == 1: + # Could not split for some reason. + continue + if pair == '': + continue + name = pair[0].strip() + if name == '': + continue + # Need to strip double quote from values + value = pair[1].strip(" \"") + attributes[name] = value + if len(attributes) == 0: + # Could not split attributes string, so entire string must be + # 'group' attribute. This is the case for strictly GFF files. + attributes['group'] = attr_str + return attributes + + +def reverse_complement(s): + complement_dna = {"A": "T", "T": "A", "C": "G", "G": "C", "a": "t", "t": "a", "c": "g", "g": "c", "N": "N", "n": "n"} + reversed_s = [] + for i in s: + reversed_s.append(complement_dna[i]) + reversed_s.reverse() + return "".join(reversed_s) + + +def stop_err(msg): + sys.stderr.write(msg) + sys.exit(1)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/1.bed Tue Jan 19 09:34:23 2016 -0500 @@ -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/cufflinks_out1.gtf Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,4 @@ +test_chromosome Cufflinks transcript 53 550 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; FPKM "10679134.4063403048"; frac "1.000000"; conf_lo "8543307.525072"; conf_hi "12814961.287608"; cov "145.770185"; +test_chromosome Cufflinks exon 53 250 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; exon_number "1"; FPKM "10679134.4063403048"; frac "1.000000"; conf_lo "8543307.525072"; conf_hi "12814961.287608"; cov "145.770185"; +test_chromosome Cufflinks exon 351 400 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; exon_number "2"; FPKM "10679134.4063403048"; frac "1.000000"; conf_lo "8543307.525072"; conf_hi "12814961.287608"; cov "145.770185"; +test_chromosome Cufflinks exon 501 550 1000 + . gene_id "CUFF.1"; transcript_id "CUFF.1.1"; exon_number "3"; FPKM "10679134.4063403048"; frac "1.000000"; conf_lo "8543307.525072"; conf_hi "12814961.287608"; cov "145.770185";
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/droPer1.bed Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,2 @@ +super_1 139823 139913 AK028861 0 - 139823 139913 0 1 90, 0, +super_1 156750 156844 BC126698 0 - 156750 156844 0 1 94, 0,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/extract_genomic_dna_out1.fasta Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,88 @@ +>hg17_chr1_147962192_147962580_- +ACTTGATCCTGCTCCCTCGGTGTCTGCATTGACTCCTCATGCTGGGACTG +GACCCGTCAACCCCCCTGCTCGCTGCTCACGTACCTTCATCACTTTTAGT +GATGATGCAACTTTCGAGGAATGGTTCCCCCAAGGGCGGCCCCCAAAAGT +CCCTGTTCGTGAGGTCTGTCCAGTGACCCATCGTCCAGCCCTATACCGGG +ACCCTGTTACAGACATACCCTATGCCACTGCTCGAGCCTTCAAGATCATT +CGTGAGGCTTACAAGAAGTACATTACTGCCCATGGACTGCCGCCCACTGC +CTCAGCCCTGGGCCCCGGCCCGCCACCTCCTGAGCCCCTCCCTGGCTCTG +GGCCCCGAGCCTTGCGCCAGAAAATTGTCATTAAATGA +>hg17_chr1_147984545_147984630_+ +ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTT +TGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG +>hg17_chr1_148078400_148078582_- +GTTCTCAGCTTCCTTGCTTCCATGGCTCCAGCACCATTCGAAACCTCAAA +GAGAGGTTCCACATGAGCATGACTGAGGAGCAGCTGCAGCTGCTGGTGGA +GCAGATGGTGGATGGCAGTATGCGGTCTATCACCACCAAACTCTATGACG +GCTTCCAGTACCTCACCAACGGCATCATGTGA +>hg17_chr1_148185136_148185276_+ +ATGGAAGCGTTTTTGGGGTCGCGGTCCGGACTTTGGGCGGGGGGTCCGGC +CCCAGGACAGTTTTACCGCATTCCGTCCACTCCCGATTCCTTCATGGATC +CGGCGTCTGCACTTTACAGAGGTCCAATCACGCGGACCCA +>hg17_chr10_55251623_55253124_- +TCTTTTCCTTCTCTACCATTTTCAACAAAGCAGGGGAAATAACTCAGTCT +CAGAAGACAGGAAACATCAACAAGTTGTGATGCCCTTTTCTTCCAATACT +ATTGAGGCTCACAAGTCAGCTCATGTAGACGGATCACTTAAGAGCAACAA +ACTGAAGTCTGCAAGAAAATTCACATTTCTATCTGATGAGGATGACTTAA +GTGCCCATAATCCCCTTTATAAGGAAAACATAAGTCAAGTATCAACAAAT +TCAGACATTTCACAGAGAACAGATTTTGTAGACCCATTTTCACCCAAAAT +ACAAGCCAAGAGTAAGTCTCTGAGGGGCCCAAGAGAAAAGATTCAGAGGC +TGTGGAGTCAGTCAGTCAGCTTACCCAGGAGGCTGATGAGGAAAGTTCCA +AATAGACCAGAGATCATAGATCTGCAGCAGTGGCAAGGCACCAGGCAGAA +AGCTGAAAATGAAAACACTGGAATCTGTACAAACAAAAGAGGTAGCAGCA +ATCCATTGCTTACAACTGAAGAGGCAAATTTGACAGAGAAAGAGGAAATA +AGGCAAGGTGAAACACTGATGATAGAAGGAACAGAACAGTTGAAATCTCT +CTCTTCAGACTCTTCATTTTGCTTTCCCAGGCCTCACTTCTCATTCTCCA +CTTTGCCAACTGTTTCAAGAACTGTGGAACTCAAATCAGAACCTAATGTC +ATCAGTTCTCCTGCTGAGTGTTCCTTGGAACTTTCTCCTTCAAGGCCTTG +TGTTTTACATTCTTCACTCTCTAGGAGAGAGACACCTATTTGTATGTTAC +CTATTGAAACCGAAAGAAATATTTTTGAAAATTTTGCCCATCCACCAAAC +ATCTCTCCTTCTGCCTGtccccttccccctcctcctcctatttctcctcc +ttctcctcctcctgctcctgctcctcttgctcctcctcctgacatttctc +ctttttctcttttttgtcctcctccctctcctccttctatccctcttcct +cttcctcctcctACATTTTTTCCACTTTCCGTTTCAACGTCTGGTCCCCC +AACAccacctcttctacctccatttccaactcctcttcctccaccacctc +cttctattccttgccctccacctccttcAGCTTCATTTCTGTCCACAGAG +TGTGTCTGTATAACAGGTGTTAAATGCACGACCAACTTGATGCCTGCCGA +GAAAATTAAGTCCTCTATGACACAGCTATCAACAACGACAGTGTGTAAAA +CAGACCCTCAGAGAGAACCAAAAGGCATCCTCAGACACGTTAAAAACTTA +GCAGAACTTGAAAAATCAGTAGCTAACATGTACAGTCAAATAGAAAAAAA +CTATCTACGCACAAATGTTTCAGAACTTCAAACTATGTGCCCTTCAGAAG +TAACAAATATGGAAATCACATCTGAACAAAACAAGGGGAGTTTGAACAAT +ATTGTCGAGGGAACTGAAAAACAATCTCACAGTCAATCTACTTCACTGTA +A +>hg17_chr11_116124407_116124501_- +ATCCAATGGATTTGAACAGAAGCGCTTTGCCAGGCTTGCCAGCAAGAAGG +CAGTGGAGGAACTTGCCTACAAATGGAGTGTTGAGGATATGTAA +>hg17_chr11_116206508_116206563_+ +ATGCAGCCCCGGGTACTCCTTGTTGTTGCCCTCCTGGCGCTCCTGGCCTC +TGCCC +>hg17_chr11_116211733_116212337_- +CCTAAAGCTCCTTGACAACTGGGACAGCGTGACCTCCACCTTCAGCAAGC +TGCGCGAACAGCTCGGCCCTGTGACCCAGGAGTTCTGGGATAACCTGGAA +AAGGAGACAGAGGGCCTGAGGCAGGAGATGAGCAAGGATCTGGAGGAGGT +GAAGGCCAAGGTGCAGCCCTACCTGGACGACTTCCAGAAGAAGTGGCAGG +AGGAGATGGAGCTCTACCGCCAGAAGGTGGAGCCGCTGCGCGCAGAGCTC +CAAGAGGGCGCGCGCCAGAAGCTGCACGAGCTGCAAGAGAAGCTGAGCCC +ACTGGGCGAGGAGATGCGCGACCGCGCGCGCGCCCATGTGGACGCGCTGC +GCACGCATCTGGCCCCCTACAGCGACGAGCTGCGCCAGCGCTTGGCCGCG +CGCCTTGAGGCTCTCAAGGAGAACGGCGGCGCCAGACTGGCCGAGTACCA +CGCCAAGGCCACCGAGCATCTGAGCACGCTCAGCGAGAAGGCCAAGCCCG +CGCTCGAGGACCTCCGCCAAGGCCTGCTGCCCGTGCTGGAGAGCTTCAAG +GTCAGCTTCCTGAGCGCTCTCGAGGAGTACACTAAGAAGCTCAACACCCA +GTGA +>hg17_chr11_1812377_1812407_+ +ATGCTCCACCTGCATGGCTGGCAAACCATG +>hg17_chr12_38440094_38440321_- +GAGCTTTCTTCCTCTATGCTGGATTTGCTGCTGTGGGACTCCTTTTCATC +TATGGCTGTCTTCCTGAGACCAAAGGCAAAAAATTAGAGGAAATTGAATC +ACTCTTTGACAACAGGCTATGTACATGTGGCACTTCAGATTCTGATGAAG +GGAGATATATTGAATATATTCGGGTAAAGGGAAGTAACTATCATCTTTCT +GACAATGATGCTTCTGATGTGGAATAA +>hg17_chr13_112381694_112381953_+ +ATGAACTCACCAGAGGCGAGGCTCTGCGTTGCTCAATGCAGAGACTCTTA +CCCAGGGTGTCAGCCTCTGAAAGATACACGTGCCTGGGCCTCTTCCCTGA +AGATGGACCCGGCAGGTCTGGAGGGAGGCCCCCGTGATGAATCCCGTGAT +GAGCCGCCGATCCGAGCTCAGGCTGCGTCATGGGACCAGCCACAAGGTTG +CCTGACCTATAAAGGTCGCAGGAGTGCCTCAGGGACACAGAAGCAGTTAC +AGCTGCCAG
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/extract_genomic_dna_out2.fasta Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,6 @@ +>droPer1_super_1_139823_139913_- AK028861 +CGTCGGCTTCTGCTTCTGCTGATGATGGTCGTTCTTCTTCCTTTACTTCT +TCCTATTTTTCTTCCTTCCCTTACACTATATCTTCCTTTA +>droPer1_super_1_156750_156844_- BC126698 +CCGGGCTGCGGCAAGGGATTCACCTGCTCCAAACAGCTCAAGGTGCACTC +CCGCACGCACACGGGCGAGAAGCCCTATCACTGCGACATCTGCT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/extract_genomic_dna_out3.interval Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,10 @@ +chr1 147962192 147962580 CCDS989.1_cds_0_0_chr1_147962193_r 0 - ACTTGATCCTGCTCCCTCGGTGTCTGCATTGACTCCTCATGCTGGGACTGGACCCGTCAACCCCCCTGCTCGCTGCTCACGTACCTTCATCACTTTTAGTGATGATGCAACTTTCGAGGAATGGTTCCCCCAAGGGCGGCCCCCAAAAGTCCCTGTTCGTGAGGTCTGTCCAGTGACCCATCGTCCAGCCCTATACCGGGACCCTGTTACAGACATACCCTATGCCACTGCTCGAGCCTTCAAGATCATTCGTGAGGCTTACAAGAAGTACATTACTGCCCATGGACTGCCGCCCACTGCCTCAGCCCTGGGCCCCGGCCCGCCACCTCCTGAGCCCCTCCCTGGCTCTGGGCCCCGAGCCTTGCGCCAGAAAATTGTCATTAAATGA +chr1 147984545 147984630 CCDS990.1_cds_0_0_chr1_147984546_f 0 + ATGGCGTCGGCCTCCTCCGGGCCGTCGTCTTCGGTCGGTTTTTCATCCTTTGATCCCGCGGTCCCTTCCTGTACCTTGTCCTCAG +chr1 148078400 148078582 CCDS993.1_cds_0_0_chr1_148078401_r 0 - GTTCTCAGCTTCCTTGCTTCCATGGCTCCAGCACCATTCGAAACCTCAAAGAGAGGTTCCACATGAGCATGACTGAGGAGCAGCTGCAGCTGCTGGTGGAGCAGATGGTGGATGGCAGTATGCGGTCTATCACCACCAAACTCTATGACGGCTTCCAGTACCTCACCAACGGCATCATGTGA +chr1 148185136 148185276 CCDS996.1_cds_0_0_chr1_148185137_f 0 + ATGGAAGCGTTTTTGGGGTCGCGGTCCGGACTTTGGGCGGGGGGTCCGGCCCCAGGACAGTTTTACCGCATTCCGTCCACTCCCGATTCCTTCATGGATCCGGCGTCTGCACTTTACAGAGGTCCAATCACGCGGACCCA +chr10 55251623 55253124 CCDS7248.1_cds_0_0_chr10_55251624_r 0 - TCTTTTCCTTCTCTACCATTTTCAACAAAGCAGGGGAAATAACTCAGTCTCAGAAGACAGGAAACATCAACAAGTTGTGATGCCCTTTTCTTCCAATACTATTGAGGCTCACAAGTCAGCTCATGTAGACGGATCACTTAAGAGCAACAAACTGAAGTCTGCAAGAAAATTCACATTTCTATCTGATGAGGATGACTTAAGTGCCCATAATCCCCTTTATAAGGAAAACATAAGTCAAGTATCAACAAATTCAGACATTTCACAGAGAACAGATTTTGTAGACCCATTTTCACCCAAAATACAAGCCAAGAGTAAGTCTCTGAGGGGCCCAAGAGAAAAGATTCAGAGGCTGTGGAGTCAGTCAGTCAGCTTACCCAGGAGGCTGATGAGGAAAGTTCCAAATAGACCAGAGATCATAGATCTGCAGCAGTGGCAAGGCACCAGGCAGAAAGCTGAAAATGAAAACACTGGAATCTGTACAAACAAAAGAGGTAGCAGCAATCCATTGCTTACAACTGAAGAGGCAAATTTGACAGAGAAAGAGGAAATAAGGCAAGGTGAAACACTGATGATAGAAGGAACAGAACAGTTGAAATCTCTCTCTTCAGACTCTTCATTTTGCTTTCCCAGGCCTCACTTCTCATTCTCCACTTTGCCAACTGTTTCAAGAACTGTGGAACTCAAATCAGAACCTAATGTCATCAGTTCTCCTGCTGAGTGTTCCTTGGAACTTTCTCCTTCAAGGCCTTGTGTTTTACATTCTTCACTCTCTAGGAGAGAGACACCTATTTGTATGTTACCTATTGAAACCGAAAGAAATATTTTTGAAAATTTTGCCCATCCACCAAACATCTCTCCTTCTGCCTGtccccttccccctcctcctcctatttctcctccttctcctcctcctgctcctgctcctcttgctcctcctcctgacatttctcctttttctcttttttgtcctcctccctctcctccttctatccctcttcctcttcctcctcctACATTTTTTCCACTTTCCGTTTCAACGTCTGGTCCCCCAACAccacctcttctacctccatttccaactcctcttcctccaccacctccttctattccttgccctccacctccttcAGCTTCATTTCTGTCCACAGAGTGTGTCTGTATAACAGGTGTTAAATGCACGACCAACTTGATGCCTGCCGAGAAAATTAAGTCCTCTATGACACAGCTATCAACAACGACAGTGTGTAAAACAGACCCTCAGAGAGAACCAAAAGGCATCCTCAGACACGTTAAAAACTTAGCAGAACTTGAAAAATCAGTAGCTAACATGTACAGTCAAATAGAAAAAAACTATCTACGCACAAATGTTTCAGAACTTCAAACTATGTGCCCTTCAGAAGTAACAAATATGGAAATCACATCTGAACAAAACAAGGGGAGTTTGAACAATATTGTCGAGGGAACTGAAAAACAATCTCACAGTCAATCTACTTCACTGTAA +chr11 116124407 116124501 CCDS8374.1_cds_0_0_chr11_116124408_r 0 - ATCCAATGGATTTGAACAGAAGCGCTTTGCCAGGCTTGCCAGCAAGAAGGCAGTGGAGGAACTTGCCTACAAATGGAGTGTTGAGGATATGTAA +chr11 116206508 116206563 CCDS8377.1_cds_0_0_chr11_116206509_f 0 + ATGCAGCCCCGGGTACTCCTTGTTGTTGCCCTCCTGGCGCTCCTGGCCTCTGCCC +chr11 116211733 116212337 CCDS8378.1_cds_0_0_chr11_116211734_r 0 - CCTAAAGCTCCTTGACAACTGGGACAGCGTGACCTCCACCTTCAGCAAGCTGCGCGAACAGCTCGGCCCTGTGACCCAGGAGTTCTGGGATAACCTGGAAAAGGAGACAGAGGGCCTGAGGCAGGAGATGAGCAAGGATCTGGAGGAGGTGAAGGCCAAGGTGCAGCCCTACCTGGACGACTTCCAGAAGAAGTGGCAGGAGGAGATGGAGCTCTACCGCCAGAAGGTGGAGCCGCTGCGCGCAGAGCTCCAAGAGGGCGCGCGCCAGAAGCTGCACGAGCTGCAAGAGAAGCTGAGCCCACTGGGCGAGGAGATGCGCGACCGCGCGCGCGCCCATGTGGACGCGCTGCGCACGCATCTGGCCCCCTACAGCGACGAGCTGCGCCAGCGCTTGGCCGCGCGCCTTGAGGCTCTCAAGGAGAACGGCGGCGCCAGACTGGCCGAGTACCACGCCAAGGCCACCGAGCATCTGAGCACGCTCAGCGAGAAGGCCAAGCCCGCGCTCGAGGACCTCCGCCAAGGCCTGCTGCCCGTGCTGGAGAGCTTCAAGGTCAGCTTCCTGAGCGCTCTCGAGGAGTACACTAAGAAGCTCAACACCCAGTGA +chr11 1812377 1812407 CCDS7726.1_cds_0_0_chr11_1812378_f 0 + ATGCTCCACCTGCATGGCTGGCAAACCATG +chr12 38440094 38440321 CCDS8736.1_cds_0_0_chr12_38440095_r 0 - GAGCTTTCTTCCTCTATGCTGGATTTGCTGCTGTGGGACTCCTTTTCATCTATGGCTGTCTTCCTGAGACCAAAGGCAAAAAATTAGAGGAAATTGAATCACTCTTTGACAACAGGCTATGTACATGTGGCACTTCAGATTCTGATGAAGGGAGATATATTGAATATATTCGGGTAAAGGGAAGTAACTATCATCTTTCTGACAATGATGCTTCTGATGTGGAATAA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/extract_genomic_dna_out4.gff Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,10 @@ +chr10 Cufflinks transcript 62044837 62045189 1000 . . gene_id "CUFF.23531"; transcript_id "CUFF.23531.1"; FPKM "19.5178121606"; frac "1.000000"; conf_lo "9.264456"; conf_hi "29.771168"; cov "1.108611"; seq "AATTACAAGATCGACACACCAAGATAGGCAGATCCATGGTTGGTTTTACTTTGTAAATCTAAAAGTATGTTGGAAAACGATGCAATGAATTCTTATCCTTTTTCAAAATGAAGAATTTGTGATGGTTAGTGGACAGTTCAGAAGCCTCTCTGCAAGAAAGGGGGCGCTGAGAAGTGGTAAAAAAAGGAAGGAAGCACTCGGGCTTTGTCAGCAGGGTGGACCCTGGGGTCCACAGTGGGAACAGTCCCTTCTGGCCTCTACTCACTGACCAAACGCTTTACTAAAACTCCGCTTCTGGCCTCTGTTGCCACCTCCTGGTCGCTGTCCTCGGAAGTTTCTACTTCCTCCTCGCT"; +chr10 Cufflinks transcript 75372919 75373002 1000 . . gene_id "CUFF.24985"; transcript_id "CUFF.24985.1"; FPKM "124.4970510798"; frac "1.000000"; conf_lo "71.411330"; conf_hi "177.582772"; cov "7.071429"; seq "GCGTCTCGCAGCTTCTGCCCGTCGATCTCCATGTCGAGCCGGATGGGCACCAGCACCTCAGGCTGTGACGCATTCTCATGGATC"; +chr10 Cufflinks transcript 80362428 80363292 1000 - . gene_id "CUFF.26065"; transcript_id "CUFF.26065.1"; FPKM "43.6170921216"; frac "1.000000"; conf_lo "32.260169"; conf_hi "54.974016"; cov "2.477449"; seq "ATGACGGACAAGTGTTTCCGGAAGTGCATCGGGAAGCCCGGGGGCTCCTTGGATAACTCGGAGCAGGTGAGACATCTCGGGAACCCGGGGTGGTGAGGGGCGCGGGGTCAGGAGCGTCTAGGAGGTTGAGAGATGTGCGCGTGCGCGGCCTCTAGCCTTAGCTACTGAGGAAGTTGTGCGCGTGCGCGGGGTGAGGACCCGGCTTCTGTGCCTAGATCGGTGCAGCCTTCATGGGTGATCCTCGGGTCGTGTGACCGTCAGTCAGGGATCCCCCTCCACGCTTTGCAGAAATGCATCGCCATGTGCATGGACCGCTACATGGACGCCTGGAATACCGTGTCCCGCGCCTACAACTCTCGACTGCAGCGGGAACGAGCCAACATGTGACCGGGACCTGTGCCTCGGGACACCGTGCTTATGGTCTGAACTGTTTTCCCTGCCAGTTAGGGTGTCTCCTCCTAGCCGCCCTGAAGTCTGGCAGCATGGAGGGCTTGGGGATCGAGGCCTCTCCCCTGGGTTGCTGCGTCCAGCTCAATCTCAGAAGAGAGTGAGGACCCGACAGAGCACAGGGATCTGGCTGGCCCCACTGACCTGTGACCTCAGGAGAGCAGGCCAATAAATCGCTGCTGGGGCAGTAAAGCAGGCGTGTCACCTCACTGCTTCAGGTCCCTTCCCCTGAGTAGGCCCAGACCTCCCAGGGTATCTTTCCCCTTGGGGTCAGTGGGCTGCTGGCTCTCAGGGAATTCGGAGCATGATCTCAGGTGTTTGGTCATCCCGGGGAGACCAGCCGAGGTTAAGAAGCAAGGCTTCATGTagccttcacctatcatgcatgaggcccagggtgctgaccttaactctgaat"; +chr11 Cufflinks transcript 7904565 7904642 1000 . . gene_id "CUFF.33508"; transcript_id "CUFF.33508.1"; FPKM "61.6484988869"; frac "1.000000"; conf_lo "22.882428"; conf_hi "100.414569"; cov "3.501633"; seq "CATCTTCTATTTGAGCCTCCATCCAGGCACCTCTGAAACAAAGGTGCACTCACTGCATGTCCACTTGTCACAGGAGCC"; +chr11 Cufflinks exon 78140156 78140259 1000 . . gene_id "CUFF.43148"; transcript_id "CUFF.43148.1"; exon_number "1"; FPKM "54.8483511750"; frac "1.000000"; conf_lo "23.181641"; conf_hi "86.515061"; cov "3.115385"; seq "CTGCTTGCTAATTTTCTCTCTTGGGATCAGGGGGACGTGAACTCCAGCCCTGACTCGTGCTCCTTATGCTCTGAGTACATAGCAAATAAATGAGAGCAAAACAC"; +chr11 Cufflinks exon 105616462 105616737 1000 . . gene_id "CUFF.48385"; transcript_id "CUFF.48385.1"; exon_number "1"; FPKM "18.9452034252"; frac "1.000000"; conf_lo "7.520816"; conf_hi "30.369591"; cov "1.076087"; seq "TAGGTGTAATAGTGGAAAACAATAGTTTTTAAACTTCAGAGTCCAGGGCTGTAACTCAGTAGTAACAGTGTTCTCTAAGTATGTTATTCTTCCTCTACATGCTGAAATTTTTCATATTTGGAGCATTCACTGTTCCATGTATCAGTAAATTATATTGTGAGCTGTCATCATATCTAAGCACCATATTGAATATTTTTCATGATTAAAATTTGTTGAAACAACAATTCTATGACCGAAAAAAGCAAGGCTTTGTAAATAACATGTTTGTTACTAGTA"; +chr12 Cufflinks exon 30701762 30702509 1000 . . gene_id "CUFF.53897"; transcript_id "CUFF.53897.1"; exon_number "1"; FPKM "48.9333329111"; frac "1.000000"; conf_lo "37.780391"; conf_hi "60.086275"; cov "2.779412"; seq "TGTGGAGTGTACTTATATGATCCCTATGCTGATAGGATTACCTTCCTAGACATAGCTAGACGCAAAGCCACATGTGTAAGGCTGCTGAGCAAAGACAGCATCCCAGCATGGGTGTGTTCACGGTGGATTCACCACGTTGCATATGTAAAGTGGTCCCCTTGGCTTACCCTTCACTTTGCTCATGAGATTCAGAAGCTGGTGGTCCAGCAGGGGTGAGCATTTGTGAAATAGTAAGCTGAACTTAGTGGTGAGATTTCAGAACAGACTTCTGTGAAGTAAGAGATGTAACCATGCATCTAAAATCAGATGGCCGTGTAACTGCTCGGGCATAGAAATGGTGGGAGAACCTGTCCTGGGTACCTGGCATTTCACATGAGCCCAGGGATATGTCTTGTGCCAAGGCACACAAGTGTCCATGGACTTGGACAGGTGCCAAGGGTTTTTGTCTCTGTTCCTATGTGGGAGGCTGGCTGTGATTTACATTAATTTCTGTATTTCAAACGAAGATGTCTGCAGATCTCCATTTTGATGTTACAGCCTCATTGCCCAGGCAGTGGGCAGTGCCCAGACACCCTTTCTGACTAGCCACTGCATTGGGCTTCTGTGATTCAAAGTAGTGTATATATTTATTTACTTCTCTGACTGTGGCCAACAGCCAAATGCCATTTTATGTTCCTTGTATTCAGTCCATTACCAAAGAGGTGTTTGCACTTTGTAATGATACCTTTCAGTTCAAATAAAAGGACCA"; +chr13 Cufflinks exon 49159496 49159569 1000 . . gene_id "CUFF.67788"; transcript_id "CUFF.67788.1"; exon_number "1"; FPKM "44.9657653777"; frac "1.000000"; conf_lo "10.974842"; conf_hi "78.956689"; cov "2.554054"; seq "ttttcttttggattacttgatttttttttatttgatcttatttatgatgattttgagtacatttttgaacagtt"; +chr13 Cufflinks transcript 100200304 100200330 1000 . . gene_id "CUFF.73108"; transcript_id "CUFF.73108.1"; FPKM "123.2395051093"; frac "1.000000"; conf_lo "30.079196"; conf_hi "216.399814"; cov "7.000000"; seq "TCTCATATGAATAGCCACCCTCTTCTG"; +chr14 Cufflinks transcript 31949103 31949152 1000 . . gene_id "CUFF.77316"; transcript_id "CUFF.77316.1"; FPKM "85.5634278330"; frac "1.000000"; conf_lo "28.521143"; conf_hi "142.605713"; cov "4.860000"; seq "GGATGCTATCCGCGATGTGCATGTAAAGGGCCTCATGTACCAGTGGATCG";
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/extract_genomic_dna_out5.fasta Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,31 @@ +>mm9_chr10_62044837_62045189_+ +AATTACAAGATCGACACACCAAGATAGGCAGATCCATGGTTGGTTTTACT +TTGTAAATCTAAAAGTATGTTGGAAAACGATGCAATGAATTCTTATCCTT +TTTCAAAATGAAGAATTTGTGATGGTTAGTGGACAGTTCAGAAGCCTCTC +TGCAAGAAAGGGGGCGCTGAGAAGTGGTAAAAAAAGGAAGGAAGCACTCG +GGCTTTGTCAGCAGGGTGGACCCTGGGGTCCACAGTGGGAACAGTCCCTT +CTGGCCTCTACTCACTGACCAAACGCTTTACTAAAACTCCGCTTCTGGCC +TCTGTTGCCACCTCCTGGTCGCTGTCCTCGGAAGTTTCTACTTCCTCCTC +GCT +>mm9_chr10_75372919_75373002_+ +GCGTCTCGCAGCTTCTGCCCGTCGATCTCCATGTCGAGCCGGATGGGCAC +CAGCACCTCAGGCTGTGACGCATTCTCATGGATC +>mm9_chr10_80362428_80363292_- +ATGACGGACAAGTGTTTCCGGAAGTGCATCGGGAAGCCCGGGGGCTCCTT +GGATAACTCGGAGCAGGTGAGACATCTCGGGAACCCGGGGTGGTGAGGGG +CGCGGGGTCAGGAGCGTCTAGGAGGTTGAGAGATGTGCGCGTGCGCGGCC +TCTAGCCTTAGCTACTGAGGAAGTTGTGCGCGTGCGCGGGGTGAGGACCC +GGCTTCTGTGCCTAGATCGGTGCAGCCTTCATGGGTGATCCTCGGGTCGT +GTGACCGTCAGTCAGGGATCCCCCTCCACGCTTTGCAGAAATGCATCGCC +ATGTGCATGGACCGCTACATGGACGCCTGGAATACCGTGTCCCGCGCCTA +CAACTCTCGACTGCAGCGGGAACGAGCCAACATGTGACCGGGACCTGTGC +CTCGGGACACCGTGCTTATGGTCTGAACTGTTTTCCCTGCCAGTTAGGGT +GTCTCCTCCTAGCCGCCCTGAAGTCTGGCAGCATGGAGGGCTTGGGGATC +GAGGCCTCTCCCCTGGGTTGCTGCGTCCAGCTCAATCTCAGAAGAGAGTG +AGGACCCGACAGAGCACAGGGATCTGGCTGGCCCCACTGACCTGTGACCT +CAGGAGAGCAGGCCAATAAATCGCTGCTGGGGCAGTAAAGCAGGCGTGTC +ACCTCACTGCTTCAGGTCCCTTCCCCTGAGTAGGCCCAGACCTCCCAGGG +TATCTTTCCCCTTGGGGTCAGTGGGCTGCTGGCTCTCAGGGAATTCGGAG +CATGATCTCAGGTGTTTGGTCATCCCGGGGAGACCAGCCGAGGTTAAGAA +GCAAGGCTTCATGTagccttcacctatcatgcatgaggcccagggtgctg +accttaactctgaat
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/extract_genomic_dna_out6.fasta Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,20 @@ +>mm9_test_chromosome_53_550_+ +TACTATCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCAC +TACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAG +CGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTAC +GTATTTGGCGCGCGGCGCTACGGCTGAGCGTCGAGCTTGCGATACGCCGT +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAC +TATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTGT +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGTT +TTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACTTGC +>mm9_test_chromosome_53_250_+ +TACTATCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCAC +TACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAG +CGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTAC +GTATTTGGCGCGCGGCGCTACGGCTGAGCGTCGAGCTTGCGATACGCC +>mm9_test_chromosome_351_400_+ +ACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACT +>mm9_test_chromosome_501_550_+ +TTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACTTGC
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/extract_genomic_dna_out7.fasta Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,17 @@ +>mm9_test_chromosome_53_550_+ +TACTATCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCAC +TACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAG +CGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTAC +GTATTTGGCGCGCGGCGCTACGGCTGAGCGTCGAGCTTGCGATACGCCGT +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAC +TATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTGT +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGTT +TTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACTTGCTA +CTATCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCCACTA +CGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGCAGCG +ACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCTACGT +ATTTGGCGCGCGGCGCTACGGCTGAGCGTCGAGCTTGCGATACGCCACTA +TTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACTTTTT +CTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACTTGC
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/gff_filter_by_attribute_out1.gff Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,20 @@ +chr10 Cufflinks transcript 62044837 62045189 1000 . . gene_id "CUFF.23531"; transcript_id "CUFF.23531.1"; FPKM "19.5178121606"; frac "1.000000"; conf_lo "9.264456"; conf_hi "29.771168"; cov "1.108611"; +chr10 Cufflinks transcript 75372919 75373002 1000 . . gene_id "CUFF.24985"; transcript_id "CUFF.24985.1"; FPKM "124.4970510798"; frac "1.000000"; conf_lo "71.411330"; conf_hi "177.582772"; cov "7.071429"; +chr10 Cufflinks transcript 80362428 80363292 1000 - . gene_id "CUFF.26065"; transcript_id "CUFF.26065.1"; FPKM "43.6170921216"; frac "1.000000"; conf_lo "32.260169"; conf_hi "54.974016"; cov "2.477449"; +chr11 Cufflinks transcript 7904565 7904642 1000 . . gene_id "CUFF.33508"; transcript_id "CUFF.33508.1"; FPKM "61.6484988869"; frac "1.000000"; conf_lo "22.882428"; conf_hi "100.414569"; cov "3.501633"; +chr11 Cufflinks exon 78140156 78140259 1000 . . gene_id "CUFF.43148"; transcript_id "CUFF.43148.1"; exon_number "1"; FPKM "54.8483511750"; frac "1.000000"; conf_lo "23.181641"; conf_hi "86.515061"; cov "3.115385"; +chr11 Cufflinks exon 105616462 105616737 1000 . . gene_id "CUFF.48385"; transcript_id "CUFF.48385.1"; exon_number "1"; FPKM "18.9452034252"; frac "1.000000"; conf_lo "7.520816"; conf_hi "30.369591"; cov "1.076087"; +chr12 Cufflinks exon 30701762 30702509 1000 . . gene_id "CUFF.53897"; transcript_id "CUFF.53897.1"; exon_number "1"; FPKM "48.9333329111"; frac "1.000000"; conf_lo "37.780391"; conf_hi "60.086275"; cov "2.779412"; +chr13 Cufflinks exon 49159496 49159569 1000 . . gene_id "CUFF.67788"; transcript_id "CUFF.67788.1"; exon_number "1"; FPKM "44.9657653777"; frac "1.000000"; conf_lo "10.974842"; conf_hi "78.956689"; cov "2.554054"; +chr13 Cufflinks transcript 100200304 100200330 1000 . . gene_id "CUFF.73108"; transcript_id "CUFF.73108.1"; FPKM "123.2395051093"; frac "1.000000"; conf_lo "30.079196"; conf_hi "216.399814"; cov "7.000000"; +chr14 Cufflinks transcript 31949103 31949152 1000 . . gene_id "CUFF.77316"; transcript_id "CUFF.77316.1"; FPKM "85.5634278330"; frac "1.000000"; conf_lo "28.521143"; conf_hi "142.605713"; cov "4.860000"; +chr14 Cufflinks exon 67604227 67604668 1000 . . gene_id "CUFF.81446"; transcript_id "CUFF.81446.1"; exon_number "1"; FPKM "123.6776546104"; frac "1.000000"; conf_lo "100.611653"; conf_hi "146.743656"; cov "7.024887"; +chr14 Cufflinks exon 75165582 75165744 1000 . . gene_id "CUFF.82088"; transcript_id "CUFF.82088.1"; exon_number "1"; FPKM "20.4139057543"; frac "1.000000"; conf_lo "4.982443"; conf_hi "35.845368"; cov "1.159509"; +chr16 Cufflinks transcript 57154027 57154067 1000 . . gene_id "CUFF.103364"; transcript_id "CUFF.103364.1"; FPKM "162.3154457537"; frac "1.000000"; conf_lo "75.554191"; conf_hi "249.076701"; cov "9.219512"; +chr16 Cufflinks exon 74862302 74862560 1000 . . gene_id "CUFF.105450"; transcript_id "CUFF.105450.1"; exon_number "1"; FPKM "11.0120241741"; frac "1.000000"; conf_lo "2.020744"; conf_hi "20.003304"; cov "0.625483"; +chr16 Cufflinks transcript 98168779 98168914 1000 . . gene_id "CUFF.107834"; transcript_id "CUFF.107834.1"; FPKM "24.4666664555"; frac "1.000000"; conf_lo "5.971605"; conf_hi "42.961728"; cov "1.389706"; +chr17 Cufflinks exon 8483212 8483268 1000 . . gene_id "CUFF.108498"; transcript_id "CUFF.108498.1"; exon_number "1"; FPKM "50.0370923000"; frac "1.000000"; conf_lo "9.181978"; conf_hi "90.892207"; cov "2.842105"; +chr17 Cufflinks exon 30355791 30355913 1000 . . gene_id "CUFF.111759"; transcript_id "CUFF.111759.1"; exon_number "1"; FPKM "19.3232673516"; frac "1.000000"; conf_lo "2.040012"; conf_hi "36.606523"; cov "1.097561"; +chr18 Cufflinks transcript 39571718 39571880 1000 . . gene_id "CUFF.123569"; transcript_id "CUFF.123569.1"; FPKM "20.4139057543"; frac "1.000000"; conf_lo "4.982443"; conf_hi "35.845368"; cov "1.159509"; +chr19 Cufflinks exon 17633088 17633203 1000 . . gene_id "CUFF.131333"; transcript_id "CUFF.131333.1"; exon_number "1"; FPKM "20.4893265884"; frac "1.000000"; conf_lo "2.163116"; conf_hi "38.815537"; cov "1.163793"; +chr19 Cufflinks transcript 41997624 41997859 1000 . . gene_id "CUFF.133569"; transcript_id "CUFF.133569.1"; FPKM "28.1988698132"; frac "1.000000"; conf_lo "13.125940"; conf_hi "43.271800"; cov "1.601695";
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/tophat_in1.fasta Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,14 @@ +>test_chromosome +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +ACTACTATCTGACTAGACTGGAGGCGCTTGCGACTGAGCTAGGACGTGCC +ACTACGGGGATGACGACTAGGACTACGGACGGACTTAGAGCGTCAGATGC +AGCGACTGGACTATTTAGGACGATCGGACTGAGGAGGGCAGTAGGACGCT +ACGTATTTGGCGCGCGGCGCTACGGCTGAGCGTCGAGCTTGCGATACGCC +GTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG +ACTATTACTTTATTATCTTACTCGGACGTAGACGGATCGGCAACGGGACT +GTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG +TTTTCTACTTGAGACTGGGATCGAGGCGGACTTTTTAGGACGGGACTTGC +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool_data_table_conf.xml.sample Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,6 @@ +<tables> + <table name="twobit" comment_char="#"> + <columns>dbkey, value</columns> + <file path="tool-data/twobit.loc" /> + </table> +</tables>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool_dependencies.xml Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<tool_dependency> + <package name="bx-python" version="0.7.1"> + <repository changeset_revision="7ce9cf37130f" name="package_bx_python_0_7" owner="iuc" toolshed="https://toolshed.g2.bx.psu.edu" /> + </package> + <package name="faToTwoBit" version="35x1"> + <repository changeset_revision="46615329ea72" name="package_fatotwobit_35x1" owner="iuc" toolshed="https://toolshed.g2.bx.psu.edu" /> + </package> +</tool_dependency>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/twobit.loc.sample Tue Jan 19 09:34:23 2016 -0500 @@ -0,0 +1,26 @@ +#This is a sample file distributed with Galaxy that is used by some +#tools. The twobit.loc file has this format (white space characters +#are TAB characters): +# +#<Build> <FullPathToFile> +# +#So, for example, if you had droPer1 twobit files stored in +#/depot/data2/galaxy/droPer1/, then the twobit.loc entry +#would look like this: +# +#droPer1 /depot/data2/galaxy/droPer1/droPer1.2bit +# +#and your /depot/data2/galaxy/droPer1/ directory would +#contain all of your twobit files (e.g.): +# +#-rw-rw-r-- 1 nate galaxy 48972650 2007-05-04 11:27 droPer1.2bit +#...etc... +# +#Your twobit.loc file should include an entry per line for each twobit +#file you have stored. For example: +# +#droPer1 /depot/data2/galaxy/droPer1/droPer1.2bit +#apiMel2 /depot/data2/galaxy/apiMel2/apiMel2.2bit +#droAna1 /depot/data2/galaxy/droAna1/droAna1.2bit +#droAna2 /depot/data2/galaxy/droAna2/droAna2.2bit +#...etc...