struct
type t = {
name: string;
vaccine_peptide_length: int;
padding_around_mutation: int;
max_vaccine_peptides_per_mutation: int;
max_mutations_in_report: int;
min_mapping_quality: int;
min_variant_sequence_coverage: int;
min_alt_rna_reads: int;
include_mismatches_after_variant: bool;
use_duplicate_reads: bool;
drop_secondary_alignments: bool;
mhc_epitope_lengths: int list;
reviewers: string list option;
final_reviewer: string option;
xlsx_report: bool;
pdf_report: bool;
ascii_report: bool;
parameters: (string * string) list;
}
let to_json {
name;
vaccine_peptide_length;
padding_around_mutation;
max_vaccine_peptides_per_mutation;
max_mutations_in_report;
min_mapping_quality;
min_variant_sequence_coverage;
min_alt_rna_reads;
include_mismatches_after_variant;
use_duplicate_reads;
drop_secondary_alignments;
mhc_epitope_lengths;
reviewers;
final_reviewer;
xlsx_report;
pdf_report;
ascii_report;
parameters}: Yojson.Basic.json
=
`Assoc ([
"name", `String name;
"vaccine_peptide_length", `Int vaccine_peptide_length;
"padding_around_mutation", `Int padding_around_mutation;
"max_vaccine_peptides_per_mutation", `Int max_vaccine_peptides_per_mutation;
"max_mutations_in_report", `Int max_mutations_in_report;
"min_mapping_quality", `Int min_mapping_quality;
"min_variant_sequence_coverage",
`Int min_variant_sequence_coverage;
"min_alt_rna_reads", `Int min_alt_rna_reads;
"include_mismatches_after_variant", `Bool include_mismatches_after_variant;
"use_duplicate_reads", `Bool use_duplicate_reads;
"drop_secondary_alignments", `Bool drop_secondary_alignments;
"mhc_epitope_lengths",
`List (List.map mhc_epitope_lengths ~f:(fun i -> `Int i));
"ascii_report", `Bool ascii_report;
"pdf_report", `Bool pdf_report;
"xlsx_report", `Bool xlsx_report;
"parameters",
`Assoc (List.map parameters ~f:(fun (a, b) -> a, `String b));
]
@ Option.value_map reviewers ~default:[]
~f:(fun r -> ["reviewers", `List (List.map ~f:(fun r -> `String r) r)])
@ Option.value_map final_reviewer ~default:[]
~f:(fun r -> ["final_reviewer", `String r]))
let render {
name;
vaccine_peptide_length;
padding_around_mutation;
max_vaccine_peptides_per_mutation;
max_mutations_in_report;
min_mapping_quality;
min_variant_sequence_coverage;
min_alt_rna_reads;
include_mismatches_after_variant;
use_duplicate_reads;
drop_secondary_alignments;
mhc_epitope_lengths;
reviewers;
final_reviewer;
xlsx_report;
pdf_report;
ascii_report;
parameters}
=
let soi = string_of_int in
["--vaccine-peptide-length"; soi vaccine_peptide_length] @
["--padding-around-mutation"; soi padding_around_mutation] @
["--max-vaccine-peptides-per-mutation";
soi max_vaccine_peptides_per_mutation] @
["--max-mutations-in-report"; soi max_mutations_in_report] @
["--min-mapping-quality"; soi min_mapping_quality] @
["--min-variant-sequence-coverage";
soi min_variant_sequence_coverage] @
["--min-alt-rna-reads"; soi min_alt_rna_reads] @
(if include_mismatches_after_variant
then ["--include-mismatches-after-variant"] else []) @
(if use_duplicate_reads
then ["--use-duplicate-reads"] else []) @
(if drop_secondary_alignments
then ["--drop_secondary_alignments"] else []) @
["--mhc-epitope-lengths";
(mhc_epitope_lengths
|> List.map ~f:string_of_int
|> String.concat ~sep:",")] @
(List.concat_map parameters ~f:(fun (a,b) -> [a; b])) @
(Option.value_map final_reviewer ~default:[]
~f:(fun f -> ["--output-final-review"; f])) @
(Option.value_map reviewers ~default:[]
~f:(fun rs ->
let reviewers = String.concat ~sep:"," rs in
["--output-reviewed-by"; reviewers]))
|> List.filter ~f:(fun s -> not (String.is_empty s))
let default =
{name = "default";
vaccine_peptide_length = 25;
padding_around_mutation = 0;
max_vaccine_peptides_per_mutation = 1;
max_mutations_in_report = 10;
min_mapping_quality = 1;
min_variant_sequence_coverage = 1;
min_alt_rna_reads = 3;
include_mismatches_after_variant = false;
use_duplicate_reads = false;
drop_secondary_alignments = false;
mhc_epitope_lengths = [8; 9; 10; 11];
reviewers = None;
final_reviewer = None;
xlsx_report = false;
pdf_report = false;
ascii_report = true;
parameters = []}
let name t = t.name
end