() = struct     type t = {       
      (** The name of the configuration, specific to Biokepi. *)
      name: string;       
      (** MalformedReadFilter options.

This filter is applied automatically by all GATK tools in order to protect them from crashing on reads that are grossly malformed. There are a few issues (such as the absence of sequence bases) that will cause the run to fail with an error, but these cases can be preempted by setting flags that cause the problem reads to also be filtered. *)

      
      (** Ignore reads with CIGAR containing the N operator, instead of failing with an error *)
      filter_reads_with_n_cigar: bool;       
      (** Ignore reads with mismatching numbers of bases and base qualities, instead of failing with an error.*)
      filter_mismatching_base_and_quals: bool;       
      (** Ignore reads with no stored bases (i.e. '*' where the sequence should be), instead of failing with an error *)
      filter_bases_not_stored: bool;       
      (** Other parameters: *)
      parameters: (string * string) list;     }     let name t = t.name     let to_json t: Yojson.Basic.json =       let {name;            filter_reads_with_n_cigar;            filter_mismatching_base_and_quals;            filter_bases_not_stored;            parameters} = t in       `Assoc [         "name"`String name;         "filter_reads_with_N_cigar"`Bool filter_reads_with_n_cigar;         "filter_mismatching_base_and_quals"`Bool filter_mismatching_base_and_quals;         "filter_bases_not_stored"`Bool filter_bases_not_stored;         "parameters",         `Assoc (List.map parameters ~f:(fun (a, b) -> a, `String b));       ]     let render {name;                 filter_reads_with_n_cigar;                 filter_mismatching_base_and_quals;                 filter_bases_not_stored;                 parameters} =       (if filter_reads_with_n_cigar        then "--filter_reads_with_N_cigar" else "") ::       (if filter_mismatching_base_and_quals        then "--filter_mismatching_base_and_quals" else "") ::       (if filter_bases_not_stored        then "--filter_bases_not_stored" else "") ::       List.concat_map parameters ~f:(fun (a, b) -> [a; b])       |> List.filter ~f:(fun s -> not (String.is_empty s))     let default =       {name = "default";        filter_reads_with_n_cigar = false;        filter_mismatching_base_and_quals = false;        filter_bases_not_stored = false;        parameters = []}   end