code: def assign_interval(data):
      
      if not dd.get_coverage_interval(data):
          vrs = dd.get_variant_regions_merged(data)
          callable_file = dd.get_sample_callable(data)
          if vrs:
              callable_size = pybedtools.BedTool(vrs).total_coverage()
          else:
              callable_size = pybedtools.BedTool(callable_file).total_coverage()
          total_size = sum([c.size for c in ref.file_contigs(dd.get_ref_file(data), data["config"])])
          genome_cov_pct = callable_size / float(total_size)
          if genome_cov_pct > GENOME_COV_THRESH:
              cov_interval = "genome"
              offtarget_pct = 0.0
          elif not vrs:
              cov_interval = "regional"
              offtarget_pct = 0.0
          else:
              offtarget_pct = _count_offtarget(data, dd.get_align_bam(data) or dd.get_work_bam(data),
                                               vrs or callable_file, "variant_regions")
              if offtarget_pct > OFFTARGET_THRESH:
                  cov_interval = "regional"
              else:
                  cov_interval = "amplicon"
          logger.info("%s: Assigned coverage as '%s' with %.1f%% genome coverage and %.1f%% offtarget coverage"
                      % (dd.get_sample_name(data), cov_interval, genome_cov_pct * 100.0, offtarget_pct * 100.0))
          data["config"]["algorithm"]["coverage_interval"] = cov_interval
      return data
docs: Identify coverage based on percent of genome covered and relation to targets.
  
      Classifies coverage into 3 categories:
        - genome: Full genome coverage
        - regional: Regional coverage, like exome capture, with off-target reads
        - amplicon: Amplication based regional coverage without off-target reads