def read_blast(blast_file, qorder, sorder, is_self=False): """ read the blast and convert name into coordinates """ fp = open(blast_file) filtered_blast = [] seen = set() for row in fp: b = BlastLine(row) query, subject = b.query, b.subject if query not in qorder or subject not in sorder: continue key = query, subject if key in seen: continue seen.add(key) qi, q = qorder[query] si, s = sorder[subject] if is_self and qi > si: # remove redundant a<->b to one side when doing self-self BLAST query, subject = subject, query qi, si = si, qi q, s = s, q b.qseqid, b.sseqid = q.seqid, s.seqid b.qi, b.si = qi, si filtered_blast.append(b) return filtered_blast
def read_blast(blast_file, qorder, sorder, is_self=False, ostrip=True): """ read the blast and convert name into coordinates """ fp = open(blast_file) filtered_blast = [] seen = set() for row in fp: b = BlastLine(row) query, subject = b.query, b.subject if query == subject: continue if ostrip: query, subject = gene_name(query), gene_name(subject) if query not in qorder or subject not in sorder: continue qi, q = qorder[query] si, s = sorder[subject] if is_self and qi > si: # remove redundant a<->b to one side when doing self-self BLAST query, subject = subject, query qi, si = si, qi q, s = s, q key = query, subject if key in seen: continue seen.add(key) b.qseqid, b.sseqid = q.seqid, s.seqid b.qi, b.si = qi, si b.query, b.subject = query, subject filtered_blast.append(b) logging.debug("A total of {0} BLAST imported from `{1}`.".\ format(len(filtered_blast), blast_file)) return filtered_blast