struct
type t = {
name: string;
(** The mapping quality MAPQ (column 5) is 255 for uniquely mapping reads, and int(-10*log10(1- 1/Nmap)) for multi-mapping reads. This scheme is same as the one used by TopHat and is compatible with Cufflinks. The default MAPQ=255 for the unique mappers maybe changed with to an integer between 0 and 255 to ensure compatibility with downstream tools such as GATK. *) |
sam_mapq_unique: int option;
(** Specifies the length of the genomic sequence around the annotated junction to be used in constructing the splice junctions database. Ideally, this length should be equal to the ReadLength-1, where ReadLength is the length of the reads. *) |
overhang_length: int option;
parameters: (string * string) list;
}
let name t = t.name
let default = {
name = "default";
sam_mapq_unique = None;
overhang_length = None;
parameters = [];
}
let to_json t: Yojson.Basic.json =
let {name;
sam_mapq_unique;
overhang_length;
parameters} = t in
`Assoc [
"name", `String name;
"sam_mapq_unique",
(match sam_mapq_unique with
| None -> `Null
| Some x -> `Int x);
"overhang_length",
(match overhang_length with
| None -> `Null
| Some x -> `Int x);
"parameters",
`Assoc (List.map parameters ~f:(fun (a, b) -> a, `String b));
]
let render {name;
sam_mapq_unique;
overhang_length;
parameters} =
(match overhang_length with
| None -> ""
| Some x ->
sprintf "--sjdbOverhang %d" x
) ::
(match sam_mapq_unique with
| None -> ""
| Some x ->
if 0 > x || x > 255
then failwith "STAR Align sam_mapq_unique must be between 0 and 255"
else ();
sprintf "--outSAMmapqUnique %d" x) ::
List.concat_map parameters ~f:(fun (a, b) -> [a; b])
end