code: def _run_cobalt(paired, work_dir):
      
      cobalt_dir = utils.safe_makedir(os.path.join(work_dir, "cobalt"))
      out_file = os.path.join(cobalt_dir, "%s.cobalt" % dd.get_sample_name(paired.tumor_data))
      if not utils.file_exists(out_file):
          with file_transaction(paired.tumor_data, out_file) as tx_out_file:
              cmd = ["COBALT"] + _get_jvm_opts(tx_out_file, paired.tumor_data) + \
                    ["-reference", paired.normal_name, "-reference_bam", paired.normal_bam,
                     "-tumor", paired.tumor_name, "-tumor_bam", paired.tumor_bam,
                     "-threads", dd.get_num_cores(paired.tumor_data),
                     "-output_dir", os.path.dirname(tx_out_file),
                     "-gc_profile", dd.get_variation_resources(paired.tumor_data)["gc_profile"]]
              cmd = "%s && %s" % (utils.get_R_exports(), " ".join([str(x) for x in cmd]))
              do.run(cmd, "PURPLE: COBALT read depth normalization")
              for f in os.listdir(os.path.dirname(tx_out_file)):
                  if f != os.path.basename(tx_out_file):
                      shutil.move(os.path.join(os.path.dirname(tx_out_file), f),
                                  os.path.join(cobalt_dir, f))
      return out_file
docs: Run Cobalt for counting read depth across genomic windows.
  
      PURPLE requires even 1000bp windows so use integrated counting solution
      directly rather than converting from CNVkit calculations. If this approach
      is useful should be moved upstream to be available to other tools as
      an input comparison.
  
      https://github.com/hartwigmedical/hmftools/tree/master/count-bam-lines