| 0 | 1 #!/usr/bin/env python3 | 
|  | 2 ''' | 
|  | 3 wrapper for last program | 
|  | 4 run last  with BlastTab+ output and return mgblast like formated output | 
|  | 5 last BlastTab+ output column order: | 
|  | 6 1 query name | 
|  | 7 2 reference name | 
|  | 8 3 percent identity | 
|  | 9 4 alignment length | 
|  | 10 5 mismatches | 
|  | 11 6 gap opens | 
|  | 12 7 query start | 
|  | 13 8 query end | 
|  | 14 9 reference start | 
|  | 15 10 reference end | 
|  | 16 11 e-value | 
|  | 17 12 bitscore | 
|  | 18 13 length of query | 
|  | 19 14 length of reference sequence | 
|  | 20 (accordin lastal manual - more column may be added in future) | 
|  | 21 | 
|  | 22 Needed mgblast order: | 
|  | 23 | 
|  | 24 qseqid   1 -> 1 | 
|  | 25 qlen     2 -> 13 | 
|  | 26 qstart   3 -> 7 | 
|  | 27 qend     4 -> 8 | 
|  | 28 sseqid   5 -> 2 | 
|  | 29 slen     6 -> 14 | 
|  | 30 sstart   7 -> 9 | 
|  | 31 send     8 -> 10 | 
|  | 32 pident   9 -> 3 | 
|  | 33 bitscore 10-> 12 | 
|  | 34 evalue   11-> 11 | 
|  | 35 sstrand  12-> must be evaluated! | 
|  | 36 | 
|  | 37 ''' | 
|  | 38 import subprocess | 
|  | 39 import sys | 
|  | 40 last_command = " ".join(["lastal"] + sys.argv[1:]) | 
|  | 41 p = subprocess.Popen(last_command, shell=True, stdout=subprocess.PIPE) | 
|  | 42 for j in p.stdout: | 
|  | 43     line = j.decode() | 
|  | 44     if line[0] != "#": | 
|  | 45         items = line.split("\t") | 
|  | 46         strand = "+" if int(items[6]) < int(items[7]) else "-" | 
|  | 47         out = "\t".join([items[i - 1] | 
|  | 48                          for i in [1, 13, 7, 8, 2, 14, 9, 10, 3, 12, 11] | 
|  | 49                          ]) + "\t" + strand + "\n" | 
|  | 50         print(out, end="") |