def blat(args): """ %prog blat map1.txt ref.fasta Make ALLMAPS input csv based on sequences. The tab-delimited txt file include: name, LG, position, sequence. """ from jcvi.formats.base import is_number from jcvi.formats.blast import best as blast_best, bed as blast_bed from jcvi.apps.align import blat as blat_align p = OptionParser(blat.__doc__) opts, args = p.parse_args(args) if len(args) != 2: sys.exit(not p.print_help()) maptxt, ref = args pf = maptxt.rsplit(".", 1)[0] register = {} fastafile = pf + ".fasta" fp = open(maptxt) fw = open(fastafile, "w") for row in fp: name, lg, pos, seq = row.split() if not is_number(pos): continue register[name] = (pf + '-' + lg, pos) print(">{0}\n{1}\n".format(name, seq), file=fw) fw.close() blatfile = blat_align([ref, fastafile]) bestfile = blast_best([blatfile]) bedfile = blast_bed([bestfile]) b = Bed(bedfile).order pf = ".".join((op.basename(maptxt).split(".")[0], op.basename(ref).split(".")[0])) csvfile = pf + ".csv" fp = open(maptxt) fw = open(csvfile, "w") for row in fp: name, lg, pos, seq = row.split() if name not in b: continue bbi, bb = b[name] scaffold, scaffold_pos = bb.seqid, bb.start print(",".join(str(x) for x in \ (scaffold, scaffold_pos, lg, pos)), file=fw) fw.close()
def blat(args): """ %prog blat map1.txt ref.fasta Make ALLMAPS input csv based on sequences. The tab-delimited txt file include: name, LG, position, sequence. """ from jcvi.formats.base import is_number from jcvi.formats.blast import best as blast_best, bed as blast_bed from jcvi.apps.align import blat as blat_align p = OptionParser(blat.__doc__) opts, args = p.parse_args(args) if len(args) != 2: sys.exit(not p.print_help()) maptxt, ref = args pf = maptxt.rsplit(".", 1)[0] register = {} fastafile = pf + ".fasta" fp = open(maptxt) fw = open(fastafile, "w") for row in fp: name, lg, pos, seq = row.split() if not is_number(pos): continue register[name] = (pf + '-' + lg, pos) print(">{0}\n{1}\n".format(name, seq), file=fw) fw.close() blatfile = blat_align([ref, fastafile]) bestfile = blast_best([blatfile]) bedfile = blast_bed([bestfile]) b = Bed(bedfile).order pf = ".".join( (op.basename(maptxt).split(".")[0], op.basename(ref).split(".")[0])) csvfile = pf + ".csv" fp = open(maptxt) fw = open(csvfile, "w") for row in fp: name, lg, pos, seq = row.split() if name not in b: continue bbi, bb = b[name] scaffold, scaffold_pos = bb.seqid, bb.start print(",".join(str(x) for x in \ (scaffold, scaffold_pos, lg, pos)), file=fw) fw.close()