post_analyses.ml 17.8 KB
Newer Older
Carine Rey's avatar
Carine Rey committed
1 2 3 4 5 6 7 8
open Core
open Bistro.Std
open Bistro.EDSL
open Bistro_bioinfo.Std
open Bistro_utils
open File_formats
open Convergence_detection

Carine Rey's avatar
Carine Rey committed
9
type plot_trees
Carine Rey's avatar
Carine Rey committed
10
type post_analyses_dir
Carine Rey's avatar
Carine Rey committed
11
type sens_spe_t_choices_plot
Carine Rey's avatar
Carine Rey committed
12

Carine Rey's avatar
Carine Rey committed
13
type t_choices = {
Carine Rey's avatar
Carine Rey committed
14 15
  t_choices_complete: text_file workflow ;
  t_choices_max: text_file workflow ;
Carine Rey's avatar
Carine Rey committed
16
  t_choices_recall09: text_file workflow ;
Carine Rey's avatar
Carine Rey committed
17
  t_choices_plot: text_file workflow ;
Carine Rey's avatar
Carine Rey committed
18
  t_choices_condensed_plot: text_file workflow ;
19
  rp_plot: text_file workflow ;
Carine Rey's avatar
Carine Rey committed
20
  tree_prefix: string;
21 22
}

23 24 25 26 27 28 29 30 31 32
type auto_t_plot = {
  tree_prefix:string ;
  model_prefix:string ;
  auto_t_plot: svg workflow;
}


type post_analyses_res = {
  t_choices : t_choices option;
  auto_t_plot_l : auto_t_plot list option;
Carine Rey's avatar
Carine Rey committed
33
  dataset_results_l : dataset_res list;
34 35
}

Carine Rey's avatar
Carine Rey committed
36 37 38
type simu_infos = {
  simu_infos: text_file workflow option ;
  model_prefix: string ;
39
  tree_prefix: string ;
40
}
Carine Rey's avatar
Carine Rey committed
41

Carine Rey's avatar
Carine Rey committed
42 43 44 45 46 47 48
type reinfered_tree = {
  reinfered_tree : nw workflow ;
  input_tree : nhx workflow ;
  tree_prefix : string ;
  model_prefix : string ;
}

Carine Rey's avatar
Carine Rey committed
49
type post_analyses_simu = {
Carine Rey's avatar
Carine Rey committed
50
  simu_infos_l : simu_infos list;
51
  simu_infos_plot : text_file workflow ;
Carine Rey's avatar
Carine Rey committed
52
  trees_plot : text_file workflow ;
53
}
Carine Rey's avatar
Carine Rey committed
54

Carine Rey's avatar
Carine Rey committed
55
let r_env = docker_image ~account:"carinerey" ~name:"r_basics" ~tag:"08012018" ()
56
let py_env = docker_image ~account:"carinerey" ~name:"python_basics" ~tag:"07252018" ()
Carine Rey's avatar
Carine Rey committed
57 58

let is_hyp ~hyp (dataset_results :dataset_res) =
Carine Rey's avatar
Carine Rey committed
59 60 61
  let model_prefix = dataset_results.model_prefix in
  model_prefix = hyp

62 63
let build_cmd_t_choices (opt_name : string) mr_option  =
  match mr_option with
Carine Rey's avatar
Carine Rey committed
64 65
  | Some x -> [opt opt_name dep x]
  | None -> []
66

67
let make_t_choices ?(tree_prefix="") ~haPCOC_mr 
68
    ~h0_NeG1_mr ~h0_NeG2_mr ~h0_NeG3_mr ~h0_NeG4_mr ~h0_NeG5_mr
69 70 71 72
    ~haPC_NeG1_mr ~haPC_NeG2_mr ~haPC_NeG3_mr ~haPC_NeG4_mr ~haPC_NeG5_mr
    ~haPC_NeG5_NeC_div2_mr
    ~haPC_NeG5_NeC_x2_mr
    ~h0_NeG5_NeC_div2_mr
Carine Rey's avatar
Carine Rey committed
73 74 75
    ~h0_NeG5_NeC_x2_mr
    ~h0_NeG5_indel_mr
    ~haPC_NeG5_indel_mr () : post_analyses_dir directory workflow =
76

77
  let env = r_env in
