code: def normalize_sv_coverage(*items):
      
      calcfns = {"cnvkit": _normalize_sv_coverage_cnvkit, "gatk-cnv": _normalize_sv_coverage_gatk}
      from bcbio.structural import cnvkit
      from bcbio.structural import shared as sshared
      items = [utils.to_single_data(x) for x in cwlutils.handle_combined_input(items)]
      if all(not cnvkit.use_general_sv_bins(x) for x in items):
          return [[d] for d in items]
      out_files = {}
      back_files = {}
      for group_id, gitems in itertools.groupby(items, lambda x: tz.get_in(["regions", "bins", "group"], x)):
          # No CNVkit calling for this particular set of samples
          if group_id is None:
              continue
          inputs, backgrounds = sshared.find_case_control(list(gitems))
          assert inputs, "Did not find inputs for sample batch: %s" % (" ".join(dd.get_sample_name(x) for x in items))
          work_dir = utils.safe_makedir(os.path.join(dd.get_work_dir(inputs[0]), "structural",
                                                      dd.get_sample_name(inputs[0]), "bins"))
          back_files, out_files = calcfns[cnvkit.bin_approach(inputs[0])](group_id, inputs, backgrounds, work_dir,
                                                                          back_files, out_files)
      out = []
      for data in items:
          if dd.get_sample_name(data) in out_files:
              data["depth"]["bins"]["background"] = back_files[dd.get_sample_name(data)]
              data["depth"]["bins"]["normalized"] = out_files[dd.get_sample_name(data)]
          out.append([data])
      return out
docs: Normalize CNV coverage, providing flexible point for multiple methods.