struct open Biokepi_run_environment open Common module Remove = Workflow_utilities.Remove let default_prior_probability = 0.01 let default_theta = 0.85 module Configuration = struct   type t = {     name: string;     prior_probability: float;     theta: float   }   let to_json {name; prior_probability; theta}: Yojson.Basic.json =     `Assoc [       "name"`String name;       "prior_probability"`Float prior_probability;       "theta"`Float theta;     ]   let name {name; _} = name   let render {name; prior_probability; theta}  =     ["-s"Float.to_string prior_probability;      "-T"Float.to_string theta]   let default = {     name = "default";     prior_probability = default_prior_probability;     theta = default_theta;   } end let run     ~run_with     ?(configuration = Configuration.default) ~normal ~tumor ~result_prefix () =   let open KEDSL in   let result_file suffix = sprintf "%s-%s" result_prefix suffix in   let name = sprintf "somaticsniper: %s" (result_file ""in   let sniper = Machine.get_tool run_with Machine.Tool.Default.somaticsniper in   let reference_fasta =     Machine.get_reference_genome run_with normal#product#reference_build     |> Reference_genome.fasta in   let output_file = result_file "-snvs.vcf" in   let run_path = Filename.dirname output_file in   let sorted_normal =     Samtools.sort_bam_if_necessary ~run_with ~by:`Coordinate normal in   let sorted_tumor =     Samtools.sort_bam_if_necessary ~run_with ~by:`Coordinate tumor in   let make =     Machine.run_big_program run_with       ~self_ids:["somaticsniper"]       ~name ~processors:1 Program.(           Machine.Tool.init sniper           && shf "mkdir -p %s" run_path           && shf "cd %s" run_path           && exec (             ["somaticsniper""-F""vcf"]             @ (Configuration.render configuration)             @ ["-f";  reference_fasta#product#path;                sorted_normal#product#path;                sorted_tumor#product#path;                output_file]           ))   in   workflow_node ~name ~make     (vcf_file output_file        ~reference_build:normal#product#reference_build        ~host:Machine.(as_host run_with))     ~metadata:(`String name)     ~tags:[Target_tags.variant_caller; "somaticsniper"]     ~edges:[       depends_on (Machine.Tool.ensure sniper);       depends_on sorted_normal;       depends_on sorted_tumor;       depends_on (Samtools.index_to_bai ~run_with sorted_normal);       depends_on (Samtools.index_to_bai ~run_with sorted_tumor);       depends_on reference_fasta;       on_failure_activate ( Remove.file ~run_with output_file );     ] end