code: def _merge_align_bams(data):
      
      for key in (["work_bam"], ["work_bam_plus", "disc"], ["work_bam_plus", "sr"], ["umi_bam"]):
          in_files = tz.get_in(key, data, [])
          if not isinstance(in_files, (list, tuple)):
              in_files = [in_files]
          in_files = [x for x in in_files if x and x != "None"]
          if in_files:
              ext = "-%s" % key[-1] if len(key) > 1 else ""
              out_file = os.path.join(dd.get_work_dir(data), "align", dd.get_sample_name(data),
                                      "%s-sort%s.bam" % (dd.get_sample_name(data), ext))
              merged_file = merge_bam_files(in_files, utils.safe_makedir(os.path.dirname(out_file)),
                                            data, out_file=out_file)
              data = tz.update_in(data, key, lambda x: merged_file)
          else:
              data = tz.update_in(data, key, lambda x: None)
      if "align_bam" in data and "work_bam" in data:
          data["align_bam"] = data["work_bam"]
      return data
docs: Merge multiple alignment BAMs, including split and discordant reads.