Carine Rey's avatar
Carine Rey committed
78
  let out = dest // "out" in
79
  let cmd_mr = List.map [
80 81 82 83 84 85 86 87 88 89
      ("--H0_NeG1"           , h0_NeG1_mr          );
      ("--H0_NeG2"           , h0_NeG2_mr          );
      ("--H0_NeG3"           , h0_NeG3_mr          );
      ("--H0_NeG4"           , h0_NeG4_mr          );
      ("--H0_NeG5"           , h0_NeG5_mr          );
      ("--HaPC_NeG1"         , haPC_NeG1_mr          );
      ("--HaPC_NeG2"         , haPC_NeG2_mr          );
      ("--HaPC_NeG3"         , haPC_NeG3_mr          );
      ("--HaPC_NeG4"         , haPC_NeG4_mr          );
      ("--HaPC_NeG5"         , haPC_NeG5_mr          );
90 91 92 93
      ("--HaPC_NeG5_NeC_div2_res"       , haPC_NeG5_NeC_div2_mr          );
      ("--HaPC_NeG5_NeC_x2_res"         , haPC_NeG5_NeC_x2_mr          );
      ("--H0_NeG5_NeC_div2_res"         , h0_NeG5_NeC_div2_mr          );
      ("--H0_NeG5_NeC_x2_res"           , h0_NeG5_NeC_x2_mr          );
Carine Rey's avatar
Carine Rey committed
94 95
      ("--H0_NeG5_indel_res"         , h0_NeG5_indel_mr);
      ("--HaPC_NeG5_indel_res"           , haPC_NeG5_indel_mr          );
Carine Rey's avatar
Carine Rey committed
96 97 98
      ("--HaPCOC"            , haPCOC_mr      );
    ] ~f:(fun (opt_name, mr_option) -> build_cmd_t_choices opt_name mr_option)
               |> List.concat in
99
  workflow ~descr:("post_analyses.t_choices." ^ tree_prefix) [
100
    docker env (
Carine Rey's avatar
Carine Rey committed
101 102
      and_list [
        mkdir_p dest ;
103
        cmd "Rscript" ([
Carine Rey's avatar
Carine Rey committed
104 105
            [file_dump (string Scripts.calc_t_per_meth) ;
             opt "--out " ident out;
Carine Rey's avatar
Carine Rey committed
106
             opt "--tree_prefix " string tree_prefix;
Carine Rey's avatar
Carine Rey committed
107 108 109
            ] ;
            cmd_mr ;
          ] |> List.concat) ;
110
      ])
Carine Rey's avatar
Carine Rey committed
111 112
  ]

Carine Rey's avatar
Carine Rey committed
113
let make_simu_infos ?(descr="") ?(fna_infos) ~faa ~tree_sc : text_file workflow =
114
  let env = docker_image ~account:"carinerey" ~name:"pcoc" ~tag:"08312018" () in
Carine Rey's avatar
Carine Rey committed
115 116
  workflow ~descr:("post_analyses.simu_infos." ^ descr) [
    cmd "python" ~env [
117 118 119 120 121
      file_dump (string Scripts.calc_simu_infos) ;
      opt "--faa" dep faa;
      opt "--tree" dep tree_sc;
      option ( opt "--fna_infos" dep) fna_infos;
      opt "--output " ident dest;
Carine Rey's avatar
Carine Rey committed
122 123 124
    ];
  ]

125
let group_simu_infos ~simu_infos_l : simu_infos directory workflow =
126
  let env = r_env in
