Mercurial > repos > devteam > megablast_xml_parser
changeset 1:3ce5d56297ed draft default tip
"planemo upload for repository https://github.com/galaxyproject/tools-devteam/tree/master/tools/megablast_xml_parser commit 3ccddd4e2032535ead030efa401e690ffb80d145"
author | devteam |
---|---|
date | Wed, 09 Sep 2020 10:27:20 +0000 |
parents | 35ff246876fc |
children | |
files | megablast_xml_parser.py megablast_xml_parser.xml repository_dependencies.xml |
diffstat | 3 files changed, 72 insertions(+), 87 deletions(-) [+] |
line wrap: on
line diff
--- a/megablast_xml_parser.py Mon May 19 10:59:33 2014 -0400 +++ b/megablast_xml_parser.py Wed Sep 09 10:27:20 2020 +0000 @@ -1,78 +1,64 @@ #!/usr/bin/env python - -import sys, os, re -if sys.version_info[:2] >= ( 2, 5 ): - import xml.etree.cElementTree as ElementTree -else: - from galaxy import eggs - import pkg_resources; pkg_resources.require( "elementtree" ) - from elementtree import ElementTree +import re +import sys +import xml.etree.cElementTree as ElementTree -def stop_err( msg ): - sys.stderr.write( "%s\n" % msg ) - sys.exit() def __main__(): - source = sys.argv[1] - hspTags = [ - "Hsp_bit-score", - "Hsp_evalue", - "Hsp_query-from", - "Hsp_query-to", - "Hsp_hit-from", - "Hsp_hit-to", - "Hsp_query-frame", - "Hsp_hit-frame", - "Hsp_identity", - "Hsp_align-len", - "Hsp_qseq", - "Hsp_hseq", - "Hsp_midline" - ] - hspData = [] + source = sys.argv[1] + hspTags = ["Hsp_bit-score", + "Hsp_evalue", + "Hsp_query-from", + "Hsp_query-to", + "Hsp_hit-from", + "Hsp_hit-to", + "Hsp_query-frame", + "Hsp_hit-frame", + "Hsp_identity", + "Hsp_align-len", + "Hsp_qseq", + "Hsp_hseq", + "Hsp_midline"] # get an iterable - try: - context = ElementTree.iterparse( source, events=( "start", "end" ) ) - except: - stop_err( "Invalid data format." ) + try: + context = ElementTree.iterparse(source, events=("start", "end")) + except Exception: + sys.exit("Invalid data format.") # turn it into an iterator - context = iter( context ) + context = iter(context) # get the root element try: - event, root = context.next() - except: - stop_err( "Invalid data format." ) + event, root = next(context) + except Exception: + sys.exit("Invalid data format.") - outfile = open( sys.argv[2], 'w' ) - try: - for event, elem in context: - # for every <Iteration> tag - if event == "end" and elem.tag == "Iteration": - query = elem.findtext( "Iteration_query-def" ) - qLen = elem.findtext( "Iteration_query-len" ) - # for every <Hit> within <Iteration> - for hit in elem.findall( "Iteration_hits/Hit" ): - subject = hit.findtext( "Hit_id" ) - if re.search( '^gi', subject ): - subject = subject.split('|')[1] - sLen = hit.findtext( "Hit_len" ) - # for every <Hsp> within <Hit> - for hsp in hit.findall( "Hit_hsps/Hsp" ): - outfile.write( "%s\t%s\t%s\t%s" % ( query, qLen, subject, sLen ) ) - for tag in hspTags: - outfile.write("\t%s" %(hsp.findtext( tag ))) - #hspData.append( hsp.findtext( tag ) ) - #hspData = [] - outfile.write('\n') - # prevents ElementTree from growing large datastructure - root.clear() - elem.clear() - except: - outfile.close() - stop_err( "The input data is malformed, or there is more than one dataset in the input file. Error: %s" % sys.exc_info()[1] ) + with open(sys.argv[2], 'w') as outfile: + try: + for event, elem in context: + # for every <Iteration> tag + if event == "end" and elem.tag == "Iteration": + query = elem.findtext("Iteration_query-def") + qLen = elem.findtext("Iteration_query-len") + # for every <Hit> within <Iteration> + for hit in elem.findall("Iteration_hits/Hit"): + subject = hit.findtext("Hit_id") + if re.search('^gi', subject): + subject = subject.split('|')[1] + sLen = hit.findtext("Hit_len") + # for every <Hsp> within <Hit> + for hsp in hit.findall("Hit_hsps/Hsp"): + outfile.write("%s\t%s\t%s\t%s" % (query, qLen, subject, sLen)) + for tag in hspTags: + outfile.write("\t%s" % (hsp.findtext(tag))) + outfile.write('\n') + # prevents ElementTree from growing large datastructure + root.clear() + elem.clear() + except Exception: + sys.exit("The input data is malformed, or there is more than one dataset in the input file. Error: %s" % sys.exc_info()[1]) - outfile.close() -if __name__ == "__main__": __main__() +if __name__ == "__main__": + __main__()
--- a/megablast_xml_parser.xml Mon May 19 10:59:33 2014 -0400 +++ b/megablast_xml_parser.xml Wed Sep 09 10:27:20 2020 +0000 @@ -1,18 +1,23 @@ -<tool id="megablast_xml_parser" name="Parse blast XML output" version="1.0.0"> -<description></description> -<command interpreter="python">megablast_xml_parser.py $input1 $output1</command> -<inputs> - <param name="input1" type="data" format="blastxml" label="Megablast XML output" /> -</inputs> -<outputs> - <data name="output1" format="tabular"/> -</outputs> -<tests> - <test> - <param name="input1" value="megablast_xml_parser_test1.gz" ftype="blastxml" /> - <output name="output1" file="megablast_xml_parser_test1_out.tabular" ftype="tabular" /> - </test> -</tests> +<tool id="megablast_xml_parser" name="Parse blast XML output" version="1.0.1"> + <description></description> + <requirements> + <requirement type="package" version="3.8">python</requirement> + </requirements> + <command><![CDATA[ + python '$__tool_directory__/megablast_xml_parser.py' '$input1' '$output1' + ]]></command> + <inputs> + <param name="input1" type="data" format="blastxml" label="Megablast XML output" /> + </inputs> + <outputs> + <data name="output1" format="tabular"/> + </outputs> + <tests> + <test> + <param name="input1" value="megablast_xml_parser_test1.gz" ftype="blastxml" /> + <output name="output1" file="megablast_xml_parser_test1_out.tabular" ftype="tabular" /> + </test> + </tests> <help> **What it does** @@ -54,7 +59,5 @@ Note that this form of output does not contain alignment identify value. However, it can be computed by dividing the number of identical bases within the alignment (Field 13) by the alignment length (Field 14) using *Text Manipulation->Compute* tool - - -</help> + </help> </tool>
--- a/repository_dependencies.xml Mon May 19 10:59:33 2014 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -<?xml version="1.0"?> -<repositories> - <repository changeset_revision="939a600f45e9" name="blast_datatypes" owner="devteam" toolshed="http://testtoolshed.g2.bx.psu.edu" /> -</repositories>