code: def breakpoints_by_caller(bed_files):
      
      merged = concat(bed_files)
      if not merged:
          return []
      grouped_start = merged.groupby(g=[1, 2, 2], c=4, o=["distinct"]).filter(lambda r: r.end > r.start).saveas()
      grouped_end = merged.groupby(g=[1, 3, 3], c=4, o=["distinct"]).filter(lambda r: r.end > r.start).saveas()
      together = concat([grouped_start, grouped_end])
      if together:
          final = together.expand(c=4)
          final = final.sort()
          return final
docs: given a list of BED files of the form
      chrom start end caller
      return a BedTool of breakpoints as each line with
      the fourth column the caller with evidence for the breakpoint
      chr1 1 10 caller1 -> chr1 1 1 caller1
      chr1 1 20 caller2    chr1 1 1 caller2
                           chr1 10 10 caller1
                           chr1 20 20 caller2