| 
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="")
 |