docs: def gtf_to_bed(gtf, alt_out_dir=None):
      """
      create a BED file of transcript-level features with attached gene name
      or gene ids
      """
      out_file = os.path.splitext(gtf)[0] + '.bed'
      if file_exists(out_file):
          return out_file
      if not os.access(os.path.dirname(out_file), os.W_OK | os.X_OK):
          if not alt_out_dir:
              raise IOError('Cannot write transcript BED output file %s' % out_file)
          else:
              out_file = os.path.join(alt_out_dir, os.path.basename(out_file))
      with open(out_file, "w") as out_handle:
          db = get_gtf_db(gtf)
          for feature in db.features_of_type('transcript', order_by=("seqid", "start", "end")):
              chrom = feature.chrom
              start = feature.start
              end = feature.end
              attributes = feature.attributes.keys()
              strand = feature.strand
              name = (feature['gene_name'][0] if 'gene_name' in attributes else
                      feature['gene_id'][0])
              line = "\t".join([str(x) for x in [chrom, start, end, name, ".",
                                                 strand]])
              out_handle.write(line + "\n")
      return out_file