code: def _update_with_calls(result_file, cnv_file):
      
      results = {}
      with open(result_file) as in_handle:
          in_handle.readline()  # header
          _, _, cs, ps = in_handle.readline().strip().split()
          for i, (c, p) in enumerate(zip(cs.split(":"), ps.split(","))):
              results[i] = (c, p)
      cnvs = {}
      with open(cnv_file) as in_handle:
          for line in in_handle:
              chrom, start, end, _, count = line.rstrip().split()[:5]
              cnvs[(chrom, start, end)] = count
      def update(i, line):
          parts = line.rstrip().split("\t")
          chrom, start, end = parts[1:4]
          parts += cnvs.get((chrom, start, end), ".")
          parts += list(results[i])
          return "\t".join(parts) + "\n"
      return update
docs: Update bounds with calls from CNVkit, inferred copy numbers and p-values from THetA.