mirror of
https://github.com/lh3/minimap2.git
synced 2026-09-15 13:07:55 +08:00
exposed fasta/q reader to mappy
This commit is contained in:
@@ -3,47 +3,14 @@
|
||||
import sys, getopt
|
||||
import mappy as mp
|
||||
|
||||
def readfq(fp): # multi-line fasta/fastq parser
|
||||
last = None
|
||||
while True:
|
||||
if not last:
|
||||
for l in fp:
|
||||
if l[0] in '>@':
|
||||
last = l[:-1]
|
||||
break
|
||||
if not last: break
|
||||
name, seqs, last = last[1:].split()[0], [], None
|
||||
for l in fp:
|
||||
if l[0] in '@+>':
|
||||
last = l[:-1]
|
||||
break
|
||||
seqs.append(l[:-1])
|
||||
if not last or last[0] != '+':
|
||||
yield name, ''.join(seqs), None
|
||||
if not last: break
|
||||
else:
|
||||
seq, leng, seqs = ''.join(seqs), 0, []
|
||||
for l in fp:
|
||||
seqs.append(l[:-1])
|
||||
leng += len(l) - 1
|
||||
if leng >= len(seq):
|
||||
last = None
|
||||
yield name, seq, ''.join(seqs);
|
||||
break
|
||||
if last:
|
||||
yield name, seq, None
|
||||
break
|
||||
|
||||
def main(argv):
|
||||
opts, args = getopt.getopt(argv[1:], "")
|
||||
if len(args) < 2:
|
||||
print("Usage: minimap2.py <ref.fa>|<ref.mmi> <query.fq>")
|
||||
sys.exit(1)
|
||||
a = mp.Aligner(args[0]) # load/build index
|
||||
if not a:
|
||||
print("ERROR: failed to load/build index")
|
||||
return
|
||||
for name, seq, qual in readfq(open(args[1])): # read one sequence
|
||||
if not a: raise Exception("ERROR: failed to load/build index file '{}'".format(args[0]))
|
||||
for name, seq, qual in mp.fastx_read(args[1]): # read one sequence
|
||||
for h in a.map(seq): # traverse hits
|
||||
print('{}\t{}\t{}'.format(name, len(seq), h))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user