///|
/// MultiQC-lite 聚合报告演示: 多样本 x 多模块 -> HTML/JSON/Markdown.
fn main raise {
println("=== MultiQC-lite 多样本聚合报告 ===")
// 模拟两个样本的 FASTQ 与定量/变异结果
let fastq_a = "@a1\nACGTACGTACGT\n+\nIIIIIIIIIIII\n@a2\nGGCCTTAAGGCC\n+\nJJJJJJJJJJJJ\n"
let fastq_b = "@b1\nTTAACCGGTTAA\n+\nIIIIIIIIIIII\n@b2\nCCCCGGGGTTTT\n+\nHHHHHHHHHHHH\n@b3\nACGTACGTNNNN\n+\nFFFFFFFFFFFF\n"
let reference = "ATCGGATTCAGCCTAGGATCAAGTTCGGATACCTAGGCATTGCAAGGTCCTAGAAGT"
let reads : Array[@src.GatkRead] = []
for i = 0; i < 10; i = i + 1 {
let sliced = reference[10:30].to_owned()
let mutated = if i < 5 {
sliced[0:5].to_owned() + "C" + sliced[6:].to_owned()
} else {
sliced
}
reads.push({ name: "r" + i.to_string(), seq: mutated, pos: 10, })
}
let variants = @src.gatk_call_variants("chr1", reference, reads)
let quant = @src.kallisto_run(
["t1", "t2"],
[
"AAAAACCCCCGGGGGTTTTTATATGCGCGCTATAT", "TTTTTGGGGGCCCCCAAAAAATATGCGCGCTATAT",
],
[
"AAAAACCCCCGGGGGTTTTTATAT", "TTTTTGGGGGCCCCCAAAAA", "AAAAACCCCCGGGGGTTTTTATAT",
],
k=9,
)
// 聚合
let fqqc_a = @src.multiqc_collect_fqqc(fastq_a, "sampleA")
let fqqc_b = @src.multiqc_collect_fqqc(fastq_b, "sampleB")
let report = @src.multiqc_report(title="Demo Run")
let _ = report.add_module(fqqc_a)
let _ = report.add_module(fqqc_b)
let _ = report.add_module(@src.multiqc_collect_kallisto(quant, "sampleA"))
let _ = report.add_module(@src.multiqc_collect_gatk(variants, "sampleB"))
// 合并同名模块(多样本聚合, 对齐 MultiQC 语义)
let merged = report.merge_modules()
println(merged.summary())
// Markdown 输出
println("\n1. Markdown 表格")
println(@src.multiqc_write_markdown(merged))
// JSON 输出与 roundtrip
println("2. JSON 输出(roundtrip)")
let json = @src.multiqc_write_json(merged)
println(" " + json[:120].to_owned() + "...")
let parsed = @src.multiqc_parse_json(json).unwrap()
println(" reparsed: " + parsed.summary())
// HTML 仪表盘
println("\n3. HTML 仪表盘(CSS 内嵌, 无外部依赖)")
let html = @src.multiqc_write_html(merged)
println(" 长度: \{html.length()} 字符")
println(
" 包含着色单元格: \{html.contains("class=\"good\"") || html.contains("class=\"bad\"")}",
)
println("\n完成: 多样本多模块聚合报告全链路本地完成.")
}