code: def blast(args):
      
      p = OptionParser(blast.__doc__)
      p.add_option("--dist", default=100, type="int",
              help="Merge adjacent HSPs separated by [default: %default]")
      p.add_option("--db",
              help="Use a different database rather than UniVec_Core")
      opts, args = p.parse_args(args)
  
      if len(args) != 1:
          sys.exit(not p.print_help())
  
      fastafile, = args
      fastaprefix = fastafile.split(".", 1)[0]
  
      univec = opts.db or download("ftp://ftp.ncbi.nih.gov/pub/UniVec/UniVec_Core")
      uniprefix = univec.split(".", 1)[0]
  
      fastablast = fastaprefix + ".{0}.blast".format(uniprefix)
  
      prog = run_megablast if opts.db else run_vecscreen
      prog(infile=fastafile, outfile=fastablast, db=univec, pctid=95, hitlen=50)
  
      fp = open(fastablast)
      ranges = []
      for row in fp:
          b = BlastLine(row)
          ranges.append((b.query, b.qstart, b.qstop))
  
      merged_ranges = range_merge(ranges, dist=opts.dist)
      bedfile = fastaprefix + ".{0}.bed".format(uniprefix)
      fw = must_open(bedfile, "w")
      for seqid, start, end in merged_ranges:
          print("\t".join(str(x) for x in (seqid, start - 1, end, uniprefix)), file=fw)
  
      return bedfile
docs: %prog blast fastafile
  
      Run BLASTN against database (default is UniVec_Core).  Output .bed format
      on the vector/contaminant ranges.