code: def ribosomal(scaffolds, DBdir, min_hits, evalue_thresh, bit_thresh, \
                  method = 'usearch', threads = 6, \
                  max_hits = 1, max_hits_rp = 1, max_errors = 35):
      
      # rps = list (in syntenic order) of ribosomal proteins
      # rp_db = dictionary to find the database files
      rps, rp_db = find_databases(DBdir)
      searches = [[rp, search(scaffolds, rp_db[rp], method = method, threads = str(threads), max_hits = 10)]
              for rp in rp_db]
      scaffolds, scaffold2rp = scaffold_hits(searches, scaffolds, max_hits)
      print('# scaffold\t%s' % ('\t'.join(rps)))
      for scaffold, block in \
              find_ribosomal(rps, scaffolds, scaffold2rp, min_hits, max_hits_rp, max_errors):
          id_rps = []
          for rp in rps:
              if rp in block:
                  id_rps.append(block[rp][0].split()[0])
              else:
                  id_rps.append('-')
          print('%s\t%s' % (scaffold, '\t'.join(id_rps)))
docs: find ribosomal proteins
      max_hits = maximum number of blast hits to consider for an orf
                    if 1, only consider best blast hit for each ORF
      max_hits_rp = maximum number of hits to consider per ribosomal protein per scaffold
                       if 1, only consider best RP match to contig
      max_errors = maximum number of errors when looking for block of proteins (e.g. out of order or gap)