I need to extract (or to calculate precisely) the query coverage from Blast output. I am using NCBIWWW.qblast to query Blast in XML format.

Is it possible to know the query coverage parsing the XML output? If yes, how?

result_handle_xml = NCBIWWW.qblast("blastp","pdb",my_query.seq,format_type='XML')

here it suggest to use '-6 qcovs', but only for BLAST command line version and only for tabular format

This is the fasta file that I open:

>sp|P02489|CRYAA_HUMAN Alpha-crystallin A chain OS=Homo sapiens 
  • $\begingroup$ Please edit your question and include an example of the file you are trying to parse. We can't really help you parse data you don't show. $\endgroup$
    – terdon
    Dec 28, 2017 at 10:30
  • $\begingroup$ I see you edited, but you still haven't shown us the file you are trying to parse. Is the information even there? Please add an example so we know what you're working with. $\endgroup$
    – terdon
    Dec 28, 2017 at 16:55
  • 2
    $\begingroup$ According to this, the answer is 'no'. $\endgroup$ Dec 28, 2017 at 21:19
  • $\begingroup$ @AndreaSpinelli please consider the answers provided and whether these answered your question. If so please remember to "accept" an answer, it helps with site stats $\endgroup$
    – M__
    Sep 2 at 13:30

2 Answers 2


I had the same problem. I'm pretty sure you can calculate it yourself using the following:

  1. The length of your sequence (seq_len)

  2. The value from the <Hsp_query-from> tag from the hit (<Hsp_query-from>)

  3. The value from the <Hsp_query-to> tag from the hit (<Hsp_query-to>)

It can be calculated by:

query_cover = (<Hsp_query-to> - <Hsp_query-from> + 1) / seq_len * 100

Please note that I did not get this from any documentation. I figured it out by staring at the xml output returned from the Biopython NCBIWWW.qblast() function. This solution seems to match with the results I get by blasting the same sequence on the interactive web portal.

record = NCBIXML.read(result_handle_xml)
query_len = record.query_length
for alignment in record.alignments:
    _ = alignment.hsps.__next__()
    query_cover = (_.query_end - _.query_start + 1) / query_len * 100

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.