code: def apply_recal(data):
      
      orig_bam = dd.get_align_bam(data) or dd.get_work_bam(data)
      had_work_bam = "work_bam" in data
      if dd.get_recalibrate(data) in [True, "gatk"]:
          if data.get("prep_recal"):
              logger.info("Applying BQSR recalibration with GATK: %s " % str(dd.get_sample_name(data)))
              data["work_bam"] = _gatk_apply_bqsr(data)
      elif dd.get_recalibrate(data) == "sentieon":
          if data.get("prep_recal"):
              logger.info("Applying BQSR recalibration with sentieon: %s " % str(dd.get_sample_name(data)))
              data["work_bam"] = sentieon.apply_bqsr(data)
      elif dd.get_recalibrate(data):
          raise NotImplementedError("Unsupported recalibration type: %s" % (dd.get_recalibrate(data)))
      # CWL does not have work/alignment BAM separation
      if not had_work_bam and dd.get_work_bam(data):
          data["align_bam"] = dd.get_work_bam(data)
      if orig_bam != dd.get_work_bam(data) and orig_bam != dd.get_align_bam(data):
          utils.save_diskspace(orig_bam, "BAM recalibrated to %s" % dd.get_work_bam(data), data["config"])
      return data
docs: Apply recalibration tables to the sorted aligned BAM, producing recalibrated BAM.