let tabix ~run_with ~tabular_format input_file =   let open KEDSL in   let samtools = Machine.get_tool run_with Machine.Tool.Default.samtools in   let output_path = input_file#product#path ^ ".tbi" in   let minus_p_argument =     match tabular_format with     | `Gff -> "gff"     | `Bed -> "bed"     | `Sam -> "sam"     | `Vcf -> "vcf"     | `Psltab -> "psltab" in   let program =     Program.(       Machine.Tool.(init samtools)       && shf "tabix -p %s %s"         minus_p_argument         input_file#product#path     ) in   let name =     sprintf "samtools-tabix-%s" Filename.(basename input_file#product#path) in   let make = Machine.run_program ~name run_with program in   let host = Machine.(as_host run_with) in   workflow_node     (single_file output_path ~host) ~name ~make     ~edges:[       depends_on input_file;       depends_on Machine.Tool.(ensure samtools);       on_failure_activate (Remove.file ~run_with output_path);     ]