let mpileup ~run_with ?adjust_mapq ~region input_bam =   let open KEDSL in   let samtools = Machine.get_tool run_with Machine.Tool.Default.samtools in   let src = input_bam#product#path in   let adjust_mapq_option =     match adjust_mapq with | None -> "" | Some n -> sprintf "-C%d" n in   let samtools_region_option = Region.to_samtools_option region in   let reference_genome =     Machine.get_reference_genome run_with input_bam#product#reference_build in   let fasta = Reference_genome.fasta reference_genome in   let pileup =     Filename.chop_suffix src ".bam" ^     sprintf "-%s%s.mpileup" (Region.to_filename region) adjust_mapq_option   in   let sorted_bam =     sort_bam_if_necessary ~run_with input_bam ~by:`Coordinate in   let program =     Program.(       Machine.Tool.(init samtools)       && shf         "samtools mpileup %s %s -Bf %s %s > %s"         adjust_mapq_option samtools_region_option          fasta#product#path         sorted_bam#product#path         pileup     ) in   let name =     sprintf "samtools-mpileup-%s" Filename.(basename pileup |> chop_extension)   in   let make = Machine.run_program ~name run_with program in   let host = Machine.(as_host run_with) in   let edges = [     depends_on Machine.Tool.(ensure samtools);     depends_on sorted_bam;     depends_on fasta;     index_to_bai ~run_with sorted_bam |> depends_on;     on_failure_activate (Remove.file ~run_with pileup);   ] in   workflow_node ~name (single_file pileup ~host) ~make ~edges