changeset 1:864f3d532b44 draft

Deleted selected files
author cschu
date Mon, 18 May 2015 15:35:36 -0400
parents 0916697409ea
children df4163858937
files kraken.py kraken.xml kraken_combine.py kraken_combine.xml kraken_count.py kraken_filter.py kraken_filter.xml kraken_summarize.py kraken_summarize.xml kraken_visualize.py tool_dependencies.xml
diffstat 11 files changed, 0 insertions(+), 1090 deletions(-) [+]
line wrap: on
line diff
--- a/kraken.py	Mon May 18 15:29:05 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-import argparse
-import subprocess
-import struct
-import shutil
-import tempfile
-
-# from collections import Counter
-
-from checkFileFormat import verifyFileFormat 
-DEFAULT_KRAKEN_DB = '/tsl/data/krakendb/ktest/db1'
-
-def main(argv):
-    
-    descr = ''
-    parser = argparse.ArgumentParser(description=descr)
-    parser.add_argument('--dbtype', default='builtinDB', help='Is database built-in or supplied externally?')
-    parser.add_argument('--db', default=DEFAULT_KRAKEN_DB, help='Path to kraken db')
-    parser.add_argument('--in1', help='Single-end reads or left paired-end reads')
-    parser.add_argument('--in2', help='Right paired-end reads')
-    parser.add_argument('--quick', action='store_true', help='Use quick mode?')
-    parser.add_argument('--min-hits', default=1, help='Minimum number of hits required.')
-    parser.add_argument('--input-format', help='Input sequences stored in fa or fq file(s).', default='fq')
-    parser.add_argument('kraken_summary_tsv', type=str, help='The output file.')
-    # parser.add_argument('classified_seqs_fq', type=str, help='The output file.')
-    # parser.add_argument('unclassified_seqs_fq', type=str, help='The output file.')
-    args = parser.parse_args()
-
-    #  kraken --preload --db /tsl/scratch/macleand/ktest/db --threads 12 --quick --classified-out classified_seqs.fq --unclassified-out unclassified.fq --fastq-input --min-hits 1 --output classification.txt left_reads.fq right_reads.fq
-
-    kraken_params = ['--preload', '--threads', '8', 
-                     '--unclassified-out', args.unclassified_seqs_fq,
-                     '--output', args.kraken_summary_tsv]
-    #                '--classified-out', args.classified_seqs_fq,
-    kraken_input = []
-
-    if 'db' not in args or not os.path.exists(args.db):
-        sys.stderr.write('Error: database is missing.\n')
-        sys.exit(1)
-    kraken_params.extend(['--db', args.db])
-    # check whether input file(s) exist(s)
-    if not ('in1' in args and os.path.exists(args.in1)):
-        sys.stderr.write('Error: fwd/single input file (%s) is missing.\n' % args.in1)
-        sys.exit(1)
-    if not verifyFileFormat(args.in1, args.input_format):
-        fc = open(args.in1).read(1)
-        sys.stderr.write('Error: fwd/single input file has the wrong format assigned (%s). Starts with \'%s\'\n' % (args.input_format, fc))
-        sys.exit(1)
-    kraken_input.append(args.in1)
-    if 'in2' in args:
-        if args.in2 is not None and not os.path.exists(args.in2):
-            sys.stderr.write('Error: right input file (%s) is missing.\n' % args.in2)
-            sys.exit(1)
-        elif args.in2 is not None and not verifyFileFormat(args.in2, args.input_format):
-            sys.stderr.write('Error: rev input file has the wrong format assigned.\n')
-            sys.exit(1)            
-        elif args.in2 is not None:
-            kraken_params.append('--paired')
-            kraken_input.append(args.in2)
-        else:
-            pass
-    else:
-        pass
-
-    if 'quick' in args:
-        kraken_params.append('--quick')
-        if 'min_hits' in args:
-            kraken_params.extend(['--min-hits', str(args.min_hits)])
-
-    if args.input_format == 'fq': 
-        kraken_params.append('--fastq-input')
-    else:
-        kraken_params.append('--fasta-input')
-      
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-
-    # check whether file is gzipped
-    header = ''
-      
-    cmd = 'source kraken-0.10.5; '
-    cmd += ' '.join(['kraken'] + kraken_params + kraken_input) + '\n'
-    # out = open(argv[-1], 'wb').write(str(cmd) + '\n')#.write('KRAKEN OUTPUT, HAS COUNTER\n')
-    # out = open(argv[-1], 'wb').write(str(args) + '\n')#.write('KRAKEN OUTPUT, HAS COUNTER\n')
-
-    # proc = subprocess.Popen(args=cmd, shell=True, stderr=sys.stderr)
-    # returncode = proc.wait()
-
-
-    tmp_dir = tempfile.mkdtemp()
-    try:
-        tmp = tempfile.NamedTemporaryFile(dir=tmp_dir).name
-        tmp_stderr = open(tmp, 'wb')
-        proc = subprocess.Popen(args=cmd, shell=True, stderr=tmp_stderr.fileno())
-        returncode = proc.wait()
-        tmp_stderr.close()
-        # get stderr, allowing for case where it's very large
-        tmp_stderr = open(tmp, '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()
-        if returncode != 0:
-            raise Exception, stderr
-    except Exception, e:
-        # clean up temp dirs
-        if os.path.exists(tmp_dir):
-            shutil.rmtree(tmp_dir)
-        sys.stderr.write('Error running kraken: %s\n' % str(e))
-        sys.exit(1)
-
-    if os.path.exists(tmp_dir):
-        shutil.rmtree(tmp_dir)
-    """
-    open(args.kraken_summary_tsv, 'wb').write('\t'.join(list('ACGT')) + '\n')
-    open(args.classified_seqs_fq, 'wb').write(cmd + '\n')
-    open(args.unclassified_seqs_fq, 'wb').write('blruah\n')                      # check whether the database exists, if not exit with error
-    """
-    """
-    for arg in args:
-        out.write(str(arg) + '\n') 
-    out.close()
-    """
-    pass
-
-
- 
-    
-# main(sys.argv[1:])
-
-if __name__ == '__main__': main(sys.argv[1:])
--- a/kraken.xml	Mon May 18 15:29:05 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-<tool id="kraken" name="kraken">
-	<description>taxonomic sequence classifier</description>
-	<requirements>
-	  <requirement type="package" version="2.7.4">python</requirement>
-	  <requirement type="package" version="0.10.5">kraken</requirement>
-	</requirements>
-	<command interpreter="python">kraken.py 
-		--dbtype="${databaseChoice.database}"
-		#if $databaseChoice.database == "builtinDB":
-		  --db="${databaseChoice.builtinDatabases.fields.path}"
-		#else:
-		  --db="NOT_SUPPORTED_YET"
-		#end if
-
-		--in1="${dataFormat.input1}"
-		#if $dataFormat.inputFormat == "pairedFastQ" or $dataFormat.inputFormat == "pairedFastA":
-		  --in2="${dataFormat.input2}"
-		#end if
-
-		#if $dataFormat.inputFormat == "singleFastQ" or $dataFormat.inputFormat == "pairedFastQ":
-		  --input-format="fq"
-		#else:
-		  --input-format="fa"
-		#end if
-
-                #if $quickMode.useQuickMode == "useQuick":
-                  --quick
-                  --min-hits="${quickMode.minHits.value}"
-                #end if
-
-	<!--		$output -->
-                $kraken_summary_tsv
-                <!-- $classified_seqs_fq
-                $unclassified_seqs_fq -->
-		</command>
-	<inputs>
-		<conditional name="databaseChoice">
-			<param name="database" type="select" label="Do you want to use your own kraken database or use the built-in ktest database?">
-				<option value="builtinDB">Use built-in db</option>
-				<option value="myownDB">Use a db from my history</option>
-			</param>
-			<when value="builtinDB">
-				<param name="builtinDatabases" type="select" label="Select a built-in kraken database">
-					<options from_data_table="krakenDBs">
-						<filter type="sort_by" column="2" />
-						<validator type="no_options" message="No databases are available" />
-					</options>
-				</param>
-			</when>
-			<when value="myownDB">
-				<param name="myownDB" type="data" format="fasta" metadata_name="dbkey" label="Select database" />
-			</when>
-		</conditional>
-
-		<conditional name="quickMode">
-			<param name="useQuickMode" type="select" label="Use Quick operation? (use first hit or hits)">
-				<option value="useQuick">Use Quick operation</option>
-				<option value="dontUseQuick">Do not use Quick operation</option>
-			</param>
-			<when value="useQuick">
-				<param name="minHits" type="integer" label="Minimum number of hits required for classification (default:1)" value="1" default="1" />
-			</when>
-		</conditional>
-
-<!--		<conditional name="libraryType">
-			<param name="libtype" type="select" label="Is this library single- or paired-end?">
-				<option value="single">Single-end</option>
-				<option value="paired">Paired-end</option>
-			</param>
-			<when value="single">
-				<param name="input1" type="data" format="fasta,fastq,fasta.gz,fasta.bz2,fa.gz,fq.gz,fa,fq" label="Fasta/Fastq file" />
-			</when>
-			<when value="paired">
-				<param name="input1" type="data" format="fasta,fastq,fasta.gz,fasta.bz2,fa.gz,fq.gz,fa,fq" label="Left Fasta/Fastq file" />
-				<param name="input2" type="data" format="fasta,fastq,fasta.gz,fasta.bz2,fa.gz,fq.gz,fa,fq" label="Right Fasta/Fastq file" />
-			</when>
-		</conditional> -->
-		<conditional name="dataFormat">
-			<param name="inputFormat" type="select" label="Please select input file type and library type."> 
-				<option value="singleFastQ">Single-end FastQ</option>
-				<option value="pairedFastQ">Paired-end FastQ</option>
-				<option value="singleFastA">Single-end FastA</option>
-				<option value="pairedFastA">Paired-end FastA</option>
-			</param>
-			<when value="singleFastQ">
-				<param name="input1" type="data" format="fastq,fastqillumina,fastqsanger,fq" label="FastQ file" />
-			</when>
-			<when value="pairedFastQ">
-				<param name="input1" type="data" format="fastq,fastqillumina,fastqsanger,fq" label="Forward/Left FastQ file" />
-				<param name="input2" type="data" format="fastq,fastqillumina,fastqsanger,fq" label="Reverse/Right FastQ file" />
-			</when>
-			<when value="singleFastA">
-				<param name="input1" type="data" format="fasta, fa" label="FastA file" />
-			</when>
-			<when value="pairedFastA">
-				<param name="input1" type="data" format="fasta, fa" label="Forward/Left FASTA file" />
-				<param name="input2" type="data" format="fasta, fa" label="Reverse/Right FASTA file" />
-			</when>
-		</conditional>
-
-
-	</inputs>
-	<outputs>
-		<data format="tabular" name="kraken_summary_tsv" label="${tool.name} output summary of ${on_string}" />
-		<!-- <data name="classified_seqs_fq" format_source="input1" label="${tool.name}-classified sequences from ${on_string}" />
-		<data name="unclassified_seqs_fq" format_source="input1" label="${tool.name}-unclassified sequences from ${on_string}" /> -->
-	</outputs>
-
-	<help>
-	This tool wraps the kraken taxonomic sequence classifier.
-	</help>
-</tool>
--- a/kraken_combine.py	Mon May 18 15:29:05 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-#!/usr/bin/env python
-import sys
-import argparse
-
-def anabl_getContigsFromFASTQ(fn):
-    with open(fn) as fi:
-        for head in fi:
-            try:
-                seq, sep, qual = map(lambda x:x.strip(), [fi.next() for i in xrange(3)])
-                yield head[1:], seq, qual
-            except:
-                    break
-    pass
-
-def anabl_getContigsFromFASTA(fn):
-    with open(fn) as fi:
-            for head in fi:
-                try:                
-                    yield head[1:], fi.next().strip()
-                except:
-                    break
-    pass
-
-def toFASTQ(fields):
-    return '@%s\n%s\n+\n%s\n' % fields
-def toFASTA(fields):
-    return '>%s\n%s\n' % fields
-def getFASTQID(head):
-    return head.strip().split()[0].strip('@').strip('/1')
-def getFASTAID(head):
-    return head.strip().split()[0].strip('>').strip('/1')
-
-
-
-def main(argv):
-    DEFAULT_KRAKEN_DB= ''
-    parser = argparse.ArgumentParser(description='')
-    parser.add_argument('--db', default=DEFAULT_KRAKEN_DB, help='Path to kraken db.')  # we don't need taxonomy here
-    parser.add_argument('--in1', default='', help='Forward read file from metagenomic sample.')
-    parser.add_argument('--in2', default='', help='Reverse read file from metagenomic sample.')
-    parser.add_argument('--kraken-results1', help='File containing kraken classification for set1.')
-    parser.add_argument('--kraken-results2', help='File containing kraken classification for set2.')
-    parser.add_argument('--input-format', default='fa', help='fa (FASTA) or fq (FASTQ)')
-    parser.add_argument('--set1-output-left', type=str)
-    parser.add_argument('--set1-output-right', type=str)
-    parser.add_argument('--set2-output-left', type=str)
-    parser.add_argument('--set2-output-right', type=str)
-    parser.add_argument('--unclassified-output-left', type=str)
-    parser.add_argument('--unclassified-output-right', type=str)
-    parser.add_argument('--intersection-output-left', type=str)
-    parser.add_argument('--intersection-output-right', type=str)    
-    args = parser.parse_args()
-
-    if args.input_format == 'fa':
-        getContigs = anabl_getContigsFromFASTA  
-        writeFXRecord = toFASTA
-        getFXID = getFASTAID
-    elif args.input_format == 'fq':
-        getContigs = anabl_getContigsFromFASTQ
-        writeFXRecord = toFASTQ
-        getFXID = getFASTQID
-    else:
-        sys.stderr.write('Error: Unknown input format (%s).\n' % args.input_format)
-        sys.exit()
-
-    try:
-        set1 = [line.strip().split()[:2] for line in open(args.kraken_results1)]
-    except:
-        sys.stderr.write('Error: Set1 is missing, please specify --kraken_results1 parameter.\n')
-        sys.exit()
-
-    nReads = len(set1)
-    set1 = set(map(lambda x:x[1], filter(lambda x:x[0].startswith('C'), set1)))
-
-    try:
-        set2 = set([line.strip().split()[1] for line in open(args.kraken_results2) if line.startswith('C')])
-    except:
-        sys.stderr.write('Error: Set2 is missing, please specify --kraken_results2 parameter.\n')
-        sys.exit()
-
-    try:
-        set1_fwd = open(args.set1_output_left, 'wb')        
-        set2_fwd = open(args.set2_output_left, 'wb')
-        noclass_fwd = open(args.unclassified_output_left, 'wb')
-        undecided_fwd = open(args.intersection_output_left, 'wb')        
-    except:
-        sys.stderr.write('Error: Cannot open fwd outputfile(s).\n')
-        sys.exit()
-
-    try:
-        fwd = getContigs(args.in1) 
-    except:
-        sys.stderr.write('Error: Cannot open file %s.\n' % args.in1)
-        sys.exit()
-
-    rev = None
-    if args.in2:
-        try:
-            rev = getContigs(args.in2)
-        except:
-            sys.stderr.write('Error: Cannot open file %s.\n' % args.in2)
-            sys.exit()            
-        try:
-            set1_rev = open(args.set1_output_right, 'wb')
-            set2_rev = open(args.set2_output_right, 'wb')
-            noclass_rev = open(args.unclassified_output_right, 'wb')
-            undecided_rev = open(args.intersection_output_right, 'wb')
-        except:
-            sys.stderr.write('Error: Cannot open rev outputfile(s).\n')
-            sys.exit()            
-
-
-    for i in xrange(nReads):
-        try:
-            r1 = fwd.next()
-        except:
-            break
-        r2 = None
-        if rev is not None:
-            try:
-                r2 = rev.next()
-            except:
-                break
-    
-        id_ = getFXID(r1[0])
-
-        if id_ in set1:
-            if id_ not in set2:
-                set1_fwd.write(writeFXRecord(r1))
-                if set1_rev: 
-                    set1_rev.write(writeFXRecord(r2))
-            else:
-                undecided_fwd.write(writeFXRecord(r1))
-                if undecided_rev: 
-                    undecided_rev.write(writeFXRecord(r2))
-            
-        elif id_ in set2:
-            set2_fwd.write(writeFXRecord(r1))
-            if set2_rev: 
-                set2_rev.write(writeFXRecord(r2))
-        else:
-            noclass_fwd.write(writeFXRecord(r1))
-            if noclass_rev: 
-                noclass_rev.write(writeFXRecord(r2))
-        pass
-
-    set1_fwd.close()
-    set1_rev.close()
-    set2_fwd.close()
-    set2_rev.close()
-    noclass_fwd.close()
-    noclass_rev.close()
-    undecided_fwd.close()
-    undecided_rev.close()
-    pass
-
-if __name__ == '__main__': main(sys.argv)
--- a/kraken_combine.xml	Mon May 18 15:29:05 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-<tool id="kraken_combine" name="kraken_combine">
-	<description>extract unique and common sequences from two kraken runs</description>
-	<requirements>
-		<requirement type="package" version="2.7.4">python</requirement>
-	</requirements>
-	<command interpreter="python">kraken_combine.py
-		--in1="${dataFormat.input1}"
-		--set1-output-left=${set1OutputLeft}
-		--set2-output-left=${set2OutputLeft}
-		--unclassified-output-left=${unclassifiedOutputLeft}
-		--intersection-output-left=${intersectionOutputLeft}
-		--kraken-results1="${classificationSet1}"
-		--kraken-results2="${classificationSet2}"
-
-		#if $dataFormat.inputFormat == "pairedFASTQ" or $dataFormat.inputFormat == "pairedFASTA":
-			--in2="${dataFormat.input2}"
-			--set1-output-right=${set1OutputRight}
-			--set2-output-right=${set2OutputRight}
-			--unclassified-output-right=${unclassifiedOutputRight}
-			--intersection-output-right=${intersectionOutputRight}
-		#end if
-
-		#if $dataFormat.inputFormat == "singleFASTQ" or $dataFormat.inputFormat == "pairedFASTQ":
-		  --input-format="fq"
-		#else:
-		  --input-format="fa"
-		#end if
-
-
-
-	</command>
-	<inputs>
-		<param name="classificationSet1" type="data" format="tabular" label="Kraken classification output set1" />
-		<param name="classificationSet2" type="data" format="tabular" label="Kraken classification output set2" />
-	
-		<conditional name="dataFormat">
-			<param name="inputFormat" type="select" label="Please select input file type and library type."> 
-				<option value="singleFASTQ">Single-end FASTQ</option>
-				<option value="pairedFASTQ">Paired-end FASTQ</option>
-				<option value="singleFASTA">Single-end FASTA</option>
-				<option value="pairedFASTA">Paired-end FASTA</option>
-			</param>
-			<when value="singleFASTQ">
-				<param name="input1" type="data" format="fastq,fq.gz,fq" label="FASTQ file" />
-			</when>
-			<when value="pairedFASTQ">
-				<param name="input1" type="data" format="fastq,fq.gz,fq" label="Forward/Left FASTQ file" />
-				<param name="input2" type="data" format="fastq,fq.gz,fq" label="Reverse/Right FASTQ file" />
-			</when>
-			<when value="singleFASTA">
-				<param name="input1" type="data" format="fasta,fasta.gz,fasta.bz2,fa.gz" label="FASTA file" />
-			</when>
-			<when value="pairedFASTA">
-				<param name="input1" type="data" format="fasta,fasta.gz,fasta.bz2,fa.gz" label="Forward/Left FASTA file" />
-				<param name="input2" type="data" format="fasta,fasta.gz,fasta.bz2,fa.gz" label="Reverse/Right FASTA file" />
-			</when>
-		</conditional>
-	</inputs>
-
-	<outputs>
-		<data format="input1" name="set1OutputLeft" label="Taxonomy1-unique sequences (R1) of ${on_string}" />
-		<data format="input1" name="set2OutputLeft" label="Taxonomy2-unique sequences (R1) of ${on_string}" />
-		<data format="input1" name="intersectionOutputLeft" label="Common sequences (R1) of ${on_string}" />
-		<data format="input1" name="unclassifiedOutputLeft" label="Unclassified sequences (R1) of ${on_string}" />
-
-		<data format="input2" name="set1OutputRight" label="Taxonomy1-unique sequences (R2) of ${on_string}">
-			<filter>inputFormat == "pairedFASTQ" or inputFormat == "pairedFASTA"</filter>
-		</data>
-		<data format="input2" name="set2OutputRight" label="Taxonomy2-unique sequences (R2) of ${on_string}">
-			<filter>inputFormat == "pairedFASTQ" or inputFormat == "pairedFASTA"</filter>
-		</data>
-		<data format="input2" name="intersectionOutputRight" label="Common sequences (R2) of ${on_string}">
-			<filter>inputFormat == "pairedFASTQ" or inputFormat == "pairedFASTA"</filter>
-		</data>
-		<data format="input2" name="unclassifiedOutputRight" label="Unclassified sequences (R2) of ${on_string}">
-			<filter>inputFormat == "pairedFASTQ" or inputFormat == "pairedFASTA"</filter>
-		</data>
-	</outputs>
-
-	<help>
-	This tool compares the classification results on a dataset using two different kraken-databases.
-	</help>
-</tool>
--- a/kraken_count.py	Mon May 18 15:29:05 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-import csv
-
-from collections import Counter
-
-from kraken_visualize import readTaxonomyNames, readTaxonomyNodes, getDescendents
-
-
-taxons = readTaxonomyNames(os.path.join(sys.argv[2], 'names.dmp'))
-
-taxID = int(sys.argv[3])
-validTaxons = getDescendents(taxID, readTaxonomyNodes(os.path.join(sys.argv[2], 'nodes.dmp'))[1])
-
-c = Counter([int(row[2]) 
-	         for row in csv.reader(open(sys.argv[1]), delimiter='\t', quotechar='"')])
-
-N = float(sum(c.values()))
-ct = 0
-for k in sorted(c, key=lambda x:c[x], reverse=True):
-	if k in validTaxons:
-		print k, taxons.get(k), c[k], '%.10f' % (c[k]/N)
-		ct += c[k]
-	# print k, taxons.get(k, 'N/A'), c[k], 'VALID' if k in validTaxons else ''
-print ct, ct/N
--- a/kraken_filter.py	Mon May 18 15:29:05 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,254 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-import argparse
-import subprocess
-import struct
-import shutil
-import tempfile
-
-from checkFileFormat import verifyFileFormat
-
-DEFAULT_KRAKEN_DB='/tsl/data/krakendb/ktest/db'
-logfile = None
-
-
-def getDescendents(taxID, tree):
-    descendents = set([taxID])
-    queue = [taxID]
-    while queue:
-        node = queue.pop()
-
-        children = tree.get(node, set())
-        if children:
-            descendents = descendents.union(children)
-            queue.extend(children)
-        pass
-    return descendents
-
-def anabl_getSeqsFromFastX(fn, X=2):
-    it = open(fn)
-    for head in it:
-        try:
-            yield (head.strip(), tuple(map(lambda x:x.strip(),
-                                       ([it.next() for i in xrange(X - 1)]))))
-        except:
-            break
-        pass
-    it.close()
-    pass
-
-def readTaxonomy(db):
-    nodeNames = []
-    for line in open(os.path.join(db, 'taxonomy', 'names.dmp')):
-        line = line.strip().strip('|').strip()
-        if not line: break
-        line = line.split('\t|\t')
-
-        if line[3].strip() == 'scientific name':
-            nodeNames.append((int(line[0].strip()), line[1].strip()))
-        # break
-        pass
-
-    nodeRanks = []
-    nodeChildren = {}
-    for line in open(os.path.join(db, 'taxonomy', 'nodes.dmp')):
-        line = line.strip().strip('|').strip()
-        if not line: break
-        line = map(lambda x:x.strip(), line.split('\t|\t'))
-        line[:2] = map(int, line[:2])
-        if line[0] == 1:
-            line[1] = 0
-        try:
-            nodeChildren[line[1]].add(line[0])
-        except:
-            nodeChildren[line[1]] = set([line[0]])
-        nodeRanks.append((line[0], line[2]))
-        # break
-
-    return dict(nodeNames), dict(nodeRanks), nodeChildren
-
-def getFastqIdentifier(string):
-    if string.endswith('/1') or string.endswith('/2'):
-        return string[1:-2]
-    else:
-        return string.split()[0][1:]
-
-def runFilter(db, taxID, inputClassification, inputR1, outputR1, inputR2=None, outputR2=None, fastx=4, debug=False):
-    global logfile
-    logfile.write('Reading taxonomy...\n')
-    logfile.flush()
-    taxonomyInfo = readTaxonomy(db)
-    keepSequences = set()
-    logfile.write('Traversing requested taxonomy branch...\n')
-    logfile.flush()
-    validIDs = getDescendents(taxID, taxonomyInfo[2])
-    logfile.write('Family tree of %s has %i descendents.\n' % (str(taxID), len(validIDs)))
-    logfile.flush()
-    if debug:
-        for vid in validIDs:
-            logfile.write('Added %s to validIDs.\n' % vid)
-            logfile.flush()
-	
-
-    logfile.write('Filtering sequences...\n')
-    logfile.flush()
-    nseqs = 0
-    for line in open(inputClassification):
-        nseqs += 1
-        line = line.strip().split()
-        takeUnclassified = taxID == 0 and line[0] == 'U'
-        takeClassified = line[0] == 'C' and int(line[2]) in validIDs
-        if takeUnclassified or takeClassified:            
-            keepSequences.add(line[1].strip())
-            if debug:
-                logfile.write('Added %s to keepSequences.\n' % line[1].strip())
-                logfile.flush()
-    logfile.write('Keeping %i of %i sequences (%.1f).\n' % (len(keepSequences), nseqs, float(len(keepSequences))/nseqs))
-    logfile.flush()
-    logfile.write('Writing filtered sequence sets...\n')
-    logfile.flush()
-    fwdOut = open(outputR1, 'wb')
-    fwdGen = anabl_getSeqsFromFastX(inputR1, X=fastx)
-  
-    revOut, revGen = None, None
-    revSid, revSeq = None, None
-    if outputR2 is not None and inputR2 is not None:
-        revOut = open(outputR2, 'wb')
-        revGen = anabl_getSeqsFromFastX(inputR2, X=fastx)
-    
-    fqid1, fqid2 = None, None
-    while True:
-        try:
-            fwdSid, fwdSeq = fwdGen.next()
-            fqid1 = getFastqIdentifier(fwdSid)
-            if revGen is not None:
-                revSid, revSeq = revGen.next()
-                fqid2 = getFastqIdentifier(revSid)
-        except:
-            break
-        if fqid1 != fqid2 and fqid2 is not None:
-            sys.stderr.write('Error: fqid-mismatch %s %s.\n' % (fqid1, fqid2))
-            sys.exit(1)
-        if fqid1 in keepSequences:
-            fwdOut.write(('%s\n' * fastx) % ((fwdSid,) + fwdSeq))
-            if revOut is not None:
-                revOut.write(('%s\n' * fastx) % ((revSid,) + revSeq))
-        else:
-            # sys.stdout.write('%s is not in keepSequences\n' % fqid1)
-            pass
-    fwdOut.close()
-    if revOut is not None:
-        revOut.close()
-    pass
-
-
-def main(argv):
-    
-    descr = ''
-    parser = argparse.ArgumentParser(description=descr)
-    parser.add_argument('--dbtype', default='builtinDB', help='Is database built-in or supplied externally?')
-    parser.add_argument('--db', default=DEFAULT_KRAKEN_DB, help='Path to kraken db')
-    parser.add_argument('--in1', help='The r1-file (single-end reads or left paired-end reads).')
-    parser.add_argument('--in2', help='The r2-file (right paired-end reads)')
-    parser.add_argument('--taxid', default=1, help='The root taxon id of the requested branch', type=int)
-    parser.add_argument('--kraken-results', type=str, help='A file containing kraken classification results for the input sequences.')
-    parser.add_argument('--input-format', help='Input sequences stored in fa or fq file(s).', default='fq')
-
-    parser.add_argument('--out1', type=str, help='The r1-output file.')
-    parser.add_argument('--out2', type=str, help='The r2-output file.')
-    parser.add_argument('--debug', action='store_true')
-    parser.add_argument('--logfile', type=str, help='A logfile.', default='kraken_filter.log')
-    args = parser.parse_args()
-
-    kraken_params = []
-    kraken_input = []
-
-    global logfile
-    logfile = open(args.logfile, 'wb')
-    if 'db' not in args or not os.path.exists(args.db):
-        sys.stderr.write('Error: database is missing.\n')
-        sys.exit(1)
-    kraken_params.extend(['--db', args.db])
-    # check whether input file(s) exist(s)
-
-    if 'kraken_results' in args and os.path.exists(args.kraken_results):
-        kraken_input.append(args.kraken_results)
-    else:
-        sys.stderr.write('Error: kraken-classification is missing.\n')
-        sys.exit(1)
-        pass
-
-    if not ('in1' in args and os.path.exists(args.in1)):
-        sys.stderr.write('Error: left/single input file (%s) is missing.\n' % args.in1)
-        sys.exit(1)
-    if not verifyFileFormat(args.in1, args.input_format):
-        sys.stderr.write('Error: fwd/single input file has the wrong format assigned.\n')
-        sys.exit(1)
-
-    kraken_input.append(args.in1)
-    if 'in2' in args:
-        if args.in2 is not None and not os.path.exists(args.in2):
-            sys.stderr.write('Error: right input file (%s) is missing.\n' % args.in2)
-            sys.exit(1)
-        elif args.in2 is not None and not verifyFileFormat(args.in2, args.input_format):
-            sys.stderr.write('Error: rev input file has the wrong format assigned.\n')
-            sys.exit(1)            
-        elif args.in2 is not None:
-            kraken_params.append('--paired')
-            kraken_input.append(args.in2)
-        else:
-            pass
-    else:
-        pass
-    
-    if 'out2' in args and 'in2' in args:
-        input2, output2 = args.in2, args.out2
-    else:
-        input2, output2 = None, None
-
-    if args.taxid < 0:
-        sys.stderr.write('Error: invalid taxon id %i\n' % args.taxid)
-        sys.exit(1)
-    kraken_params.extend(['--taxid', args.taxid])
-
-    if args.input_format == 'fq': 
-        kraken_params.append('--fastq-input')
-        fastx = 4
-    else:
-        kraken_params.append('--fasta-input')
-        fastx = 2
-
-
-
-    # firstChar = open(args.in1).read(1)
-    # if firstChar == '>':
-    #    kraken_params.append('--fasta-input')
-    #    fastx = 2
-    # elif firstChar == '@':
-    #    kraken_params.append('--fastq-input')
-    #    fastx = 4
-    #else:
-    #    """ This will currently disable working with gzipped/bzipped files. """
-    #    sys.stderr.write('Error: Input file starts with unknown symbol %s.\n' % firstChar)
-    #    sys.exit(1)
-    #    pass
-
-    #open(args.kraken_filtered_r1, 'wb').write('\n'.join(map(str, kraken_params + kraken_input)))
-   
-    runFilter(args.db, int(args.taxid), args.kraken_results, 
-              args.in1, args.out1,
-              inputR2=input2, outputR2=output2, fastx=fastx,
-              debug=args.debug)
-
-    logfile.close()
-
-    pass
-
-
- 
-    
-# main(sys.argv[1:])
-
-if __name__ == '__main__': main(sys.argv[1:])
--- a/kraken_filter.xml	Mon May 18 15:29:05 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-<tool id="kraken_filter" name="kraken_filter">
-	<description>kraken result filter</description>
-	<requirements>
-	  <requirement type="package" version="2.7.4">python</requirement>
-	</requirements>
-	<command interpreter="python">kraken_filter.py 
-		--dbtype="${databaseChoice.database}"
-		#if $databaseChoice.database == "builtinDB":
-		  --db="${databaseChoice.builtinDatabases.fields.path}"
-		#else:
-		  --db="NOT_SUPPORTED_YET"
-		#end if
-	
-		--in1="${dataFormat.input1}"
-		--out1="${kraken_filtered_r1}"        
-
-		#if $dataFormat.inputFormat == "pairedFastQ" or $dataFormat.inputFormat == "pairedFastA":
-		  --in2="${dataFormat.input2}"
-		  --out2="${kraken_filtered_r2}"
-		#end if
-
-		#if $dataFormat.inputFormat == "singleFastQ" or $dataFormat.inputFormat == "pairedFastQ":
-		  --input-format="fq"
-		#else:
-		  --input-format="fa"
-		#end if
-
-		#if $whichFilter.whichFilterp == "filterClassified":
-		  --taxid="${whichFilter.taxonID}"
-		#else:
-		  --taxid="0"
-		#end if
-
-                --kraken-results="${kraken_classification}"
-        
-                --logfile="${kraken_filter_log}"
-	</command>
-	<inputs>
-		<conditional name="databaseChoice">
-			<param name="database" type="select" label="Do you want to use your own kraken database or use the built-in ktest database?">
-				<option value="builtinDB">Use built-in db (ktest)</option>
-				<option value="myownDB">Use a db from my history</option>
-			</param>
-			<when value="builtinDB">
-				<param name="builtinDatabases" type="select" label="Select a built-in kraken database">
-					<options from_data_table="krakenDBs">
-						<filter type="sort_by" column="2" />
-						<validator type="no_options" message="No databases are available" />
-					</options>
-				</param>
-			</when>
-			<when value="myownDB">
-				<param name="myownDB" type="data" format="fasta" metadata_name="dbkey" label="Select database" />
-			</when>
-		</conditional>
-
-                <conditional name="whichFilter">
-			<param name="whichFilterp" type="select" label="Filter classified or unclassified reads?">
-				<option value="filterClassified">Filter classified reads</option>
-				<option value="filterUnclassified">Filter unclassified reads</option>
-			</param>
-			<when value="filterClassified">
-				<param name="taxonID" type="integer" label="Taxonomy ID of root taxon (default:1 - 'all')" value="1" default="1" />				
-			</when>
-                </conditional>
-
-		<param name = "kraken_classification" type="data" format="tabular" label="Kraken classification output" />
-<!--
-		<conditional name="libraryType">
-			<param name="libtype" type="select" label="Is this library single- or paired-end?">
-				<option value="single">Single-end</option>
-				<option value="paired">Paired-end</option>
-			</param>
-			<when value="single">
-				<param name="input1" type="data" format="fasta,fastq,fasta.gz,fasta.bz2,fa.gz,fq.gz,fa,fq" label="Fasta/Fastq file" />
-			</when>
-			<when value="paired">
-				<param name="input1" type="data" format="fasta,fastq,fasta.gz,fasta.bz2,fa.gz,fq.gz,fa,fq" label="Left Fasta/Fastq file" />
-				<param name="input2" type="data" format="fasta,fastq,fasta.gz,fasta.bz2,fa.gz,fq.gz,fa,fq" label="Right Fasta/Fastq file" />
-			</when>
-		</conditional>
--->
-<!-- new -->
-
-		<conditional name="dataFormat">
-			<param name="inputFormat" type="select" label="Please select input file type and library type."> 
-				<option value="singleFastQ">Single-end FASTQ</option>
-				<option value="pairedFastQ">Paired-end FASTQ</option>
-				<option value="singleFastA">Single-end FASTA</option>
-				<option value="pairedFastA">Paired-end FASTA</option>
-			</param>
-			<when value="singleFastQ">
-				<param name="input1" type="data" format="fastq,fq.gz,fq" label="FASTQ file" />
-			</when>
-			<when value="pairedFastQ">
-				<param name="input1" type="data" format="fastq,fq.gz,fq" label="Forward/Left FASTQ file" />
-				<param name="input2" type="data" format="fastq,fq.gz,fq" label="Reverse/Right FASTQ file" />
-			</when>
-			<when value="singleFastA">
-				<param name="input1" type="data" format="fasta,fasta.gz,fasta.bz2,fa.gz" label="FASTA file" />
-			</when>
-			<when value="pairedFastA">
-				<param name="input1" type="data" format="fasta,fasta.gz,fasta.bz2,fa.gz" label="Forward/Left FASTA file" />
-				<param name="input2" type="data" format="fasta,fasta.gz,fasta.bz2,fa.gz" label="Reverse/Right FASTA file" />
-			</when>
-		</conditional>
-
-<!-- new -->
-
-	</inputs>
-	<outputs>
-                <data format="input1" name="kraken_filtered_r1" label="${tool.name} filtered fwd-reads of ${on_string}" />
-                <data format="input2" name="kraken_filtered_r2" label="${tool.name} filtered rev-reads of ${on_string}">
-                	<filter>inputFormat == "pairedFastQ" or inputFormat == "pairedFastA</filter>
-
-                </data>
-                <data format="txt" name="kraken_filter_log" label="${tool.name} logfile (${on_string})" />
-	</outputs>
-
-	<help>
-	This tool is a downstream filter for kraken-classified sequences. 
-	</help>
-</tool>
--- a/kraken_summarize.py	Mon May 18 15:29:05 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-#!/usr/bin/env python
-import sys
-import subprocess
-import argparse
-
-from collections import Counter
-
-from Bio import Entrez
-
-
-
-# U	HWI-ST933:109:C2A2NACXX:5:1101:1311:2013	0	50	Q:0
-def fetchTaxonomyData(ids, email='christian.schudoma@tsl.ac.uk'):
-    Entrez.email = email
-    handle = Entrez.efetch(db='Taxonomy', id=','.join(ids), retmode='xml')
-    records = Entrez.read(handle)
-    return records
-
-def writeKronaInput(fi, taxInfo, unclassified=0):
-    if unclassified:
-        fi.write('%i\tUnclassified\n' % unclassified)
-    for tid in sorted(taxInfo, key=lambda x:taxInfo[x][0]['Lineage']):
-        fi.write('%i\t%s\n' % (taxInfo[tid][1], '; '.join([taxInfo[tid][0]['Lineage'].strip(), taxInfoDict[tid][0]['ScientificName']]).replace('; ', '\t').strip('\t')))
-    pass
-
-def writeOutput(out, taxInfoDict, c):
-    for tid in sorted(taxInfoDict, reverse=True, key=lambda x:taxInfoDict[x][1]):
-        data = [tid, taxInfoDict[tid][1], taxInfoDict[tid][0]['TaxId'], taxInfoDict[tid][0]['Lineage'], taxInfoDict[tid][0]['ScientificName']]
-        out.write('\t'.join(data) + '\n')
-    data = (sum(c.values()) - c['0'], sum(c.values()), (sum(c.values()) - c['0']) / float(sum(c.values())) * 100, c['0'])
-    out.write('%i/%i (%.5f%%) classified, %i unclassified\n' % data)
-
-
-def main(argv):
-
-    parser = argparse.ArgumentParser(description='')
-    parser.add_argument('--krona-output', type=str, default='')
-    parser.add_argument('--output', type=str)
-    parser.add_argument('--call-krona', type=str)
-    parser.add_argument('--include-unclassified')
-    parser.add_argument('kraken_summary_tsv', type=str)
-    args = parser.parse_args()
-
-    c = Counter(line.strip().split()[2] for line in open(sys.argv[1]))
-    taxids = sorted(c.keys(), key=lambda x:c[x], reverse=True)
-    taxData = fetchTaxonomyData(taxids)
-    taxInfoDict = {tinfo['TaxId']: [tinfo, c[tinfo['TaxId']]] for tinfo in taxData}
-
-    kr_out = None
-    if 'krona_output' in args:
-        with open(args.krona_output, 'wb') as kr_out:
-            if 'include_unclassified' in args:
-                writeKronaInput(kr_out, taxInfoDict, unclassified=c['0'])
-            else:
-                writeKronaInput(kr_out, taxInfoDict)
-
-        if 'call_krona' in args:
-            p = subprocess.Popen('source krona_tools-2.4; ktImportText -o %s %s' % (args.call_krona, args.krona_output), shell=True, stdout=subprocess.PIPE)
-            p.communicate()
-
-    if 'output' in args:
-        if args.output == '-':
-            writeOutput(sys.stdout, taxInfoDict, c)
-        else:
-            with open(args.output, 'wb') as out:
-                writeOutput(out, taxInfoDict, c)
-
-
-
-
-
-
-
-
-"""
-2	Fats	Saturated fat
-3	Fats	Unsaturated fat	Monounsaturated fat
-3	Fats	Unsaturated fat	Polyunsaturated fat
-13	Carbohydrates	Sugars
-4	Carbohydrates	Dietary fiber
-21	Carbohydrates
-5	Protein
-4
-"""
-
-
-
-"""
-handle = Entrez.efetch(db="Taxonomy", id="1323524", retmode="xml")
-records  = Entrez.read(handle)
-records[0]["Lineage"]
-'Viruses; dsRNA viruses; Partitiviridae; Betapartitivirus'
-records[0]["LineageEx"]
-[{u'ScientificName': 'Viruses', u'TaxId': '10239', u'Rank': 'superkingdom'}, {u'ScientificName': 'dsRNA viruses', u'TaxId': '35325', u'Rank': 'no rank'}, {u'ScientificName': 'Partitiviridae', u'TaxId': '11012', u'Rank': 'family'}, {u'ScientificName': 'Betapartitivirus', u'TaxId': '1511809', u'Rank': 'genus'}]
-"""
-
-"""
-{u'Lineage': 'Viruses; dsDNA viruses, no RNA stage; Iridoviridae; unclassified Iridoviridae', u'Division': 'Viruses', u'ParentTaxId': '180169', u'PubDate': '2014/03/16 07:01:27', u'LineageEx': [{u'ScientificName': 'Viruses', u'TaxId': '10239', u'Rank': 'superkingdom'}, {u'ScientificName': 'dsDNA viruses, no RNA stage', u'TaxId': '35237', u'Rank': 'no rank'}, {u'ScientificName': 'Iridoviridae', u'TaxId': '10486', u'Rank': 'family'}, {u'ScientificName': 'unclassified Iridoviridae', u'TaxId': '180169', u'Rank': 'no rank'}], u'CreateDate': '2014/02/24 15:56:28', u'TaxId': '1465751', u'Rank': 'species', u'GeneticCode': {u'GCId': '1', u'GCName': 'Standard'},
-u'ScientificName': 'Anopheles minimus irodovirus', u'MitoGeneticCode': {u'MGCId': '0', u'MGCName': 'Unspecified'}, u'UpdateDate': '2014/02/24 15:56:29'}
-
-"""
--- a/kraken_summarize.xml	Mon May 18 15:29:05 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-<tool id="kraken_summarize" name="kraken_summarize">
-	<description></description>
-	<requirements>
-	  <requirement type="package" version="2.7.4">python</requirement>
-	</requirements>
-	<command interpreter="python">kraken_summarize.py
-		  --krona-output=$krona_output
-			--output=$tax_summary
-			--call-krona=$krona_html
-			$kraken_summary_tsv
-	</command>
-
-
-	<inputs>
-		<param format="tabular" name="kraken_summary_tsv" type="data" label="Kraken summary table"/>
-		</inputs>
-	<outputs>
-		<data format="html" name="krona_html" label="Krona visualization of ${tool.name}" />
-		<data format="tabular" name="krona_output" label="Krona input" />
-		<data format="tabular" name="tax_summary" label="Taxonomy class summary" />
-	</outputs>
-
-	<help>
-	Krona visualisation and classification summary of Kraken runs.
-	</help>
-</tool>
--- a/kraken_visualize.py	Mon May 18 15:29:05 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-
-def readTaxonomyNames(names_dmp):
-    nodeNames = []
-    for line in open(names_dmp):
-        line = line.strip().strip('|').strip()
-        if not line: break
-        line = line.split('\t|\t')
-        if line[3].strip() == 'scientific name':
-            nodeNames.append((int(line[0].strip()), line[1].strip()))        
-        pass
-    return dict(nodeNames)
-
-def readTaxonomyNodes(nodes_dmp):    
-    nodeRanks = []
-    nodeChildren = {}
-    nodeParents = {}
-    for line in open(nodes_dmp):
-        line = line.strip().strip('|').strip()
-        if not line: break
-        line = map(lambda x:x.strip(), line.split('\t|\t'))
-        line[:2] = map(int, line[:2])
-        if line[0] == 1:
-            line[1] = 1    
-
-        nodeParents[line[0]] = line[1]
-        try:
-            nodeChildren[line[1]].add(line[0])
-        except:
-            nodeChildren[line[1]] = set([line[0]])
-        nodeRanks.append((line[0], line[2]))
-
-    return dict(nodeRanks), nodeChildren, nodeParents
-
-def getDescendents(taxID, tree):
-    descendents = set([taxID])
-    queue = [taxID]
-    while queue:
-        node = queue.pop()
-
-        children = tree.get(node, set())
-        if children:
-            descendents = descendents.union(children)
-            queue.extend(children)
-        pass
-    return descendents
\ No newline at end of file
--- a/tool_dependencies.xml	Mon May 18 15:29:05 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<tool_dependency>
-    <package name="python" version="2.7">
-        <repository changeset_revision="25b20b323706" name="package_python_2_7" owner="iuc" toolshed="https://testtoolshed.g2.bx.psu.edu" />
-    </package>
-    <package name="biopython" version="1.65">
-        <repository changeset_revision="f8d72690eeae" name="package_biopython_1_65" owner="biopython" toolshed="https://testtoolshed.g2.bx.psu.edu" />
-    </package>
-</tool_dependency>