code: def blast(args):
      
      from jcvi.apps.align import run_megablast
  
      p = OptionParser(blast.__doc__)
      p.add_option("-n", type="int", default=2,
              help="Take best N hits [default: %default]")
      opts, args = p.parse_args(args)
  
      if len(args) != 2:
          sys.exit(not p.print_help())
  
      allfasta, clonename = args
      fastadir = "fasta"
      infile = op.join(fastadir, clonename + ".fasta")
      if not op.exists(infile):
          entrez([clonename, "--skipcheck", "--outdir=" + fastadir])
  
      outfile = "{0}.{1}.blast".format(clonename, allfasta.split(".")[0])
      run_megablast(infile=infile, outfile=outfile, db=allfasta, \
              pctid=GoodPct, hitlen=GoodOverlap)
  
      blasts = [BlastLine(x) for x in open(outfile)]
      besthits = []
      for b in blasts:
          if b.query.count("|") >= 3:
              b.query = b.query.split("|")[3]
  
          if b.subject.count("|") >= 3:
              b.subject = b.subject.split("|")[3]
  
          b.query = b.query.rsplit(".", 1)[0]
          b.subject = b.subject.rsplit(".", 1)[0]
  
          if b.query == b.subject:
              continue
  
          if b.subject not in besthits:
              besthits.append(b.subject)
          if len(besthits) == opts.n:
              break
  
      for b in besthits:
          overlap([clonename, b, "--dir=" + fastadir])
docs: %prog blast allfasta clonename
  
      Insert a component into agpfile by aligning to the best hit in pool and see
      if they have good overlaps.