code: def _piped_realign_gatk(data, region, cl, out_base_file, tmp_dir, prep_params):
      
      broad_runner = broad.runner_from_config(data["config"])
      pa_bam = "%s-prealign%s" % os.path.splitext(out_base_file)
      if not utils.file_exists(pa_bam):
          with file_transaction(data, pa_bam) as tx_out_file:
              cmd = "{cl} -o {tx_out_file}".format(**locals())
              do.run(cmd, "GATK re-alignment {0}".format(region), data)
      bam.index(pa_bam, data["config"])
      realn_file = realign.gatk_realigner_targets(broad_runner, pa_bam, dd.get_ref_file(data), data["config"],
                                                  region=region_to_gatk(region),
                                                  known_vrns=dd.get_variation_resources(data))
      realn_cl = realign.gatk_indel_realignment_cl(broad_runner, pa_bam, dd.get_ref_file(data),
                                                   realn_file, tmp_dir, region=region_to_gatk(region),
                                                   known_vrns=dd.get_variation_resources(data))
      return pa_bam, realn_cl
docs: Perform realignment with GATK, using input commandline.
      GATK requires writing to disk and indexing before realignment.