code: def merge_overlaps(in_file, data, distance=None, out_dir=None):
      
      config = data["config"]
      if in_file:
          bedtools = config_utils.get_program("bedtools", config,
                                              default="bedtools")
          work_dir = tz.get_in(["dirs", "work"], data)
          if out_dir:
              bedprep_dir = out_dir
          elif work_dir:
              bedprep_dir = utils.safe_makedir(os.path.join(work_dir, "bedprep"))
          else:
              bedprep_dir = os.path.dirname(in_file)
          out_file = os.path.join(bedprep_dir, "%s-merged.bed" % (utils.splitext_plus(os.path.basename(in_file))[0]))
          if not utils.file_uptodate(out_file, in_file):
              with file_transaction(data, out_file) as tx_out_file:
                  distance = "-d %s" % distance if distance else ""
                  cmd = "{bedtools} merge {distance} -i {in_file} > {tx_out_file}"
                  do.run(cmd.format(**locals()), "Prepare merged BED file", data)
          vcfutils.bgzip_and_index(out_file, data["config"], remove_orig=False)
          return out_file
docs: Merge bed file intervals to avoid overlapping regions. Output is always a 3 column file.
  
      Overlapping regions (1:1-100, 1:90-100) cause issues with callers like FreeBayes
      that don't collapse BEDs prior to using them.