let rec to_file_prefix:
type a.
?read:[ `R1 of string | `R2 of string ] ->
a t -> string =
fun ?read w ->
begin match w with
| With_metadata (_, p) -> to_file_prefix ?read p
| Fastq_gz _ -> failwith "TODO"
| Fastq _ -> failwith "TODO"
| Single_end_sample (info, _) -> info.fragment_id
| Gunzip_concat [] -> failwith "TODO"
| Gunzip_concat (_ :: _) ->
begin match read with
| None -> "-cat"
| Some (`R1 s) -> sprintf "%s-R1-cat" s
| Some (`R2 s) -> sprintf "%s-R2-cat" s
end
| Concat_text _ -> failwith "TODO"
| Bam_sample (name, _) -> Filename.basename name
| Bam_to_fastq (how, bam) ->
sprintf "%s-b2fq-%s"
(to_file_prefix bam)
(match how with `Paired -> "PE" | `Single -> "SE")
| Paired_end_sample (info, _ , _) -> info.fragment_id
| Bwa (configuration, sample) ->
sprintf "%s-bwa-%s"
(to_file_prefix sample) (Bwa.Configuration.Aln.name configuration)
| Bwa_mem (configuration, sample) ->
sprintf "%s-bwa-mem-%s"
(to_file_prefix sample) (Bwa.Configuration.Mem.name configuration)
| Star (configuration, sample) ->
sprintf "%s-%s-star-aligned"
(to_file_prefix sample)
(Star.Configuration.Align.name configuration)
| Hisat (conf, sample) ->
sprintf "%s-hisat-%s-aligned" (to_file_prefix sample) (conf.Hisat.Configuration.name)
| Stringtie (conf, sample) ->
sprintf "%s-%s-stringtie"
(to_file_prefix sample)
(conf.Stringtie.Configuration.name)
| Mosaik (sample) ->
sprintf "%s-mosaik" (to_file_prefix sample)
| Gatk_indel_realigner ((indel_cfg, target_cfg), bam) ->
let open Gatk.Configuration in
sprintf "%s-indelrealigned-%s-%s"
(to_file_prefix ?read bam)
indel_cfg.Indel_realigner.name
target_cfg.Realigner_target_creator.name
| Gatk_bqsr ((bqsr_cfg, print_reads_cfg), bam) ->
let open Gatk.Configuration in
sprintf "%s-bqsr-%s-%s"
(to_file_prefix ?read bam)
bqsr_cfg.Bqsr.name
print_reads_cfg.Print_reads.name
| Picard_mark_duplicates (_, bam) ->
sprintf "%s-dedup" (to_file_prefix ?read bam)
| Bam_pair (nor, tum) -> to_file_prefix tum
| Somatic_variant_caller (vc, bp) ->
let prev = to_file_prefix bp in
sprintf "%s-%s-%s" prev
vc.Variant_caller.name
vc.Variant_caller.configuration_name
| Germline_variant_caller (vc, bp) ->
let prev = to_file_prefix bp in
sprintf "%s-%s-%s" prev
vc.Variant_caller.name
vc.Variant_caller.configuration_name
| Seq2HLA s ->
sprintf "seq2hla-%s" (to_file_prefix ?read s)
| Optitype (kind, s) ->
sprintf "optitype-%s-%s"
(match kind with `DNA -> "DNA" | `RNA -> "RNA")
(to_file_prefix ?read s)
end