code: def process_blast(
      blast_dir,
      org_lengths,
      fraglengths=None,
      mode="ANIb",
      identity=0.3,
      coverage=0.7,
      logger=None,
  ):
      blastfiles = pyani_files.get_input_files(blast_dir, ".blast_tab")
      results = ANIResults(list(org_lengths.keys()), mode)
      for org, length in list(org_lengths.items()):
          results.alignment_lengths[org][org] = length
      for blastfile in blastfiles:
          qname, sname = os.path.splitext(os.path.split(blastfile)[-1])[0].split("_vs_")
          if qname not in list(org_lengths.keys()):
              if logger:
                  logger.warning(
                      "Query name %s not in input " % qname
                      + "sequence list, skipping %s" % blastfile
                  )
              continue
          if sname not in list(org_lengths.keys()):
              if logger:
                  logger.warning(
                      "Subject name %s not in input " % sname
                      + "sequence list, skipping %s" % blastfile
                  )
              continue
          resultvals = parse_blast_tab(blastfile, fraglengths, identity, coverage, mode)
          query_cover = float(resultvals[0]) / org_lengths[qname]
          results.add_tot_length(qname, sname, resultvals[0], sym=False)
          results.add_sim_errors(qname, sname, resultvals[1], sym=False)
          results.add_pid(qname, sname, 0.01 * resultvals[2], sym=False)
          results.add_coverage(qname, sname, query_cover)
      return results