open Core open Bistro.EDSL open Bistro.Std open File_formats open Bistro_bioinfo.Std open Defs type result = [ | `Pcoc of [`pcoc] directory workflow | `Pcoc_gamma of [`pcoc] directory workflow | `Diffsel of [`diffsel] directory workflow | `Diffsel_bis of [`diffsel] directory workflow | `Identical_LG of [`identical] directory workflow | `Identical_WAG of [`identical] directory workflow | `Topological_LG of [`topological] directory workflow | `Topological_WAG of [`topological] directory workflow | `Tdg09 of [`tdg09] directory workflow ] let meth_string_of_result = function | `Pcoc _ -> "pcoc" | `Pcoc_gamma _ -> "pcoc_gamma" | `Diffsel _ -> "diffsel" | `Diffsel_bis _ -> "diffsel_bis" | `Identical_LG _ -> "identical_LG" | `Identical_WAG _ -> "identical_WAG" | `Topological_LG _ -> "topological_LG" | `Topological_WAG _ -> "topological_WAG" | `Tdg09 _ -> "tdg09" type dataset_res = { model_prefix : string ; tree_prefix : string ; res_by_tools: result list ; merged_results : text_file workflow ; plot_merged_results : svg workflow ; } let merge_results ~res_by_tools : text_file workflow = let env = docker_image ~account:"carinerey" ~name:"ete3" ~tag:"3.0.0b35" () in let command = List.map res_by_tools ~f:(fun res -> let w = match res with | `Pcoc d -> Pcoc.results d | `Pcoc_gamma d -> Pcoc.results d | `Diffsel d -> Diffsel.selector d | `Diffsel_bis d -> Diffsel.selector d | `Identical_LG d -> Identical.results d | `Identical_WAG d -> Identical.results d | `Topological_LG d -> Topological.results d | `Topological_WAG d -> Topological.results d | `Tdg09 d -> Tamuri.results d in let opt = match res with | `Pcoc _ -> string "--pcoc" | `Pcoc_gamma _ -> string "--pcoc_gamma" | `Diffsel _ -> string "--diffsel" | `Diffsel_bis _ -> string "--diffsel_bis" | `Identical_LG _ -> string "--identical_LG" | `Identical_WAG _ -> string "--identical_WAG" | `Topological_LG _ -> string "--topological_LG" | `Topological_WAG _ -> string "--topological_WAG" | `Tdg09 _ -> string "--tdg09" in seq ~sep:" " [opt; dep w] ) in workflow ~descr:"convergence_detection.merge_results" [ cmd "python" ~env [ file_dump (string Scripts.merge_det_results) ; opt "-o" ident dest ; seq ~sep:" " command ; ] ; ] let plot_merge_results ~(res_by_tools:result list) ~tree ~faa ~tsv : svg workflow = let plot_all_sites = true in (*let env = docker_image ~account:"carinerey" ~name:"ete3" ~tag:"3.0.0b35" () in*) let env = docker_image ~account:"carinerey" ~name:"pcoc" ~tag:"06212018" () in (* use of pcoc env due to its working X server for dra plot with ete3 *) let meths = List.map res_by_tools ~f:(fun res -> let opt = match res with | `Pcoc _ -> "PCOC,PC,OC" | `Pcoc_gamma _ -> "PCOC_gamma,PC_gamma,OC_gamma," | `Diffsel _ -> "Diffsel_mean,Diffsel_max" | `Diffsel_bis _ -> "Diffsel_bis_mean,Diffsel_bis_max" | `Identical_LG _ -> "Identical_LG08" | `Identical_WAG _ -> "Identical_WAG01" | `Topological_LG _ -> "Topological_LG08" | `Topological_WAG _ -> "Topological_WAG01" | `Tdg09 _ -> "Tdg09_1-FDR,Tdg09_prob_post" in string opt ) |> seq ~sep:"," in let meths_t = List.map res_by_tools ~f:(fun res -> let opt = match res with | `Pcoc _ -> "PCOC:0.99" | `Pcoc_gamma _ -> "PCOC_gamma:0.99" | `Diffsel _ -> "Diffsel_mean:0.11,Diffsel_max:0.9" | `Diffsel_bis _ -> "Diffsel_bis_mean:0.11,Diffsel_bis_max:0.9" | `Identical_LG _ -> "Identical_LG08:0.9" | `Identical_WAG _ -> "Identical_WAG01:0.9" | `Topological_LG _ -> "Topological_LG08:0.9" | `Topological_WAG _ -> "Topological_WAG01:0.9" | `Tdg09 _ -> "Tdg09_1-FDR:0.9,Tdg09_prob_post:0.9" in string opt ) |> seq ~sep:"," in let package_diffsel_script_utils = tmp // "diffsel_script_utils.py" in let package_plot_data = tmp // "plot_data.py" in let script_plot_convergent_sites = tmp // "plot_convergent_sites.py" in let out = dest // "results.svg" in workflow ~descr:"convergence_detection.plot_results" [ docker env ( and_list [ mkdir_p tmp ; mkdir_p dest ; cd tmp ; cmd "cp" [ file_dump (string Scripts.diffsel_script_utils) ; package_diffsel_script_utils ] ; cmd "cp" [ file_dump (string Scripts.plot_data) ; package_plot_data] ; cmd "cp" [ file_dump (string Scripts.plot_convergent_sites); script_plot_convergent_sites ] ; cmd "python" [ string "plot_convergent_sites.py" ; opt "-msa" dep faa ; opt "-tsv" dep tsv ; opt "-tree" dep tree ; opt "-out" ident out ; opt "-meth" ident meths ; opt "-t" ident meths_t ; flag string "--all_sites" plot_all_sites ; ] ] ) ]