code: def _shared_gatk_call_prep(align_bams, items, ref_file, region, out_file, num_cores=1):
      
      data = items[0]
      config = data["config"]
      broad_runner = broad.runner_from_config(config)
      gatk_type = broad_runner.gatk_type()
      for x in align_bams:
          bam.index(x, config)
      picard_runner = broad.runner_from_path("picard", config)
      picard_runner.run_fn("picard_index_ref", ref_file)
      params = ["-R", ref_file]
      coverage_depth_min = tz.get_in(["algorithm", "coverage_depth_min"], config)
      if coverage_depth_min and coverage_depth_min < 4:
          confidence = "4.0"
          params += ["--standard_min_confidence_threshold_for_calling", confidence]
      for a in annotation.get_gatk_annotations(config):
          params += ["--annotation", a]
      for x in align_bams:
          params += ["-I", x]
      variant_regions = bedutils.population_variant_regions(items)
      region = subset_variant_regions(variant_regions, region, out_file, items)
      if region:
          if gatk_type == "gatk4":
              params += ["-L", bamprep.region_to_gatk(region), "--interval-set-rule", "INTERSECTION"]
          else:
              params += ["-L", bamprep.region_to_gatk(region), "--interval_set_rule", "INTERSECTION"]
      params += standard_cl_params(items)
      return broad_runner, params
docs: Shared preparation work for GATK variant calling.