code: def _gids_to_genes(gids, ssm_locs, cnv_ssms, data):
      
      locs = collections.defaultdict(set)
      for gid in gids:
          cur_locs = []
          try:
              cur_locs.append(ssm_locs[gid])
          except KeyError:
              for ssm_loc in cnv_ssms.get(gid, []):
                  cur_locs.append(ssm_locs[ssm_loc])
          for chrom, pos in cur_locs:
              locs[chrom].add(pos)
      genes = set([])
      with tx_tmpdir(data) as tmpdir:
          chrom_prefix = "chr" if next(ref.file_contigs(dd.get_ref_file(data))).name.startswith("chr") else ""
          loc_file = os.path.join(tmpdir, "battenberg_find_genes.bed")
          with open(loc_file, "w") as out_handle:
              for chrom in sorted(locs.keys()):
                  for loc in sorted(list(locs[chrom])):
                      out_handle.write("%s%s\t%s\t%s\n" % (chrom_prefix, chrom, loc - 1, loc))
          ann_file = annotate.add_genes(loc_file, data, max_distance=10000)
          for r in pybedtools.BedTool(ann_file):
              for gene in r.name.split(","):
                  if gene != ".":
                      genes.add(gene)
      return sorted(list(genes))
docs: Convert support ids for SNPs and SSMs into associated genes.