127
  let cmd_cp_l = List.map simu_infos_l ~f:(fun s ->
128
      match s.simu_infos with
Carine Rey's avatar
Carine Rey committed
129
      | Some w -> [cmd "cp" [dep w ; tmp // (s.tree_prefix ^"@"^ s.model_prefix ^ ".tsv")]]
130 131 132 133 134
      | None -> []
    ) |> List.concat
  in
  let out = dest // "out" in
  workflow ~descr:"post_analyses.plot_simu_infos" [
135
    docker env (
136
      and_list ([
137 138 139 140 141 142 143 144 145 146 147
          [mkdir_p dest];
          [mkdir_p tmp ];
          cmd_cp_l;
          [cmd "Rscript" [
              file_dump (string Scripts.plot_hyp_simu_validation) ;
              opt "--input_dir" ident tmp;
              opt "--out " ident out;
            ];]
        ]
          |> List.concat)
    )
148 149
  ]

Carine Rey's avatar
Carine Rey committed
150
let plot_trees ~reinfered_tree_l : plot_trees directory workflow =
151 152
  let env_r = r_env in
  let env_py = py_env in
Carine Rey's avatar
Carine Rey committed
153
  let cmd_cp_l = List.map reinfered_tree_l ~f:(fun rt -> [
Carine Rey's avatar
Carine Rey committed
154 155
        cmd "cp" [dep rt.reinfered_tree ; tmp // (rt.tree_prefix ^"@"^ rt.model_prefix ^ ".nw")];
        cmd "cp" [dep rt.input_tree ; tmp // (rt.tree_prefix ^"@input_tree.nw")]
Carine Rey's avatar
Carine Rey committed
156 157 158
      ]) |> List.concat
  in
  let out = dest // "out" in
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
  workflow ~descr:"post_analyses.plot_trees" ([
    [mkdir_p dest];
    [mkdir_p tmp ];
    cmd_cp_l;
    [cmd "Rscript" ~env:env_r [
        file_dump (string Scripts.plot_trees) ;
        opt "--input_dir" ident tmp;
        opt "--out " ident out;
    ];
    ];
    [cmd "python" ~env:env_py [
        file_dump (string Scripts.get_bl_trees) ;
        opt "--input_dir" ident tmp;
        opt "--out " ident out;
    ];
    ];
    ]|> List.concat)
Carine Rey's avatar
Carine Rey committed
176

177 178 179 180 181 182
let get_merged_results_opt hx = match hx with
  | Some w -> Some w.merged_results
  | None -> None

type res_all_hyp = {
  ha_PCOC_res       : dataset_res option ;
183 184 185 186 187 188 189 190 191 192
  h0_NeG1_res   : dataset_res option ;
  h0_NeG2_res   : dataset_res option ;
  h0_NeG3_res   : dataset_res option ;
  h0_NeG4_res   : dataset_res option ;
  h0_NeG5_res   : dataset_res option ;
  haPC_NeG1_res : dataset_res option ;
  haPC_NeG2_res : dataset_res option ;
  haPC_NeG3_res : dataset_res option ;
  haPC_NeG4_res : dataset_res option ;
  haPC_NeG5_res : dataset_res option ;
193 194 195 196
  haPC_NeG5_NeC_div2_res : dataset_res option ;
  haPC_NeG5_NeC_x2_res   : dataset_res option ;
  h0_NeG5_NeC_div2_res   : dataset_res option ;
  h0_NeG5_NeC_x2_res     : dataset_res option ;
Carine Rey's avatar
Carine Rey committed
197 198 199
  
  h0_NeG5_indel_res   : dataset_res option ;
  haPC_NeG5_indel_res : dataset_res option ;
Carine Rey's avatar
Carine Rey committed
200
}
201

202
let make_t_choices_per_couple ~tree_prefix {ha_PCOC_res;
203 204 205 206 207 208
                               h0_NeG1_res; h0_NeG2_res; h0_NeG3_res; h0_NeG4_res; h0_NeG5_res;
                               haPC_NeG1_res;
                               haPC_NeG2_res;
                               haPC_NeG3_res;
                               haPC_NeG4_res;
                               haPC_NeG5_res;
209 210 211 212
                               haPC_NeG5_NeC_div2_res;
                               haPC_NeG5_NeC_x2_res  ;
                               h0_NeG5_NeC_div2_res  ;
                               h0_NeG5_NeC_x2_res    ;
Carine Rey's avatar
Carine Rey committed
213 214
                               h0_NeG5_indel_res;
                               haPC_NeG5_indel_res;
215
                                } =
216

Carine Rey's avatar
Carine Rey committed
217
  let haPCOC_mr       = get_merged_results_opt ha_PCOC_res in
218

219 220 221 222 223 224 225 226 227 228
  let h0_NeG1_mr   = get_merged_results_opt h0_NeG1_res   in
  let h0_NeG2_mr   = get_merged_results_opt h0_NeG2_res   in
  let h0_NeG3_mr   = get_merged_results_opt h0_NeG3_res   in
  let h0_NeG4_mr   = get_merged_results_opt h0_NeG4_res   in
  let h0_NeG5_mr   = get_merged_results_opt h0_NeG5_res   in
  let haPC_NeG1_mr = get_merged_results_opt haPC_NeG1_res in
  let haPC_NeG2_mr = get_merged_results_opt haPC_NeG2_res in
  let haPC_NeG3_mr = get_merged_results_opt haPC_NeG3_res in
  let haPC_NeG4_mr = get_merged_results_opt haPC_NeG4_res in
  let haPC_NeG5_mr = get_merged_results_opt haPC_NeG5_res in
229 230 231 232 233
  
  let haPC_NeG5_NeC_div2_mr = get_merged_results_opt haPC_NeG5_NeC_div2_res in
  let haPC_NeG5_NeC_x2_mr   = get_merged_results_opt haPC_NeG5_NeC_x2_res   in
  let h0_NeG5_NeC_div2_mr   = get_merged_results_opt h0_NeG5_NeC_div2_res   in
  let h0_NeG5_NeC_x2_mr     = get_merged_results_opt h0_NeG5_NeC_x2_res     in
Carine Rey's avatar
Carine Rey committed
234 235 236
  
  let h0_NeG5_indel_mr = get_merged_results_opt h0_NeG5_indel_res in
  let haPC_NeG5_indel_mr = get_merged_results_opt haPC_NeG5_indel_res in
237

238
  make_t_choices ~tree_prefix ~haPCOC_mr 
239
    ~h0_NeG1_mr  
240 241 242 243 244 245 246 247 248
    ~h0_NeG2_mr  
    ~h0_NeG3_mr  
    ~h0_NeG4_mr  
    ~h0_NeG5_mr  
    ~haPC_NeG1_mr
    ~haPC_NeG2_mr
    ~haPC_NeG3_mr
    ~haPC_NeG4_mr
    ~haPC_NeG5_mr
249 250 251 252
    ~haPC_NeG5_NeC_div2_mr
    ~haPC_NeG5_NeC_x2_mr
    ~h0_NeG5_NeC_div2_mr
    ~h0_NeG5_NeC_x2_mr
Carine Rey's avatar
Carine Rey committed
253 254
    ~h0_NeG5_indel_mr
    ~haPC_NeG5_indel_mr
255
    ()
256 257


258
let get_t_choices ~tree_prefix ~(dataset_results_l: dataset_res list) : t_choices option =
259

260
  let ha_PCOC_res           = List.find dataset_results_l (is_hyp ~hyp: "HaPCOC"              ) in
261

262 263 264 265 266 267 268 269 270 271 272
  let h0_NeG1_res   = List.find dataset_results_l (is_hyp ~hyp: "H0_NeG1"               ) in
  let h0_NeG2_res   = List.find dataset_results_l (is_hyp ~hyp: "H0_NeG2"               ) in
  let h0_NeG3_res   = List.find dataset_results_l (is_hyp ~hyp: "H0_NeG3"               ) in
  let h0_NeG4_res   = List.find dataset_results_l (is_hyp ~hyp: "H0_NeG4"               ) in
  let h0_NeG5_res   = List.find dataset_results_l (is_hyp ~hyp: "H0_NeG5"               ) in
  let haPC_NeG1_res = List.find dataset_results_l (is_hyp ~hyp: "HaPC_NeG1"             ) in
  let haPC_NeG2_res = List.find dataset_results_l (is_hyp ~hyp: "HaPC_NeG2"             ) in
  let haPC_NeG3_res = List.find dataset_results_l (is_hyp ~hyp: "HaPC_NeG3"             ) in
  let haPC_NeG4_res = List.find dataset_results_l (is_hyp ~hyp: "HaPC_NeG4"             ) in
  let haPC_NeG5_res = List.find dataset_results_l (is_hyp ~hyp: "HaPC_NeG5"             ) in
  
Carine Rey's avatar
Carine Rey committed
273 274 275 276 277 278 279
  let haPC_NeG5_NeC_div2_res = List.find dataset_results_l (is_hyp ~hyp: "HaPC_NeG5_NeC_div2" ) in
  let haPC_NeG5_NeC_x2_res   = List.find dataset_results_l (is_hyp ~hyp: "HaPC_NeG5_NeC_x2"   ) in
  let h0_NeG5_NeC_div2_res   = List.find dataset_results_l (is_hyp ~hyp: "H0_NeG5_NeC_div2"   ) in
  let h0_NeG5_NeC_x2_res    = List.find dataset_results_l (is_hyp ~hyp: "H0_NeG5_NeC_x2"      ) in

  let h0_NeG5_indel_res   = List.find dataset_results_l (is_hyp ~hyp: "H0_NeG5_0.33_i"        ) in
  let haPC_NeG5_indel_res    = List.find dataset_results_l (is_hyp ~hyp: "HaPC_NeG5_0.33_i"   ) in
280
  
281 282 283

  match (ha_PCOC_res) with
  | ( Some ha_PCOC) ->
284
    let t_choices_dir = make_t_choices_per_couple ~tree_prefix {ha_PCOC_res;
285
                                                   h0_NeG1_res; h0_NeG2_res; h0_NeG3_res; h0_NeG4_res; h0_NeG5_res;
286
                                                   haPC_NeG1_res; haPC_NeG2_res;haPC_NeG3_res; haPC_NeG4_res; haPC_NeG5_res;
Carine Rey's avatar
Carine Rey committed
287 288
                                                   haPC_NeG5_NeC_div2_res; haPC_NeG5_NeC_x2_res; h0_NeG5_NeC_div2_res; h0_NeG5_NeC_x2_res;
                                                   h0_NeG5_indel_res;haPC_NeG5_indel_res}  in
Carine Rey's avatar
Carine Rey committed
289 290
    let t_choices_max = t_choices_dir / selector ["out.max_MCC_per_meth.tsv"] in
    let t_choices_recall09 = t_choices_dir / selector ["out.recall09_per_meth.tsv"] in
291 292
    let t_choices_complete = t_choices_dir / selector ["out.complete.tsv"] in
    let t_choices_plot = t_choices_dir / selector ["out.pdf"] in
Carine Rey's avatar
Carine Rey committed
293
    let t_choices_condensed_plot = t_choices_dir / selector ["out_condensed.pdf"] in
294
    let rp_plot = t_choices_dir / selector ["out_condensed.recall_precision_ok.pdf"] in
295
    let tree_prefix = ha_PCOC.tree_prefix in
296
    Some {t_choices_max; t_choices_recall09; t_choices_complete ; t_choices_plot; t_choices_condensed_plot; rp_plot; tree_prefix}
297
  | _ -> None
Carine Rey's avatar
Carine Rey committed
298

299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319


let plot_det_meth_res_auto_t ~t_choices ~dataset_results_l =
  match t_choices with
  | None -> None
  | Some w -> Some (
      List.map dataset_results_l ~f:(fun (dataset_results : dataset_res) ->
          let tree_prefix = dataset_results.tree_prefix in
          let model_prefix = dataset_results.model_prefix in
          let ready_dataset = dataset_results.dataset.dataset in
          let tree = Tree_dataset.tree ready_dataset.tree_dataset `Detection in
          let faa = ready_dataset.faa in
          let tsv = dataset_results.merged_results in
          let res_by_tools = dataset_results.res_by_tools in
          let plot_all_sites = true in
          let t_choices = w.t_choices_max in
          let auto_t_plot = plot_merge_results ~t_choices ~plot_all_sites ~res_by_tools ~tree ~faa ~tsv () in
          {tree_prefix; model_prefix ; auto_t_plot}
        )
    )

Carine Rey's avatar
Carine Rey committed
320 321 322
let get_simu_infos ~(dataset:Dataset.t) =
  let model_prefix = dataset.model_prefix in
  let ready_dataset = dataset.dataset in
Carine Rey's avatar
Carine Rey committed
323 324 325 326
  let faa = ready_dataset.faa in
  let tree_sc = Tree_dataset.tree ready_dataset.tree_dataset `Detection in
  let fna_infos = ready_dataset.fna_infos in
  match fna_infos with
327 328
  | Some w -> Some (make_simu_infos ~descr:model_prefix ~faa ~tree_sc ~fna_infos:w)
  | None -> None (*make_simu_infos ~faa ~tree_sc*)
Carine Rey's avatar
Carine Rey committed
329 330


331 332
let post_analyses_res_of_dataset_results_l ~tree_prefix ~dataset_results_l =
  let t_choices = get_t_choices ~tree_prefix ~dataset_results_l in
333
  let auto_t_plot_l = plot_det_meth_res_auto_t ~t_choices ~dataset_results_l in
Carine Rey's avatar
Carine Rey committed
334
  {t_choices; auto_t_plot_l;dataset_results_l}
Carine Rey's avatar
Carine Rey committed
335 336 337 338 339 340

let post_analyses_simu_of_simu_dataset_l ~simu_dataset_l =
  let simu_infos_l = List.map simu_dataset_l ~f:(fun dataset ->
      {simu_infos = (get_simu_infos ~dataset);
       tree_prefix = dataset.tree_prefix ;
       model_prefix = dataset.model_prefix
341 342
      }
    ) in
Carine Rey's avatar
Carine Rey committed
343 344 345 346 347 348 349 350 351 352
  let reinfered_tree_l = List.map simu_dataset_l ~f:(fun dataset ->
      let rd = dataset.dataset in
      let phy = Bppsuite.fa2phy rd.fna in
      let input_tree = rd.input_tree in
      let reinfered_tree = Phyml.phyml_tree ~tree:input_tree phy in
      {reinfered_tree; input_tree;
       tree_prefix = dataset.tree_prefix ;
       model_prefix = dataset.model_prefix
      }
    ) in
353
  let simu_infos_plot = group_simu_infos ~simu_infos_l / selector ["out.pdf"] in
Carine Rey's avatar
Carine Rey committed
354 355
  let trees_plot = plot_trees ~reinfered_tree_l / selector ["out.pdf"] in
  {simu_infos_l; simu_infos_plot; trees_plot}
Carine Rey's avatar
Carine Rey committed
356

Carine Rey's avatar
Carine Rey committed
357 358


359
let plot_sens_spe_t_choices ~t_choices_l ~dataset_results_l ~profile_prefix : sens_spe_t_choices_plot directory workflow =
360
  let env = r_env in
Carine Rey's avatar
Carine Rey committed
361 362 363 364
  let t_choices_dir = tmp // "t_choices_dir" in
  let merged_results_dir = tmp // "merged_results_dir" in
  let out = dest // "out" in
  let cmd_cp_t_choices_l = List.map t_choices_l ~f:(fun t_choices ->
Carine Rey's avatar
Carine Rey committed
365
      cmd "cp" [dep t_choices.t_choices_recall09 ; t_choices_dir // (t_choices.tree_prefix ^ ".tsv")]
Carine Rey's avatar
Carine Rey committed
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383
    )
  in
  let cmd_cp_merged_results_l = List.map dataset_results_l ~f:(fun dataset_results ->
      cmd "cp" [dep dataset_results.merged_results ; merged_results_dir // (dataset_results.tree_prefix ^"@"^ dataset_results.model_prefix ^ ".tsv")]
    )
  in
  workflow ~descr:"post_analyses.plot_sens_spe_all_trees" [
    docker env (
      and_list ([
          [mkdir_p dest];
          [mkdir_p t_choices_dir ];
          [mkdir_p merged_results_dir ];
          cmd_cp_t_choices_l;
          cmd_cp_merged_results_l;
          [cmd "Rscript" [
              file_dump (string Scripts.plot_sens_spe_all_trees) ;
              opt "--input_dir" ident t_choices_dir;
              opt "--input_dir2" ident merged_results_dir;
384
              opt "--profil" string profile_prefix;
Carine Rey's avatar
Carine Rey committed
385 386 387 388 389 390 391
              opt "--out " ident out;
            ];]
        ]
          |> List.concat)
    )
  ]

392
let repo_post_analyses_all_trees_of_all_post_analyses_per_tree ~profile_prefix ~all_post_analyses_per_tree =
Carine Rey's avatar
Carine Rey committed
393 394 395 396 397 398 399 400 401
  let t_choices_l = List.map all_post_analyses_per_tree ~f:(fun post_analyses_res ->
      match post_analyses_res.t_choices with
      | Some w -> [w]
      | None -> []
    ) |> List.concat
  in
  let dataset_results_l =  List.map all_post_analyses_per_tree ~f:(fun post_analyses_res ->
      post_analyses_res.dataset_results_l) |> List.concat
  in
402
  let sens_spe_t_choices_plot = plot_sens_spe_t_choices  ~t_choices_l ~dataset_results_l ~profile_prefix in
Carine Rey's avatar
Carine Rey committed
403 404 405 406 407 408 409 410 411
  [Repo.[
      item ["sens_spe.tsv"] (sens_spe_t_choices_plot / selector ["out.sens_spe_auto_t.tsv"]);
      item ["all_t_choices.tsv"] (sens_spe_t_choices_plot / selector ["out.t_per_tree.tsv"]);
    ] |> Repo.shift "pdf_tsv" ;
   Repo.[
     item ["sens_spe.pdf"] (sens_spe_t_choices_plot / selector ["out.sens_spe_auto_t.pdf"]);
     item ["all_t_choices.pdf"] (sens_spe_t_choices_plot / selector ["out.t_per_tree.pdf"]);
   ]
  ] |> List.concat
Carine Rey's avatar
Carine Rey committed
412

Carine Rey's avatar
Carine Rey committed
413
let repo_of_post_analyses_simu ~post_analyses_simu =
Carine Rey's avatar
Carine Rey committed
414
  [
415
    Repo.[
Carine Rey's avatar
Carine Rey committed
416 417
      item ["hypothesis_validation.pdf"] post_analyses_simu.simu_infos_plot ;
      item ["trees_validation.pdf"] post_analyses_simu.trees_plot;
Carine Rey's avatar
Carine Rey committed
418
    ]
419
    ;
Carine Rey's avatar
Carine Rey committed
420
    (List.map post_analyses_simu.simu_infos_l ~f:(fun simu_infos ->
421 422 423 424
         match simu_infos.simu_infos with
         | None -> []
         | Some w ->
           Repo.[
Carine Rey's avatar
Carine Rey committed
425
             item [simu_infos.tree_prefix ^ "@" ^ simu_infos.model_prefix ^ ".tsv"] w
Carine Rey's avatar
Carine Rey committed
426 427
           ] |> Repo.shift simu_infos.tree_prefix
           |> Repo.shift "tsv"
428 429
       ) |> List.concat
    );
Carine Rey's avatar
Carine Rey committed
430
  ] |> List.concat
Carine Rey's avatar
Carine Rey committed
431
  |> Repo.shift "Simulation_details"
Carine Rey's avatar
Carine Rey committed
432 433

let repo_of_post_analyses_res ~prefix ~post_analyses_res =
434 435 436 437
  [
    (match post_analyses_res.t_choices with
     | None -> []
     | Some w ->
Carine Rey's avatar
Carine Rey committed
438 439 440 441 442 443 444 445 446
       [
         Repo.[
           item [prefix ^ ".t_choices.max_mcc_per_meth.tsv"] w.t_choices_max ;
           item [prefix ^ ".t_choices.recall09_per_meth.tsv"] w.t_choices_recall09 ;
           item [prefix ^ ".t_choices.complete.tsv"] w.t_choices_complete ;
         ] |> Repo.shift "pdf_tsv" ;
         Repo.[
           item [prefix ^ ".t_choices.pdf"] w.t_choices_plot ;
           item [prefix ^ ".t_choices.condensed.pdf"] w.t_choices_condensed_plot ;
447
           item [prefix ^ ".recall_precision_ok.pdf"] w.rp_plot ;
Carine Rey's avatar
Carine Rey committed
448 449
         ]
       ] |> List.concat
450
    );
Carine Rey's avatar
Carine Rey committed
451
    (*(
452 453 454 455 456 457 458 459 460 461
      match post_analyses_res.auto_t_plot_l with
      | None -> []
      | Some w_l ->
        List.map w_l ~f:(fun w ->
            Repo.[
              let prefix_f = w.tree_prefix ^ "@" ^ w.model_prefix in
              item [ prefix_f ^ ".auto_t.svg"] w.auto_t_plot ;
            ]
          )|> List.concat
        |> Repo.shift "auto_t_pdf"
Carine Rey's avatar
Carine Rey committed
462
      );*)
463
  ] |> List.concat
Carine Rey's avatar
Carine Rey committed
464