code: def block_regions(callable_bed, in_bam, ref_file, data):
      
      min_n_size = int(data["config"]["algorithm"].get("nomap_split_size", 250))
      with shared.bedtools_tmpdir(data):
          nblock_bed = "%s-nblocks.bed" % utils.splitext_plus(callable_bed)[0]
          callblock_bed = "%s-callableblocks.bed" % utils.splitext_plus(callable_bed)[0]
          if not utils.file_uptodate(nblock_bed, callable_bed):
              ref_regions = get_ref_bedtool(ref_file, data["config"])
              nblock_regions = _get_nblock_regions(callable_bed, min_n_size, ref_regions)
              nblock_regions = _add_config_regions(nblock_regions, ref_regions, data)
              with file_transaction(data, nblock_bed, callblock_bed) as (tx_nblock_bed, tx_callblock_bed):
                  nblock_regions.filter(lambda r: len(r) > min_n_size).saveas(tx_nblock_bed)
                  if len(ref_regions.subtract(nblock_regions, nonamecheck=True)) > 0:
                      ref_regions.subtract(tx_nblock_bed, nonamecheck=True).merge(d=min_n_size).saveas(tx_callblock_bed)
                  else:
                      raise ValueError("No callable regions found in %s from BAM file %s. Some causes:\n "
                                       " - Alignment regions do not overlap with regions found "
                                       "in your `variant_regions` BED: %s\n"
                                       " - There are no aligned reads in your BAM file that pass sanity checks "
                                       " (mapping score > 1, non-duplicates, both ends of paired reads mapped)"
                                       % (dd.get_sample_name(data), in_bam, dd.get_variant_regions(data)))
      return callblock_bed, nblock_bed
docs: Find blocks of regions for analysis from mapped input BAM file.
  
      Identifies islands of callable regions, surrounding by regions
      with no read support, that can be analyzed independently.